跳到主要内容

高性能智算基础

高性能智算(High-Performance Intelligent Computing)是面向人工智能模型训练、微调、推理和科学智能任务,综合使用 CPU、GPU 或其他加速器、高速网络、共享存储与资源调度系统的一套计算技术体系。

这篇文档沿用高性能计算基础的思路,重点回答四个问题:智算系统由什么组成、不同任务需要什么资源、如何衡量真实性能,以及怎样把一次实验稳定地运行和复现起来。

先理解一个原则

智算性能不能只看芯片宣传中的峰值数字。实际结果通常同时受计算精度、显存容量、显存带宽、节点间通信、数据读取速度、并行方式和软件实现影响。

1. 从 HPC 到高性能智算

传统高性能计算主要解决数值模拟、工程仿真、科学计算和大规模数据处理问题;智算则更多面向机器学习和深度学习任务。二者在硬件和系统层面有大量共通之处,都依赖并行计算、作业调度、高速互联和共享存储。

可以把 HPC 看作一套通用的基础设施和方法,把智算看作在这套基础设施上运行的一类重要工作负载。天气预测、材料设计和基因组分析等任务,可能同时包含数值模拟、数据处理和机器学习模型,需要在同一个集群中混合使用 CPU 与 GPU 资源。

对比维度传统 HPC 任务智算任务
常见目标数值模拟、工程仿真、科学计算模型训练、微调、推理、向量计算
主要计算浮点运算、线性代数、偏微分方程矩阵乘法、卷积、注意力、张量运算
常用精度FP64、FP32FP32、TF32、FP16、BF16、INT8 等
并行方式MPI、多线程、向量化数据并行、模型并行、流水线并行
关注资源CPU、内存、网络、存储加速器、显存、互联、存储和调度

2. 智算系统架构

智算平台不只是 GPU 服务器。一次训练任务需要数据、软件、资源和计算设备形成完整流水线:

数据集 / 模型 / 配置


数据准备与缓存 ── 环境与软件栈 ── 作业调度与配额
│ │ │
└──────────────┼───────────────┘

计算节点(CPU + GPU + 内存)
│ │
节点内互联 节点间高速网络
└──────┬───────┘

日志、检查点、评估与结果
层次主要组成需要回答的问题
数据层原始数据、预处理数据、数据集索引数据是否完整、格式是否适合高并发读取
软件层驱动、CUDA/运行时、框架、通信库、容器或模块版本是否匹配、算子和加速器是否可用
调度层分区、队列、账户、配额和作业系统需要多少设备、内存和运行时间
计算层CPU、GPU/加速器、内存、显存、本地临时盘模型和 batch 能否放入设备、计算是否充分
通信层PCIe/NVLink 等节点内互联、节点间网络多卡同步和参数交换是否成为瓶颈
存储层家目录、项目目录、共享并行存储、缓存盘数据、检查点和日志放在哪里最合适
结果层指标、日志、模型、检查点和版本记录结果能否验证、恢复和复现

2.1 计算节点

计算节点通常包含 CPU、系统内存、一个或多个 GPU 或其他加速器,以及本地磁盘和高速网络接口:

  • CPU:负责任务控制、数据预处理、系统调用和部分计算;
  • GPU/加速器:擅长大规模并行的向量和矩阵运算,是深度学习训练的主要计算设备;
  • 内存:保存数据集、程序、缓存和 CPU 侧中间结果;
  • 显存或设备内存:保存模型参数、输入张量、梯度和中间激活值;
  • 本地盘:适合缓存数据和临时文件,但不应默认当作永久存储。

模型参数、梯度、优化器状态和中间激活值会共同占用显存。估算资源时不能只看参数量,还要考虑 batch size、序列长度、训练精度和是否保存激活用于反向传播。

2.2 高速互联

单卡任务主要受设备自身性能影响;多卡和多节点任务还需要频繁交换梯度、参数或中间结果。分析多卡任务时,需要同时关注设备之间的互联、节点之间的网络、通信拓扑以及通信与计算能否重叠。

GPU 利用率不高时,原因可能不是算力不足,而是数据搬运、梯度同步、网络拥塞或进程绑定不合理。扩展任务前,应先用小规模基准确认通信开销。

2.3 存储与数据通路

智算平台通常同时提供家目录、项目目录、共享并行文件系统和节点本地临时目录。训练任务需要持续读取数据和写入检查点,存储吞吐不足会让加速器等待数据。

建议将原始数据、预处理数据、模型检查点和日志分开管理,并根据平台说明选择合适的存储路径。不要把大量小文件直接堆在高并发共享目录中,必要时可以先打包、索引或转换为更适合顺序读取的数据格式。

