PyTorch和CUDA的配置
安装的一些概念
针对该部分的相关概念先做如下解释:
驱动层:为显卡安装驱动,只有安装了驱动,操作系统才能控制显卡硬件,做相应的操作。
CUDA层:CUDA是NVIDIA公司为其下显卡研发的计算包,涵盖科学计算后矩阵运算的相关包,只有安装了cuda才能使用显卡加速。 例如:市场上的显卡有不同品牌,除NVIDIA
(CUDA加速)外还有AMD
的A卡(也有ROCm加速),Intel
的集成显卡,苹果公司的M系列芯片
的GPU元件,以及系列国产显卡等。也就是说,只有购买NVIDIA系列的显卡才能使用CUDA加速。
cuda作为一种加速包,提供了底层的接口,例如,可能有一个API是接受矩阵A和B,输出两个矩阵的和。之后,各个编程语言的开发人员都可以调用此接口,也被称为底层开发。
除python外,C++、JAVA甚至MATLAB等都可以调用CUDA加速接口,此时的cuda则是系统级cuda。
PyTorch层:为了减少不必要的麻烦,简化底层开发的难度,让科研更加专注于AI模型的开发而非硬件调用,出现了PyTorch库,与之对应的是谷歌的TensorFlow,二者在人工智能开发领域各有优劣,在此不做比较。使用此类库后,就不需要重复“造轮子”,其中预先定义好了大量的计算函数,例如自动梯度下降、数据集载入等方法。
对于上述的架构,可以总结为以下示意图:
最后,针对生物医药领域最常用的PyTorch框架,我们可以得出如下结论:
项目 | 作用 | 必要性 | 检测方法 |
---|---|---|---|
显卡驱动 | 提供底层驱动 | 必须安装 | nvidia-smi |
系统CUDA | 为系统所有软件提供加速接口 | 仅用python或cpu时可不装 | nvcc -V |
虚拟环境CUDA | 为python提供加速接口 | 使用官方conda安装时自带 | 虚拟环境下nvcc -V |
PyTorch | 人工智能库 | 同类替代:TensorFlow | torch.cuda.is_available() |
检查系统驱动
查看本机显卡驱动安装情况
nvidia-smi
输出实例
Fri Sep 26 20:05:42 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.82.09 Driver Version: 580.82.09 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| 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 GeForce RTX 5060 Ti Off | 00000000:01:00.0 On | N/A |
| 0% 50C P8 8W / 180W | 399MiB / 16311MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1690 G /user 120MiB |
+-----------------------------------------------------------------------------------------+
这里的 CUDA Version: 13.0
指的是该显卡的最高支持CUDA版本,实际安装的可以低于此值。
查看系统级CUDA版本
nvcc -V
输出示例
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0
这里显示的系统级CUDA是12.0,也正验证了上文所说。
安装PyTorch
目前,安装PyTorch是最为繁琐,出错最多的一步,它需要严格对应python、pytorch和CUDA的版本,三者缺一不可。
在PyTorch的官网选择操作系统和CUDA版本,复制其下命令,使用cuda安装。在安装过程中会自动下载CUDA和系列pytorch包,请务必保证网络流畅。同时,最新版的PyTorch只支持 python >= 3.8,需要注意其版本问题。
若网络问题等,还可以通过官网whl手动下载whl,手动安装pytorch,此时需要严格注意操作平台、python版本、cuda版本!同时还要注意,这种方法安装不会安装其依赖包,例如Numpy、CUDA等,还需要手动安装,因此推荐使用VPN等方法保证网络流畅后用conda安装。
在确认pytorch安装完成后,使用以下方法测试显卡和CUDA信息
运行如下cuda.py
文件
import torch
def get_gpu_info():
if torch.cuda.is_available():
device = torch.device("cuda:0")
gpu_name = torch.cuda.get_device_name(device)
cuda_version = torch.version.cuda
pytorch_version = torch.__version__
total_memory = torch.cuda.get_device_properties(device).total_memory / (1024 ** 3)
compute_capability = torch.cuda.get_device_capability(device)
compute_capability_str = f"sm_{compute_capability[0]}{compute_capability[1]}"
print("=" * 50)
print(f"GPU 设备: {gpu_name}")
print(f"CUDA 版本: {cuda_version}")
print(f"PyTorch 版本: {pytorch_version}")
print(f"GPU 总内存: {total_memory:.2f} GB")
print(f"计算能力: {compute_capability_str}")
print("=" * 50)
return device
else:
print("CUDA 不可用,使用 CPU 进行测试")
return torch.device("cpu")
if __name__ == "__main__":
get_gpu_info()
切换到指定虚拟环境后,运行代码,若得到类似输出即可证明torch安装成功
==================================================
GPU 设备: NVIDIA GeForce RTX 5060 Ti
CUDA 版本: 12.9
PyTorch 版本: 2.8.0+cu129
GPU 总内存: 15.47 GB
计算能力: sm_120
==================================================
更简单的方法是,命令行输入:
python -c "import torch; print(torch.cuda.is_available())"
或使用一下命令查看pytorch和cuda版本:
python -c "import torch; print(torch.__version__)"
若输出结果为True
,则证明配置正确,否则请仔细检查各项兼容性,以及是否安装为GPU版的torch。
版本冲突的解决方案
根据上述讲述我们知道了要使用PyTorc-GPU进行开发需要NVIDIA显卡驱动、CUDA加速包、python解释器、PyTorch包、其他python库等,因为所涉及的包众多,且管理方不同,更新进度不同,兼容性差异极大,因此很容易出现包与包之间的版本冲突并无法调和的情况。例如如下案例:
根据官方发布的CUDA指南,NVIDIA RTX 5060Ti作为50系显卡,采用全新Blackwell架构,其最低支持的CUDA是12.0,同时计算能力支持sm_120。
因此它完全无法运行老旧的利用CUDA 11.x的项目!运行会出现如下报错:
NVIDIA GeForce RTx 5060 Ti with cuDA capability sm 120 is not compatible with the current PyTorch installation.
The current PyTorch install supports CuDA capabilities sm 37 sm 50 sm 60 sm 61 sm 70 sm 75 sm 80 sm 86 compute 37.
If you want to use the NiIA GeForce RTx 5068 Ti GpU with pyTorch,
please check the instructions at https://pytorch.org/get-started/locally/
warnings.warn(incompatible, device, warn.format(device name, capability, " ".join(arch list), device name))
NVIDIA GeForce RTx 5068 Ti
而根据上文所讲,目前的PyTorch最低只支持pyton3.9,意味着3.8以下的所有python都无法使用最新显卡。
在老项目中,可能还会有部分第三方库出现只支持到python3.8,不支持更高版本python;或出现跨版本API升级,接口改变的情况,这就需要我们人为的修改代码,随之带来的难度极大。
因此提出配置环境建议:
查看项目要求的python版本(如有),若版本高于3.9,则可尝试正常
yml
安装。对于项目python版本过低的情况,一律手动指定python=3.9或更高。
随后直接使用pytorch官网提供的conda命令,一键安装torch套件,安装完成后检测cuda可用性。
根据项目
yml
手动安装其他库,可以根据核心代码引用和报错信息逐个安装,先安装必要包。对于可能出现的包版本不兼容的情况,尝试调整版本,若实在无法调节,可采取手动修改代码的方法。例如,某库的API从
get_data()
更新成了get_bio()
,那么需要我们利用查找替换,将项目中的所有用法全部改为最新API。
总之,所遵循的原则大体是,先安装驱动,一个项目一个虚拟环境,虚拟环境内优先指定高版本python、安装PyTorch和CUDA,再安装核心库,最后安装其他库(可选择其他库替换)。