终于想起来要记录一下东西,写个小博客~
反正这里已经被熟人发现了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 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())"
一开始确实版本不一样,上面显示的是我现在配置到一样的版本。到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比对一下,验证数据的完整性,否则数据都不对最后训练完也是浪费功夫滴。
CPU性能不好的话就多等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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