模型内存估算器
在探索可以在你的机器上使用的潜在模型时,一个非常困难的方面是知道多大的模型能够 适应 你当前的显卡内存(例如将模型加载到 CUDA 上)。
为了帮助解决这个问题,Accelerate 提供了一个通过 accelerate estimate-memory
的 CLI 接口。本教程将引导你使用它,了解预期结果,并在最后链接到托管在 Hub 上的交互式演示,你甚至可以直接在模型仓库上发布这些结果!
目前我们支持搜索可以在 timm
和 transformers
中使用的模型。
Gradio 示例
以下是与上述内容相关的几个 Gradio 示例。第一个是官方的 Hugging Face 内存估算空间,直接使用了 Accelerate:
一位社区成员扩展了这个想法,使你可以直接过滤模型,并查看在给定 GPU 限制和 LoRA 配置的情况下是否可以运行某个特定的 LLM。要试用它,请参阅 这里 以获取更多详细信息。
命令
使用 accelerate estimate-memory
时,你需要传递要使用的模型名称,可能还需要传递该模型使用的框架(如果无法自动检测到),以及你希望模型加载的数据类型。
例如,以下是如何计算 bert-base-cased
的内存占用量:
accelerate estimate-memory bert-base-cased
这将下载 bert-based-cased
的 config.json
,在 meta
设备上加载模型,并报告它将占用多少空间:
加载 bert-base-cased
的内存使用情况:
dtype | Largest Layer | Total Size | Training using Adam |
---|---|---|---|
float32 | 84.95 MB | 418.18 MB | 1.61 GB |
float16 | 42.47 MB | 206.59 MB | 826.36 MB |
int8 | 21.24 MB | 103.29 MB | 413.18 MB |
int4 | 10.62 MB | 51.65 MB | 206.59 MB |
默认情况下,它将返回所有支持的数据类型(从 int4
到 float32
),但如果你对特定的数据类型感兴趣,可以进行过滤。
特定库
如果源库无法自动确定(例如 bert-base-cased
的情况),可以传递一个库名。
accelerate estimate-memory HuggingFaceM4/idefics-80b-instruct --library_name transformers
加载 HuggingFaceM4/idefics-80b-instruct
的内存使用情况:
dtype | Largest Layer | Total Size | Training using Adam |
---|---|---|---|
float32 | 3.02 GB | 297.12 GB | 1.16 TB |
float16 | 1.51 GB | 148.56 GB | 594.24 GB |
int8 | 772.52 MB | 74.28 GB | 297.12 GB |
int4 | 386.26 MB | 37.14 GB | 148.56 GB |
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm
加载 timm/resnet50.a1_in1k
的内存使用情况:
dtype | Largest Layer | Total Size | Training using Adam |
---|---|---|---|
float32 | 9.0 MB | 97.7 MB | 390.78 MB |
float16 | 4.5 MB | 48.85 MB | 195.39 MB |
int8 | 2.25 MB | 24.42 MB | 97.7 MB |
int4 | 1.12 MB | 12.21 MB | 48.85 MB |
特定的 dtype
如前所述,虽然我们默认返回 int4
到 float32
,但可以使用 float32
、float16
、int8
和 int4
中的任何 dtype。
要这样做,请在指定 --dtypes
后传递它们:
accelerate estimate-memory bert-base-cased --dtypes float32 float16
加载 bert-base-cased
的内存使用情况:
dtype | Largest Layer | Total Size | Training using Adam |
---|---|---|---|
float32 | 84.95 MB | 413.18 MB | 1.61 GB |
float16 | 42.47 MB | 206.59 MB | 826.36 MB |
使用此计算器的注意事项
此计算器会告诉你加载模型本身所需的内存,不包括执行推理所需的内存。
此计算结果与实际值相差在几个百分点之内,因此它能非常准确地反映加载模型所需的内存。例如,加载 bert-base-cased
在 CUDA 上以全精度加载时实际需要 413.68 MB
,而计算器估计为 413.18 MB
。
在执行推理时,根据 EleutherAI 的研究,你可能需要额外增加高达 20% 的内存。我们正在进行研究以找到更准确的估计值,并将在完成后更新此计算器。