Hub documentation

Spaces ZeroGPU: Phân bổ GPU động cho Spaces

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Spaces ZeroGPU: Phân bổ GPU động cho Spaces

ZeroGPU schema

ZeroGPU là một hạ tầng dùng chung, tối ưu hóa việc sử dụng GPU cho các mô hình và demo AI trên Hugging Face Spaces. Nó phân bổ và giải phóng các GPU NVIDIA RTX Pro 6000 Blackwell một cách động khi cần, cung cấp:

  1. Truy cập GPU miễn phí: Cho phép sử dụng GPU hiệu quả về chi phí cho Spaces.
  2. Hỗ trợ đa GPU: Cho phép Spaces tận dụng nhiều GPU đồng thời trên một ứng dụng duy nhất.

Khác với các cấp phát GPU đơn truyền thống, hệ thống hiệu quả của ZeroGPU giúp giảm rào cản cho các nhà phát triển, nhà nghiên cứu và tổ chức trong việc triển khai các mô hình AI bằng cách tối đa hóa việc sử dụng tài nguyên và hiệu quả năng lượng.

Sử dụng và lưu trữ ZeroGPU Spaces

  • Using existing ZeroGPU Spaces
    • ZeroGPU Spaces có thể được sử dụng miễn phí cho tất cả người dùng. (Xem danh sách được tuyển chọn).
    • Người dùng PRO nhận hạn mức sử dụng hàng ngày gấp 8 lần, có độ ưu tiên cao nhất trong hàng đợi GPU và có thể vượt quá hạn mức hàng ngày bằng cách sử dụng tín dụng trả trước khi dùng bất kỳ ZeroGPU Spaces nào.
  • Hosting your own ZeroGPU Spaces
    • Tài khoản cá nhân miễn phí: các tài khoản có tình trạng tốt (email đã xác minh, tài khoản trên 30 ngày) có thể lưu trữ tối đa 2 ZeroGPU Spaces miễn phí.
    • Tài khoản PRO: Đăng ký PRO để lưu trữ tối đa 10 Spaces ZeroGPU dưới tài khoản của bạn.
    • Tổ chức: Đăng ký gói Team hoặc Enterprise để bật ZeroGPU Spaces cho tất cả thành viên trong tổ chức.

Thông số kỹ thuật

ZeroGPU hỗ trợ hai kích thước GPU

Kích thước GPUPhần cứng hỗ trợVramChi phí hạn mức
large (mặc định)Một nửa NVIDIA RTX Pro 6000 Blackwell48GB1×
xlargeToàn bộ NVIDIA RTX Pro 6000 Blackwell96GB2×

Xem chọn kích thước GPU để tìm hiểu cách sử dụng các kích thước

Tương thích

Các Space ZeroGPU được thiết kế để tương thích với hầu hết các Space GPU dựa trên PyTorch. Mặc dù khả năng tương thích được tăng cường cho các thư viện cấp cao của Hugging Face như transformers và diffusers, người dùng cần lưu ý rằng:

  • Hiện tại, ZeroGPU Spaces chỉ tương thích với Gradio SDK.
  • Các Space ZeroGPU có thể có khả năng tương thích hạn chế so với các Space GPU tiêu chuẩn.
  • Một số vấn đề bất ngờ có thể xảy ra trong một số kịch bản.

Phiên bản được hỗ trợ

  • Gradio: 4+

  • PyTorch: Gần như tất cả các phiên bản từ 2.8.0 đến mới nhất đều được hỗ trợ

    Xem danh sách đầy đủ
    • 2.8.0
    • 2.9.1
    • 2.10.0
    • 2.11.0
    • 2.12.1
    • 2.13.0
  • Python:

    • 3.12.12
    • 3.10.13

Bắt đầu với ZeroGPU

Để sử dụng ZeroGPU trong Space của bạn, hãy làm theo các bước sau:

  1. Hãy đảm bảo phần cứng ZeroGPU đã được chọn trong cài đặt Space của bạn.
  2. Nhập module spaces.
  3. Trang trí các hàm phụ thuộc vào GPU bằng @spaces.GPU.

Quá trình trang trí này cho phép Space yêu cầu một GPU khi hàm được gọi và giải phóng nó khi hoàn tất.

Trình trang trí @spaces.GPU được thiết kế để không gây tác dụng phụ trong các môi trường không phải ZeroGPU, đảm bảo khả năng tương thích trên các cấu hình khác nhau.

Ví dụ sử dụng

import spaces
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(...)
pipe.to('cuda')

@spaces.GPU
def generate(prompt):
    return pipe(prompt).images

gr.Interface(
    fn=generate,
    inputs=gr.Text(),
    outputs=gr.Gallery(),
).launch()

Tải mô hình

Mặc dù GPU thực sự chỉ khả dụng bên trong các hàm @spaces.GPU, các mô hình vẫn phải được đặt trên cuda ở cấp độ module gốc (như minh họa trong ví dụ trên).

Việc nạp chậm hoặc di chuyển mô hình sang CUDA bên trong @spaces.GPU không được khuyến khích, vì cách này kém hiệu quả hơn đáng kể (các thao tác chuyển CUDA được tối ưu hóa cho việc đặt thiết bị thực hiện trong quá trình khởi động).

