Hugging Face 如何用 CPU 扩展 BERT 推理(上):硬件优化与基准测试
Hugging Face 发布博客,介绍在 CPU 上扩展 BERT 推理的硬件优化方法,基于 AWS c5.metal 实例(Intel Xeon Platinum 8275,48 核/96 线程)测试 PyTorch 1.8.1 与 TensorFlow 2.4.0 的推理表现,开箱即用下 PyTorch 在所有测试配置中均优于 TensorFlow。
Hugging Face 发布博客,介绍在 CPU 上扩展 BERT 推理的硬件优化方法,基于 AWS c5.metal 实例(Intel Xeon Platinum 8275,48 核/96 线程)测试 PyTorch 1.8.1 与 TensorFlow 2.4.0 的推理表现,开箱即用下 PyTorch 在所有测试配置中均优于 TensorFlow。
Hugging Face 发布 Accelerate 库,面向希望保留训练循环控制权的 PyTorch 用户,用统一 API 封装分布式训练(单机或多机多 GPU、TPU)与混合精度所需的样板代码。
推荐理由:原文给出五处代码改动即可跑分布式与混合精度的具体做法,便于对照现有 PyTorch 训练脚本评估迁移成本。
Hugging Face 与 Amazon SageMaker 合作推出经优化的 🤗 Transformers 深度学习容器,并在 SageMaker Python SDK 中新增 HuggingFace estimator,一行代码即可启动训练。
Hugging Face 与 Amazon 宣布战略合作,Hugging Face 将 AWS 作为首选云服务商,并推出 Hugging Face Deep Learning Containers(DLCs),让用户可在 Amazon SageMaker 中训练 Transformer 模型。
社区成员 Maxence Dominici 在 Google Cloud 上部署了基于 DistilBERT base uncased finetuned SST-2 的情感分析 pipeline,用于自动判断 Discord 中客户评论的正负向。
Hugging Face 工程师分享构建和调试神经网络的思考流程,强调第一步应放下机器学习、专注理解数据,包括标签是否平衡、噪声来源和预处理方式。第二步从最简基线做起,如文本分类用 word2vec 或 fastText 嵌入上的逻辑回归,以判断任务难度并建立合理对比。实现后应尝试过拟合 16 个样本的小批量,若无法达到 0 损失则很可能存在实现错误。
Hugging Face Transformers 的 RAG 模型集成 Ray 实现分布式文档检索,每次检索调用相比 torch.distributed 提速 2 倍,并改善了 RAG 分布式微调的可扩展性。
Hugging Face 与 PyTorch / XLA 团队合作,让用户通过相同的 Trainer 接口在 Cloud TPU 上训练和扩展 Transformer 模型。
Hugging Face 在 Transformers v4.2.0 中优化了 TensorFlow 版 BERT、RoBERTa、ELECTRA 和 MPNet,在 GPU V100、序列长度 128 下推理速度比 Google 官方实现快约 10%,比 v4.1.1 快一倍。
OpenAI 将 Kubernetes 集群扩展至 7,500 节点,为 GPT-3、CLIP、DALL·E 等大模型提供可扩展基础设施,同时支持小规模快速迭代研究。
Hugging Face 的 transformers v4.2.0 为 Trainer 加入 DeepSpeed 和 FairScale 的 ZeRO 实验性支持,新增 --sharded_ddp 和 --deepspeed 命令行参数。
推荐理由:作者用 t5-large 与 t5-3b 实测对比 FairScale 和 DeepSpeed 的显存与耗时,可据此判断两种方案的取舍。
Hugging Face 通过优化模型管线、Rust 版 Tokenizers 缓存以及针对硬件的编译优化,为 Accelerated Inference API 客户实现了 100 倍推理提速。前 10 倍来自 Hugging Face 库内置的高效方法,后 10 倍则依赖静态图优化、层融合与量化等 CPU/GPU 特定技术。
Hugging Face 博客记录了将 fairseq 的 WMT19 新闻翻译系统移植到 transformers 的过程,作者 Stas Bekman 在 Sam Shleifer 建议下完成移植。
Hugging Face 发布 PyTorch 扩展 pytorch_block_sparse,其 BlockSparseLinear 可直接替换 torch.nn.Linear,让语言模型更小更快。该库基于 NVIDIA CUTLASS 的块稀疏矩阵乘法,75% 稀疏度下矩阵运算约比稠密快 2 倍、内存占用减少 4 倍,但当前整体性能仍比 cuBLAS 稠密实现慢约 2 倍。
Hugging Face 博客详解 Reformer 模型,它能在不到 8GB 内存下处理长达 50 万 token 的序列,而 bert-base-uncased 仅支持 512 token。Reformer 通过局部自注意力、LSH 自注意力、分块前馈层、可逆残差层和轴向位置编码四项改造降低内存占用,并已集成进 Transformers 库。
OpenAI 宣布将其深度学习框架标准化为 PyTorch。
OpenAI 发布针对块稀疏权重神经网络的高度优化 GPU kernel,按所选稀疏度可比 cuBLAS 或 cuSPARSE 快数个数量级。该 kernel 已被用于文本情感分析和文本、图像生成建模,并取得当时的最优结果。
OpenAI 开源了一个基于 MuJoCo 引擎的高性能 Python 机器人仿真库,该库源自其过去一年的机器人研究。
OpenAI 发布 Roboschool,这是一款用于机器人仿真的开源软件,并已与 OpenAI Gym 集成。
推荐理由:OpenAI 开源机器人仿真软件并接入 Gym,读者可了解其与既有强化学习环境的衔接方式。
OpenAI 发布 Universe,一个用于衡量和训练 AI 通用智能的软件平台,覆盖全球的游戏、网站及其他应用。
推荐理由:OpenAI 发布 Universe 平台,读者可了解其用游戏和网站训练通用智能的定位。
OpenAI 正与 Microsoft 合作,将其大部分大规模实验放到 Azure 上运行。
OpenAI 指出深度学习是一门经验科学,团队基础设施的质量是进展的倍增器。当前开源生态已让任何人都能搭建出色的深度学习基础设施。