找出运行LLM模型的一般规格

问题描述 投票:0回答:2

我有三个问题:

鉴于 LLM 参数的数量(以十亿为单位),您如何计算出运行模型需要多少 GPU RAM?

如果您有足够的 CPU-RAM(即没有 GPU),您可以运行模型,即使它很慢

你可以在混合 GPU-RAM 和 CPU-RAM 中运行 LLM 模型(如 h2ogpt、open-assistant)吗?

deep-learning artificial-intelligence gpt-3 large-language-model
2个回答
4
投票

多少显存?

推理通常以 float16 运行,这意味着每个参数 2 个字节。 对于 7B 参数模型,您需要大约 14GB 的 RAM 才能以 float16 精度运行它。通常训练/微调是在 float16 或 float32 中完成的。在 float16 中,推理通常可以立即正常运行。在某些情况下,模型可以量化并以 int8 或更小的形式高效运行。

假设有足够的 RAM,你可以在 CPU 上运行模型吗?

通常是的,但取决于模型和库。有些层可能没有针对 CPU 实现。

可以在CPU/GPU混合模式下运行吗?

许多库现在支持在 CPU 上运行某些层,在 GPU 上运行其他层。例如,Huggingface 转换器库支持将图层自动映射到您的所有设备,这意味着它将尝试最大限度地填充您的 GPU,并将其余部分卸载到您的 CPU。为此,在加载模型时将 device_map 设置为 auto。

from transformers import AutoModelForCausalLM, AutoTokenizer   
tokenizer = AutoTokenizer.from_pretrained("OpenAssistant/stablelm-7b-sft-v7-epoch-3")
model = AutoModelForCausalLM.from_pretrained("OpenAssistant/stablelm-7b-sft-v7-epoch-3",
                                             device_map="auto")

0
投票

如何计算所需的 RAM 量?我假设你的意思只是推理,没有训练。

论文“Reducing Activation Recomputation in Large Transformer Models”提供了有关计算 Transformer 层大小的良好信息。

批量大小:b 序列长度:s 层数:l 注意头:a 隐藏尺寸:h 精度字节:p

每层

激活 = sbh*(34 +((5as)/h)) 该论文以 16 位精度进行了计算。 上面是以字节为单位的,所以如果我们除以 2,我们可以稍后乘以后面使用的精度的字节数。

激活 = l * (5/2)abs^2 + 17bhs #除以 2 并简化

总计 = p *(模型参数 + 激活)

让我们以 llama2 7b 为例:

num_params = 7*10^9
p = 32 #precision
b = 1 #batchsize 
s = 2048 #sequence length
l = 32 #layers
a = 32 #attention heads
h = 4096 #hidden dimension

activations => 10,880,024,576
p *(activations + params) => about 66 GB

请注意,您可以大幅减少量化所需的内存。 通过位量化,您可以将其降至 8GB 多一点。

我希望这有帮助,并且我没有错过任何重要的事情。

© www.soinside.com 2019 - 2024. All rights reserved.