yolov8 tensorrt模型加速部署【实战】

yolov8 tensorrt模型加速部署【实战】

TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10、linux,在2023年已经更新模型:YOLOv8, YOLOv7, YOLOv6, YOLOv5, YOLOv4, YOLOv3, YOLOX, YOLOR,pphumanseg,u2net,EfficientDet。
Windows10教程正在制作,可以关注仓库:http://github.com/FeiYull/TensorRT-Alpha

一、加速结果展示

1.1 性能速览

?快速看看yolov8n 在移动端RTX2070m(8G)的新能表现:

model video resolution model input size GPU Memory-Usage GPU-Util
yolov8n 1920x1080 8x3x640x640 1093MiB/7982MiB 14%

下图是yolov8n的运行时间开销,单位是ms:
在这里插入图片描述

更多TensorRT-Alpha测试录像在B站视频:
B站:YOLOv8n
B站:YOLOv8s

在这里插入图片描述

1.2精度对齐

下面是左边是python框架推理结果,右边是TensorRT-Alpha推理结果。
yolov8n : Offical( left ) vs Ours( right )

yolov8n : Offical( left ) vs Ours( right )

在这里插入图片描述

yolov7-tiny : Offical( left ) vs Ours( right )

在这里插入图片描述

yolov6s : Offical( left ) vs Ours( right )

在这里插入图片描述

yolov5s : Offical( left ) vs Ours( right )

YOLOv4 YOLOv3 YOLOR YOLOX略。

二、Ubuntu18.04环境配置

如果您对tensorrt不是很熟悉,请务必保持下面库版本一致。

2.1 安装工具链和opencv

sudo apt-get update 
sudo apt-get install build-essential 
sudo apt-get install git
sudo apt-get install gdb
sudo apt-get install cmake
sudo apt-get install libopencv-dev  
# pkg-config --modversion opencv

2. 安装Nvidia相关库

注:Nvidia相关网站需要注册账号。

2.1 安装Nvidia显卡驱动

ubuntu-drivers devices
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-470-server # for ubuntu18.04
nvidia-smi

2.2 安装 cuda11.3

  • 进入链接: http://developer.nvidia.com/cuda-toolkit-archive
  • 选择:CUDA Toolkit 11.3.0(April 2021)
  • 选择:[Linux] -> [x86_64] -> [Ubuntu] -> [18.04] -> [runfile(local)]

    在网页你能看到下面安装命令,我这里已经拷贝下来:
wget http://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

cuda的安装过程中,需要你在bash窗口手动作一些选择,这里选择如下:

  • select:[continue] -> [accept] -> 接着按下回车键取消Driver和465.19.01这个选项,如下图(it is important!) -> [Install]

    在这里插入图片描述
    bash窗口提示如下表示安装完成
#===========
#= Summary =
#===========

#Driver:   Not Selected
#Toolkit:  Installed in /usr/local/cuda-11.3/
#......

把cuda添加到环境变量:

vim ~/.bashrc

把下面拷贝到 .bashrc里面

# cuda v11.3
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.3

刷新环境变量和验证

source ~/.bashrc
nvcc -V

bash窗口打印如下信息表示cuda11.3安装正常

nvcc: NVIDIA (R) Cuda compiler driver<br>
Copyright (c) 2005-2021 NVIDIA Corporation<br>
Built on Sun_Mar_21_19:15:46_PDT_2021<br>
Cuda compilation tools, release 11.3, V11.3.58<br>
Build cuda_11.3.r11.3/compiler.29745058_0<br>

2.3 安装 cudnn8.2

  • 进入网站:http://developer.nvidia.com/rdp/cudnn-archive
  • 选择: Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x
  • 选择: cuDNN Library for Linux (x86_64)
  • 你将会下载这个压缩包: "cudnn-11.3-linux-x64-v8.2.0.53.tgz"
# 解压
tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz

将cudnn的头文件和lib拷贝到cuda11.3的安装目录下:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

2.4 下载 tensorrt8.4.2.4

