Karin Sevegnani, Senior Solutions Architect, NVAITC UK | GTC2025
Giuseppe Fiameni, Senior Solutions Architect, NVAITC EMEA
CPU 和 GPU 对于加速计算都至关重要。现代应用程序的工作流通常在串行处理和并行处理之间交替进行。CPU 擅长串行处理,而 GPU 擅长并行处理。为了进一步加速计算并使其适用于各种工作负载,需要解决 CPU 瓶颈问题。
传统的加速系统通过 PCIe 总线连接 CPU 和 GPU,存在以下挑战:
* PCIe 瓶颈:限制了 CPU-GPU 之间的通信。
* 内存访问:GPU 无法直接访问 CPU 内存。
* 编程复杂性:编程模型较为复杂。
* 能效比低:CPU 每瓦性能较低。
为了解决这些问题,需要一种新的芯片架构,旨在:
* 加速 CPU-GPU 数据传输。
* 实现 CPU 和 GPU 缓存的内存一致性。
* 简化编程模型。
* 提供更高的每瓦性能。
GH200 专为加速计算和生成式 AI 的新时代而构建。
* 功能最全面的计算:在 CPU、GPU 或内存密集型应用中均能提供最佳性能。
* 易于部署和扩展:1 个 CPU : 1 个 GPU 的节点设计,易于为 HPC、企业和云环境进行管理和调度。
* 最佳性能功耗比/总拥有成本:针对不同工作负载最大化数据中心利用率和电源效率。
主要规格:
* 900GB/s NVLink-C2C
* 624GB 高速内存
* 4 PF AI 性能
* 72 个 Arm 核心
通过 NVLink C2C (Chip-to-Chip) 实现缓存一致性的访问,允许任一处理器访问任一物理内存。
下图比较了 GH200 NVL2 与 H200 NVL4 在不同大语言模型上的性能表现(以每秒输出 Token 数衡量)。
* LLAMA 70B: 性能提升 1.5 倍
* GPT3 175B: 性能提升 1.4 倍
* NVLLM 340B: 性能提升 1.1 倍
NeMo 是一个端到端的框架,用于开发、定制和部署生成式 AI 模型。其主要组件包括:
* 数据准备 (Data Prep): NeMo Curator
* 训练和定制 (Training and Customization): NeMo Customizer, NeMo Evaluator
* 部署 (Deployment): NeMo Retriever, NeMo Guardrails, NVIDIA NIM
所有组件通过一个 API 网关进行访问。
Nsight Systems 是一个用于系统级应用程序算法调优的工具。
主要特性:
* 系统范围的应用程序算法调优。
* 支持多进程树。
* 定位优化机会。
* 在快速的 GUI 时间线上可视化数百万个事件。
* 发现 CPU 和 GPU 的空闲时间间隙。
* 在多个 CPU 和 GPU 之间平衡工作负载。
* 分析 CPU 算法、利用率、线程状态、GPU 流、内核、内存传输等。
* 支持命令行、独立应用和 IDE 集成。
支持平台:
* 操作系统: Linux (x86, Power, Arm SBSA, Tegra), Windows, MacOSX (host)
* GPU: Pascal+
* 产品文档: https://developer.nvidia.com/nsight-systems
--trace=cuda, nvtx, osrt, cudnn, cublas--stats=[true|false] (在命令行输出摘要)-o, --output=report# (支持使用主机名、PID 和环境变量 %q{ENV_VAR} 等模式)-f, --force-overwrite=[true|false]nsys profile --help 查看所有可用选项。机器:
当前硬件: Quanta S74G-2U GH200
基础软件:
作业调度器: SLURM
设置容器:
获取一个交互式节点:
salloc -n 1 -N 1 -p gh -t 2:00:00在交互式节点内运行容器:
singularity run --nv nemo-nightly.sif下载模型:
下载数据集:
下载代码库:
nsys 命令进行分析:nsys profile -y 360 -d 720 --trace=cuda,cudnn,cublas,osrt,nvtx --event-sample=system-wide -w true -c CudaProfilerApi -o sft_llama2_7B python ...
首先,将 .nsys-rep 文件导入 Nsight Systems 进行分析。
放大时间线后,我们可以观察到以下几点:
* 99.5% 内核 vs 0.5% 内存: 训练工作流是计算密集型 (compute-bound) 而非内存密集型 (memory-bound)。
* 计算密集型: 当一个进程的性能主要受限于处理器(CPU或GPU)的速度时,该进程被认为是计算密集型。
* 内存密集型: 当一个进程的性能主要受限于内存访问(读取和写入数据)的速度而非计算时,该进程被认为是内存密集型。
进一步分析 CPU 和 GPU 的活动细节:
左侧解读:
右侧解读:
查看 OS 运行时库和 CUDA API 活动,可以发现 PyTorch Autograd 引擎的行为:
pthread_cond_wait: 应用程序线程被阻塞,等待条件变量发出信号。这可能表示 CPU 在等待 GPU 完成任务。主线程:
后续步骤:
num_workers 值以找到最佳设置。增加的 CPU 活动:
pt_autograd_0 和 pt_main_thread 线程显示出更频繁的活动,表明 CPU 正在积极参与管理卸载的激活。减少的 GPU 内存使用 (在 CUDA HW 中)
对比表格:
| 方面 | 不使用卸载 (Without Offloading) | 使用卸载 (With Offloading) |
|---|---|---|
| GPU 内存使用 | 高 | 显著降低 |
| GPU 内核利用率 | 更一致 | 由于同步而出现更多间隙 |
| CPU 利用率 | 较低 | 由于激活管理而更高 |
| 同步开销 | 最小 | 增加 |
此页面比较了 LoRA 微调和未使用 PEFT (参数高效微调) 时的性能分析结果。左图为 LoRA 微调,右图为 未使用 PEFT。
提高训练速度: 较低精度的格式需要更少的计算资源。
内存效率: 较低精度的格式减少了内存使用。
提升性能: FP8 减少了计算开销,从而加快了前向和后向传播过程。
减少内存使用: 与 FP16/BF16 相比,内存需求减半。
相当的准确性: 在各种任务中,FP8 实现的准确性在 BF16 基线的 1% 以内。
两种类型的 FP8:
E5M2
E4M3
Grace-Hopper 超级芯片:
NeMo 框架 (FW):
Nsight Systems:
持续预训练:
使用 FP8:
自动混合精度:
NVIDIA AI 技术中心: