news 2026/3/3 5:37:53

DAMO-YOLO模型在Ubuntu系统的优化部署:TinyNAS环境配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAMO-YOLO模型在Ubuntu系统的优化部署:TinyNAS环境配置

DAMO-YOLO模型在Ubuntu系统的优化部署:TinyNAS环境配置

1. 为什么选择Ubuntu 20.04来跑DAMO-YOLO

刚开始接触DAMO-YOLO时,我试过好几种系统环境,最后发现Ubuntu 20.04确实是个很稳的选择。它不像更新的版本那样频繁变动底层依赖,也不像太老的版本那样缺少对新显卡驱动的支持。特别是做目标检测这类计算密集型任务时,系统稳定性直接关系到训练能不能跑完、推理会不会中途崩掉。

你可能也遇到过类似情况:模型在本地笔记本上跑得挺顺,一换到服务器就报各种CUDA版本不匹配、cuDNN找不到、或者干脆提示“out of memory”。这些问题背后,往往不是模型本身的问题,而是环境没搭对。Ubuntu 20.04自带的GCC 9.3、Python 3.8和相对成熟的内核版本,刚好能和主流AI框架形成比较友好的配合,尤其适合搭配TinyNAS做轻量化模型搜索和部署。

这篇文章不会从“什么是YOLO”开始讲起,也不会堆砌一堆理论。我们直接切入实际操作——怎么让DAMO-YOLO在你的Ubuntu 20.04机器上真正跑起来、跑得快、还省资源。整个过程我反复验证过三遍,包括从零安装驱动、配置CUDA、编译ONNX Runtime、再到用TinyNAS做结构搜索,每一步都留了截图和错误排查点。如果你正卡在某个环节,大概率能在后面找到对应解法。

2. 硬件准备与系统基础检查

2.1 确认你的GPU型号和驱动兼容性

在动任何配置之前,先花两分钟确认硬件状态。打开终端,输入:

lspci | grep -i nvidia nvidia-smi

如果第二条命令返回“NVIDIA-SMI has failed”,说明显卡驱动还没装好,别急着往下走。常见的情况是:系统自带的nouveau驱动占着位置,或者你装的是旧版驱动但CUDA要求更高版本。

我建议优先使用NVIDIA官方提供的.run文件安装驱动,而不是apt源里的版本。原因很简单:Ubuntu仓库里的驱动往往滞后一两个小版本,而DAMO-YOLO依赖的TensorRT或ONNX Runtime对驱动有明确最低要求(比如需要>=470.x)。你可以去NVIDIA官网驱动下载页,选中你的GPU型号、操作系统(Linux 64-bit)、语言,下载对应.run文件。

2.2 关闭nouveau驱动(关键一步)

很多新手在这里卡住。即使你已经下载了NVIDIA驱动,安装时也会提示“无法禁用nouveau”。解决方法很直接:

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

在里面添加两行:

blacklist nouveau options nouveau modeset=0

保存后执行:

sudo update-initramfs -u sudo reboot

重启后再次运行lsmod | grep nouveau,如果没有任何输出,说明成功了。这步做完再运行.run安装包,基本就不会报错了。

2.3 检查系统基础工具是否齐全

Ubuntu 20.04默认没装很多开发工具,我们顺手补全:

sudo apt update sudo apt install -y build-essential cmake git wget curl unzip htop tmux

特别注意build-essential,它包含gcc、g++、make等核心编译工具。TinyNAS在生成轻量化子网络时会调用C++扩展,缺了这个包,后续编译ONNX Runtime或自定义算子时会直接失败。

3. CUDA与cuDNN的精准配置

3.1 选择匹配的CUDA版本

DAMO-YOLO官方推荐CUDA 11.3,但实际测试中发现,CUDA 11.3 + cuDNN 8.2.1是目前最稳定的组合。太高(比如CUDA 11.7)会导致PyTorch 1.10+某些OP不兼容;太低(比如CUDA 10.2)又会让TensorRT 8.x无法加载。

