资讯动态

最省心YOLOv8 C++部署实战:Ubuntu22.04 + TensorRT 一站式配置

发布时间:2026/8/30 7:05:16 来源:尧图企业网站定制
1. 环境准备从驱动到CUDA的完整配置在Ubuntu 22.04上部署YOLOv8的C版本第一步就是搞定基础环境。我遇到过太多因为环境配置不当导致的诡异问题所以这里会详细说明每个环节的注意事项。先说说显卡驱动。很多人喜欢直接装最新版驱动但这是个坑。根据我的实测CUDA 12.2.2与NVIDIA 535驱动版本组合最稳定。安装方法很简单# 查看推荐驱动版本 ubuntu-drivers devices # 安装指定版本驱动 sudo apt install nvidia-driver-535装完驱动记得重启然后运行nvidia-smi确认安装成功。如果看到显卡信息输出说明驱动已经正常工作。这里有个细节不同显卡型号对驱动版本的要求不同比如RTX 40系列可能需要更新的驱动但CUDA 12.2.2仍然兼容。接下来是CUDA Toolkit的安装。我强烈建议使用runfile方式安装而不是deb包因为这样可以更灵活地选择组件wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.2_535.104.05_linux.run --silent --toolkit安装完成后需要设置环境变量。我建议把这些配置加到~/.bashrc的末尾export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH验证CUDA是否安装成功可以编译并运行CUDA samples中的deviceQuerycd /usr/local/cuda/samples/1_Utilities/deviceQuery sudo make ./deviceQuery如果看到Result PASS说明CUDA环境配置正确。这个过程我遇到过不少坑比如驱动版本不匹配、gcc版本冲突等所以建议严格按照上述步骤操作。2. TensorRT和cuDNN的精准配置TensorRT是NVIDIA的推理加速库而cuDNN则是深度学习的底层加速库。这两个组件的版本必须与CUDA严格匹配。经过多次测试我确定以下组合最稳定CUDA 12.2.2TensorRT 8.6.1cuDNN 8.9.4首先下载TensorRT的tar包注意选择对应CUDA 12.0的版本这是兼容CUDA 12.2的wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.6.1/tars/TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz tar -xzf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz sudo mv TensorRT-8.6.1.6 /usr/local然后配置环境变量export LD_LIBRARY_PATH/usr/local/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH export PATH/usr/local/TensorRT-8.6.1.6/bin:$PATH对于cuDNN需要从官网下载对应的tar包注意需要注册NVIDIA开发者账号。安装步骤tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*验证TensorRT是否安装成功cd /usr/local/TensorRT-8.6.1.6/samples/sampleMNIST make ./sample_mnist如果看到MNIST数字识别结果说明TensorRT环境配置正确。我在多个平台上测试过这个配置组合包括RTX 3090、RTX 4060等显卡都能稳定运行。3. 模型转换与优化技巧有了基础环境接下来要把YOLOv8的PyTorch模型转换为TensorRT引擎。这个过程有几个关键点需要注意首先创建一个conda环境用于模型转换注意不要激活conda环境进行C编译conda create -n yolov8_convert python3.9 conda activate yolov8_convert pip install torch1.13.1cu116 torchvision0.14.1cu116 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 pip install ultralytics然后导出ONNX模型注意batch size的设置yolo export modelyolov8n.pt formatonnx batch1 # 实时推理用 yolo export modelyolov8n.pt formatonnx batch4 # 视频处理用转换ONNX到TensorRT引擎时有几个关键参数trtexec --onnxyolov8n.onnx --workspace4096 --fp16 --dumpLayerInfo --saveEngineyolov8n.engine这里解释下重要参数--workspace4096设置GPU内存工作区大小为4096MB--fp16启用FP16精度能显著提升推理速度--dumpLayerInfo输出层信息方便调试我遇到过模型转换失败的情况大多是以下原因ONNX模型包含TensorRT不支持的算子输入输出维度定义不明确动态维度设置不当对于YOLOv8建议使用固定尺寸输入可以避免很多问题。转换成功后可以用trtexec测试引擎性能trtexec --loadEngineyolov8n.engine --shapesinput:1x3x640x6404. C推理工程实战现在进入最关键的C推理部分。我推荐使用GitHub上triple-Mu开源的YOLOv8-TensorRT实现这个项目代码质量很高而且持续维护。首先克隆仓库git clone https://github.com/triple-Mu/YOLOv8-TensorRT.git cd YOLOv8-TensorRT/csrc/detect/end2end重点来看CMakeLists.txt的配置。这是我调整过的版本适配我们之前安装的环境cmake_minimum_required(VERSION 3.12) set(CMAKE_CUDA_ARCHITECTURES 60 61 62 70 72 75 86 89 90) set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc) project(yolov8 LANGUAGES CXX CUDA) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc14 -O3) set(CMAKE_BUILD_TYPE Release) find_package(CUDA REQUIRED) find_package(OpenCV REQUIRED) # TensorRT路径设置 set(TENSORRT_ROOT /usr/local/TensorRT-8.6.1.6) set(TensorRT_INCLUDE_DIRS ${TENSORRT_ROOT}/include) set(TENSORRT_LIBS ${TENSORRT_ROOT}/lib/libnvinfer.so ${TENSORRT_ROOT}/lib/libnvinfer_plugin.so ) # 包含目录 include_directories( ${CUDA_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${TensorRT_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include ) # 可执行文件 add_executable(yolov8 main.cpp include/yolov8.hpp include/common.hpp) # 链接库 target_link_libraries(yolov8 ${CUDA_LIBRARIES} ${OpenCV_LIBS} ${TENSORRT_LIBS} )编译并运行mkdir build cd build cmake .. make -j8 ./yolov8 yolov8n.engine test.jpg如果一切顺利你会看到检测结果输出。我在代码中添加了检测框信息的打印功能方便调试std::cout Detected objects.size() objects\n; for(auto obj : objects) { std::cout Class obj.label at ( obj.rect.x , obj.rect.y ) size obj.rect.width x obj.rect.height confidence obj.prob \n; }这个C实现直接使用TensorRT的C API比Python版本快很多。在我的测试中RTX 3060上YOLOv8n的推理速度能达到450FPS以上完全满足实时性要求。5. 性能优化与常见问题解决部署完成后我们还需要进行性能优化。首先是用Nsight Systems分析性能瓶颈nsys profile -o yolov8_report ./yolov8 yolov8n.engine test.jpg常见的性能优化手段包括启用FP16或INT8量化可提升30-50%速度使用TensorRT的优化插件调整并行线程数启用CUDA Graph对于INT8量化需要准备校准数据集trtexec --onnxyolov8n.onnx --workspace4096 --int8 --calibdata/calib/ --saveEngineyolov8n_int8.engine我遇到过的典型问题及解决方案内存不足减小batch size或workspace大小推理结果异常检查模型转换时的输入输出维度速度不达标确保启用了FP16/INT8并检查CUDA核心利用率插件未加载设置LD_PRELOAD加载TensorRT插件库最后如果要部署到生产环境建议使用C17标准更好的多线程支持实现异步推理管道添加健康检查机制监控GPU利用率经过这样完整的配置和优化YOLOv8在TensorRT上的C实现能够达到最佳性能。我在多个实际项目中都采用这套方案稳定性和性能都得到了验证。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价