基于 MUSA 的 huggingface 模型分布式训练
2024-05-09
1.引言
Huggingface 起初是一家总部位于纽约的聊天机器人初创服务商,他们本来打算创业做聊天机器人,然后在 github 上开源了一个 Transformers 库,虽然聊天机器人业务没搞起来,但是他们的这个库在机器学习社区迅速大火起来。目前已经共享了超 60 万个预训练模型,13 万个数据集,变成了机器学习界的 github。从huggingface 官网里,可以获取到以下资源:
- Datasets:数据集,以及数据集的下载地址
- Models:各个预训练模型
- course:免费的 nlp 课程,可惜都是英文的
- docs:文档
随着大模型的兴起,许多知名的开源模型(例如 gpt,chatglm,llama,mistral 等)都将预训练好的 model 放到了 huggingface 上,然后通过几行很简单的代码就能调用并进行训练或推理任务。为了方便用户使用,在不同 AI 芯片上快速适配基于 huggingface 模型的分布式训练是至关重要的,因此本文主要介绍如何在摩尔线程 AI 训练芯片 S4000 上快速适配 hugginface 模型和执行分布式训练任务。
2. MUSA 软件栈
这部分简单介绍一下在摩尔线程 GPU 里分布式训练里用到的相关软件栈。MUSA 是摩尔线程公司的统一系统架构, MUSA 软件栈是在摩尔线程 GPU 基础上开发的一系列软件, 可以让摩尔线程 GPU 发挥强大的计算及图形性能。

摩尔线程集合通信库 (MCCL) 可实现针对摩尔线程 GPU 和网络进行性能优化的多 GPU 和多节点通信基元。MCCL 提供了 all-gather、all-reduce、broadcast、reduce、reduce-scatter、point-to-point send 和 receive 等原语,这些原语均经过优化,可通过节点内的 PCIe 和 MTLink 高速互联以及节点间的 InfiniBand 网络实现高带宽和低延迟。 MCCL 支持节点内和跨节点通信。可以实现拓扑的自动检测,计算最佳的路径,最终实现 GPUs 之间的高效传输。

torch_musa 是一个基于 PyTorch 的扩展 Python 包。 通过插件的方式开发 torch_musa,可以让 torch_musa 与 PyTorch 解耦,方便代码维护。 与 PyTorch 结合,用户可以通过 torch_musa 充分利用摩尔线程显卡的强大威力。 此外,torch_musa 还有两个显着的优点:
- torch_musa 可以实现 CUDA 兼容,大大减少了适配新算子的工作量
- torch_musa API 格式与 PyTorch 一致,可以让习惯 PyTorch 的用户平滑迁移到 torch_musa