本教程中,tensorrt只需要下载\、解压即可,不需要安装。

  • 进入网站: http://developer.nvidia.cn/nvidia-tensorrt-8x-download
  • 把这个打勾: I Agree To the Terms of the NVIDIA TensorRT License Agreement
  • 选择: TensorRT 8.4 GA Update 1
  • 选择: TensorRT 8.4 GA Update 1 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package
  • 你将会下载这个压缩包: "TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz"
# 解压
tar -zxvf TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
# 快速验证一下tensorrt+cuda+cudnn是否安装正常
cd TensorRT-8.4.2.4/samples/sampleMNIST
make
cd ../../bin/

导出tensorrt环境变量(it is important!),注:将LD_LIBRARY_PATH:后面的路径换成你自己的!后续编译onnx模型的时候也需要执行下面第一行命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/temp/TensorRT-8.4.2.4/lib
./sample_mnist

bash窗口打印类似如下图的手写数字识别表明cuda+cudnn+tensorrt安装正常
在这里插入图片描述

三、YOLOv8模型部署

3.1 下载仓库TensorRT-Alpha

git clone http://github.com/FeiYull/tensorrt-alpha

3.2 获取onnx文件

直接在网盘下载 weiyun or google driver 或者使用如下命令导出onnx:

# ? yolov8 官方仓库: http://github.com/ultralytics/ultralytics
# ? yolov8 官方教程: http://docs.ultralytics.com/quickstart/
# ?TensorRT-Alpha will be updated synchronously as soon as possible!

# 安装 yolov8
conda create -n yolov8 python==3.8 -y
conda activate yolov8
pip install ultralytics==8.0.5
pip install onnx

# 下载官方权重(".pt" file)
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt
http://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x6.pt

导出 onnx:

# 640
yolo mode=export model=yolov8n.pt format=onnx dynamic=True    #simplify=True
yolo mode=export model=yolov8s.pt format=onnx dynamic=True    #simplify=True
yolo mode=export model=yolov8m.pt format=onnx dynamic=True    #simplify=True
yolo mode=export model=yolov8l.pt format=onnx dynamic=True    #simplify=True
yolo mode=export model=yolov8x.pt format=onnx dynamic=True    #simplify=True
# 1280
yolo mode=export model=yolov8x6.pt format=onnx dynamic=True   #simplify=True

3.3 编译 onnx

# 把你的onnx文件放到这个路径:tensorrt-alpha/data/yolov8
cd tensorrt-alpha/data/yolov8
# 请把LD_LIBRARY_PATH:换成您自己的路径。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.2.4/lib
# 640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8n.onnx  --saveEngine=yolov8n.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8s.onnx  --saveEngine=yolov8s.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8m.onnx  --saveEngine=yolov8m.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8l.onnx  --saveEngine=yolov8l.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8x.onnx  --saveEngine=yolov8x.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov8x6.onnx  --saveEngine=yolov8x6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280

你将会的到例如:yolov8n.trt、yolov8s.trt、yolov8m.trt等文件。

3.4 编译运行

git clone http://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/yolov8
mkdir build
cd build
cmake ..
make -j10
# 注: 效果图默认保存在路径 tensorrt-alpha/yolov8/build

# 下面参数解释
# --show 表示可视化结果
# --savePath 表示保存,默认保存在build目录
# --savePath=../ 保存在上一级目录

## 640
# 推理图片
./app_yolov8  --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=1  --img=../../data/6406407.jpg   --show --savePath
./app_yolov8  --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8  --video=../../data/people.mp4  --show --savePath

# 推理视频
./app_yolov8  --model=../../data/yolov8/yolov8n.trt     --size=640 --batch_size=8  --video=../../data/people.mp4  --show --savePath=../

# 在线推理相机视频
./app_yolov8  --model=../../data/yolov8/yolov8n.trt     --size=640 --batch_size=2  --cam_id=0  --show

## 1280
# infer camera
./app_yolov8  --model=../../data/yolov8/yolov8x6.trt     --size=1280 --batch_size=2  --cam_id=0  --show

四、参考

