帮你快速理解、总结文档立即下载

NVIDIA 部署实践

最近更新时间:2025-12-30 17:42:12
我的收藏
目前,TencentOS Server 4 已实现对 NVIDIA Driver 和 CUDA 的原生支持,为您使用 NVIDIA GPU 提供了完整的 RPM 二进制软件包,包括内核级驱动、系统管理工具、计算库及AI框架适配组件。
本文档将指导如何在 TencentOS Server 4 上快速完成 NVIDIA Driver 和 CUDA 的安装部署,并无缝运行上层 AI 模型与应用。

基础环境要求及说明

支持 TencentOS 内核版本:6.6内核(含其间各小版本)。如您使用的是TencentOS 2 或 3系列(5.4内核),建议您升级至 TencentOS 4版本(6.6 内核)。
支持的 GPU 驱动和对应 CUDA 版本 :
驱动版本
对应CUDA版本
525.147.05
12.0.1
530.41.03
12.1.1
535.274.02
12.2.2
545.29.06
12.3.2
550.163.01
12.4.1
555.58.02
12.5.1
560.35.03
12.6.3
570.195.03
12.8.1
575.64.05
12.9.1
580.95.05
13.0.1
支持的 CUDA 版本:11.8.0、 12.0.1、 12.1.1、 12.2.2、 12.3.2、 12.4.1、 12.5.1、 12.6.3、 12.8.1、 12.9.1、 13.0.1。

安装 NVIDIA Driver

安装 TencentOS EPOL源

dnf install epol-release

安装 NVIDIA Driver 驱动包

此处以 Nvidia-Driver-570 为例,若需安装其他版本,请更新以下命令中软件包名的版本号,将570替换为目标版本号即可。
# 安装开源模块
dnf install -y kmod-nvidia-570-dkms-open nvidia-570 nvidia-driver-570-open
# 安装闭源模块
dnf install -y kmod-nvidia-570-dkms nvidia-570 nvidia-driver-570
说明:
NVIDIA Driver 分为开源和闭源版本,所以部署流程分为开源模块安装和闭源模块安装两部分。
闭源版本驱动由 NVIDIA 公司官方提供,内核模块来自 NVIDIA 官方 .run安装包中的闭源代码,通常拥有最新的功能和最优化的性能,包括对 NVIDIA 最新显卡架构的支持,以及对 DirectX、OpenGL 等图形接口的完整支持。缺点是它们不开放源代码,这可能会限制它们与 Linux 内核的兼容性,并且在社区支持方面不如开源驱动。
开源版本驱动(如 nouveau)是由社区维护的,内核模块来自 open-gpu-kernel-modules 仓库的开源代码,可以更好地与 Linux 内核集成。尽管它们可能在功能/性能上不如闭源驱动全面,但在某些方面,如内核兼容性,它们表现得更为出色。

安装验证

# 重启机器
sudo reboot
# 查看已安装的驱动软件包
dnf list installed | grep nvidia
# 查看驱动信息
nvidia-smi
注意:
实例重启会导致正在运行的应用和服务被强制终止,或文件和内存数据会丢失。请先在重启前做好数据保存等操作。

卸载驱动安装包(可选)

如需要切换驱动版本,请参见以下步骤卸载已安装的驱动安装包。
# 卸载开源模块
dnf remove -y kmod-nvidia-570-dkms-open nvidia-570 nvidia-driver-570-open
# 卸载闭源模块
dnf remove -y kmod-nvidia-570-dkms nvidia-570 nvidia-driver-570


安装 CUDA

针对使用场景的不同,TencentOS 团队采用了全新的打包方案。新方案通过将 CUDA 拆分为 runtime 和 devel 两类子包,实现了组件精细化分层管理,既满足了轻量级生产部署的需求,又支持了代码编译和模型训练的完整开发环境。
优化方向
传统方案
新方案
包结构
细分子包
拆分为 runtime /devel 两类子包
组件分层
静态库/工具与运行时捆绑
划分可执行文件、.so 动态库、头文件、.a 静态库
其中,runtime / devel,对应组件范围如下:
类型
组件范围
适用场景
Runtime
可执行文件、 .so 动态库
轻量级生产部署
Devel
runtime 、头文件、 .a 静态库
代码编译/模型训练

安装 CUDA 组件

此处以 cuda-12-8 为例,如需安装其他版本,请更新以下命令中软件包名的版本号,将12-8替换为目标版本号即可。
Runtime 包安装:
dnf install -y cuda-runtime-12-8
Devel 包安装:
dnf install -y cuda-devel-12-8

安装验证

# 查看已安装的 cuda 软件包
dnf list installed | grep cuda
# 查看 cuda 版本
nvcc --version

多版本共存支持(可选)

新版打包方案解决了 CUDA 多版本共存的问题,可下载多个版本的 CUDA,并利用 update-alternatives 进行版本切换。如需兼容 CUDA 多版本共存,请参见 安装 CUDA,依次安装所需版本。例如,当同时安装 CUDA 12.2 与 12.9 版本,可参见以下方式切换版本:


卸载 CUDA 组件(可选)

如需切换 CUDA 版本,请参见以下步骤卸载已安装的 CUDA 安装包。
Runtime 包:
dnf remove -y cuda-runtime-12-8 cuda-toolkit-12-8-config-common
Devel 包:
dnf remove -y cuda-runtime-12-8 cuda-toolkit-12-8-config-common cuda-12-8 cuda-devel-12-8 cuda-toolkit-12-8



AI 应用安装与验证

运行大模型(以 vLLM 框架和 Qwen 示例)