2.4 软件栈

智算软件通常从底层到上层依次包括驱动、加速器运行时、通信库、数学库、深度学习框架、模型代码和任务脚本。任一层版本不匹配,都可能导致程序无法启动、设备不可见或性能异常。

环境排查时应记录并核对:

  • 加速器驱动与运行时版本;
  • Python、PyTorch 或其他框架版本;
  • NCCL、MPI 等通信库版本与网络配置;
  • 容器、模块或虚拟环境的来源;
  • 模型代码、配置文件和数据处理脚本的版本。

3. 工作负载与资源画像

不同阶段的资源重点不同,申请资源时应先明确任务属于哪一类:

工作负载主要特征优先关注的资源常用指标
预训练数据量大、运行时间长、通信频繁多卡/多节点、显存、网络、检查点存储每秒 token、扩展效率、故障恢复时间
微调模型和数据规模相对可控,实验次数多单卡或少量 GPU、显存、数据读取单步耗时、收敛速度、实验吞吐
推理需要稳定服务和可预测响应显存、批处理、并发、CPU 与网络吞吐量、首 token 延迟、P95/P99 延迟
向量与检索数据预处理和索引构建较重CPU、内存、存储吞吐和容量构建耗时、查询延迟、并发量
科学智能模拟、数据处理和模型混合CPU/GPU 组合、I/O、跨节点通信单个样本耗时、端到端时间、结果误差

训练关注收敛速度和最终效果,推理还要关注并发能力、首 token 延迟、平均响应时间和显存占用。二者不能用同一套指标简单判断。

4. 如何衡量智算性能

4.1 算力与精度

FLOPS 表示每秒可执行的浮点运算次数,常见单位包括 GFLOPS、TFLOPS 和 PFLOPS。不同精度下的峰值算力不能直接横向比较:同一设备的 FP32、FP16、BF16 和 INT8 性能可能存在明显差异。

理论峰值可以粗略表示为:

理论峰值 = 设备数量 × 每设备并行单元数 × 工作频率 × 每周期操作数

理论峰值只代表理想上限。真实任务还会受到模型结构、批大小、显存带宽、通信、数据加载和算子实现影响。

4.2 显存、内存与带宽

  • 显存容量决定单卡能够容纳多大的模型、批次和中间结果;
  • 显存带宽决定数据在设备内部移动的速度,内存访问密集型模型可能受其限制;
  • 主机内存影响数据预取、缓存和 CPU 侧预处理能力;
  • 数据通路带宽决定数据从共享存储、CPU 内存到设备显存的供给速度。

显存不足时,任务可能直接报错,也可能通过 CPU 内存或磁盘交换数据而显著变慢。增加计算单元不一定带来同比例加速,需要结合带宽、缓存命中率和数据布局分析。

4.3 实际指标

常见的实际指标包括:

  • 吞吐量:单位时间处理的样本数、token 数或请求数;
  • 单步耗时:训练一个 step 或处理一个 batch 所需的时间;
  • 端到端延迟:从请求进入到结果返回的总时间;
  • 扩展效率:增加设备后,性能提升与理想线性提升的比例;
  • 设备利用率:计算设备处于有效工作的时间比例;
  • 能耗效率:每瓦特能够完成的有效计算量。

比较性能时必须固定数据集、模型版本、精度、批大小、并行策略和软件环境,否则结果不具备可比性。建议先建立单卡或单节点基线,再进行多卡和多节点对比。

5. 数据类型与混合精度

深度学习通常不需要所有计算都使用最高精度。混合精度会让部分计算使用 FP16、BF16 或 TF32,同时保留关键步骤的更高精度,以平衡速度、显存占用和数值稳定性。

类型常见用途主要特点
FP64高精度科学计算、部分数值验证精度高,计算和存储成本较大
FP32通用训练、基准和数值稳定步骤兼顾范围、精度与兼容性
TF32部分设备上的矩阵计算在兼容框架中提升吞吐,需确认精度要求
FP16/BF16混合精度训练和推理节省显存、提高吞吐,需要关注溢出和收敛
INT8 及更低精度推理量化降低资源占用,但可能影响模型效果

选择精度时要关注模型和算子支持情况、损失值和梯度是否溢出、训练结果是否满足准确率要求,以及推理任务是否接受量化带来的精度变化。应先建立可复现的基准,再逐步尝试混合精度或量化,并记录速度、显存和效果变化。

6. 智算中的并行方式

6.1 数据并行

每个设备持有一份模型副本,处理不同的数据切片,再同步梯度。数据并行实现相对直观,适合模型能够放入单卡显存的场景;设备数量增加后,梯度同步和全局 batch size 会影响扩展效率与收敛行为。