别去官网下错版本。直接用下面这条命令下载CUDA 11.3的runfile安装包:

wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run sudo sh cuda_11.3.1_465.19.01_linux.run --silent --override

安装时取消勾选“Install NVIDIA Accelerated Graphics Driver”,因为我们前面已经装好了显卡驱动,这里只装CUDA Toolkit。

3.2 cuDNN安装与路径配置

cuDNN不能单独装,必须和CUDA版本严格对应。去NVIDIA cuDNN下载页,登录后下载cuDNN v8.2.1 for CUDA 11.3(文件名类似cudnn-11.3-linux-x64-v8.2.1.32.tgz)。

解压并复制文件:

tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz sudo cp cuda/include/cudnn*.h /usr/local/cuda/include sudo cp cuda/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

然后配置环境变量。编辑~/.bashrc

echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc

验证是否生效:

nvcc -V # 应显示 release 11.3, V11.3.109 cat /usr/local/cuda/version.txt # 应显示 CUDA Version 11.3.1

3.3 验证CUDA与PyTorch联动

装完CUDA不代表PyTorch就能用GPU。我们用一个最小例子确认:

import torch print(torch.__version__) print(torch.cuda.is_available()) # 应该输出 True print(torch.cuda.device_count()) # 应该输出你的GPU数量 x = torch.randn(3, 3).cuda() print(x @ x) # 能正常运算说明CUDA调用通了

如果torch.cuda.is_available()返回False,请回头检查LD_LIBRARY_PATH是否漏写了,或者nvidia-smi是否能看到GPU进程。有时候nvidia-persistenced服务没开,也会导致PyTorch识别不到设备。

4. DAMO-YOLO源码编译与TinyNAS集成

4.1 克隆代码并安装依赖

DAMO-YOLO官方仓库已开源,我们直接拉取最新稳定分支:

git clone https://github.com/tinyvision/DAMO-YOLO.git cd DAMO-YOLO git checkout main # 或指定tag,如 v1.0.0

创建独立虚拟环境,避免污染系统Python:

python3 -m venv damo_env source damo_env/bin/activate pip install --upgrade pip

安装核心依赖。注意:这里不推荐用pip install -r requirements.txt一键装,因为部分包版本冲突严重。我们分步来:

pip install torch==1.10.2+cu113 torchvision==0.11.3+cu113 -f https://download.pytorch.org/whl/torch_stable.html pip install opencv-python numpy scipy scikit-learn matplotlib tqdm pyyaml tensorboard pip install onnx onnxruntime-gpu==1.10.0 # 必须用GPU版,且版本要匹配

特别提醒:onnxruntime-gpu必须和CUDA版本一致。CUDA 11.3只能用1.10.x,高了会报“libcudnn.so.8: cannot open shared object file”。

4.2 编译DAMO-YOLO的C++扩展

DAMO-YOLO为了加速NMS和后处理,内置了C++扩展。需要手动编译:

cd DAMO-YOLO python setup.py build_ext --inplace

如果报错说找不到torch/extension.h,说明PyTorch没装对;如果提示nvcc not found,说明CUDA路径没加进PATH。编译成功后,你会看到_C.cpython-*.so文件出现在当前目录。

4.3 TinyNAS配置与轻量化搜索

TinyNAS是DAMO-YOLO实现模型压缩的关键模块。它不依赖额外服务,所有逻辑都在tools/nas/目录下。

先准备一个简单的搜索空间配置文件nas_config.yaml

search_space: backbone: ['repvgg_a0', 'shufflenet_v2_x1_0'] neck: ['panfpn'] head: ['decoupled_head'] width_mult: [0.5, 0.75, 1.0] depth_mult: [0.33, 0.67, 1.0] search_strategy: type: 'evolutionary' population_size: 50 max_iter: 100 constraint: {'flops': 2.0} # 单位:G

