Hub 文件

Spaces ZeroGPU:Spaces 的動態 GPU 配置

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Spaces ZeroGPU:Spaces 的動態 GPU 配置

ZeroGPU schema

ZeroGPU 是一種共用基礎架構,旨在優化 Hugging Face Spaces 上 AI 模型與演示的 GPU 使用率。它會根據需要動態分配並釋放 NVIDIA RTX Pro 6000 Blackwell GPU,提供:

  1. 免費 GPU 存取:讓 Spaces 能以符合成本效益的方式使用 GPU。
  2. 多 GPU 支援:允許 Spaces 在單一應用程式中同時利用多個 GPU。

與傳統的單一 GPU 分配不同,ZeroGPU 的高效系統透過最大化資源利用率與能源效率,降低了開發人員、研究人員與組織部署 AI 模型的門檻。

使用與託管 ZeroGPU Spaces

  • 使用現有的 ZeroGPU Spaces
    • 所有使用者皆可免費使用 ZeroGPU Spaces。(請參閱 精選清單)。
    • PRO 使用者可獲得 8 倍的每日使用配額,享有 GPU 佇列的最高優先權,並可在使用任何 ZeroGPU Spaces 時,使用預付點數來超出每日配額。
  • 託管您自己的 ZeroGPU Spaces

技術規格

ZeroGPU 支援兩種 GPU 規格

GPU 規格 支援硬體 顯示記憶體 (VRAM) 配額消耗
large (預設) 半張 NVIDIA RTX Pro 6000 Blackwell 48GB
xlarge 完整 NVIDIA RTX Pro 6000 Blackwell 96GB

請參閱 GPU 規格選擇以了解如何使用不同規格

相容性

ZeroGPU Spaces 設計為與大多數基於 PyTorch 的 GPU Spaces 相容。雖然 Hugging Face 的高階函式庫(如 transformersdiffusers)具有更好的相容性,但使用者仍需注意:

  • 目前,ZeroGPU Spaces 僅與 Gradio SDK 相容。
  • 相較於標準 GPU Spaces,ZeroGPU Spaces 可能有相容性限制。
  • 在某些情況下可能會出現預料之外的問題。

支援的版本

  • Gradio: 4+

  • PyTorch:支援從 2.8.0最新版 的幾乎所有版本。

    查看完整清單
    • 2.8.0
    • 2.9.1
    • 2.10.0
    • 2.11.0
  • Python:

    • 3.12.12
    • 3.10.13

ZeroGPU 入門

若要在您的 Space 中使用 ZeroGPU,請遵循以下步驟:

  1. 確認您的 Space 設定中已選取 ZeroGPU 硬體。
  2. 匯入 spaces 模組。
  3. 使用 @spaces.GPU 裝飾依賴 GPU 的函式。

此裝飾過程允許 Space 在呼叫該函式時請求 GPU,並在完成後立即釋放它。

@spaces.GPU 裝飾器的設計在非 ZeroGPU 環境中不會產生任何影響,確保了不同設定之間的相容性。

使用範例

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()

模型載入

儘管真正的 GPU 僅在 @spaces.GPU 函式內部可用,但模型必須在根模組層級放置於 cuda 上(如上述範例所示)。

不建議在 @spaces.GPU 內部進行延遲載入 (lazy-loading) 或將模型移至 CUDA,因為效率會顯著降低(CUDA 傳輸針對在啟動期間完成的放置進行了優化)。

在模組層級將模型載入至 cuda 之所以有效,是因為在 @spaces.GPU 函式外部啟用了 PyTorch CUDA 模擬模式,允許在沒有真實 GPU 的情況下執行 CUDA 操作。而在 @spaces.GPU 內部,則會使用真實的 CUDA。

GPU 規格選擇

@spaces.GPU 使用的預設規格為 large(半張 NVIDIA RTX Pro 6000 Blackwell)。

您可以透過指定 size="xlarge" 來顯式請求完整的 NVIDIA RTX Pro 6000 Blackwell。

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge 消耗的每日配額是 large2 倍(例如,45 秒的實際任務持續時間會消耗 90 秒的配額)。
  • xlarge 通常意味著更高的排隊機率與更長的等待時間。
  • 僅在您的工作負載確實能從額外的運算或記憶體中受益時,才使用 xlarge

持續時間管理

對於預期會超過預設 60 秒 GPU 運行時間的函式,您可以指定自訂的持續時間。

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

這會將函式的最長運行時間設定為 120 秒。為較快的函式指定較短的持續時間,將能改善 Space 訪客的排隊優先順序。

動態持續時間

@spaces.GPU 也支援動態持續時間。

您無需直接傳遞持續時間,只需傳遞一個與您裝飾的函式具有相同輸入並回傳持續時間值的可呼叫物件 (callable) 即可。

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

編譯

ZeroGPU 不支援 torch.compile,但您可以使用 PyTorch 預先編譯 (ahead-of-time compilation)(需要 torch 2.8+)。

請查閱此 部落格文章,獲取有關在 ZeroGPU 上進行預先編譯的完整指南。

使用層級

GPU 使用量受各帳戶層級的每日配額限制。

帳戶類型 內含每日 GPU 配額 佇列優先順序
未驗證使用者 2 分鐘
免費帳戶 5 分鐘 中等
PRO 帳戶 40 分鐘(可擴充) 最高
Team 組織成員 40 分鐘(可擴充) 最高
Enterprise 組織成員 60 分鐘(可擴充) 最高

內含的每日配額會在您第一次使用 GPU 後的 24 小時整準時重置。

剩餘配額會直接影響在 ZeroGPU 佇列中的優先順序。

以點數延長配額

PRO、Team 及 Enterprise 使用者可在超出每日配額後,透過扣除預付點數繼續使用 ZeroGPU Spaces,費率為每 10 分鐘 GPU 時間 1 美元。一旦您的每日配額用盡,任何額外的 GPU 使用量將會自動從您的點數餘額中扣除。

您可以從您的 帳單設定中新增點數。

託管限制

透過利用 ZeroGPU,開發人員可以建立更高效且可擴展的 Spaces,在最大化 GPU 利用率的同時降低成本。

建議

如果您的演示使用大型模型,我們建議使用如預先編譯 (ahead-of-time compilation) 和 flash-attention 3 等優化技術。您可以透過 這篇文章 了解如何將其與 ZeroGPU 結合使用。這些優化將協助您最大化 ZeroGPU 時數的優勢,並提供更佳的使用者體驗。

意見回饋

您可以直接在 HF Hub 上分享有關 Spaces ZeroGPU 的意見回饋:https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.