NVIDIA 技术博客:使用 NVIDIA DGX SuperPOD 训练最先进的 ImageNet-1K 视觉 transformer 模型

nvdev 2023-03-30 17:36:09

这篇文章最初发表在 NVIDIA 技术博客上。有关此类的更多内容,请参阅最新的 计算机视觉/视频分析 新闻和教程。

最近的研究表明,在语义分割和目标检测等计算机视觉任务中,大型 transformer 模型可以实现或提高 SOTA 。然而,与只能使用标准公共数据集的卷积网络模型不同,它需要一个更大的专有数据集。

VOLO 模型体系结构

新加坡 SEA AI 实验室最近的项目 VOLO ( Vision Outlooker )展示了一种高效且可扩展的 Vision transformer 模式体系结构,该体系结构仅使用 ImageNet-1K 数据集就大大缩小了差距。

VOLO 引入了一种新颖的 outlook attention ,并提出了一种简单而通用的架构,称为 Vision Outlooker 。与自我关注不同,自我关注侧重于粗略级别的全局依赖关系建模, outlook 关注有效地将更精细级别的功能和上下文编码为标记。这对识别性能极为有利,但在很大程度上被自我注意所忽视。

实验表明, VOLO 在 ImageNet-1K 分类上达到了 87.1% 的 top-1 精度,这是第一个在这个竞争基准上超过 87% 精度的模型,无需使用任何额外的训练数据。

Chart shows that the VOLO model has outperformed the state of the art image recognition models at different model complexity levels respectively in terms of Top-1 accuracy. For example, VOLO-D5 achieved more than 87% Top-1 accuracy.图 1 :。不同尺寸级别的 VOLO 模型的 Top-1 精度

此外,经过预训练的 VOLO 可以很好地转移到下游任务,例如语义切分。

SettingsLV-ViTCaiTNFNet-F6NFNNet-F5VOLO-D5
Test Resolution448×448448×448576×576544×544448×448/512×512
Model Size140M356M438M377M296M
Computations157B330B377B290B304B/412B
ArchitectureVision TransformerVision TransformerConvolutionsConvolutionsVOLO
Extra AugmentationsToken LabelingKnowledge DistillSAMSAM+augmultToken Labeling
ImageNet Top-1 Acc.86.486.586.586.887.0/87.1

表 1 :。对比 ViT 、 CNN 基线模型概述

尽管 VOLO 模型显示出了出色的计算效率,但训练 SOTA 性能模型并非易事。

在这篇文章中,我们将介绍我们在 NVIDIA DGX SuperPOD 上基于 NVIDIA ML 软件堆栈和 Infiniband 群集技术培训 VOLO 模型所获得的技术和经验。

培训方法

培训 VOLO 模型需要考虑培训策略、基础设施和配置规划。在本节中,我们将讨论此解决方案中应用的一些技术。

培训策略

始终使用原始 ImageNet 样本质量数据训练模型,并在细粒度上执行神经网络( NN )架构搜索,使理论上的研究更加巩固。然而,这需要计算资源预算的很大一部分。

在这个项目的范围内,我们采用了一种粗粒度的训练方法,它不像细粒度的方法那样能够访问尽可能多的神经网络体系结构。然而,它能够以更少的时间和更低的资源预算显示 EIOF 。在这种替代策略中,我们首先使用分辨率较低的图像样本训练潜在的神经网络候选,然后使用高分辨率图像进行微调。

在早期的工作中,这种方法在降低边际模型性能损失的计算成本方面被证明是有效的。

基础设施

实际上,我们在本次培训中使用了两种类型的集群:

  • 一个用于基础模型预训练,它是一个基于 NVIDIA DGX A100 的 DGX 吊舱,由使用 NVIDIA Mellanox HDR Infiniband 网络集群的 5 个 NVIDIA DGX A100 系统组成。
  • 一个用于微调,即 NVIDIA DGX SuperPOD ,由 DGX A100 系统和 NVIDIA Mellanox HDR Infiniband 网络组成。

Diagram shows the DGX POD/SuperPOD hardware and infiniband network, on the compute front, APEX for enabling scalable mixed precision compute and on the networking front, NVIDIA PyXis and NCCL are leveraged for best using the DGX A100 GPU networking capability.图 2 :。本项目使用的基于 NVIDIA 技术的软件栈

软件基础设施在这一过程中也发挥了重要作用。图 2 显示,除了基础的标准深度学习优化 CUDA 库(如 cuDNN 和 cuBLAS )外,我们还广泛利用 NCCL 、 enroot 、 PyXis 、 APEX 和 DALI 来实现培训性能的亚线性可扩展性。

DGX A100 POD 集群主要用于使用较小尺寸图像样本的基础模型预训练。这是因为基本模型预训练的内存限制较少,可以利用 NVIDIA A100 GPU 的计算能力优势。

相比之下,微调是在 NVIDIA DGX-2 的 NVIDIA DGX SuperPOD 上执行的,因为微调过程使用更大的图像,每台计算能力需要更多的内存。

培训配置

需要引入句子

 D1D2D3D4D5
