Weipeng Studio.

RTX4090 配置 Pytorch环境相关问题记录

字数统计: 1.4k阅读时长: 6 min
2022/12/17 Share

终于想起来要记录一下东西,写个小博客~

反正这里已经被熟人发现了TAT。

随便记录一下配置环境时遇到的难以解决的问题。


nvcc not found

RTX4090需要使用11.0以上版本的CUDA,配置好CUDA后编译mmdetection3d显示/use/local/cuda/bin/nvcc: No such file or directory.

但是安装CUDA时已经在bashrc中加入了cuda的各种环境变量,试了很多方法,包括cuda路径写到$PATH这种也试过可是就是不行,在编译的时候还是这个错误。

找了很久问题都解决不了,本来打算重装系统试试,在重装前看了一个博客,结尾说:

不知道啥办法解决

之后搜了很多博客,依然没有解决,参考了一篇博客,将这个问题解决了。

参考博客地址

我写的是

export CUDA_HOME=/usr/local/cuda

注意这里我写的是cuda 而不是cuda-10.2或者cuda10.0 因为我之前建立了软连接 之后其他的都可以直接用统一的cuda就行

然后问题就解决了

但是我在/.bashrc已经设置了环境变量CUDA_HOME,所以不知道为什么加了这个语句就可以成功了,anyway,跑起来再说。

乍一想简直不可能么,我bashrc里面这句话都写了,echo CUDA_PATH 也返回这个值。

反正要重装了,试试也不亏,然后试了一下就编译过了。我直接满头???确实玄学,反正就这么解决了,记录一下。


使用4块卡,当显存使用2G时GPU利用率飙到100%然后卡死不动,CPU也占用100%

当指定一张卡训练或测试时,正常运行,使用两张以上则出现这个问题,合理猜想是torch.distributed这一多卡训练模块的问题。经过查询,有人说是nccl库和pytorch的使用版本不一致导致。

1
apt search nccl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
正在排序... 完成
全文搜索... 完成
libhttpasyncclient-java/focal,focal 4.1.4-1 all
HTTP/1.1 compliant asynchronous HTTP agent implementation

libnccl-dev/未知 2.16.2-1+cuda12.0 amd64 [可从该版本升级:2.7.8-1+cuda11.1]
NVIDIA Collectives Communication Library (NCCL) Development Files

libnccl2/未知 2.16.2-1+cuda12.0 amd64 [可从该版本升级:2.7.8-1+cuda11.1]
NVIDIA Collectives Communication Library (NCCL) Runtime

libpuppetlabs-http-client-clojure/focal,focal 0.9.0-1 all
Clojure wrapper around libhttpasyncclient-java

libunirest-java-java/focal,focal 1.4.8-2 all
Simplified, lightweight HTTP client library

libvncclient1/focal-updates,focal-security,now 0.9.12+dfsg-9ubuntu0.3 amd64 [已安装,自动]
API to write one's own VNC server - client library

nccl-repo-ubuntu2004-2.7.8-ga-cuda11.1/now 1-1 amd64 [已安装,本地]
nccl repository configuration files

python-ncclient-doc/focal,focal 0.6.0-2.1 all
Documentation for python-ncclient (Python library for NETCONF clients)

python3-ncclient/focal,focal 0.6.0-2.1 all
Python library for NETCONF clients (Python 3)

texlive-latex-extra/focal,focal 2019.202000218-1 all
TeX Live: LaTeX additional packages

1
python -c "import torch;print(torch.cuda.nccl.version())"
1
2708

一开始确实版本不一样,上面显示的是我现在配置到一样的版本。到nvidia官网登录账号,选择2.7.8的版本下载。

跟着Network installers (x86)这一选项走,先下载Network Installer for Ubuntu20.04这个,然后dpkg -i xxx.deb,之后apt库中就会出现278这个版本的nccl否则20.04的ubuntu中可能会没有。

1
sudo apt install libnccl2=2.7.8-1+cuda11.1 libnccl-dev=2.7.8-1+cuda11.1

装好后再次运行程序,还是一样的问题。

中间疯狂排查原因,换了好几个CUDA,重装了好几次pytorch都没有解决。近十个小时时间度过。

最终查找原因,定位到应该是torch.distributed可能会在多卡进程同步当中卡死这一问题。

大量搜索issue后找到了神中神的回答,试了一下,轻松秒杀~

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash                                                      
CONFIG=$1
GPUS=$2
PORT=${PORT:-28500}
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
# 加的这两句
NCCL_BLOCKING_WAIT=1
NCCL_P2P_DISABLE=1
#
python3 -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT
$(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3}

成功配好环境,后面可以愉快的使用4090辣!


nuscenes 数据集的配置

一开始好几次没有配好nuscenes数据集,这个数据集比较大,下载下来的时候最好每个文件都检查一下md5和网站上的md5比对一下,验证数据的完整性,否则数据都不对最后训练完也是浪费功夫滴。

1
md5sum xxxx.tar

CPU性能不好的话就多等等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# untar.sh
v1.0-trainval03_blobs.tgz
v1.0-trainval04_blobs.tgz
v1.0-trainval05_blobs.tgz
v1.0-trainval06_blobs.tgz
v1.0-trainval07_blobs.tgz
v1.0-trainval08_blobs.tgz
v1.0-test_blobs.tar
v1.0-trainval09_blobs.tgz
v1.0-test_meta.tar
v1.0-trainval10_blobs.tgz
v1.0-trainval01_blobs.tar
v1.0-trainval_meta.tgz
v1.0-trainval02_blobs.tar

解压比较慢,建一个shell脚本慢慢跑

1
2
3
4
5
6
7
8
9
10
11
tar -xf ./Nuscenes/v1.0-trainval01_blobs.tar -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval02_blobs.tar -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval03_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval04_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval05_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval06_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval07_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval08_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval09_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-trainval10_blobs.tgz -C ./nuscenes/
tar -xf ./Nuscenes/v1.0-test_blobs.tar -C ./nuscenes

这里注意手动解压的时候最好不要重复解压某个文件两次,否则可能会出现某些意想不到的错误(我就是遇到了一些代码报错,什么维度无法转换之类的,想了想应该是之前手滑输错名称解压了一个文件两次,之后删了重新解压报错就消失了,时间–)

1
2
cd <mmdetection3d>
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes
1
ln -s /data/<....>/nuscenes <repo>/data/nuscenes
CATALOG
  1. 1. nvcc not found
  2. 2. 使用4块卡,当显存使用2G时GPU利用率飙到100%然后卡死不动,CPU也占用100%
  3. 3. nuscenes 数据集的配置