在阿里云上跑深度学习训练或推理,很多人卡在的其实是环境。GPU服务器装好系统后,驱动、CUDA工具包和框架版本只要有一处对不上,服务就起不来,报错信息也常常看不出原因。这篇文章通过一个排查案例,讲清楚在阿里云GPU服务器上怎么装CUDA工具包,以及哪些版本组合最容易装错。

先分清驱动和CUDA工具包
GPU服务器上通常同时有两样东西。一是NVIDIA显卡驱动,运行在内核层,负责让系统识别GPU并调度它。二是CUDA工具包(CUDA Toolkit),里面有编译器nvcc、数学库、运行时库等开发组件,应用程序通过它调用GPU算力。
两条命令可以快速看出当前状态:
- nvidia-smi:输出驱动版本,以及这个驱动最高支持的CUDA版本。
- nvcc –version:输出已安装的CUDA工具包版本。没装的话会提示命令不存在。
nvidia-smi右上角显示的CUDA版本,是驱动的兼容上限,不是机器上已装工具包的版本,两者可以不一致。框架运行时通常只要求驱动版本不低于工具包所需的最低值,所以驱动够新时,工具包版本略低也能跑。具体范围以NVIDIA的兼容性说明为准。
案例:新实例上推理服务启动失败
某团队在阿里云新购了一台GPU实例,要部署一个基于PyTorch的图像识别服务。他们照网上教程,直接从NVIDIA官网下载了最新版CUDA工具包安装。装完后服务启动报错,提示 CUDA driver version is insufficient for CUDA runtime version。
排查时,他们先执行nvidia-smi,发现驱动偏旧,支持的最高CUDA版本低于新工具包的要求。再看镜像来源,实例用的是较早的公共镜像,驱动版本是固定的。团队没有去升级整个系统,而是换了一个与现有驱动兼容的CUDA工具包版本重新安装,服务随即恢复。
这个案例的教训很直接:装CUDA之前先看驱动,再去NVIDIA的兼容性矩阵里挑版本。默认装最新版,在驱动跟不上的机器上最容易出这个错。
两种获取环境的方式
- 使用预装驱动和CUDA的镜像。创建实例时,在控制台的镜像市场里选带GPU驱动和CUDA环境的镜像。省事,驱动和系统已经配好,适合快速验证。代价是版本基本固定,换版本不灵活。
- 在干净系统上手动安装。先装匹配的NVIDIA驱动,重启后确认nvidia-smi输出正常,再装对应版本的CUDA工具包。步骤多一些,但版本由你决定,适合需要指定版本的生产环境。
手动安装前,建议先用 uname -r 查看当前内核版本。驱动模块要针对内核编译,内核和驱动对不上时,nvidia-smi会直接失败。
无论用哪种方式,装完都要验证。在Python里执行 torch.cuda.is_available(),返回True说明框架能调用GPU。想验证CUDA编译链路,可以写一个向量加法的小程序,用nvcc编译运行,检查结果是否正确。
多版本共存与环境变量
同一台服务器要跑多个项目时,可以把不同版本分别装在各自目录下,比如/usr/local/cuda-12.1和/usr/local/cuda-11.8,再用软链接/usr/local/cuda指向当前使用的版本。使用前需要设置两个环境变量:
- PATH加入对应版本的bin目录,确保输入nvcc时调用的是目标版本。
- LD_LIBRARY_PATH加入lib64目录,确保运行时加载正确的动态库。
切换版本时,改一下软链接,重新加载环境变量即可,不用反复卸载重装。如果两个变量写在同一份配置里,切换时要同步修改。否则容易出现nvcc已经是新版,运行时却还在加载旧库的情况。
常见问题与排查顺序
实践中遇到的问题大多集中在四类:
- 驱动与工具包不匹配。启动报错或内核调用失败时,对照兼容性矩阵调整工具包版本,或者升级驱动。
- 旧版本残留冲突。安装前清理旧的驱动和工具包,避免新旧文件混在一起。清理前先确认没有正在运行的GPU任务。
- 内核升级后驱动失效。系统内核更新后,先检查nvidia-smi是否还能用。不能用的话,需要为当前内核重新编译或安装驱动模块。
- 框架与CUDA版本不一致。PyTorch的预编译包绑定特定的CUDA版本。安装时选与本机CUDA版本对应的命令,不要直接照搬别人的安装命令。
出问题时,按驱动、工具包、框架的顺序逐层检查,通常能较快定位。上层报错往往只是下层问题的表现,所以从底层查起更省时间。
小结
在阿里云GPU服务器上配CUDA工具包,先分清驱动和工具包各管什么,再按框架要求选兼容版本。预装镜像适合快速起步,手动安装适合对版本有硬性要求的场景。装完做一次验证,后面排错能省下不少时间。