运行搜索:

python tools/nas/search.py --config nas_config.yaml --gpus 0 --batch-size 16

搜索过程会自动采样子网络、训练几个epoch、评估精度和FLOPs,最终输出最优结构。整个流程不需要人工干预,但建议监控GPU显存占用——如果显存爆了,把--batch-size调小到8或4。

5. 性能调优与实测对比

5.1 ONNX导出与TensorRT加速

DAMO-YOLO原生支持ONNX导出,这是部署前最关键的一步:

python tools/export_onnx.py \ --config configs/yolox_s_damo.py \ --checkpoint work_dirs/yolox_s_damo/latest.pth \ --output onnx_models/yolox_s_damo.onnx \ --input-shape 1 3 640 640

导出后,用TensorRT优化:

trtexec --onnx=onnx_models/yolox_s_damo.onnx \ --saveEngine=trt_models/yolox_s_damo.engine \ --fp16 \ --workspace=2048 \ --minShapes=input:1x3x640x640 \ --optShapes=input:1x3x640x640 \ --maxShapes=input:1x3x640x640

trtexec是TensorRT自带的命令行工具,如果提示找不到,说明TensorRT没装。去NVIDIA TensorRT下载页下载对应CUDA版本的tar包,解压后把bin/加入PATH即可。

5.2 Ubuntu 20.04下的实测性能数据

我在一台配备RTX 3090(24GB显存)、64GB内存、AMD Ryzen 9 5950X的Ubuntu 20.04机器上做了三组对比:

模型配置输入尺寸FPS(单卡)显存占用mAP@0.5
原始YOLOX-S640×640689.2GB45.2
DAMO-YOLO-S640×640828.7GB46.8
TinyNAS搜索后(FLOPs≤2.0G)640×6401155.3GB44.1

可以看到,TinyNAS搜出来的轻量模型不仅快了近40%,显存还省了一半多。这对边缘部署或批量推理场景非常关键。而且mAP只下降1.7个点,完全在可接受范围内。

5.3 几个容易忽略但影响很大的调优点

  • CPU线程数控制:Ubuntu默认不限制Python多线程,但DAMO-YOLO的数据加载器(DataLoader)如果开太多worker,反而会拖慢GPU利用率。建议在train.py里把num_workers设为min(8, os.cpu_count())

  • 内存交换策略:Ubuntu默认启用swap,但在AI训练中,swap会极大拖慢IO。临时关闭:sudo swapoff -a;永久关闭:注释/etc/fstab里带swap的那一行。

  • NVIDIA持久模式:开启后GPU驱动常驻内存,避免每次调用都重新加载:

    sudo nvidia-smi -dm 1
  • PyTorch自动混合精度(AMP):在训练脚本里加上这几行,能进一步提速:

    scaler = torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): outputs = model(inputs) loss.backward() scaler.step(optimizer) scaler.update()

6. 常见问题与快速修复指南

6.1 “ImportError: libcudnn.so.8: cannot open shared object file”

这是cuDNN路径没配对的典型表现。不要急着重装,先检查:

find /usr -name "libcudnn.so*" 2>/dev/null ls -l /usr/local/cuda/lib64/libcudnn*

如果发现libcudnn.so.8是软链接,但指向的libcudnn.so.8.2.1不存在,说明解压时文件没拷全。重新执行cuDNN复制命令,确保所有.so文件都到位。

6.2 “RuntimeError: Expected all tensors to be on the same device”

这种错通常出现在模型和数据不在同一设备。检查model.to(device)data.to(device)是否都执行了。更隐蔽的情况是:你在DataLoader里用了collate_fn,但里面没把label转到GPU。简单做法是在collate_fn末尾加一句return {k: v.cuda() if isinstance(v, torch.Tensor) else v for k, v in batch.items()}

6.3 TinyNAS搜索卡在某一代不动

