Hivemind:基于 PyTorch 的去中心化深度学习
Hivemind 是一个用于通过互联网进行去中心化的基于 PyTorch 的深度学习库。其预期用途是通过来自不同大学、公司和志愿者的数百台计算机来训练一个大型模型。
主要功能
- 无主节点的分布式训练:分布式哈希表允许在去中心化网络中连接计算机。
- 容错反向传播:即使某些节点无响应或响应时间过长,前向和后向传递也能成功。
- 去中心化参数平均:不需要在整个网络中同步,逐步聚合多名工作者的更新(论文)。
- 训练任意大小的神经网络:其层的部分分布在参与者之间,使用去中心化专家混合模型(论文)。
欲了解更多关于该库的思想,请参见下文我们论文的完整列表。
示例用例
本部分列出了利用 Hivemind 进行去中心化训练的项目。如果您已成功训练了一个模型,或者借助我们的库创建了一个下游仓库,请随时提交 pull 请求将您的项目添加到此列表中。
- Petals(网页、代码)——一个用于推理和微调 100B+ 语言模型的去中心化平台。
- Training Transformers Together(网页、代码)—— NeurIPS 2021 演示通过协作训练文本到图像的 Transformer 模型。
- CALM(网页、代码)——在阿拉伯语数据集组合上训练的掩码语言模型。
- sahajBERT(博客文章、代码)——为孟加拉语协作预训练的 ALBERT-xlarge 模型。
- PyTorch Lightning Integration(文档)。集成到 PyTorch Lightning 中允许适应在网络速度较慢且对等节点不可靠的情况下进行训练。
安装
在安装前,确保您的环境具有 Python 3.8 以上版本和 PyTorch 1.9.0 或更新版本。它们可以原生安装,也可以通过 Anaconda 安装。
您可以使用 pip 获取最新版本,或者从源代码构建 Hivemind。
使用 pip 安装
如果您的 Python 和 PyTorch 版本满足要求,您可以从 pip 安装 Hivemind:
pip install hivemind
此外,如果您希望在数据传输期间使用 bitsandbytes 提供的块级 8 位压缩,可以使用 pip install hivemind[bitsandbytes]
安装。安装后,您可以在 hivemind.compression 中使用 BlockwiseQuantization
类。
从源代码安装
要从源代码安装 Hivemind,只需运行以下命令:
git clone https://github.com/learning-at-home/hivemind.git
cd hivemind
pip install .
如果您想验证安装是否正常工作,可以使用 pip install .[dev]
进行安装。然后,您可以使用 pytest tests/
运行测试。
默认情况下,Hivemind 使用预编译的 go-libp2p-daemon 库的二进制文件。如果您遇到兼容性问题或希望自行构建二进制文件,可以运行 pip install . --global-option="--buildgo"
重新编译。在运行编译之前,请确保您的计算机具有最近版本的 Go 工具链(支持 1.15 或 1.16)。
系统要求
- Linux 是 Hivemind 的默认开发和测试操作系统。我们推荐使用 Ubuntu 18.04+(64 位),但其他 64 位发行版也应该能正常工作。不推荐使用遗留的 32 位系统。
- macOS 部分支持。如果您有问题,可以使用 Docker 运行 Hivemind。我们推荐使用我们的 Docker 镜像。
- Windows 10+(实验性) 可以使用 WSL 运行 Hivemind。您可以按照 NVIDIA 的指南 的第 1-3 部分配置 WSL 以使用 GPU。之后,您可以按照上面的说明使用 pip 或从源代码安装。
文档
- 快速入门教程 演示了安装和使用多个节点训练简单神经网络的过程。
- examples/albert 包含协作训练 Transformer 掩码语言模型的入门包和说明。
- 专家混合模型教程 介绍了去中心化专家混合模型层的用法。
- API 参考和其他教程可在 learning-at-home.readthedocs.io 获取。
如果您对安装和使用 Hivemind 有任何疑问,请随时在我们的 Discord 聊天室 提问或提交 issue。
贡献
Hivemind 目前处于积极开发阶段,我们欢迎所有贡献。任何形式的贡献,从修复 bug 和改进文档到全新的功能,都很欢迎。
如果您想对 Hivemind 做出贡献,但不知道从哪里开始,请查看未解决的 issues。如果您想讨论新功能或报告可能的 bug,请新开一个 issue 或加入我们的聊天室。bug 修复总是受欢迎的,但新功能最好事先与维护人员讨论。
如果您想开始贡献 Hivemind 的源代码,请先参见 贡献指南。了解更多其他贡献方式,请阅读我们 的指南。
引用
如果您发现 Hivemind 或其基础算法对您的研究有用,请引用以下来源:
@misc{hivemind,
title = {{H}ivemind: a {L}ibrary for {D}ecentralized {D}eep {L}earning},
author = {Learning{@}home team},
year = 2020,
howpublished = {\url{https://github.com/learning-at-home/hivemind}}
}
此外,您还可以引用这篇论文,它激发了该库的创建(Hivemind 的原型实现可在 mryab/learning-at-home 获取):
@inproceedings{ryabinin2020crowdsourced,
title = {Towards Crowdsourced Training of Large Neural Networks using Decentralized Mixture-of-Experts},
author = {Ryabinin, Max and Gusev, Anton},
year = 2020,
booktitle = {Advances in Neural Information Processing Systems},
volume = 33,
url = {https://proceedings.neurips.cc/paper/2020/file/25ddc0f8c9d3e22e03d3076f98d83cb2-Paper.pdf}
}
更多发表的论文
"Moshpit SGD: Communication-Efficient Decentralized Training on Heterogeneous Unreliable Devices"
@inproceedings{ryabinin2021moshpit,
title = {Moshpit SGD: Communication-Efficient Decentralized Training on Heterogeneous Unreliable Devices},
author = {Ryabinin, Max and Gorbunov, Eduard and Plokhotnyuk, Vsevolod and Pekhimenko, Gennady},
year = 2021,
booktitle = {Advances in Neural Information Processing Systems},
volume = 34,
url = {https://proceedings.neurips.cc/paper/2021/file/97275a23ca44226c9964043c8462be96-Paper.pdf}
}
"Distributed Deep Learning in Open Collaborations"
@inproceedings{diskin2021distributed,
title = {Distributed Deep Learning In Open Collaborations},
author = {Michael Diskin and Alexey Bukhtiyarov and Max Ryabinin and Lucile Saulnier and Quentin Lhoest and Anton Sinitsin and Dmitry Popov and Dmitriy Pyrkin and Maxim Kashirin and Alexander Borzunov and Albert Villanova del Moral and Denis Mazur and Ilia Kobelev and Yacine Jernite and Thomas Wolf and Gennady Pekhimenko},
year = 2021,
booktitle = {Advances in Neural Information Processing Systems},
url = {https://openreview.net/forum?id=FYHktcK-7v}
}
"Secure Distributed Training at Scale"
@inproceedings{gorbunov2022secure,
title = {Secure Distributed Training at Scale},
author = {Gorbunov, Eduard and Borzunov, Alexander and Diskin, Michael and Ryabinin, Max},
year = 2022,
month = {17--23 Jul},
booktitle = {Proceedings of the 39th International Conference on Machine Learning},
series = {Proceedings of Machine Learning Research},
volume = 162,
url = {https://proceedings.mlr.press/v162/gorbunov22a.html}
}
"Training Transformers Together"
@misc{borzunov2022training,
title = {Training Transformers Together},
author = {Alexander Borzunov and Max Ryabinin and Tim Dettmers and Quentin Lhoest and Lucile Saulnier and Michael Diskin and Yacine Jernite and Thomas Wolf},
year = 2022,
eprint = {2207.03481},
archiveprefix = {arXiv},
primaryclass = {cs.LG}
}
我们还维护了一个相关项目和致谢列表。