MLP Ratio33334
OptimizerAdamW
LR ScalingLR = LRbase x Batch_Size/1024, where LRbase=8.0e-4
Weight Decay5e-2
LRbase1.6e-21e-31e-31e-31e-4
Stochastic Depth Rate0.10.20.50.50.75
Crop Ratio0.960.960.961.151.15

表 2 :。模型设置(对于所有模型,批大小设置为 1024 )

我们在 ImageNet 数据集上评估了我们提出的 VOLO 模型。在培训期间,没有使用额外的培训数据。我们的代码基于 PyTorch 、令牌标记工具箱和 PyTorch 图像模型( timm )。我们使用带有标记的 LV-ViT-S 模型作为基线。

安装说明

  • 我们使用了 AdamW 优化器和线性学习率缩放策略 LR = LR基础x Batch \ u 大小/ 1024 和 5 × 10 − 2 先前工作建议的重量衰减率,表 3 中给出了所有 VOLO 模型的 LRbase 。
  • 使用随机深度。
  • 我们在 ImageNet 数据集上训练了 300 个时代的模型。
  • 对于数据扩充方法,我们使用 CutOut 、 RandAug 和 MixToken 的标记目标。
  • 我们没有使用 MixUp 或 CutMix ,因为它们与 MixToken 冲突。

训练前

在本节中,我们以 VOLO-D5 为例来演示如何训练模型。

图 3 显示,使用单个 DGX A100 的 VOLO-D5 的训练吞吐量约为 500 图像/秒。据估计,完成一个完整的预训练周期大约需要 170 个小时,这需要使用 ImageNet-1K 进行 300 个阶段。这相当于 100 万张图片的一周。

为了加快速度,基于一个由五个 DGX A100 节点组成的简单参数服务器架构集群,我们大致实现了 2100 个图像/秒的吞吐量,这可以将预训练时间减少到约 52 小时。

Chart shows that the training throughput of VOLO D1 to D5 models varies from 2300 img/sec to 500 img/sec on one single DGX A100 node when batch size is configured to 1024.图 3 :。 D1 ~ D5 模型在一个 DGX A100 上跨一个完整历元的训练吞吐量

VOLO-D5 模型预训练可以使用以下代码示例在单个节点上启动:

CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /path/to/imagenet \  --model volo_d5 --img-size 224 \  -b 44 --lr 1.0e-4 --drop-path 0.75 --apex-amp \  --token-label --token-label-size 14 --token-label-data /path/to/token_label_data

对于 MNMG 培训案例,它需要将培训集群详细信息作为命令行输入的一部分。首先,我们根据节点和集群架构设置 CPU 、 MEM 、 IB 绑定。预训练阶段的集群是 DGX A100 POD ,每个 CPU 插槽有四个 NUMA 域,每个 A100 GPU 有一个 IB 端口,因此我们将每个列组绑定到 NUMA 节点中距离其 GPU 最近的所有 CPU 核。

  • 对于内存绑定,我们将每个列组绑定到最近的 NUMA 节点。
  • 对于 IB 绑定,我们为每个 GPU 绑定一个 IB 卡,或者尽可能接近这样的设置。

由于 VOLO 模型培训基于 PyTorch ,并且简单地利用了默认的 PyTorch 分布式培训方法,因此我们的多节点多 GPU 培训基于一个简单的参数服务器架构,该架构适合 NVIDIA DGX SuperPOD 的 fat 树网络拓扑。

为了简化调度,分配节点列表中的第一个节点始终用作参数服务器和工作节点,而所有其他节点都是工作节点。为了避免潜在的存储 I / O 开销,数据集、所有代码、中间/里程碑检查点和结果都保存在一个基于 DDN 的高性能分布式存储后端。它们通过 100G NVIDIA Mellanox EDR Infiniband 网络装载到所有工作节点。

为了加速数据预处理和流水线数据加载, NVIDIA DALI 配置为每个 GPU 进程使用一个专用数据加载程序。

Diagram shows the training throughput speed up using two different generations of GPU, which are NVIDIA A100 and V100 GPUs in the model pre-training phase. The workload scales out linearly on both GPUs but A100s apparently scales faster.图 4 :。训练前阶段训练吞吐量相对于 A100 和 V100 的速度提高 GPU

微调

使用以下代码示例,在单个节点上运行 VOLO-D5 模型微调非常简单:

CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /path/to/imagenet \  --model volo_d5 --img-size 512 \  -b 4 --lr 2.3e-5 --drop-path 0.5 --apex-amp --epochs 30 \  --weight-decay 1.0e-8 --warmup-epochs 5  --ground-truth \  --token-label --token-label-size 24 --token-label-data /path/to/token_label_data \  --finetune /path/to/pretrained_224_volo_d5/

如前所述,由于用于微调的图像大小远远大于预训练阶段使用的图像大小,因此必须相应地减小批量大小。将工作负载放入 GPU 内存中,这使得进一步扩展训练到更大数量的 GPU 并行任务是必须的。

Diagram shows the training throughput speed up using two different generations of GPU, which are NVIDIA A100 and V100 GPUs in the model fine-tuning phase. DGX SuperPOD with DGX A100 provides significantly faster speed ramping up than the previous generation DGX SuperPOD.图 5 :。针对 A100 和 V100 的数量提高微调阶段训练吞吐量 GPU

