Accelerate documentation

モデルメモリ推定ツール

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

モデルメモリ推定ツール

自分のマシンで利用可能なモデルを探索する際、非常に難しい点の一つは、現在のデバイス(CUDAやXPUにモデルをロードするなど)のメモリに、どのくらいのサイズのモデルが収まるのかを把握することです。

この問題を緩和するために、Accelerate には accelerate estimate-memory を通じた CLI インターフェースが用意されています。本チュートリアルでは、その使用方法や期待できる結果について説明し、最後に Hub 上でホストされているインタラクティブなデモへのリンクを掲載します。このデモでは、結果をモデルのリポジトリに直接投稿することもできます。

現在、timmおよびtransformersで使用可能なモデルの検索に対応しています。

このAPIはモデルをmetaデバイスにメモリへロードするため、モデルの完全な重みをダウンロードしてメモリにロードする必要はありません。そのため、CPUが処理できるかどうかを気にすることなく、80億パラメータ(それ以上)のモデルを測定しても問題ありません。

Gradio デモ

以下は、上記で説明した内容に関連するいくつかのgradioデモです。最初は、Accelerateを直接使用しているHugging Face公式のメモリ推定スペースです:

コミュニティメンバーがこのアイデアをさらに発展させ、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最大レイヤー総サイズ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

デフォルトではサポートされているすべてのdtype(int4からfloat32まで)が返されますが、特定のdtypeに関心がある場合は、それらをフィルタリングできます。

特定のライブラリ

ソースライブラリを自動的に特定できない場合(bert-base-casedのように特定できる場合を除く)、ライブラリ名を渡すことができます。

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

HuggingFaceM4/idefics-80b-instruct を読み込む場合のメモリ使用量:

dtype最大レイヤー総サイズ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
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm

timm/resnet50.a1_in1k を読み込む際のメモリ使用量:

dtype最大レイヤー総サイズ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

前述したように、デフォルトではint4からfloat32までを返しますが、float32、float16、int8、int4のいずれかのdtypeを使用できます。

そのためには、--dtypesを指定した後にそれらを渡します。

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

bert-base-casedの読み込み時のメモリ使用量:

dtype最大レイヤー総サイズ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%の追加コストが発生すると予想されます。これらの値のより正確な見積もりを特定するための研究を進めており、完了次第、この計算ツールを更新します。

Update on GitHub