Accelerate documentation

Bộ ước lượng bộ nhớ mô hình

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

Bộ ước lượng bộ nhớ mô hình

Một khía cạnh rất khó khăn khi khám phá các mô hình tiềm năng để sử dụng trên máy của bạn là biết chính xác mô hình lớn đến mức nào sẽ đóng vừa bộ nhớ với thiết bị hiện tại của bạn (chẳng hạn như nạp mô hình lên CUDA hoặc XPU).

Để giúp giảm bớt vấn đề này, Accelerate có một giao diện CLI thông qua accelerate estimate-memory. Bài hướng dẫn này sẽ hỗ trợ bạn sử dụng công cụ này, những gì cần kỳ vọng, và cuối cùng sẽ liên kết đến bản demo tương tác được lưu trữ trên Hub, nơi bạn có thể đăng trực tiếp các kết quả đó lên kho model!

Hiện tại, chúng tôi hỗ trợ tìm kiếm các mô hình có thể được sử dụng trong timm và transformers.

API này sẽ nạp mô hình vào bộ nhớ trên thiết bị meta, do đó chúng ta không thực sự tải xuống và nạp toàn bộ trọng số của mô hình vào bộ nhớ, và cũng không cần phải làm vậy. Kết quả là, việc đo lường các mô hình có 8 tỷ tham số (hoặc nhiều hơn) hoàn toàn không thành vấn đề, mà không cần lo lắng xem CPU của bạn có xử lý được hay không!

Trình diễn Gradio

Dưới đây là một số demo gradio liên quan đến những gì đã được mô tả ở trên. Demo đầu tiên là không gian ước lượng bộ nhớ chính thức của Hugging Face, sử dụng trực tiếp Accelerate:

Một thành viên cộng đồng đã tiếp nhận ý tưởng này và mở rộng thêm, cho phép bạn lọc trực tiếp các model và kiểm tra xem có thể chạy một LLM cụ thể nào đó hay không dựa trên các ràng buộc về GPU và cấu hình LoRA. Để thử nghiệm, xem tại đây để biết thêm chi tiết.

Lệnh

Khi sử dụng accelerate estimate-memory, bạn cần truyền vào tên của model bạn muốn sử dụng, có thể kèm theo framework mà model đó sử dụng (nếu không thể tự động xác định), và các kiểu dữ liệu mà bạn muốn model được nạp vào.

Ví dụ, đây là cách chúng ta có thể tính toán bộ nhớ sử dụng cho bert-base-cased:

accelerate estimate-memory bert-base-cased

Điều này sẽ tải xuống config.json cho bert-based-cased, nạp mô hình vào thiết bị meta và báo cáo lại lượng dung lượng mà nó sẽ sử dụng:

Dung lượng bộ nhớ để nạp bert-base-cased:

dtypeLớp lớn nhấtTổng kích thướcHuấn luyện bằng 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

Mặc định, nó sẽ trả về tất cả các dtype được hỗ trợ (từ int4 đến float32), nhưng nếu bạn quan tâm đến một số dtype cụ thể, chúng có thể được lọc.

Các thư viện cụ thể

Nếu thư viện nguồn không thể được xác định tự động (như trong trường hợp của bert-base-cased), tên thư viện có thể được truyền vào.

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

Dung lượng bộ nhớ để nạp HuggingFaceM4/idefics-80b-instruct:

dtypeLớp lớn nhấtTổng kích thướcHuấn luyện bằng 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

Dung lượng bộ nhớ để nạp timm/resnet50.a1_in1k:

dtypeLớp lớn nhấtTổng kích thướcHuấn luyện bằng 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

Các dtype cụ thể

Như đã đề cập ở trên, mặc định chúng tôi trả về từ int4 đến float32, nhưng có thể sử dụng bất kỳ dtype nào từ float32, float16, int8 và int4.

Để thực hiện điều này, hãy truyền chúng vào sau khi chỉ định --dtypes:

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

Dung lượng bộ nhớ để nạp bert-base-cased:

dtypeLớp lớn nhấtTổng kích thướcHuấn luyện bằng Adam
float3284,95 MB413,18 MB1,61 GB
float1642,47 MB206,59 MB826.36 MB

Lưu ý về công cụ tính toán này

Công cụ tính toán này sẽ cho bạn biết cần bao nhiêu bộ nhớ để chỉ tải mô hình vào, không phải để thực hiện suy luận.

Phép tính này chính xác trong khoảng vài % so với giá trị thực tế, do đó đây là một cách nhìn rất tốt về lượng bộ nhớ mà nó sẽ chiếm dụng. Ví dụ, việc nạp bert-base-cased thực sự tốn 413.68 MB khi được nạp trên CUDA ở độ chính xác đầy đủ, và công cụ tính toán ước lượng 413.18 MB.

Khi thực hiện suy luận, bạn có thể kỳ vọng thêm tối đa 20% như đã được tìm thấy bởi EleutherAI. Chúng tôi sẽ tiến hành nghiên cứu để tìm ra ước tính chính xác hơn cho các giá trị này và sẽ cập nhật công cụ tính toán này khi hoàn thành.

Update on GitHub