0

0

不堆参数、不靠时长,Meta加速ViT训练流程,吞吐量4倍提升

WBOY

WBOY

发布时间:2023-04-09 09:21:07

|

1124人浏览过

|

来源于51CTO.COM

转载

现阶段,视觉 transformer(ViT)模型已经在图像分类、目标检测与分割等各样各样的计算机视觉任务中得到了广泛应用,并可以在视觉表征与识别中实现 SOTA 结果。由于计算机视觉模型的性能往往与参数量和训练时长呈正相关,AI 社区已经实验了越来越大规模的 ViT 模型。

但应看到,随着模型开始超出万亿次浮点运算的规模,该领域已经遇到了一些主要的瓶颈。训练单个模型可能耗费数月,需要数以千块的 GPU,进而增加了加速器需求并导致大规模 ViT 模型将很多从业者「排除在外」。

为了扩展 ViT 模型的使用范围,Meta AI 的研究者已经开发出了更高效的训练方法。非常重要的一点是对训练进行优化以实现最佳的加速器利用。但是,这一过程耗时费力且需要大量的专业知识。为了设置有序的实验,研究者必须从无数可能的优化方案中进行选择:一次训练过程中执行的百万次运算中的任何一个都有可能受到低效率的影响和阻碍。

Meta AI 发现,通过将一系列优化应用到其图像分类代码库 PyCls 中的 ViT 实现,可以提升计算和存储效率。对于使用 PyCIs 训练的 ViT 模型,Meta AI 的方法可以提升训练速度和每加速器吞吐量(TFLOPS)。

下图展示了使用优化代码库 PyCIs 后每芯片(per chip)加速器吞吐量相较于 V100 基准的相对增加,而 A100 优化的加速器吞吐量是 V100 基准的 4.05 倍。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

不堆参数、不靠时长,Meta加速ViT训练流程,吞吐量4倍提升

运行原理

Meta AI 首先对 PyCIs 代码库进行分析以确认低训练效率的潜在来源,最终将注意力放在了对数字格式的选择上。在默认情况下,大多数应用使用 32-bit 单精度浮点格式来表征神经网络值。转换至 16-bit 半精度格式(FP16)可以减少模型的内存占用和执行时间,但往往也会降低准确率。

研究者采取了折中方案,即混合精度。利用它,系统通过单精度格式执行计算以加速训练并减少内存使用,同时通过单精度存储结果以保持准确率。他们没有手动地将部分网络转换至半精度,而是实验了不同模式的自动混合精度训练,这样可以在数字格式之间自动切换。更高级模式的自动混合精度主要依赖半精度运算和模型权重。研究者采用的平衡设置既能大幅度加速训练,同时也不牺牲准确率。

为了使流程更加高效,研究者充分利用了 FairScale 库中的完全分片数据并行(Fully Sharder Data Parallel, FSDP)训练算法,它在 GPU 上对参数、梯度和优化器状态进行分片。通过 FSDP 算法,研究者可以使用更少的 GPU 构建更大量级的模型。此外,研究者还使用了 MTA 优化器、一个池化的 ViT 分类器和一个 batch-second 输入张量布局来跳过冗余转置运算。

下图 X 轴为可能的优化,Y 轴为采用 ViT-H/16 训练时加速器吞吐量相较于分布式数据并行(DDP)基准的相对增加。

AI发型设计
AI发型设计

虚拟发型试穿工具和发型模拟器

下载

不堆参数、不靠时长,Meta加速ViT训练流程,吞吐量4倍提升

研究者在总 patch 大小为 560 时实现了 1.51 倍的加速器吞吐量提升,以每个加速器芯片上每秒执行的浮点运算数量衡量。通过将图像大小从 224 像素增加至 256 像素,他们可以将吞吐量提升至 1.86 倍。但是,改变图像大小意味着超参数的变化,这会对模型的准确率造成影响。在完全 FP16 模式下训练时,相对吞吐量增加至 2.18 倍。尽管有时会降低准确率,但在实验中准确率降低少于 10%。

下图 Y 轴为 epoch 时间,在整个 ImageNet-1K 数据集上一次训练的持续时间。这里专注于现有配置的实际训练时间,这些配置通常使用 224 像素的图像大小。

不堆参数、不靠时长,Meta加速ViT训练流程,吞吐量4倍提升

Meta AI 的研究者使用优化方案,将 epoch 时间(在整个 ImageNet-1K 数据集上一次训练的持续时间)从 0.65 小时减少到 0.43 小时。

下图 X 轴表示特定配置中 A100 GPU 加速器芯片的数量,Y 轴表示每芯片 TFLOPS 的绝对吞吐量。

不堆参数、不靠时长,Meta加速ViT训练流程,吞吐量4倍提升

该研究还讨论了不同 GPU 配置的影响。在每种情况下,系统都实现了比分布式数据并行(DDP)基线水平更高的吞吐量。随着芯片数量的增加,由于设备间通信的开销,我们可以观察到吞吐量略有下降。然而,即使用 64 块 GPU,Meta 的系统也比 DDP 基准快 1.83 倍。

新研究的意义

将 ViT 训练中可实现的吞吐量翻倍可以有效让训练集群规模翻倍,提高加速器利用率直接减少了 AI 模型的碳排放。由于最近大模型的发展带来了更大模型和更长训练时间的趋势,这种优化有望帮助研究领域进一步推动最先进的技术,缩短周转时间并提高生产力。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

325

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

232

2023.10.07

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

390

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

44

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

89

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

25

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.2万人学习

Go 教程
Go 教程

共32课时 | 3.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号