GPU 与 CUDA
在 Linux 服务器上查看和使用 NVIDIA 显卡。
基础条目参考:NVIDIA nvidia-smi 文档、PyTorch CUDA 文档。
查看显卡状态
nvidia-smi、nvtop,查看显存、利用率和占用显卡的进程。
查看 NVIDIA 显卡状态
nvidia-smi
- 助记:
SMI← System Management Interface(系统管理接口);工具显示显卡状态及进程信息。
每秒刷新一次显卡状态
nvidia-smi -l 1
- 助记:
-l= loop(循环);后面的 1 是刷新间隔秒数。 - 作用:ctrl + c 结束;无需额外依赖 watch。
指定显卡
CUDA_VISIBLE_DEVICES,让程序只用指定的显卡。
只让一次训练使用物理 GPU 1
CUDA_VISIBLE_DEVICES=1 python train.py
- 助记:
visible devices= 可见设备;CUDA 是 Compute Unified Device Architecture,变量限制程序能看到哪些 CUDA 卡。 - 作用:程序内该卡通常重新编号为 cuda:0;示例脚本和物理编号按实际替换。
驱动与 CUDA 版本
查看驱动、CUDA 工具包和 PyTorch 对应的 CUDA 版本,排查版本不匹配。
查看 CUDA 编译工具包版本
nvcc --version
- 助记:
nvcc是 NVIDIA CUDA compiler(CUDA 编译器驱动);它的版本属于工具包,不等于显卡驱动版本。 - 作用:nvcc 属于 CUDA 工具包;nvidia-smi 显示的 CUDA Version 表示驱动支持的版本上限。
查看 PyTorch 的 CUDA 支持
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
- 助记:
is_available= 是否可用;torch.version.cuda是 PyTorch 构建所用 CUDA 版本,两者回答不同的问题。
显存排查
显存没有释放、残留进程占用显卡时的处理。
列出占用显卡的计算进程
nvidia-smi --query-compute-apps=pid,process_name,used_gpu_memory --format=csv
- 助记:
query= 查询;compute apps 是计算进程,pid是进程编号,used_gpu_memory是已用显存。 - 作用:先查 PID 对应的任务归属;多进程服务或部分平台可能无法报告完整显存信息。