Petals:在家中就能运行P2P大语言模型


Petals是一个社区运行的系统:相互依靠人们共享他们的GPU。

Petals 以协作方式运行 Llama 和 BLOOM 等大型语言模型--您只需加载模型的一小部分,然后与提供其他部分服务的人员一起运行推理或微调。

Llama 2 (70B) 的单批推理运行速度高达 6 步/秒,BLOOM-176B 的单批推理运行速度≈ 1 步/秒。这比Offloading快 10 倍,足以构建聊天机器人和其他交互式应用程序。并行推理速度可达数百个 token/秒。

当 GPU 内存不足以容纳整个模型时,Offloading是运行大型 LM 的另一种常用方法:
试想一下,您有一个拥有 80 GB 内存的 A100 GPU,想要用 BLOOM 生成文本,这是一个 70 块的变压器模型,每个块的权重约为 2.5 GB。对于每个标记,卸载会将模型的前 1/3(约 27 个块)从 RAM/SSD 加载到 GPU 内存中,运行一次前向传递,然后释放内存并加载下一个 2/3,以此类推。

事实证明,Petals 比Offloading更快,即使它是通过互联网通信(有可能,服务器离您很远)。这是因为 Petals 只在服务器之间发送 NN 激活(少量数据),而Offloading会将数百 GB 的 NN 权重复制到 GPU VRAM 上,以生成每个新标记。

除了经典的语言模型 API 之外,您还可以使用任何微调和采样方法,通过模型执行自定义路径,或查看其隐藏状态。您将获得 API 的舒适性和 PyTorch 的灵活性。

举例
下面是如何在 GPU 上托管 Stable Beluga 2 的一部分: Linux + Anaconda。

对于英伟达™(NVIDIA®)GPU,请执行以下命令(对于 AMD,请执行以下命令):

conda install pytorch pytorch-cuda=11.7 -c pytorch -c nvidia
pip install git+https://github.com/bigscience-workshop/petals
python -m http://petals.cli.run_server petals-team/StableBeluga2


使用分布式 Llama 2 (70B)、Stable Beluga 2、Falcon、Guanaco-65B 或 BLOOM-176B 生成文本,并根据自己的任务对它们进行微调 :直接从您的台式电脑或 Google Colab 进行:

from transformers import AutoTokenizer
from petals import AutoDistributedModelForCausalLM

# Choose any model available at https://health.petals.dev
model_name = "petals-team/StableBeluga2"

# Connect to a distributed network hosting model layers
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoDistributedModelForCausalLM.from_pretrained(model_name)

# Run the model as if it were on your computer
inputs = tokenizer("A cat sat", return_tensors="pt")["input_ids"]
outputs = model.generate(inputs, max_new_tokens=5)
print(tokenizer.decode(outputs[0]))  # A cat sat on a mat...