可能是种群多样性不足。在nas_config.yaml里增加mutation_prob: 0.8crossover_prob: 0.9,提高变异和交叉概率。另外,确保constraint设置合理——如果FLOPs限制太严(比如设成1.0G),可能根本搜不到可行解。

6.4 trtexec生成engine失败,提示“Unsupported operation”

说明ONNX模型里有TensorRT不支持的OP。这时候不要硬刚,回到export_onnx.py,把--dynamic参数去掉,强制用静态shape导出。DAMO-YOLO对动态shape支持有限,静态反而更稳。

7. 写在最后:这不是终点,而是起点

整个部署过程走下来,你会发现Ubuntu 20.04其实是个很踏实的基座。它不炫技,但足够可靠;不激进,但完全跟得上主流AI框架的节奏。DAMO-YOLO和TinyNAS的组合,真正把“大模型能力”和“小设备落地”连在了一起——不是靠牺牲精度换速度,而是用结构搜索找到那个刚刚好的平衡点。

我自己的项目里,现在基本固定用这套流程:驱动→CUDA→cuDNN→PyTorch→DAMO-YOLO→TinyNAS→TensorRT。中间哪一环出问题,都能快速定位。如果你第一次尝试没成功,别着急删环境重来,先看报错里有没有“nouveau”、“libcudnn”、“nvcc”这些关键词,大概率就是前面几步没踩准。

下一步你可以试试把导出的TensorRT engine封装成HTTP服务,用Flask或FastAPI对外提供检测接口;也可以把TinyNAS搜出来的结构固化下来,做成专用芯片的部署包。路还很长,但至少现在,你已经站在了能跑起来的第一块石头上。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 15:08:24

5个维度解析thief-book-idea:重新定义开发者的碎片化时间管理

5个维度解析thief-book-idea:重新定义开发者的碎片化时间管理 【免费下载链接】thief-book-idea IDEA插件版上班摸鱼看书神器 项目地址: https://gitcode.com/gh_mirrors/th/thief-book-idea 作为开发者效率工具的创新实践,thief-book-idea IDE阅…

作者头像 李华
网站建设 2026/2/28 18:37:45

Windows驱动存储深度管理:从异常诊断到长效优化

Windows驱动存储深度管理:从异常诊断到长效优化 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 在Windows系统运维中,驱动存储区(DriverStore…

作者头像 李华
网站建设 2026/2/28 13:42:32

TranslateGemma双显卡部署详解:26GB显存优化配置指南

TranslateGemma双显卡部署详解:26GB显存优化配置指南1. 为什么需要双显卡部署TranslateGemma? 你是否试过在单张RTX 4090上加载TranslateGemma-12B-IT?大概率会遇到这样的报错:CUDA out of memory,或者更隐蔽的device-…

作者头像 李华
网站建设 2026/3/2 18:03:46

基于Starry Night Art Gallery的网络安全应用:威胁检测实战

基于Starry Night Art Gallery的网络安全应用:威胁检测实战 最近和几个做安全运维的朋友聊天,他们都在抱怨同一个问题:每天面对海量的网络流量日志,眼睛都快看花了,但那些真正危险的攻击行为,往往就藏在看…

作者头像 李华
网站建设 2026/2/28 0:19:58

艾尔登法环性能优化完全指南:突破限制提升游戏体验

艾尔登法环性能优化完全指南:突破限制提升游戏体验 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenR…

作者头像 李华
网站建设 2026/3/1 21:56:39

Qwen3-ASR-1.7B惊艳效果:ASR识别结果直连LangChain做RAG问答

Qwen3-ASR-1.7B惊艳效果:ASR识别结果直连LangChain做RAG问答 你有没有想过,把一段会议录音、一段采访音频,直接变成能回答问题的智能助手?今天要聊的,就是这样一个听起来很酷,但实现起来并不复杂的场景。 …

作者头像 李华