大约一年以前,我们 展示[1] 了如何在第三代 英特尔至强可扩展[2] CPU (即 Ice Lake) 集群上分布式训练 Hugging Face transformers 模型。最近,英特尔发布了代号为 Sapphire Rapids 的第四代至强可扩展 CPU,该 CPU 包含了令人兴奋的深度学习加速新指令。
通过本文,你将会学到如何在一个 AWS Sapphire Rapids 集群上加速一个 PyTorch 训练任务。我们会使用 英特尔 oneAPI 集合通信库[3] (oneAPI Collective Communications Library, oneCCL) 来分布式化训练任务,并使用 英特尔 PyTorch 扩展库[4] (Intel Extension for PyTorch,IPEX) 来自动使用新指令进行性能优化。因为这两个库均已集成入 Hugging Face transformers 库,我们能够做到在不修改一行代码的前提下开箱即用地运行我们的示例代码。
(资料图片)
在随后的另一篇文章里,我们还会探讨如何使用 Sapphire Rapids CPU 进行推理及其性能提升。
在英特尔至强 CPU 上训练一个深度学习模型是一个性价比高且可扩展的方案,在使用分布式训练或者在小数据集或中等数据集上微调模型时尤其如此。
至强 CPU 支持一些先进的特性,如 512 位先进矢量扩展 (Advanced Vector Extensions,AVX-512) 以及超线程 (Hyper-Threading) ,这些特性提高了深度学习模型的并行性和效率,使得我们可以在得到更好的硬件资源使用率的同时训练得更快。
另外,一般而言,相比用于训练大型深度学习模型的专门硬件如 GPU 等而言,至强 CPU 更便宜和易得。至强 CPU 还更容易用于其他生产任务,从网络服务到数据库不一而足,这使得它们成为 IT 基础设施的一个万用且灵活的选择。
最后,云用户还可以通过使用 spot 实例的方式进一步降低在至强 CPU 上的训练成本。Spot 实例使用空闲计算资源,因此以折扣价售卖。与按需实例相比,spot 实例提供了高至 90% 的显著的成本节约。最后同样重要的是,CPU spot 实例一般来讲比 GPU 实例更容易获得。
现在,让我们看一下 Sapphire Rapids 架构引入的新指令。
Sapphire Rapids 架构引入了英特尔先进矩阵扩展 (Advanced Matrix Extensions, AMX) 用于加速深度学习工作负载。用户只需安装最新版本的 IPEX 即可受益于新指令,无需更改任何 Hugging Face 代码。
AMX 指令用于加速矩阵乘法,该操作是深度学习批量训练的核心操作。AMX 指令支持 Brain 浮点 (BF16) 和 8 比特整型 (INT8) 数据类型,覆盖不同训练场景的加速需求。
AMX 指令引入了新的 2 维 CPU 寄存器,称作 tile 寄存器。因为这些寄存器在上下文切换时需要保存和恢复,所以需要内核相关支持。在 Linux 上,内核版本需要在 v5.16 及以上方可支持。
现在,让我们看看怎样构建一个 Sapphire Rapids CPU 集群用于分布式训练。
截至本文撰写之时,使用 Sapphire Rapids 服务器的最简单的方式是使用新的亚马逊 EC2 R7iz[5] 实例家族。由于它尚在预览期,你必须 登记注册[6] 以获得访问权限。另外,虚拟机尚未支持 AMX,因此,我们将使用裸金属实例 (r7iz.metal-16xl, 64 vCPU, 512GB RAM) 。
为避免手动设置集群中的每个节点,我们首先建立一个主节点并依此创建一个新的亚马逊机器镜像 (Amazon Machine Image,AMI[7]) ,然后,我们用这个 AMI 启动其他节点。
从网络的角度,我们需要如下设置:
打开 22 端口,用于所有实例上的 ssh 访问创建和调试
配置从主实例 (你启动训练的那个实例) 到所有其他实例 (包含主实例本身) 的免密 SSH 访问。换句话说,主节点的 ssh 公钥必须在所有阶段上被授权
允许集群内的所有网络通信,使得分布式训练可以不受阻碍地运行。AWS 提供了安全组这一安全便捷的方式支持这个功能。我们只需创建一个安全组,确保所有集群内的实例属于同一安全组,并允许同一安全组内的所有网络通信即可,以下是我使用的设置:
让我们开始创建集群的主节点。
我们首先启动一个安装了 Ubuntu 20.04 AMI (ami-07cd3e6c4915b2d18) 并加入了我们之前创建的安全组的 r7iz.metal-16xl实例,用于创建主节点。该 AMI 虽然只包含了 Linux v5.15.0,但是幸运的是英特尔和 AWS 已经为这个内核版本打上了 AMX 支持的补丁。因此,我们不需要升级内核至 v5.16。
一旦实例运行起来后,我们 ssh 登录上它并通过 lscpu命令检查 AMX 是否确实已被支持。你应该会在 flags 部分看到如下内容:
然后,我们开始安装本地依赖以及 Python 依赖。
接着,我们使用 ssh-keygen创建一个新的 ssh 密钥对,命名为 cluster,并保存在缺省位置 (~/.ssh)。
最后,我们用该实例创建一个新的 AMI。
一旦 AMI 准备就绪,我们用它启动另外 3 个 r7iz.16xlarge-metal实例,不要忘了把他们加入之前创建的安全组中。
当这些实例启动的时候,我们 ssh 登录进主节点并完成网络设置。首先,我们编辑位于 ~/.ssh/config的 ssh 配置文件,使其支持从主节点到其他节点的免密连接,这里我们只需使用它们各自的私有 IP 及之前创建的密钥对即可。以下是我的配置文件。
到此为止,我们可以使用 ssh node [1-3]去免密连接任何节点。
在主节点侧,我们创建一个 ~/hosts文件,并填入集群中所有节点的名称,这些名称已在上面的 ssh 配置文件中定义。我们用 localhost代表主节点,因为我们会在该节点启动训练脚本。我的文件如下所示。
集群现已准备就绪,让我们开始训练吧!
在本例中,我们将在 SQUAD[8] 数据集上微调一个用于问答的 DistilBERT[9] 模型。如果你想试试别的示例的话,尽管去做吧。
我们首先冒个烟,启动一个单实例训练任务。请注意如下几个重要的标志变量:
no_cuda确保使用 CPU 进行训练,忽略 GPU
use_ipex使能 IPEX 库,确保 AMX 和 AVX 指令的使用
bf16使能 BF16 训练
不必等到任务完成,我们只运行 1 分钟用于确保所有的依赖已被正常安装。同时,这也给了我们一个单实例训练的基线性能:1 个 epoch 花费大约 26 分钟。供参考,我们测量了同样的任务在一个相当的 Ice Lake 实例 (c6i.16xlarge) 上的性能,基于相同的软件设置,每个 epoch 需要 3 小时 30 分钟。加速比达到 8 倍。我们已经能看到新指令带来的好处!
现在,让我们把训练任务分布式部署到 4 个实例上。一个 r7iz.16xlarge实例有 32 个物理 CPU 核,我们倾向于直接使用物理核而不是虚拟核 (vCPUs) (KMP_HW_SUBSET=1T)。我们决定分配 24 个核用于训练 (OMP_NUM_THREADS) ,2 个核用于集合通信 (CCL_WORKER_COUNT) ,剩下的 6 个核给内核和其他进程使用。这 24 个训练线程分配给 2 个 Python 进程使用 (NUM_PROCESSES_PER_NODE) 。因此,一个 4 节点的集群上共有 8 (NUM_PROCESSES) 个 Python 进程。
现在,我们启动分布式训练任务。
现在,一个 epoch 仅需 7 分 30 秒。
任务如下图所示。图的上半部分是主节点,同时你也可以看到其他 3 个节点每个均有 2 个训练进程在运行。
4 节点的完美线性扩展需要 6 分 30 秒的训练时间 (26 分钟除以 4) 。我们非常接近于这个理想值,这充分展现了该方法很高的扩展性。
如你所见,在一个英特尔至强集群上训练 Hugging Face transformers 模型是一个灵活,可扩展且性价比高的解决方案,特别是在你的数据集和模型是小尺寸或者中等尺寸情况下。
以下列出了一些其他可帮助你起步的资源:
Intel IPEX[10] GitHub 代码仓库
Hugging Face 文档: Efficient training on CPU[11] 及 Efficient training on many CPUs[12]
如你有任何问题或反馈,请通过留言方式告诉我们。
感谢阅读!
英文原文: https://huggingface.co/blog/intel-sapphire-rapids
译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。
头图: 茶叶蛋蛋
[1] Hugging Face 博客文章: 使用英特尔技术加速 PyTorch 分布式微调: https://huggingface.co/blog/accelerating-pytorch
[2] 英特尔® 至强® 可扩展处理器: https://www.intel.cn/content/www/cn/zh/products/details/processors/xeon/scalable.html[3] 英特尔 oneAPI 集合通信库: https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/oneccl.html[4] 英特尔 PyTorch 扩展库: https://github.com/intel/intel-extension-for-pytorch[5] Amazon EC2 R7iz 实例: https://aws.amazon.com/cn/ec2/instance-types/r7iz/?nc1=h_ls[6] 登记注册 Amazon EC2 R7iz 实例 (预览版): https://pages.awscloud.com/R7iz-Preview.html[7] 了解亚马逊机器镜像 (AMI): https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html[8] Hugging Face 平台上的数据集页面: SQUAD: https://huggingface.co/datasets/squad[9] Hugging Face 平台上的模型页面: DistilBERT: https://huggingface.co/distilbert-base-uncased[10] Intel® Extension for PyTorch 的 GitHub 页面: https://github.com/intel/intel-extension-for-pytorch[11] Hugging Face 文档页面: CPU 高效训练: https://huggingface.co/docs/transformers/perf_train_cpu[12]Hugging Face 文档页面: 多 CPU 上的高效训练: https://huggingface.co/docs/transformers/perf_train_cpu_many大约一年以前,我们展示[1]了如何在第三代英特尔至强可扩展[2]CPU(即IceLake)集群上分布式训练HuggingFa...
截至2023年1月19日收盘,佳先股份(430489)报收于6 28元,上涨0 32%,换手率0 26%,成交量2206 36手,成交额137 81万元。
作者:邱伟由张译、张颂文主演的《狂飙》正在央视8套和爱奇艺播出。这是由中央政法委指导的首部以扫黑除...
1、猫和鸟可以同时养,但不适合散养在同一间屋子里或者笼子里,因为猫咪是可以攻击到鸟的,建议分开养在...
春节的脚步越来越近,不少市民在办年货时不忘采购一束鲜花,扮靓家居空间。1月16日,记者到阜城心艺鲜花...
1、1 将两个视频分别拉到轨道1和轨道2上。2、2 点击新建字幕。3、3 用椭圆工具画一个椭圆,位置在需...
之后,江苏省药监局副局长姜伟主持召开先声药业新冠治疗药物SIM0417研究进展专题调度会。1月17日早间,...
《三体》中的申玉菲是剧情刚开始就出现的女性角色,给人的印象也是很深刻的,那么申玉菲是好是坏呢?她...
中新网上海1月16日电日前,上海机场国际客运航班逐步复苏。16日,来自上海机场方面的消息显示,1月底,...
据手机中国了解,有数据机构统计,小米拿下了国内高端细分市场的国产头名。最后其还强调,这说明了国产...
中新网1月15日电日前,美国再发生种族歧视事件。据美联社报道,一名56岁的女子因在印第安纳州布卢明顿市...
北京日报客户端|记者李瑶通讯员张思琦1月14日小年当天,延庆区井庄镇启动“美食过大年”系列活动,即日...
近年来,科学护肤观念深入人心,人们对化妆品内所添加成分的功效及安全性更加关注,“成分党”、“功效...
1月13日13点40分,电源设备板块指数报1794 416点,跌幅达2%,成交33 04亿元,换手率0 55%。板块个股...
英国央行货币政策委员曼恩:居民和企业预计未来几年通胀将降至4%
【来源:确山县气象局】确山县气象台2023年01月12日11时54分发布大雾黄色预警信号:预计未来12小时,我...
不出国门“买全球”,对许多消费者来说并不陌生。如今,消费者购买全球好物的平台已经不局限于跨境电商...
消费板块强势复苏 来长城基金“大消费篮子”看一看
2023年1月10日中亦科技融资净偿还17 97万元,融资余额1300 34万元
2021年无锡融创五一z时代音乐节,AKB48TeamSH演出详情:截止4月14日,无锡融创文旅城官微公布z时代音乐...
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...
在CES2023展会上,游戏笔电及显示器重磅新品层出不穷,作为行业赋能者,京东方携手Acer、ASUS、Dell、HP...
CFi CN讯:二、本次减持计划的主要内容1、减持原因:个人资金需求。2、减持股份来源:公司首次公开发行...
不可以对着人喷。84消毒液是一种以次氯酸钠为主要成分的含氯消毒剂,主要用于物体表面和环境等的消毒。...
“让威马从神坛上跌落的不是外人:脾气最火爆的侯海靖妄图只手遮天;最懂销售的陆斌背锅离开;CEO沈晖酿...
X 关闭
X 关闭