Skip to content

模型内存估算器

在探索可以在你的机器上使用的潜在模型时,一个非常困难的方面是知道多大的模型能够 适应 你当前的显卡内存(例如将模型加载到 CUDA 上)。

为了帮助解决这个问题,Accelerate 提供了一个通过 accelerate estimate-memory 的 CLI 接口。本教程将引导你使用它,了解预期结果,并在最后链接到托管在 Hub 上的交互式演示,你甚至可以直接在模型仓库上发布这些结果!

目前我们支持搜索可以在 timmtransformers 中使用的模型。

Gradio 示例

以下是与上述内容相关的几个 Gradio 示例。第一个是官方的 Hugging Face 内存估算空间,直接使用了 Accelerate:

一位社区成员扩展了这个想法,使你可以直接过滤模型,并查看在给定 GPU 限制和 LoRA 配置的情况下是否可以运行某个特定的 LLM。要试用它,请参阅 这里 以获取更多详细信息。

命令

使用 accelerate estimate-memory 时,你需要传递要使用的模型名称,可能还需要传递该模型使用的框架(如果无法自动检测到),以及你希望模型加载的数据类型。

例如,以下是如何计算 bert-base-cased 的内存占用量:

bash
accelerate estimate-memory bert-base-cased

这将下载 bert-based-casedconfig.json,在 meta 设备上加载模型,并报告它将占用多少空间:

加载 bert-base-cased 的内存使用情况:

dtypeLargest LayerTotal SizeTraining using Adam
float3284.95 MB418.18 MB1.61 GB
float1642.47 MB206.59 MB826.36 MB
int821.24 MB103.29 MB413.18 MB
int410.62 MB51.65 MB206.59 MB

默认情况下,它将返回所有支持的数据类型(从 int4float32),但如果你对特定的数据类型感兴趣,可以进行过滤。

特定库

如果源库无法自动确定(例如 bert-base-cased 的情况),可以传递一个库名。

bash
accelerate estimate-memory HuggingFaceM4/idefics-80b-instruct --library_name transformers

加载 HuggingFaceM4/idefics-80b-instruct 的内存使用情况:

dtypeLargest LayerTotal SizeTraining using Adam
float323.02 GB297.12 GB1.16 TB
float161.51 GB148.56 GB594.24 GB
int8772.52 MB74.28 GB297.12 GB
int4386.26 MB37.14 GB148.56 GB
bash
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm

加载 timm/resnet50.a1_in1k 的内存使用情况:

dtypeLargest LayerTotal SizeTraining using Adam
float329.0 MB97.7 MB390.78 MB
float164.5 MB48.85 MB195.39 MB
int82.25 MB24.42 MB97.7 MB
int41.12 MB12.21 MB48.85 MB

特定的 dtype

如前所述,虽然我们默认返回 int4float32,但可以使用 float32float16int8int4 中的任何 dtype。

要这样做,请在指定 --dtypes 后传递它们:

bash
accelerate estimate-memory bert-base-cased --dtypes float32 float16

加载 bert-base-cased 的内存使用情况:

dtypeLargest LayerTotal SizeTraining using Adam
float3284.95 MB413.18 MB1.61 GB
float1642.47 MB206.59 MB826.36 MB

使用此计算器的注意事项

此计算器会告诉你加载模型本身所需的内存,包括执行推理所需的内存。

此计算结果与实际值相差在几个百分点之内,因此它能非常准确地反映加载模型所需的内存。例如,加载 bert-base-cased 在 CUDA 上以全精度加载时实际需要 413.68 MB,而计算器估计为 413.18 MB

在执行推理时,根据 EleutherAI 的研究,你可能需要额外增加高达 20% 的内存。我们正在进行研究以找到更准确的估计值,并将在完成后更新此计算器。