GTC 2023 | 按需分配的AI算力 Ⅱ

High-Flyer    April 03, 2023

“切勿错过AI的决定性时刻”这句 NVIDIA GTC 的广告语自周三起,一时间传遍全网。依照惯例,大会由熟悉的面孔黄仁勋围绕AI、芯片等科技,发布了一系列前沿技术产品。

今年幻方 AI 再度受邀,在 NVIDIA GTC 2023 大会中进行了一次技术主题分享。

01

自 2019 年起,我们为了满足自己科研作业的大规模算力需求,逐步构建了幻方萤火深度学习智算平台,其包括存储网络相关基础设施、分时调度算法、以及深度优化的 hfai 框架。在实际的工作中,我们常常遇到很多模型训练与落地的挑战,本次讲座分享的内容就是过去一段时间,我们在软件和硬件上,取得的一些突破以及积累的相关解决方案。

02

以下是本次 GTC 主题分享的内容概要,也是我们阶段性的最佳实践。

FFRecord

目前网上的开源文件格式,比如 TFRecord 等在不需要随机访问样本的情况下能够获得优秀的性能;但在很多机器学习的场景下,用户训练模型时每一步需要随机采样多个样本。为此,我们专门设计了 FFRecord (Fire Flyer Record) 文件格式,帮助用户更加方便地享受 3FS 高速存储批量读取带来的效率提升。同时我们实现了和 PyTorch 完全兼容的接口,方便用户的迁移和加速。

用 ImageNet 性能测试显示,用 FFRecord 能够比大量小文件读取的 Pytorch dataloader 性能提升近 40%。不仅如此,为了方便用户在萤火集群上的训练,我们构建以 FFRecord 为基础的幻方 AI 数据集仓库。目前数据集仓库里已收纳了 20 多种大规模公开数据集,近 120 多个用户私有数据集。

03

hfai.nn

幻方 AI 对 Pytorch 框架进行了深度优化,结合幻方萤火集群的特点,对一些常用的 AI 算子重新研发,提升效率,进一步提升了模型整体的训练效率。

04

更快。为了让模型计算得更快,我们通过优化 CUDA kernel,融合多运算,优化模型结构等,使得深度学习算子计算更高效。

05

更省。现代模型越来越大,在不改变精度的情况下,我们通过压位等技术,在训练时减少了部分常用函数中间变量的内存,大幅节省训练的内存占用。

haiscale

随着模型规模和数据规模的扩大,越来越多的模型训练都要在多机多卡上进行。因此并行训练中的优化至关重要。Haiscale 是一个轻量级的高性能并行训练工具,集成了幻方 AI 多年的并行训练研发经验,能很轻松地兼容 PyTorch 进行并行训练提速,其包含:haiscale.ddp, haiscale.fsdp, haiscale.pipline 三大套件,它们都以幻方自研的 hfreduce 多机多卡通信方案为底座,进行并行训练的加速。

06

haiprof

haiprof (High-flyer’s AI Profile) 是一个针对 PyTorch 模型的性能分析工具,用户能够在无需修改代码的情况下分析模型性能瓶颈,能随时调用,为整个训练过程做全方位的“CT”。

在任务运行的过程中,haiprof 会收集以下信息:

  • CPU/GPU 利用率、功率、内存占用
  • 用户读写流量、IB 流量
  • 内存带宽、跨 NUMA 带宽
  • forward、backward、optimizer、dataloader 的耗时

haiprof 还支持对 PyTorch 代码进行更深入的 tracing,分析不同函数、算子的时间开销。

自研路由算法

对于影响深度学习训练快慢的因素,人们常常容易忽略网络传输在训练提速中的重要作用。特别是在大规模集群,分布式训练的场景中,网络的拥塞可能直接导致 GPU 算力的失效,就像空有一段段双向 8 车道的快速路,但如果道路规划凌乱,高速路也只能沦为大型停车场。

在实际的应用中,我们便发现网络拥塞无处不在。而自研路由算法,帮助我们突破了传统的 fattree 架构,带我们来到了更加广阔的世界

  1. 这一算法,能够支持我们多台大型 800 口互联,集群算力的提升突破了物理上传统 fattree 的上限;
  2. 支持我们使用同一个网络来支持存储和互联,大大降低了集群搭建的成本,提升了可维护性,增加了稳定性;
  3. 我们能够在原有典型 fattree上,构建其他低速子树,支持其他的异构运算节点,让所有节点都有各自需要的互联能力,提高了平台算力的多样性。

08


本文作者: High-Flyer


您可以转载、不违背作品原意地摘录及引用本技术博客的内容,但必须遵守以下条款: 署名 — 您应当署名原作者,但不得以任何方式暗示幻方为您背书,亦不会对幻方的权利造成任何负面影响。 非商业性使用 — 您不得将本技术博客内容用于商业目的。 禁止演绎 — 如果基于该内容改编、转换、或者再创作,您不得公开或分发被修改内容,该内容仅可供个人使用。