大多数微调配置类似于预训练阶段。

结论

在这篇文章中,我们展示了在大规模人工智能超级计算机上训练 SOTA 大规模视觉 transformer 模型(如 VOLO \ u D5 )的主要技术和程序,如基于 NVIDIA DGX A100 的 DGX SuperPOD 。经过训练的 VOLO \ u D5 模型在图像分类模型排名中取得了最佳的 Top-1 精度,无需使用 ImageNet-1k 数据集以外的任何其他数据。

这项工作的代码资源(包括用于运行实验的 Docker 映像和 Slurm 调度程序脚本)在 sail-sg/volo GitHub repo 中是开源的,以便将来可以在 VOLO \ u D5 上进行更广泛的研究。有关更多信息,请参阅 VOLO :视觉识别的视觉观察家

未来,我们希望进一步扩展这项工作,以培训更智能、自我监督、更大规模的模型,使用更大的公共数据集和更现代化的基础设施,例如, NVIDIA DGX SuperPOD 和 NVIDIA H100 GPU。

 

阅读原文

...全文
912 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
本文详细介绍了NVIDIA H100 Tensor Core GPU的架构设计与技术创新,重点涵盖其在AI、高性能计算(HPC)和数据中心应用中的卓越性能。H100基于Hopper架构,采用TSMC 4N工艺制造,集成800亿晶体管,支持FP8精度、第四代Tensor Core、Transformer Engine、DPX指令加速动态编程、第二代安全多实例GPU(MIG)、第五代PCIe和第四代NVLink等关键技术。其显著提升的计算吞吐量(最高达上一代A100的6倍)、内存带宽(HBM3提供超3TB/s)以及全新的异步执行机制(如Tensor Memory Accelerator和异步事务屏障),大幅优化了大规模模型训练与推理效率。同时,H100首次引入GPU级机密计算能力,保障数据在使用中的安全性,适用于云服务、医疗、金融等敏感领域。此外,文章还介绍了基于H100构建的DGX H100系统与SuperPOD超级集群,展现了其在可扩展性和系统集成方面的领先地位。 适合人群:从事人工智能、高性能计算、数据中心架构或芯片设计的研发工程师、技术决策者及高级技术人员;熟悉GPU编程与深度学习框架的专业人士。 使用场景及目标:①用于大规模语言模型(如万亿参数级别)的高效训练与推理;②支撑基因组学(如Smith-Waterman算法加速)、机器人路径规划、气候模拟等复杂科学计算任务;③构建高安全性、多租户共享的云计算平台;④实现跨节点超大规模AI集群部署,满足企业级AI基础设施需求。 阅读建议:建议结合NVIDIA官方CUDA文档与开发者工具链深入理解H100的编程模型变化,特别是对异步执行、线程块集群和分布式共享内存的应用。对于系统架构师,应重点关注NVLink Switch System与DGX SuperPOD的设计范式,以充分发挥H100在集群环境下的性能潜力。
内容概要:本文详细介绍了NVIDIA H100 Tensor Core GPU的架构设计与技术创新,重点涵盖其在AI、高性能计算(HPC)和数据分析领域的卓越性能表现。H100基于Hopper架构,采用TSMC 4N工艺,集成800亿晶体管,具备132个SM(流式多处理器),支持FP8、TF32、FP64等多种数据格式,显著提升计算吞吐量。其关键特性包括第四代Tensor Core、Transformer引擎、DPX指令加速动态规划、线程块簇、Tensor内存加速器(TMA)、第二代MIG多实例GPU、机密计算、HBM3高带宽显存、50MB二级缓存以及第四代NVLink和NVSwitch互连技术,整体性能相较A100提升达6倍。此外,H100支持PCIe 5.0和先进的安全机制,适用于大规模AI训练、推理、基因组学等前沿应用场景。; 适合人群:从事人工智能、高性能计算、数据中心架构、GPU加速计算及相关领域的研发工程师、系统架构师、科研人员和技术决策者;具备一定GPU计算或CUDA编程基础的专业人士。; 使用场景及目标:①用于大规模AI模型(如大语言模型Transformer)的高效训练与推理;②支撑HPC应用如气候模拟、量子计算、基因组学分析(如Smith-Waterman算法加速);③在多租户云环境中实现安全隔离的MIG实例部署;④构建高性能AI超算集群(如DGX H100和SuperPOD)以实现极致扩展性;⑤在金融、医疗、自动驾驶等领域实现安全的机密计算与联合学习。; 阅读建议:此文档为技术白皮书,内容详实且专业性强,建议结合NVIDIA官方CUDA文档、开发者工具(如Nsight、DCGM)及实际硬件平台进行深入研读,重点关注Transformer引擎、TMA异步传输、DPX指令优化等新特性在实际算法中的应用与性能调优。

1,391

社区成员

发帖
与我相关
我的任务
社区描述
NVIDIA 开发者技术交流
人工智能 企业社区
社区管理员
  • nvdev
  • 活动通知
  • AI_CUDA_Training
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