http://github.com/FeiYull/TensorRT-Alpha

CV&DL
本文转载于网络 如有侵权请联系删除

相关文章

  • 超分辨率重建开山之作——SRCNN

    大家好,又见面了,我是你们的朋友全栈君。论文及代码地址:LearningaDeepConvolutionalNetworkforImageSuper-Resolution)基于卷积神经网络的影像超分辨率重建摘要:我们提出了一种基于深度学习的单影像超分辨率重建方法。我们直接以端对端的方式学习高分辨率影像和低分辨率影像之间的mapping。Mapping可以用一个深度卷积神经网络来表示,通过输入低分辨率的影像输出高分辨率的影像。之后我们会展示传统的稀疏编码的方式也可以看做一个深度卷积网络。但是,和传统的方法能够单独处理每个成分不同,我们的方法共同对所有图层进行优化。我们的CNN有个lightstructure的结构,已经证明了有目前最好的重建质量,并且对于实际的线上应用有最快的速度。我们探索了不同的网格结构和参数设置以实现精度和速度之间的平衡。更进一步的,我们扩展了我们的网络去同时获取三通道的影像,并且得到了更好的整体重建质量。关键词:超分辨率、深度卷积神经网络、稀疏编码介绍单影像的超分辨率重建是计算机视觉的一个经典问题,目的是从低分辨的影像中恢复高分辨的影像。这个问题本质上是病态的因为给

  • iOS: 学习笔记, Swift与C指针交互(译)

    大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。Swift与C指针交互Objective-C和CAPI经常须要使用指针.在设计上,Swift数据类型能够自然的与基于指针的CocoaAPI一起工作,Swift自己主动处理几种经常使用的指针參数.在本文中,我们将看到C中的指针參数怎样与Swift中的变量,数组,字符串一起工作.指针作为输入/输出參数C和Objective-C不支持多个返回值,所以CocoaAPI常常使用指针传递附加參数到函数.Swift同意把指针參数看成[inout]參数,所以你能够用相同的&语法传递一个变量的引用作为指针.比如:UIColor的getRed(_:green:blue:alpha:)方法使用4个CGFloat*指针来接受颜色的组合.我们能够用&来得到这些值:varr:CGFloat=0,g:CGFloat=0,b:CGFloat=0,a:CGFloat=0 color.getRed(&r,green:&g,blue:&b,alpha:&a)复制还有一个常常使用的是NSError.很多方法使用了NS

  • ​LeetCode刷题实战407:接雨水 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选!今天和大家聊的问题叫做接雨水II,我们先来看题面:https://leetcode-cn.com/problems/trapping-rain-water-ii/GivenanmxnintegermatrixheightMaprepresentingtheheightofeachunitcellina2Delevationmap,returnthevolumeofwateritcantrapafterraining.给你一个mxn的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。示例解题https://blog.csdn.net/weixin_42054167/article/details/91989108此题用BFS来做。创建一个优先级队列,该队列中是将高度小的放在队首。先将四周一圈的格子加入队列中,并将这些格子的状态设为已访问过。下面开始BFS,从队

  • 干货 | 携程数据血缘构建及应用

    作者简介 cxzl25,携程软件技术专家,关注大数据领域生态建设,对分布式计算和存储、调度等方面有浓厚兴趣。一、前言Datalineageincludesthedataorigin,whathappenstoitandwhereitmovesovertime.Datalineagegivesvisibilitywhilegreatlysimplifyingtheabilitytotraceerrorsbacktotherootcauseinadataanalyticsprocess.──百科Datalineage大数据时代,数据的来源极其广泛,各种类型的数据在快速产生,数据也是爆发性增长。从数据的产生,通过加工融合流转产生新的数据,到最终消亡,数据之间的关联关系可以称之为数据血缘关系。本文介绍携程数据血缘如何构建及应用场景。第一版T+1构建Hive引擎的表级别的血缘关系,第二版近实时构建Hive,Spark,Presto多个查询引擎和DataX传输工具的字段级别血缘关系。 二、构建血缘的方案 2.1收集方式方案一:只收集SQL,事后分析。当SQL执行结束,收集SQL到DB或者Kafka

  • JavaScript 设计模式学习第二十三篇-命令模式

    命令模式(CommandPattern)又称事务模式,将请求封装成对象,将命令的发送者和接受者解耦。本质上是对方法调用的封装。通过封装方法调用,也可以做一些有意思的事,例如记录日志,或者重复使用这些封装来实现撤销(undo)、重做(redo)操作。1.你曾见过的命令模式某日,著名门派蛋黄派于江湖互联网发布江湖通缉令一张「通缉偷电瓶车贼窃格瓦拉,抓捕归案奖鸭蛋10个」。对于通缉令发送者蛋黄派来说,不需向某个特定单位通知通缉令,而通缉令发布之后,蛋黄派也不用管是谁来完成这个通缉令,也就是说,通缉令的发送者和接受者之间被解耦了。大学宿舍的时候,室友们都上床了,没人起来关灯,不知道有谁提了一句「谁起来把灯关一下」,此时比的是谁装睡装得像,如果沉不住气,就要做命令的执行者,去关灯了。比较经典的例子是餐馆订餐,客人需要向厨师发送请求,但是不知道这些厨师的联系方式,也不知道厨师炒菜的流程和步骤,一般是将客人订餐的请求封装成命令对象,也就是订单。这个订单对象可以在程序中被四处传递,就像订单可以被服务员传递到某个厨师手中,客人不需要知道是哪个厨师完成自己的订单,厨师也不需要知道是哪个客户的订单。在类似场

  • PHP文件后缀不强制为.php方法

    在大家学习PHP中,认为php文件的后缀一定为.php,其实不然,我们可以把它写成其他的后缀。这样也可以防止其他人的恶意攻击。首先,我们先测试一下,PHP文件的后缀按传统的.php结尾的文件。然后再浏览器中运行这个文件。完美运行。我们在建立一个文件。这个文件的后缀为.inc。然后呢,运行这个文件,看是否可以运行。这个时候,我们会发现一个问题。运行的时候出现一个下载框。类似于这样的文件,不是已.php结尾。但是里面的内容为php内容。就得使用php的内置函数include或者require来引用过来使用。然后运行这个文件。你就可以看到,完美运行。PHP内置就是,只要是PHP内容,PHP解析器会完美的运行。

  • Angular NgTemplateOutlet的一个例子

    NgTemplateOutlet:InsertsanembeddedviewfromapreparedTemplateRef.语法:<ng-container*ngTemplateOutlet=“templateRefExp;context:contextExp”>看个例子:@Component({ selector:'ng-template-outlet-example', template:` <ng-container*ngTemplateOutlet="greet"></ng-container> <hr> <ng-container*ngTemplateOutlet="eng;context:myContext"></ng-container> <hr> <ng-container*ngTemplateOutlet="svk;context:myContext"></ng-container>

  • Blender+Geant4一文入门3D模型文件导入

    与专业3D建模软件相比,geant4的3D绘制低效且不直观。如果你既想要3D的灵活设计,又想Geant4把它用起来,做到从图1到图2的效果:图1.一个通用编码成像模型图2.将3D模型导入Geant4目录1.Blender绘制3D模型并导出为*.obj格式文件2.Geant4导入*.obj文件并抽取3D模体3.总结与展望1.Blender绘制3D模型并导出为*.obj格式文件a.Blender简单介绍官网www.blender.org,开源3D设计软件,功能强大,入门学习资料见https://docs.blender.org/manual/en/latest/。b.建模操作入门Blender默认长度单位为m,可在“Properties”栏目->Scene->Units->Length中,更改长度显示单位。图3.更改Blender显示长度单位c.巧用阵列修改器,构建自己想要的规律排布阵列我们来看如何创建一个10*10的长条阵列,单元尺寸2*2*15mm3,单元间隔2.5mm:1.创建一个单元尺寸长条:快捷键N/n调出场景属性栏,Item->Dimensions中设置

  • 机器学习中的优化算法!

    作者:李祖贤,Datawhale高校群成员,深圳大学在机器学习中,有很多的问题并没有解析形式的解,或者有解析形式的解但是计算量很大(譬如,超定问题的最小二乘解),对于此类问题,通常我们会选择采用一种迭代的优化方式进行求解。负梯度方法与Newton型方法在最优化方法中发挥着重要作用,也在现代金融科技,大规模的机器学习发挥不可或缺的作用。接下来,我们将针对这两种优化方法在机器学习中的应用进行讨论。 一、最速下降法1.1最速下降法的原理假定在第k步的迭代点,我们想求处使得下降最快的方向。由上一章可知:这个方向应首先满足下降条件。虽然下降方向有无穷多个,但是根据Cauchy-Schwarz不等式:当且仅当时等式成立,达到最小。由于在方向上要考虑步长,故取为负梯度方向:。特别的,我们称采用负梯度方向以及精确线搜索的方法称为最速下降法。我们从上面可以看到,不同的G矩阵使用最速下降法的迭代速度有明显的差异,原因在后文给出。1.2最速下降法的收敛速度1.2.1收敛性最速下降法具有全局收敛性!1.2.2预备知识向量u在矩阵G度量下的范数:||u||_G^2=u^TGu 矩阵G度量下的Cauchy-Sch

  • AkShare-股票数据-券商业绩月报

    作者寄语本接口提供券商业绩月报的数据,通过此数据可以关注每个月券商的业绩数据。更新接口"stock_em_qsjy"#券商业绩月报券商业绩月报接口:stock_em_qsjy目标地址:http://data.eastmoney.com/other/qsjy.html描述:获取东方财富网-数据中心-特色数据-券商业绩月报限量:单次获取所有数据,数据从20100601-至今,月频率输入参数名称类型必选描述categorystrYcategory="us";choiceof{"us","hk"}输出参数名称类型默认显示描述开始日期datetimeY-结束日期datetimeY-简称strY-代码strY-当月净利润_净利润strY注意单位:万元当月净利润_同比增长strY-当月净利润_环比增长strY-当年累计净利润_累计净利润strY注意单位:万元当年累计净利润_同比增长floatY-当月营业收入_营业收入strY注意单位:万元当月营业收入_环比增长floatY-当月营业收入_同比增长floatY-当年累计营业

  • ES的深度分页解决方案

    索引:共4T,5个索引,共100亿条数据 查询语句:{ "query":{ "term":{ "app_servername":"set-app-heatontime01" } }, "size":10000, "sort":[ {"es_timestamp":"asc"}, ] }符合条件结果总共5亿条数据。scroll测试拉取结果耗时:拉取条数10万20万50万100万200万300万500万耗时13.5s30s76s158s313s560s787ses的并发scroll不适合深度翻页,只适合拉取所有数据。essearch_after也不适合做深度分页,分页多了,内存不够,将查询失败。我们在分页的时候如果用from+size的话,from+size默认不能超过1万条数据。使用from+size方式是将请求达到分片节点上,如果有n个副分片,则查询数据是n*(from+size)如果from很大的话,会造成oom或者网络资源的浪

  • Android Studio 连接雷电模拟器 - 小米版

    需求使用AndroidStudio连接雷电模拟器小米版!我的环境如下:AndroidStudio3.5.3雷电模拟器小米版步骤A.进入雷电模拟器安装目录进入那个目录不重要,重要的是该目录下有adb.exe文件! 所以,具体的目录可以自己找一下(bin目录之类的) 在此目录下打开cmd命令行(shift+右键)就有此选项:B.输入以下命令adb.execonnect127.0.0.1:5555 #如果你像我上面截图一样的,是打开Powershell而不是cmd,那么你需要在此项命令前加.\ #也即.\adb.execonnect127.0.0.1:5555复制其中,5555是端口,据网上说adb连接端口可以是(5555+index*2)(index=》0)即5555,5557,5559等等出现类似以上的界面就好C.AndroidStudio选择然后,就出现了如上的界面的选项,在模拟器设置里面,应该是模拟的vivo,所以应该是选择第二个:嗯,成功:后言好久没写过安卓了,期末又有这项作业~~天了噜!!!!

  • 程序员【超实用】面试问题

    1、请你自我介绍一下自己好吗?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”,企业喜欢有礼貌的求职者。2、你觉得你个性上最大的优点是什么?回答提示:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。3、说说你最大的缺点?回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌岌可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者

  • 什么是 CI/CD?

    CI/CD的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇,这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用CI/CD。从最初的瀑布模型,到后来的敏捷开发,再到今天的DevOps,这是现代开发人员构建出色产品的技术路线。随着DevOps的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法,而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里,大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?),而在现在DevOps时代,每周、每天甚至每天多次都是常态。当SaaS成为业界主流后尤其如此,您可以轻松地动态更新应用程序,而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,大多数团队都有自动化流程来检查代码并部署到新环境。我们一直在关注自动化测试流程,但这将在之后的文章中介绍。今天,我们将介绍什么是CI/CD/CD,以及现代软件公司如何使用工具将部署代码的流程自动化。持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每

  • Install Flash Plugin on Fedora 17

    Addings1 2 3 4 5 6#For32-bitSystem: sudorpm-ivhhttp://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm #For64-bitSystem sudorpm-ivhhttp://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm sudorpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linuxUpdatings1sudoyumupdateInstallings1sudoyuminstallflash-pluginnspluginwrapperalsa-plugins-pulseaudiolibcurl

  • 研究人员:去年每一次的ICO平均有五个漏洞

    根据安全研究人员的调查发现,在去年每一次的加密货币ICO(首次币发行)都平均包含五个安全漏洞,其中只有一次ICO不包含任何严重的安全漏洞。根据Positive.com提供的信息,其中的大部分漏洞都存在于智能合约中。研究人员表示,智能合约是ICO的核心和灵魂,而71%的测试项目的智能合约中都包含安全漏洞。当一次ICO启动之后,合约内容是无法进行修改的,并且会开放给每一位参与ICO的用户,这也就意味着任何人都可以寻找其中可能存在的安全漏洞。Positive.com的专家表示,在这些包含漏洞的智能合约中,有些没有严格遵循ERC20标准(数字钱包和加密货币交换的令牌接口),有些则涉及到错误的随机数生成。通常情况下,导致这些漏洞出现的原因是由于程序员的专业知识不够过硬,以及没有对源代码进行有效的测试。所有的ICO移动端App都包含漏洞研究人员还提到,2017年里ICO组织者发布的所有移动端App都包含俺去那漏洞。不过好消息就是并非所有的ICO组织者都会发布自己的移动端App,但那些已经发布了App的组织者,他们并没有在App安全性方面下足功夫。Positive.com团队表示,他们在ICO移动端

  • 小朋友学Python(1):Python简介与编程环境搭建

    一、Python简介不死Java,不朽C/C++,新贵Python。Python(英国发音:/ˈpaɪθən/美国发音:/ˈpaɪθɑːn/),是一种面向对象的解释型计算机程序设计语言,由荷兰人GuidovanRossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件,Python源代码同样遵循GPL(GNUGeneralPublicLicense)协议。Python语法简洁清晰,特色之一是强制用空白符(whitespace)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。二、解释型语言与编译型语言的区别编译型语言在程序执行之前,有一个单独的编

  • SDN私享汇(十):绿盟科技深度解读WanaCry

    前言5月12日晚,勒索病毒"WannaCry"感染事件爆发,全球范围近百个国家遭到大规模网络攻击,攻击者利用MS17-010漏洞,向用户机器的445端口发送精心设计的网络数据包,实现远程代码执行。被攻击者电脑中大量文件被加密,被要求支付比特币以解密文件。相关事件的时间线如下☘2017.2月WannaCry1.0被发现,未引起重视☘2017.3.14微软MS17-010修复6个SMB漏洞☘2017.4.14EternalBlue利用代码泄漏☘2017.5.12WannaCry2.0勒索蠕虫出现☘2017.5.12MalwareTech注册了开关域名,蠕虫传播速度变缓☘2017.5.14有2个二进制patch的变种出现现对此事件进行详细解读,目录如下:一、蠕虫的攻击流程二、蠕虫启动安装逻辑分析三、关键勒索加密过程分析四、蠕虫赎金解密过程分析五、数据恢复方法分析六、解决方案1蠕虫的攻击流程NSA泄露的工具2017年4月14日,ShadowBrokers泄漏了新一批NSA方程式工具,包含了涉及多个Windows系统服务的远程命令执行工具,其中就包括“永恒之蓝”攻击程序。Et

  • OpenAI 尝试打破“中文房间悖论”,让 AI 创造语言并自发交流

    大规模机器学习技术已经在翻译、语言推理、语言理解、句子生成等领域取得巨大进展,而它的训练方式都大同小异:给系统输入大量文本数据;系统提取特征并提炼模式。虽然这类研究硕果累累,但主要的缺点在于所学语言的表征质量会影响对应的结果。AI研习社了解到,如今越来越多的研究表示,如果用某种语言训练计算机,实际上系统并不能深刻理解语言与真实世界的关系。OpenAI发现了这一问题,并致力于让智能体自己创造基于自身感知的语言。系统在缺乏基础的情况下训练语言模型,就像JohnSearles在「中文房间理论」里所提到的机器一样,它们将输入的文本与分析大量文本数据的结果相对比,只呆在「房间」里就能与文本描述的外界互动,那么我们又如何判断计算机的「智能」呢?雷锋网AI研习社了解到,近日OpenAI宣布了它们的一项研究成果,证明通过训练,智能体是可以创造语言并进行交流的。同时,他们也将论文《EmergenceofGroundedCompositionalLanguageinMulti-AgentPopulations》同步到arxiv上。OpenAI的研究基于这样的一个假设:智能体对语言的理解,并不是在文本的庞大

  • Linux下命令行图片格式转换

    以下节选自《NetkillerMultimedia手札》原始出处:http://www.netkiller.cn/multimedia/index.html13.2.convert13.2.1.批量转换convert*.jpggkp-*.png 复制13.2.2.resize批量修改图片尺寸 find./-name'*.jpg'-execconvert-resize600x480{}{}\; 复制以长边为准forimgin$(find./album/-typef-name*.jpg) do width=$(identify-format"%w"$img) height=$(identify-format"%h"$img) if[$width-gt$height];then convert-resize900x600$img$img else convert-resize600x900$img$img fi done 复制13.2.3.PDFtoPNG将PDF文档每页生成一个PNG图片convert-qualit

  • 为什么你的问题群里没人回答?这就是原因!

    免喷声明: 本文只是总结提出建议,有冒犯之处还请原谅。文章内容不一定完全正确, 但是大部分是能提高解决问题的效率的,希望能帮助大家更快地解决问题,谢谢! 提问前的准备 在你准备请教大佬,提出技术问题前,请先尝试做到以下事情: 自己解决 阅读官网 搜索引擎 问题文档 阅读源码。 在确保以上完成后,还请 端正态度 捋清思路 明确问题 审视问题 最后问自己一句:是不是真到了不问大佬解决不了的地步了? 如果是,则开始提问。 尽量不要这样提问 喂,哎,这问题怎么解决? 有人提问后,见大佬没回,于是破口大骂:"你有什么了不起的!不就懂点技术嘛!"。 请明确:没有人有义务教你,教你的人都是“天使”,拥有着乐于助人的心。 古代有个生意人,走迷了路。遇到一个老人。忙上前问路;“喂,老头。从这里到苏州走那条路,还有多少里?”老人说:“走中间那条路,到苏州还有七、八千丈。”那人奇怪得问:“你们这里为什么不用里而用丈呢”;老人说:“因为你不讲里(礼)啊!” 有谁用过(知道、了解、精通等等)XX技术(算法、模式)吗? 例: 这样提问,有以下缺点 你的问题也许根本不用到了解、精通的程度即可回

相关推荐

推荐阅读