Accelerate documentation
モデルメモリ推定ツール
モデルメモリ推定ツール
自分のマシンで利用可能なモデルを探索する際、非常に難しい点の一つは、現在のデバイス(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 を使用した学習 |
|---|---|---|---|
| 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 |
デフォルトではサポートされているすべてのdtype(int4からfloat32まで)が返されますが、特定のdtypeに関心がある場合は、それらをフィルタリングできます。
特定のライブラリ
ソースライブラリを自動的に特定できない場合(bert-base-casedのように特定できる場合を除く)、ライブラリ名を渡すことができます。
accelerate estimate-memory HuggingFaceM4/idefics-80b-instruct --library_name transformers
HuggingFaceM4/idefics-80b-instruct を読み込む場合のメモリ使用量:
| dtype | 最大レイヤー | 総サイズ | 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 | 最大レイヤー | 総サイズ | 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 | 最大レイヤー | 総サイズ | 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%の追加コストが発生すると予想されます。これらの値のより正確な見積もりを特定するための研究を進めており、完了次第、この計算ツールを更新します。
Update on GitHub