最新n1n v2.0.1 正式上线!企业级大模型接口聚合平台 (LLM API Gateway),为您接入 500+ AI Models,价格低至 1 折, 立即尝试

基于 NVRx 在 Amazon EKS 上实现具备容错能力的分散式训练

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

在大规模超大语言模型 (LLM) 训练任务中,集群通常包含数百甚至数千张 GPU。随着节点数量增加,硬件故障的出现几乎无法避免。在传统的分布式训练架构中,一旦出现节点故障,受限于同步检查点 (Checkpoint) 的写入延迟以及繁重的集群级重新初始化流程,整体训练吞吐量会受到严重影响。

通过在托管于 Amazon Elastic Kubernetes Service (Amazon EKS) 的 PyTorch Fully Sharded Data Parallel (FSDP) 训练工程中集成 NVIDIA Resiliency Extension (NVRx),技术团队能够成功解耦 I/O 阻塞瓶颈,并在数秒内完成 GPU 硬件故障恢复。在 2 至 8个节点的 NVIDIA H100 Tensor Core GPU 集群上,该方案成功实现了 99%+ 的训练效率

无论是在本地集群中进行大规模模型微调,还是通过 n1n.ai 等聚合 API 平台快速调用基础大模型进行性能对比与评估,底层计算架构的稳定性都是确保 AI 项目按时交付的关键所在。


分布式训练的不稳定性瓶颈分析

在跨 Kubernetes 节点训练 70B+ 参数规模的模型时,主要有两个核心痛点影响 GPU 的实际利用率:

  1. 同步检查点阻塞 (Synchronous Checkpoint Latency):传统 PyTorch 检查点机制要求所有 GPU 计算 Worker 暂停当前的 Forward/Backward 迭代,等待模型权重和优化器状态完全写入远程存储(如 Amazon S3 或 AWS FSx for Lustre)。随着模型参数体量飙升至几百 GB,这种同步等待会浪费大量的 GPU 算力。
  2. 冷启动恢复耗时极长 (Cold-Restart Delay):当发生无法自动纠正的 GPU 显存错误或 NVLink 通信异常时,常规 Kubernetes Pod 会直接被终止。重建容器、重新拉取镜像、建立 TCP/NCCL 通信环路并将最新的检查点文件重新加载回 GPU 显存,通常需要 10 到 30分钟。

NVRx 专门针对上述瓶颈进行了重构,推出了异步非阻塞检查点 (Async Checkpointing)进程内 Rank 恢复 (In-Process Restart) 以及 作业级重启协调器 (ft_launcher)


架构设计:Amazon EKS 上的 NVRx + PyTorch FSDP

为了消除等待时间,NVRx 将持久化过程划分为两个阶段:极速内存暂存(或本地临时存储副本)与后台多线程异步传输。此外,NVRx 深入 Hook 了 PyTorch 的分布式进程组,使得在不销毁父级 Python 容器环境的前提下,动态重建 Rank 链接。

+-----------------------------------------------------------------------------------+
|                                 Amazon EKS 集群                                   |
|                                                                                   |
|  +----------------------------------+       +----------------------------------+  |
|  |   EKS Worker Node 1 (8x H100)    |       |   EKS Worker Node 2 (8x H100)    |  |
|  |                                  |       |                                  |  |
|  |  +----------------------------+  |       |  +----------------------------+  |  |
|  |  |  PyTorch FSDP + NVRx Engine|  | NVLink|  |  PyTorch FSDP + NVRx Engine|  |  |
|  |  +----------------------------+  |<----->|  +----------------------------+  |  |
|  |  | 内存暂存区 (Host RAM / SHM) |  | 互联  |  | 内存暂存区 (Host RAM / SHM) |  |  |
|  |  +--------------+-------------+  |       |  +--------------+-------------+  |  |
|  +-----------------|----------------+       +-----------------|----------------+  |
|                    |                                          |                   |
+--------------------|------------------------------------------|-------------------+
                     v                                          v
    +---------------------------------------------------------------------------+
    |                       后台异步 I/O 线程写入引擎                           |
    +---------------------------------------------------------------------------+
                                         |
                                         v
             +-------------------------------------------------------+
             | AWS 共享文件存储服务 (Amazon S3 / FSx for Lustre)     |
             +-------------------------------------------------------+

在开发复杂的生成式 AI 业务时,企业通常需要在自主训练专属模型与调用 n1n.ai 提供的商业化高可用 LLM API 之间进行权衡与评估,从而选择最具成本效益的方案。


代码实现:在 PyTorch FSDP 中集成 NVRx 异步检查点

在标准 PyTorch Distributed 脚本中引入 NVRx 极其简便。以下代码展示了如何通过异步 Save 逻辑实现零等待的权重落盘:

import os
import torch
import torch.distributed as dist
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
import nvrx.checkpoint.async_engine as nvrx_ckpt

def setup_distributed():
    dist.init_process_group(backend="nccl")
    local_rank = int(os.environ["LOCAL_RANK"])
    torch.cuda.set_device(local_rank)
    return local_rank

def train_with_nvrx():
    local_rank = setup_distributed()
    
    # 构建模型并挂载至 GPU
    model = BuildLargeTransformerModel().to(local_rank)
    model = FSDP(model)
    optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)
    
    # 配置 NVRx 异步检查点管理器
    async_ckpt_mgr = nvrx_ckpt.AsyncCheckpointManager(
        checkpoint_dir="/mnt/fsx/checkpoints