安装 uv

# 下载 uv
dnf install pip
pip install uv
# 推荐使用 uv 安装,智能处理依赖冲突
uv pip install vllm==0.10.0 --system

服务启动

# 启动 vllm 服务,拉取大模型(此处以 Qwen 为例)
vllm serve "Qwen/Qwen3-0.6B"
# 若机器配置较低,可尝试如下命令启动服务
vllm serve "Qwen/Qwen3-0.6B" --gpu-memory-utilization 0.7 --max-model-len 1024 --max-num-seqs 4 --dtype float16 --block-size 16

结果展示:

示例:命令行测试
# 另起终端
curl -X POST "http://localhost:8000/v1/chat/completions" -H "Content-Type: application/json" --data '{"model": "Qwen/Qwen3-0.6B","messages": [{"role": "user","content": "What is the capital of France?"}]}'
示例:Python 代码部署和推理
创建python程序,内容如下:
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
# 初始化模型参数
model_path = "Qwen/Qwen3-0.6B" # 替换为实际模型路径
llm = LLM(
model=model_path,
dtype="half", # 启用半精度推理(FP16)
trust_remote_code=True, # 对Hugging Face模型必须开启
tensor_parallel_size=1, # 单GPU运行
gpu_memory_utilization=0.8 # 显存利用率控制
)
# 配置生成参数
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=256,
repetition_penalty=1.1
)
# 构建对话模板
messages = [
{"role": "system", "content": "你是一个诗人"},
{"role": "user", "content": "写一首关于春天的七言绝句"}
]
tokenizer = AutoTokenizer.from_pretrained(model_path)
prompt = tokenizer.apply_chat_template(
conversation=messages,
tokenize=False,
add_generation_prompt=True
)
# 执行推理
outputs = llm.generate(
prompts=[prompt],
sampling_params=sampling_params
)
# 输出结果
for output in outputs:
generated_text = output.outputs[0].text
print(f"生成结果:\\n{generated_text}")

运行大模型(以 Ollama + Qwen 示例)

安装

# 安装依赖
dnf install -y gawk
# 下载安装脚本并安装
curl -fsSL https://ollama.com/install.sh | sh

服务启动

# 服务启动
ollama serve

运行 Qwen 模型

# 拉取大模型(此处以 Qwen 为例)
ollama run qwen3:0.6b

常见问题

nvidia-smi 显示的 CUDA Version 与实际 CUDA Toolkit 版本不一致

nvidia-smi 显示的 CUDA Version 与实际 CUDA Toolkit 版本不一致是正常现象,原因在于两者代表不同层面的版本信息。nvidia-smi 命令返回结果中,Driver Version 是当前安装的驱动版本,CUDA Version 代表驱动所支持的最高 CUDA Runtime API 版本,并非当前安装的 CUDA Toolkit 版本。如需查看 CUDA Toolkit 版本,请执行 nvcc --version 命令。

cuda-compat 问题(Driver 与 CUDA 版本兼容)

在 CUDA 生态中,不同 CUDA 版本均有与之最为适配的驱动程序版本。实际上,每个 CUDA 工具包都配套提供了 NVIDIA 显示驱动程序包,此驱动程序能够全面支持该版本 CUDA 工具包所引入的各项功能,是在该 CUDA 版本开发阶段就紧密匹配、功能兼容性最优的版本对应关系。
关于 CUDA 版本与驱动版本的对应关系,请参见 官方版本发布说明。但是,在实际应用场景里,如果需要突破这种既定对应关系,例如在旧版本的驱动上运行高版本的 CUDA,或者是在较新的驱动上运行旧版本的 CUDA,将不可避免地引发兼容性问题。

为满足高版本 CUDA 在老旧硬件设备上的运行需求,官方专门推出了 cuda-compat 包以实现兼容适配。其实际效果是,当使用该包时,高版本 CUDA 仅能调用当前驱动所支持的最高版本 CUDA 所具备的功能,而无法使用因 CUDA 升级而新增的功能,从功能体验层面来看,类似对 CUDA 版本进行“降级”处理。
具体结论如下:
驱动版本高于或等于 CUDA 版本,CUDA 不安装 cuda-compat,运行正常;安装 cuda-compat,可能发生异常。
驱动版本低于 CUDA 版本, CUDA 必须安装 cuda-compat。


低版本 CUDA 上运行 AI 框架(vLLM)时库文件缺失问题

vLLM 核心架构是自研高性能 C++/CUDA 内核,深度集成 PyTorch,编译时链接特定版本的 CUDA 运行时,与 PyTorch 的 CUDA 版本强相关。而高版本的 vLLM 都是根据较新的 PyTorch 来进行构建,因此在较低版本的系统 CUDA 环境中编译 vLLM 时会出现关键 symbol 缺失问题,具体报错信息可参考如下截图:

例如,在 CUDA 12.2 中编译 vLLM 时出现 CUPTI 相关 symbol 缺失问题,经分析发现,PyTorch/Triton 自带的 CUPTI 库包含所需符号,但 CUDA 12.2 包含的 CUPTI 库缺少所需符号:

切换到高版本的 CUDA 12.9 环境时,测试结果包含目标 symbol 且可以成功运行:


以上情况,您可通过设置环境变量,指定动态链接器搜索共享库(.so文件)的路径。当运行需要特定版本 CUDA 库的程序时,系统会优先在这个路径中查找库文件。具体命令如下:
export LD_LIBRARY_PATH=/usr/local/lib/python3.11/site-packages/nvidia/cuda_cupti/lib:$LD_LIBRARY_PATH