写点什么

单个 GPU 可训练数十亿参数模型:异构深度学习训练技术 ZeRO-Offload 做到了

2021 年 2 月 03 日

单个GPU可训练数十亿参数模型:异构深度学习训练技术ZeRO-Offload做到了

近日,微软和加州大学默塞德分校联合推出了一种新颖的异构深度学习训练技术 ZeRO-Offload,这是基于 Zero Redundancy Optimizer (ZeRO 是微软在 2020 年 2 月提出的一种万亿级模型参数训练方法) 构建的。该技术可在单个 GPU 上训练数十亿个参数模型。



图片来源:https://arxiv.org/pdf/2101.06840.pdf


技术发展至今,我们正在迈入一个高度依赖深度学习(DL)模型的技术时代。随着这些模型规模的成倍增加,训练这些模型的成本也变得非常昂贵。 由于训练这些大规模模型需要最先进的系统技术,这就使得这类大规模模型的训练受到了一定的限制。仅有为数不多的 AI 研究人员和机构拥有资源​​来训练这些包含十亿多个参数的、规模庞大的深度学习模型。例如,要训练 100 亿个参数模型,就需要一个 DGX-2 等效节点,该节点需要具有 19 张 NVIDIA V100 卡,成本超过 10 万美元,这超出了许多数据科学家甚至许多学术机构的承受范围。


为了增加训练大规模模型的可能性,加利福尼亚大学、默塞德大学和微软的一组研究人员联合开发了 ZeRO-Offload。这项新的异构深度学习技术可帮助数据科学家在单个 GPU 上训练数十亿个参数模型,而无需进行模型重构。它是一款具有高计算效率和近似线性扩展性的 GPU-CPU 混合深度学习训练技术。


在训练大规模模型时面临的挑战包括模型状态,即参数、梯度、优化器状态,​​以及缺乏有关利用 CPU 计算的研究。许多研究人员已经尝试使用异构深度学习训练来解决这些问题,以减少 GPU 内存需求,但这些办法都是针对基于小型 CNN 模型的内存激活问题。


传统的数据并行性通常是用于将深度学习训练扩展到多个 GPU 的社区标准。尽管如此,它仍然需要数据和计算再现,这就导致了传统数据并行不适用于深度学习模型的异构训练。另一方面,ZeRO-Offload 可以同时利用 CPU 和 GPU 内存,从而高效地进行训练。ZeRO-Offload 还可以在 CPU 内存上维护优化器状态的单个副本,而与数据并行度无关,这可以实现多达 128 个 GPU 的可伸缩性。


ZeRO-offload 是基于三个原则设计的:效率、可伸缩性和可用性。研究人员已经确定了 CPU 和 GPU 设备之间独特的数据分区和最佳计算策略。该方法涉及到的流程包括将梯度、优化器状态和优化器计算分散到 CPU,保留参数以及在 GPU 上保持向前和向后计算。研究人员观察到,在计算条件有限的情况下,可训练的模型大小增加了十倍,从而使单个 NVIDIA V100GPU 能够以 40 TFLOPS 的速度训练 130 亿个参数。



图片来源:https://arxiv.org/pdf/2101.06840.pdf


ZeRO-Offload 作为开源 PyTorch 库 DeepSpeed 一部分,可在 Github 上获取。只需更改几行代码,即可轻松将其添加到现有的训练管道中。ZeRO-Offload 提高了计算和存储效率,并且易于使用。这些功能甚至能让使用单个 GPU 的研究人员和数据科学家也可以进行大规模的模型训练。


论文地址:https://arxiv.org/pdf/2101.06840.pdf


DeepSpeed 项目地址:https://github.com/microsoft/DeepSpeed


原文链接:https://www.marktechpost.com/2021/02/01/microsoft-and-the-university-of-california-merced-introduces-zero-offload-a-novel-heterogeneous-deeplearning-training-technology-to-train-multi-billion-parameter-models-on-a-single-gpu/

2021 年 2 月 03 日 15:131064

评论

发布
暂无评论
发现更多内容

Arthas安装及基本用法

编程随想曲

Java

学习来应对创业的未知

Neco.W

创业 重新理解创业

韦小宝真的幸福吗 | Random Forest

张利东

Python 学习

InfoQ写作平台首秀,来个自我介绍

nuhcoad

个人感想

死磕Java并发编程(7):读写锁 ReentrantReadWriteLock 源码解析

七哥爱编程

Java并发 读写锁 ReentrantReadWriteLock

“我代码写完了,QA可以测了。”

蔡建斌

Scrum 敏捷 质量管理 测试

我愿沉迷于学习,无法自拔(一)

孙瑜

深度思考 个人成长

下一代存储NVMe over Fabrics

HU

消息队列Kafka - acks参数

Java收录阁

kafka

从数据闭环谈微服务拆分

松花皮蛋me

微服务架构 微服务拆分 微服务冶理

MySQL的死锁系列- 锁的类型以及加锁原理

程序员历小冰

MySQL

阿里巴巴Java开发手册泰山版解读

Bruce Duan

南丁格尔科普

Sicolas Flamel

经济大萧条对我的启示

Neco.W

创业 自我管理 职场 自我提升

你真的理解 Java 的基础数据类型吗

Rayjun

Java

说出来就不灵啦

伯薇

糊涂 活在当下 享受状态 生活状态 观察者

Java并发编程系列——锁

孙苏勇

Java Java并发 并发编程 多线程

使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源

mzlogin

CDN Jekyll GitHub Pages 个人博客

如何写作一本书(2):前言与正文

英子编辑

技术 写作

神经网络的激活函数为什么要使用非线性函数

王坤祥

神经网络 激活函数

浅析 Cocoapods-Packager 实现

Edmond

ruby ios CocoaPods binary packager

多云的一点思考

HU

怎样算是一个好的开发者?

水滴

开发者

MySQL中order by语句的实现原理以及优化手段

天堂

Java MySQL 性能优化

Day 47|Week 07-5 曾国藩家书|问学篇-学问何处何时都可做

熊小北同学

Netty 源码解析(四): Netty 的 ChannelPipeline

猿灯塔

把成功过成自己的生活

子铭

成功学 生活状态

和邓小平、基辛格“谈笑风生”的世界第一女记者:奥琳亚娜·法拉奇

赵新龙

记者 编辑 采访 法拉奇

DDD 实践手册(2. 实现分层架构)

Joshua

设计模式 领域驱动设计 DDD 系统架构 分层架构

为什么正在使用的Java版本跟环境变量的版本不一致

阡陌r

Java 踩坑

如何优雅滴在手机上跑Python代码

王坤祥

Python 移动应用 手机编程

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

单个GPU可训练数十亿参数模型:异构深度学习训练技术ZeRO-Offload做到了-InfoQ