RODNet算法Docker运行环境建立步骤
code:https://github.com/yizhou-wang/RODNet?tab=readme-ov-file
1. 安装 Docker 和 NVIDIA 容器工具
# 安装 Docker(Ubuntu 示例)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 安装 NVIDIA 容器工具(支持 GPU)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-docker2
sudo systemctl restart docker
1. 安装 NVIDIA 容器工具
bash
# 添加 NVIDIA 容器工具仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 安装 nvidia-docker2
sudo apt-get update
sudo apt-get install -y nvidia-docker2
2. 配置 Docker 使用 NVIDIA 运行时
编辑 Docker 配置文件 /etc/docker/daemon.json,确保包含以下内容:
json
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
3. 重启 Docker 服务
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
---
### **2. 下载 CUDA 10.1 + PyTorch 1.4 镜像**
```bash
docker pull pytorch/pytorch:1.4-cuda10.1-cudnn7-devel
3. 准备数据集
按 CRUW 数据集说明 下载并组织数据目录:
/data/cruw
├── annotations
├── calib
├── sequences
└── ...
4. 启动容器并挂载数据/代码
# 创建并进入容器
docker run -it --gpus all \
-v /path/to/RODNet:/workspace/RODNet \
-v /data/cruw:/data/cruw \
--workdir /workspace/RODNet \
pytorch/pytorch:1.4-cuda10.1-cudnn7-devel
5. 容器内安装依赖
# 安装 cruw-devkit
git clone https://github.com/yizhou-wang/cruw-devkit.git
cd cruw-devkit
pip install .
cd ..
# 安装 RODNet(使用 TDC)
pip install -e .
安装遇到的问题
ERROR: Command errored out with exit status 1: /opt/conda/bin/python -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘"’"’/workspace/RODNet/setup.py’“'”‘; file=’“'”‘/workspace/RODNet/setup.py’“'”‘;f=getattr(tokenize, ‘"’“‘open’”’“‘, open)(file);code=f.read().replace(’”‘"’\r\n’“'”‘, ‘"’"’\n’“'”‘);f.close();exec(compile(code, file, ‘"’“‘exec’”’"‘))’ develop --no-deps Check the logs for full command output.
问题原因:错误 Unknown CUDA arch (8.6) or GPU not supported 表明你的 GPU 计算能力(Compute Capability)为 8.6(例如 NVIDIA RTX 30 系列显卡),但 RODNet 的 CUDA 编译配置未包含此架构支持。PyTorch 1.4 默认的 CUDA 10.1 工具链不支持 Ampere 架构(计算能力 8.x),需手动添加支持。
解决:# 在 setup.py 中找到 CUDA 扩展配置部分(例如 make_cuda_ext 函数)
def make_cuda_ext(name, module, sources):
return CUDAExtension(
name=f’{module}.{name}‘,
sources=[os.path.join(*module.split(’.‘), src) for src in sources],
extra_compile_args={
‘cxx’: [],
‘nvcc’: [
‘-D__CUDA_NO_HALF_OPERATORS__’,
‘-gencode’, ‘arch=compute_86,code=sm_86’, # 添加 Ampere 架构支持
‘-gencode’, ‘arch=compute_70,code=sm_70’, # 保留原有支持
‘-gencode’, ‘arch=compute_75,code=sm_75’,
‘–compiler-options’, "’-fPIC’"
]
}
)
6. 数据预处理
# 生成 .pkl 文件
python tools/prepare_dataset/prepare_data.py \
--config configs/config_rodnet_hg1v2_win16_s4.yaml \
--data_root /data/cruw \
--split train,test \
--out_data_dir data/cruw_processed
python tools/prepare_dataset/prepare_data.py --config configs/
config_rodnet_hg1v2_win16_mnet.py --data_root data/ROD2021/cruw --split train,test --out_data_dir data/ROD2021/
7. 训练模型
python tools/train.py \
--config configs/config_rodnet_hg1v2_win16_s4.yaml \
--data_dir data/cruw_processed \
--log_dir checkpoints/
python tools/train.py --config configs/config_rodnet_hg1v2_win16_mnet.py --data_dir data/data_pkl --log_dir checkpoints/exp1/
8. 推理测试
python tools/test.py \
--config configs/config_rodnet_hg1v2_win16_s4.yaml \
--data_dir data/cruw_processed \
--checkpoint checkpoints/rodnet-hg1v2.pth \
--res_dir results/
关键说明
-
数据持久化
-v /data/cruw:/data/cruw
将本地数据集挂载到容器内,-v /path/to/RODNet:/workspace/RODNet
挂载代码。 -
GPU 支持验证
容器内运行nvidia-smi
应显示 GPU 信息。 -
环境隔离
所有操作在容器内完成,避免污染本地环境。 -
结果保存
训练后的模型(checkpoints/
)和推理结果(results/
)会保存在挂载的本地目录。
常见问题处理
-
缺少系统依赖
容器内安装所需工具:apt-get update && apt-get install -y libgl1-mesa-glx
-
CUDA 版本冲突
确保镜像使用pytorch/pytorch:1.4-cuda10.1-cudnn7-devel
。 -
数据集路径错误
检查--data_root
参数是否指向容器内的/data/cruw
。