Accelerate 文件
模型記憶體估算器
並獲得增強的文件體驗
開始使用
模型記憶體估算器
在探索潛在模型時,一個非常困難的方面是瞭解多大的模型才能*裝入*您當前顯示卡(例如將模型載入到 CUDA 上)的記憶體中。
為了幫助緩解這個問題,Accelerate 透過 `accelerate estimate-memory` 提供了一個 CLI 介面。本教程將引導您瞭解如何使用它,預期結果,並在最後連結到託管在 Hub 上的互動式演示,該演示甚至可以讓您將結果直接釋出在模型倉庫中!
目前我們支援搜尋可在 `timm` 和 `transformers` 中使用的模型。
此 API 會將模型載入到 `meta` 裝置上,因此我們實際上並沒有下載和載入模型的完整權重到記憶體中,也不需要這樣做。因此,測量 80 億引數(或更多)的模型是完全可以的,而不必擔心您的 CPU 是否能處理!
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` 的記憶體使用情況
資料型別 | 最大層 | 總大小 | 使用 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` 的記憶體使用情況
資料型別 | 最大層 | 總大小 | 使用 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` 的記憶體使用情況
資料型別 | 最大層 | 總大小 | 使用 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 |
特定資料型別
如前所述,雖然我們預設返回從 `int4` 到 `float32` 的資料型別,但可以使用 `float32`、`float16`、`int8` 和 `int4` 中的任何一種。
要這樣做,只需在指定 `--dtypes` 後傳入它們即可。
accelerate estimate-memory bert-base-cased --dtypes float32 float16
載入 `bert-base-cased` 的記憶體使用情況
資料型別 | 最大層 | 總大小 | 使用 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% 的記憶體。我們將進行研究以找到對這些值更準確的估算,並在完成後更新此計算器。
< > 在 GitHub 上更新