Việc tải mô hình trên cuda ở cấp module hoạt động được vì chế độ mô phỏng CUDA của PyTorch được bật bên ngoài các hàm @spaces.GPU, cho phép thực hiện các thao tác CUDA mà không cần GPU thực. Bên trong @spaces.GPU, CUDA thực được sử dụng.

Chọn kích thước GPU

Kích thước mặc định được sử dụng bởi @spaces.GPU là large (một nửa NVIDIA RTX Pro 6000 Blackwell).

Bạn có thể yêu cầu rõ ràng một NVIDIA RTX Pro 6000 Blackwell đầy đủ bằng cách chỉ định size="xlarge":

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge tiêu thụ 2× hạn mức hàng ngày so với large (ví dụ: thời lượng tác vụ hiệu dụng là 45s sẽ tiêu thụ 90s hạn mức)
  • xlarge thường có nghĩa là xác suất xếp hàng cao hơn và thời gian chờ dài hơn
  • Chỉ sử dụng xlarge khi khối lượng công việc của bạn thực sự được hưởng lợi từ thêm tài nguyên tính toán hoặc bộ nhớ

Quản lý thời lượng

Đối với các hàm được dự kiến sẽ vượt quá thời gian chạy GPU mặc định là 60 giây, bạn có thể chỉ định một thời lượng tùy chỉnh:

@spaces.GPU(duration=120)
def generate(prompt):
   return pipe(prompt).images

Điều này đặt thời gian chạy tối đa của hàm là 120 giây. Việc chỉ định thời lượng ngắn hơn cho các hàm chạy nhanh sẽ cải thiện độ ưu tiên hàng đợi cho khách truy cập Space.

Thời lượng động

@spaces.GPU cũng hỗ trợ thời lượng động.

Thay vì truyền trực tiếp một khoảng thời gian, hãy chỉ cần truyền một hàm có thể gọi nhận các đầu vào giống với hàm được trang trí của bạn và trả về một giá trị khoảng thời gian:

def get_duration(prompt, steps):
    step_duration = 3.75
    return steps * step_duration

@spaces.GPU(duration=get_duration)
def generate(prompt, steps):
   return pipe(prompt, num_inference_steps=steps).images

Biên dịch

ZeroGPU không hỗ trợ torch.compile, nhưng bạn có thể sử dụng biên dịch trước thời điểm thực thi của PyTorch (yêu cầu torch 2.8+)

Xem bài viết trên blog này để có hướng dẫn đầy đủ về biên dịch trước thời điểm thực thi trên ZeroGPU.

Các cấp độ sử dụng

Việc sử dụng GPU bị giới hạn bởi hạn mức mỗi ngày, theo cấp tài khoản:

Loại tài khoảnHạn mức GPU hàng ngày được bao gồmƯu tiên hàng đợi
Chưa xác thực2 phútThấp
Tài khoản miễn phí5 phútTrung bình
Tài khoản PRO40 phút (có thể mở rộng)Cao nhất
Thành viên tổ chức nhóm40 phút (có thể mở rộng)Cao nhất
Thành viên tổ chức doanh nghiệp60 phút (có thể mở rộng)Cao nhất

Hạn mức hàng ngày được đặt lại đúng 24 giờ sau lần sử dụng GPU đầu tiên của bạn.

Hạn mức còn lại ảnh hưởng trực tiếp đến mức ưu tiên trong hàng đợi ZeroGPU.

Mở rộng hạn mức bằng điểm

Người dùng PRO, Team và Enterprise có thể tiếp tục sử dụng ZeroGPU Spaces vượt quá hạn mức hàng ngày được bao gồm bằng cách tiêu thụ tín dụng trả trước với mức phí 1 đô la cho mỗi 10 phút thời gian GPU. Khi hạn mức hàng ngày của bạn đã hết, mọi mức sử dụng GPU bổ sung sẽ được tính phí tự động vào số dư tín dụng của bạn.

Bạn có thể thêm hạn mức từ cài đặt thanh toán của mình.

Hạn chế về lưu trữ

  • Tài khoản cá nhân miễn phí: Tối đa 2 Spaces ZeroGPU, dành cho các tài khoản có tình trạng tốt (email đã xác minh, tài khoản trên 30 ngày).
  • Tài khoản cá nhân (người đăng ký PRO): Tối đa 10 Spaces ZeroGPU.
  • Tài khoản tổ chức (Team & Enterprise): Tối đa 50 ZeroGPU Spaces.

Bằng cách tận dụng ZeroGPU, các nhà phát triển có thể tạo ra các Spaces hiệu quả và có khả năng mở rộng hơn, tối đa hóa việc sử dụng GPU trong khi giảm thiểu chi phí.

Khuyến nghị

Nếu demo của bạn sử dụng một mô hình lớn, chúng tôi khuyến nghị sử dụng các tối ưu hóa như biên dịch trước (ahead-of-time compilation) và flash-attention 3. Bạn có thể tìm hiểu cách tận dụng những tính năng này với ZeroGPU trong bài viết này. Các tối ưu hóa này sẽ giúp bạn khai thác tối đa lợi thế của các giờ ZeroGPU và mang lại trải nghiệm người dùng tốt hơn.

Phản hồi

Bạn có thể chia sẻ phản hồi về Spaces ZeroGPU trực tiếp trên HF Hub: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

Update on GitHub