4、环境搭建:安装NVIDIA驱动与CUDA Toolkit

好,咱们正式开始动手了。

这一章,说白了就是搭积木。你得先把地基打牢,后面那些花里胡哨的性能分析工具才能跑起来。我见过太多人,上来就装Nsight,结果驱动版本不对,折腾一整天——嗯,我自己也踩过这个坑。

4.1 安装NVIDIA驱动

驱动是GPU和操作系统之间的翻译官。没有它,你的显卡就是个摆设。

⚠️ 重要提醒: 千万别用系统自带的nouveau开源驱动。那玩意儿跑个桌面还行,做GPU性能分析?门儿都没有。

我个人习惯用runfile方式安装。虽然麻烦点,但可控性最强。具体步骤:

  1. 先禁用nouveau:echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
  2. 重启,然后下载对应版本的驱动:wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run
  3. 停止图形界面:sudo systemctl isolate multi-user.target
  4. 执行安装:sudo sh NVIDIA-Linux-x86_64-550.54.14.run

安装完成后,用nvidia-smi验证。如果能看到GPU列表和驱动版本,恭喜你,第一步走通了。

💡 我的经验: 驱动版本别追新。选那种「长期支持版」最稳。我曾经为了尝鲜装了最新驱动,结果CUDA Toolkit不兼容,回滚花了一下午。

4.2 安装CUDA Toolkit

驱动装好了,接下来是CUDA Toolkit。它包含了编译器、库文件、调试工具等。

我建议用deb包安装,省心。以Ubuntu 22.04为例:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-12-4

安装完后,配置环境变量:

export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH

验证安装:nvcc --version。看到版本号就对了。

🔑 关键点: CUDA版本要和驱动版本匹配。比如驱动550.x对应CUDA 12.4。不匹配的话,编译会报错,运行时也会莫名其妙崩溃。

配置Nsight Systems与Nsight Compute

这两个工具是GPU性能分析的左膀右臂。Nsight Systems看宏观,Nsight Compute看微观。

4.3 Nsight Systems安装与配置

Nsight Systems用来做时间线分析。它能告诉你CPU和GPU分别在干什么,哪里在等待,哪里在浪费。

安装很简单:

sudo apt-get install nsight-systems-2024.1

或者去NVIDIA官网下载tar包,解压就能用。我个人喜欢tar包,因为可以随便挪位置。

基本用法:

nsys profile -o my_profile ./my_cuda_app

运行完后会生成一个.nsys-rep文件。用Nsight Systems GUI打开,就能看到漂亮的火焰图了。

💡 避坑指南: 我曾经在容器里跑nsys,结果发现时间线全是空的。后来才意识到——容器里没开--privileged权限。加上--cap-add=SYS_ADMIN就好了。

4.4 Nsight Compute安装与配置

Nsight Compute是核函数级别的分析工具。它能告诉你每个线程束的利用率、内存带宽、指令吞吐等。

安装:

sudo apt-get install nsight-compute-2024.1

基本用法:

ncu -o my_kernel_profile ./my_cuda_app

输出文件是.ncu-rep,用GUI打开分析。

🔑 关键点: Nsight Compute的度量很多,别被吓到。刚开始只看三个指标就行:占用率、内存带宽利用率、计算吞吐。这三个能覆盖90%的性能问题。

设置DCGM与Prometheus监控

生产环境里,你不能每次都手动跑profiling。你需要持续监控——DCGM就是干这个的。

4.5 DCGM安装与配置

DCGM(Data Center GPU Manager)是NVIDIA的数据中心GPU管理工具。它能采集GPU的温度、功耗、利用率、显存使用等指标。

安装:

sudo apt-get install datacenter-gpu-manager

启动服务:

sudo systemctl start nvidia-dcgm
sudo systemctl enable nvidia-dcgm

验证:dcgmi discovery --list。能看到所有GPU的信息。

💡 我的经验: DCGM默认采集间隔是1秒。对于大多数场景够用了。但如果要做精细分析,可以改成100ms:dcgmi config --set -v 100。不过要注意,频率越高,CPU开销也越大。

4.6 Prometheus集成

DCGM本身不带可视化。我们需要Prometheus来拉取数据,Grafana来展示。

首先,安装DCGM Exporter:

git clone https://github.com/NVIDIA/dcgm-exporter.git
cd dcgm-exporter
make
./dcgm-exporter &

然后配置Prometheus的prometheus.yml

scrape_configs:
  - job_name: 'dcgm'
    static_configs:
      - targets: ['localhost:9400']

重启Prometheus,就能在Grafana里看到GPU监控面板了。

⚠️ 注意: DCGM Exporter默认暴露9400端口。确保防火墙没把它堵住。我有个客户,折腾了半天发现是安全组规则没开端口。

Docker容器化GPU环境配置

最后,咱们聊聊容器化。现在谁还裸机跑啊?Docker + GPU是标配。

4.7 安装NVIDIA Container Toolkit

要让Docker能访问GPU,需要装nvidia-container-toolkit。

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

验证:

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

看到GPU信息,就说明容器化成功了。

4.8 构建性能分析镜像

我习惯把Nsight、DCGM、CUDA Toolkit都打包到一个镜像里。这样到哪都能用。

Dockerfile示例:

FROM nvidia/cuda:12.4.0-devel-ubuntu22.04

RUN apt-get update && apt-get install -y \
    nsight-systems-2024.1 \
    nsight-compute-2024.1 \
    datacenter-gpu-manager \
    && rm -rf /var/lib/apt/lists/*

ENV PATH=/usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

CMD ["bash"]

构建:docker build -t gpu-perf-toolkit .

💡 避坑指南: 我曾经把镜像做得特别大,20多GB。后来发现很多工具根本用不上。现在我的原则是:只装你当前项目需要的。比如做推理优化,就不装DCGM。镜像小,启动快,还省磁盘。

4.9 运行容器并挂载性能分析工具

运行容器时,记得挂载宿主机上的性能分析工具:

docker run --gpus all \
  -v /usr/local/cuda:/usr/local/cuda \
  -v /opt/nvidia/nsight-systems:/opt/nvidia/nsight-systems \
  -v /opt/nvidia/nsight-compute:/opt/nvidia/nsight-compute \
  -it gpu-perf-toolkit

这样,容器里就能直接使用nsys和ncu了。

🔑 关键点: 容器化GPU环境的核心是权限和挂载。权限不够,GPU用不了;挂载不对,工具找不到。我建议你写个脚本,一键启动容器,省得每次敲一堆参数。

好了,环境搭建就到这里。下一章,咱们开始真正跑性能分析——从第一个profiling命令开始。