6.2 模型并行

将模型的不同层或不同模块放在不同设备上,适合单卡无法容纳的大模型。模型并行会增加设备之间的数据传输,需要合理安排层之间的通信,并关注显存是否均衡。

6.3 流水线并行

将模型划分为多个阶段,让不同设备同时处理不同的 mini-batch。流水线可以提高设备利用率,但需要处理阶段之间的等待、气泡和批次调度。

6.4 混合并行

大规模训练通常组合使用数据并行、模型并行和流水线并行。并行度提高后,通信、同步和故障处理都会变得更复杂,应从单卡、单节点开始验证,再逐步扩大资源。

7. 训练、微调与推理生命周期

一个可复用、可审计的智算任务通常包含以下阶段:

  1. 数据准备:清洗、去重、切分和格式转换,并记录数据版本;
  2. 环境准备:确认驱动、运行时、深度学习框架和依赖版本;
  3. 资源申请:根据模型规模、数据量和并行方式申请 CPU、GPU、内存和运行时间;
  4. 小规模验证:用小数据、单卡或短时间任务检查代码、路径和结果格式;
  5. 训练或微调:记录配置、随机种子、日志、检查点和中断恢复信息;
  6. 验证与评估:使用独立数据集检查效果、稳定性和资源消耗;
  7. 推理部署:选择合适的批处理、并发度、精度和服务方式;
  8. 结果归档:保存模型、配置、指标、日志和依赖信息,保证后续能够复现。

把“能运行”与“能复现”区分开:前者只要求任务完成,后者还要求别人能够根据同样的代码、数据、环境和参数得到可比较的结果。

8. 作业调度与资源使用

在共享智算集群中,通常通过 Slurm 等作业调度系统申请资源。提交前应确认:

  • GPU 型号、数量和显存是否满足任务要求;
  • CPU 核数、内存、临时空间和运行时间是否合理;
  • 是否需要单节点多卡或跨节点通信;
  • 数据和输出目录是否具有正确的读写权限;
  • 训练日志和检查点是否会持续占满共享存储。

不要在登录节点直接运行训练或推理服务。登录节点适合编辑脚本、准备环境、查看队列和提交作业;实际计算应在调度系统分配的计算节点上执行。HPC 平台的通用资源和作业流程可参考高性能计算基础Slurm 使用指南

提交前检查

示例中的分区、节点数、GPU 数量、运行时间和路径均需按当前平台及账号权限修改。长时间训练应配置日志、检查点和失败恢复方案。

9. 性能调优与常见问题

9.1 GPU 利用率低

先检查数据加载、CPU 预处理、batch 大小、显存占用和设备间通信。GPU 利用率低可能意味着输入数据供应不上,也可能是模型本身计算量小或同步频繁。可通过增加预取、合并小文件、调整 batch 或优化数据处理流水线验证原因。

9.2 显存不足

可以尝试减小 batch size、使用梯度累积、启用混合精度、缩短序列长度或采用模型并行。不要只通过增加 CPU 内存解决显存不足,因为数据在不同存储层之间搬运会产生额外开销。

9.3 多卡扩展不理想

检查通信时间、梯度同步、数据划分、节点拓扑和 I/O 是否成为瓶颈。设备数量翻倍并不保证训练时间减半,扩展效率需要通过固定模型、数据和配置的基准测试验证。

9.4 任务无法复现

记录代码版本、数据版本、容器或环境文件、框架版本、启动参数、随机种子和硬件信息。只保存模型权重通常不足以完整复现实验结果,还应保存评估脚本和关键指标。

9.5 检查点和日志拖慢训练

减少不必要的保存频率,将大文件写入适合的项目或并行存储,避免多个进程同时创建大量小文件。长任务应保留最近检查点,并在任务结束后再归档不常访问的历史版本。

10. 入门实践清单

第一次运行智算任务时,建议按以下顺序推进:

  1. 先用小数据集和单卡任务验证代码、环境和输出路径;
  2. 逐步增加 batch size,观察显存、吞吐量和训练稳定性;
  3. 使用固定配置进行单卡、多卡和多节点基准测试;
  4. 确认性能瓶颈后,再选择混合精度、并行策略或数据格式优化;
  5. 最后提交长时间任务,并配置日志、检查点和失败恢复方案;
  6. 归档代码、数据、环境、配置和评估结果,为下一轮实验留下可复用基线。

智算平台的核心目标不是单纯追求设备数量,而是在正确的资源、数据、软件和并行策略之间取得平衡。

参考资料