算力焦虑的终极大杀器 —— 分布式训练大模型(一)

1a97bd73d6f9f5284f47e59cce60121f.gif

前言

随着大模型越来越庞大,LLaMA 2 (70B), Guanaco-65B, BLOOM-176B,这些模型的训练要求以远远超过单机可承受的范围。

本篇我们介绍一种新技术 「petals」,不同于之前的联邦学习或是传统分布式训练,它能将模型拆分到更小的颗粒度,每个节点仅下载一小片神经网络并行计算,大大加速了训练和推理速度,再也不用羡慕 H100*8 了。

71e0de78c19ba735104f90c0dee45f30.png

另外近期自从遭遇联想售后修坏了3090的主机cpu和主板,无良物业又以莫须有的噪声迁了2080ti之后,对我的私有算力池造成了很大的干扰。集中式的训练方式虽然高效便捷,但鸡蛋放一个篮子里,风险过于集中,若能将各个朋友的闲置算力汇总起来共同搭建私有算力池,则大家再也不用担心算力不足了。

6cfe7f66520b53e58438d54d0b5a4526.png

如同一切的恐惧来自于火力不足,一切的担忧来自于算力不足。

技术原理

Petals 采用类似 BitTorrent 方式,每次加载模型的一小部分,并加入其他人的算力池来继续推理或是微调。对于LLaMA 2 (70B) 可以获得十倍的推理加速,并行化处理更是可以达到每条数百 tokens。通过 pytorch 的 api 可以方便地对模型微调、采样、自定义或是查看神经网络的状态值。

https://github.com/bigscience-workshop/petals

3dea20ce587eb1b51c6a9d6e47fb2604.png

更详细的细节,可以在文末链接中下载相关的论文:

c2577aafd2de27814e9bf9bc36857daa.png

应用状态

服务器端

我们可以加入公共池或是建立自己的私有池,先看一下公有池的状态:

https://health.petals.dev/
ad459e3151e2227895a6b358dcfaec37.png

可以看到有几个 LLaMA 2 (70B) 模型正在运行中,有好几个人共享了自己的算力,绿色圆点则是他们各自提供模型推理的标记点。

客户端

我们可以实际测试一下 LLaMA 2 chat 实际生成回复的速度,每秒1个token左右,中文的相对较慢,英文可以达到每秒5-6个token。要知道这是70b的大模型,单卡几乎很难胜任了。

https://chat.petals.dev/
b57875ba1567258d495dcd37f8283c39.png

公有算力池

官方很贴心的提供了一个 Colab ,我们体验一下如何加入公有池,有需要也可以在本机共享 GPU。

https://colab.research.google.com/drive/1uCphNY7gfAUkdDrTx21dZZwCOUDCMPw8?usp=sharing

首先是安装依赖

pip install petals

然后来加载一个 LLaMA 2 70B 的 chat 大模型(登录 huggingface 获取 token)

import torch
from transformers import AutoTokenizer
from petals import AutoDistributedModelForCausalLM

model_name = "meta-llama/Llama-2-70b-chat-hf" # stabilityai/StableBeluga2
# You could also use "meta-llama/Llama-2-70b-chat-hf" or any other supported model from 🤗 Model Hub

tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False, add_bos_token=False)
model = AutoDistributedModelForCausalLM.from_pretrained(model_name)
model = model.cuda()
b5660d9f16bd462e7b50d5325c2edbde.png

默认分配的是 T4 16G的 GPU,正常情况单卡肯定扛不住......

8b1160f4f0b38f32052e4fcf079c899b.png

测试一下提问,可以看到分别经过 4 台设备完成推理。

be6e9ae0a2e4cfb47022a3b0268a8855.png

对应节点的后缀可以在服务器端对应匹配到。

a5ed35d32a571152053eb811153b839c.png

贡献算力

最后可以把自己的 GPU 贡献到池中,众人拾柴火焰高,其中 YOUR_TOKEN_HERE 可以通过 https://huggingface.co/settings/tokens 获取,public_name 则可以起一个别名,便于在服务端找到你的机器。

python -m petals.cli.run_server meta-llama/Llama-2-70b-chat-hf --token YOUR_TOKEN_HERE --public_name bluishfish
adacc6234fa74b3dc403d4e0f96d73c3.png

一切顺利的话,就能在公共页面上查看到你的设备了。

部署到算力池中的模型需要遵守一系列的约定,若要运行自定义的模型,则要根据接口来修改参数

https://github.com/bigscience-workshop/petals/wiki/Run-a-custom-model-with-Petals

源码下载

89c972b6120f7a5dd22126bddddadcd2.png

本期相关文件资料,可在公众号“深度觉醒”,后台回复:“petals01”,获取下载链接。

下一篇预告

这一篇主要介绍了一下 petals 如何分布式加载超大参数的模型、部署推理和贡献公有算力,下一篇我们尝试构建一个私有池,将各个分散闲置的算力都整合起来,敬请期待。

4b3994db9302901bb2f673bfe9957ad1.gif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluishfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值