每次配置模型环境,无论是在windows,linux,集群服务器上都会在这里卡一段,为了未来配置方便,记录下配置注意事项
配置cuda和torch主要有几个要点,分别是:
- 显卡与驱动(NIVIADA driver)是否适配。
- cuda版本与显卡是否适配。
- torch是否为gpu版本
- torch版本与cuda,与python是否适配
- touchvision版本与torch是否适配。
1. 显卡与驱动(NIVIADA driver)是否适配
On Linux/OS X:
nvidia-smi
结果形式一般为:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA A100-PCI... Off | 00000000:3B:00.0 Off | 0 | | N/A 27C P0 54W / 250W | 0MiB / 40960MiB | 0% E. Process | | | | Disabled | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 是适配的即可,不然需要重新安装driver。
2. cuda版本与显卡(gpu)是否适配。
查询Compute Capability (CUDA SDK support )
步骤为:
- 先确定显卡的算力级别:For example, the GeForce 820M compute capability is 2.1.
- 再确定cuda版本是否支持该算力级别: For example, CUDA 9.2 is not supported for compute compatibility 2.1.
3. cuda是否与driver适配
On Linux/OS X:
nvidia-smi
结果形式一般为:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA A100-PCI... Off | 00000000:3B:00.0 Off | 0 | | N/A 27C P0 54W / 250W | 0MiB / 40960MiB | 0% E. Process | | | | Disabled | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
注意: 此表中显示的 CUDA 版本并不表示您的系统上实际安装了 CUDA 工具包这仅表明您的图形驱动程序兼容的最新版本的 CUDA。一般下载这个版本的cuda就对了。
3. pytorch安装
一般安装步骤:
conda install pytorch torchvision torchaudio cudatoolkit=11.8
一般linux/windows这样就没问题了,但是,由于我使用的是集群服务器,环境配置与模型训练(gpu)不在同一个节点,这样会直接安装为cpu版本的pytorch。同时集群里有cuda11.9module,我是不用下载cudatoolkit的。
检查一下:
$ conda list pytorch pytorch 2.0.0 py3.9_cpu_0 pytorch pytorch-mutex 1.0 cpu pytorch cudatoolkit 11.1.1 heb2d755_10 conda-forge
果然是cpu版本呢。于是我首先卸载了原来版本的torch(或者重新创建环境)。然后手动安装下载wheel,在官方网站可下载。
cu开头的就是gpu版本啦
同时下载对应版本的torchvision:
这里我一开始下了cu118/torchvision-0.16.1%2Bcu118-cp311-cp311-win_amd64.whl,但是torchvision0.16和torch2.0不兼容,所以还要注意torch和torchvision匹配问题。
然后传到服务器文件夹里,在conda环境pip安装即可。
我在gpu节点测cuda一直false的原因就是torch和torchvision不匹配,torchvision后装把前面装的pytorch覆盖了重装了cuda12.1的版本,导致无法与GPU兼容。
4.测试与运行
这之后应该就可以正常运行了gpu了,测试gpu的pbs文件:
#!/bin/bash #PBS -N yolov5_train #PBS -l nodes=1:ppn=1:gpus=1 #PBS -l walltime=1:00:00 #PBS -o yolov5_train.out #PBS -e yolov5_train.err #PBS -A your_account #PBS -V #PBS -q gpu # 使用GPU前必须启动 export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH # 查看cuda版本 nvcc --version # Display GPU information nvidia-smi conda init bash source ~/.bashrc conda activate checkcuda2 # Check if CUDA is available using Python python -c "import torch; print(torch.__version__)" python -c "import torch; torch.zeros(1).cuda()" python -c "import torch; print(torch.version.cuda)" python -c "import torch; print(torch.cuda.is_available())" conda deactivate