Spaces ZeroGPU: Spaces를 위한 동적 GPU 할당

Spaces ZeroGPU: Spaces를 위한 동적 GPU 할당

ZeroGPU는 Hugging Face Spaces에서 AI 모델·데모의 GPU 사용을 최적화하는 공유 인프라예요. 필요한 만큼 NVIDIA RTX Pro 6000 Blackwell GPU를 동적으로 할당·해제하며 다음을 제공합니다:

  1. 무료 GPU 접근: Spaces에 비용 효율적인 GPU 사용을 가능하게 함.
  2. 멀티 GPU 지원: 단일 애플리케이션에서 여러 GPU를 동시에 활용할 수 있게 함.

출처: 문서

본문

ZeroGPU는 Hugging Face Spaces에서 AI 모델·데모의 GPU 사용을 최적화하는 공유 인프라입니다. 필요에 따라 NVIDIA RTX Pro 6000 Blackwell GPU를 동적으로 할당하고 해제하며 다음을 제공합니다:

  1. 무료 GPU 접근 (Free GPU Access): Spaces에 비용 효율적인 GPU 사용을 가능하게 함.
  2. 멀티 GPU 지원 (Multi-GPU Support): 단일 애플리케이션에서 여러 GPU를 동시에 활용할 수 있게 함.

전통적인 단일 GPU 할당과 달리 ZeroGPU의 효율적인 시스템은 리소스 활용과 전력 효율을 극대화해 개발자·연구자·조직이 AI 모델을 배포하는 장벽을 낮춥니다.

ZeroGPU Spaces 사용·호스팅하기 (Using and hosting ZeroGPU Spaces)

  • 기존 ZeroGPU Spaces 사용하기
    • ZeroGPU Spaces는 모든 사용자에게 무료로 사용 가능합니다. (큐레이션 목록 방문)
    • PRO 사용자는 일일 사용량 쿼터 8배, GPU 큐 최우선순위, 모든 ZeroGPU Spaces 사용 시 선불 크레딧으로 일일 쿼터를 초과할 수 있습니다.
  • 자체 ZeroGPU Spaces 호스팅하기
    • 무료 개인 계정: 좋은 상태(이메일 확인, 계정 30일 이상) 계정은 ZeroGPU Spaces 2개를 무료로 호스팅할 수 있어요.
    • PRO 계정: PRO 구독으로 계정당 ZeroGPU Spaces 최대 10개 호스팅.
    • 조직: Team 또는 Enterprise 플랜 구독으로 모든 조직 멤버가 ZeroGPU Spaces를 쓸 수 있게 함.

기술 사양 (Technical Specifications)

ZeroGPU는 두 가지 GPU 크기를 지원합니다

GPU size Backing hardware Vram Quota cost
large (default) Half NVIDIA RTX Pro 6000 Blackwell 48GB
xlarge Full NVIDIA RTX Pro 6000 Blackwell 96GB

[!NOTE] 크기 사용 방법은 GPU size selection을 참고하세요.

호환성 (Compatibility)

ZeroGPU Spaces는 대부분의 PyTorch 기반 GPU Spaces와 호환되도록 설계됐어요. transformers, diffusers 같은 고수준 Hugging Face 라이브러리와의 호환성이 향상되어 있지만, 사용자는 다음을 알아두어야 합니다:

  • 현재 ZeroGPU Spaces는 Gradio SDK와만 호환됩니다.
  • ZeroGPU Spaces는 표준 GPU Spaces에 비해 호환성이 제한될 수 있어요.
  • 일부 시나리오에서 예상치 못한 문제가 발생할 수 있습니다.

지원 버전 (Supported Versions)

  • Gradio: 4+
  • PyTorch: 2.8.0부터 latest까지 거의 모든 버전 지원
    • 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

ZeroGPU 시작하기 (Getting started with ZeroGPU)

Space에서 ZeroGPU를 사용하려면 다음 단계를 따르세요:

  1. Space 설정에서 ZeroGPU 하드웨어가 선택되었는지 확인하세요.
  2. spaces 모듈을 import 하세요.
  3. GPU 의존 함수를 @spaces.GPU로 데코레이트하세요.

이 데코레이션 과정으로 함수가 호출될 때 Space가 GPU를 요청하고 완료되면 해제할 수 있습니다.

[!NOTE] @spaces.GPU 데코레이터는 비-ZeroGPU 환경에서는 효과 없음(effect-free)으로 설계되어 서로 다른 설정 간 호환성을 보장합니다.

예시 사용 (Example Usage)

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

모델 로딩 (Model loading)

실제 GPU는 @spaces.GPU 함수 안에서만 사용할 수 있지만, 모델은 루트 모듈 레벨에서 cuda에 배치해야 합니다(위 예시처럼).

@spaces.GPU 안에서 모델을 lazy-load하거나 CUDA로 옮기는 것은 권장하지 않습니다. 훨씬 덜 효율적이기 때문이에요(CUDA 전송은 시작 중에 이루어지는 배치에 최적화되어 있습니다).

[!NOTE] 모듈 레벨에서 cuda에 모델을 로딩하는 것이 동작하는 이유는 @spaces.GPU 함수 밖에서 PyTorch CUDA 에뮬레이션 모드가 활성화되어 실제 GPU 없이 CUDA 연산이 가능하기 때문입니다. @spaces.GPU 안에서는 실제 CUDA가 사용됩니다.

GPU 크기 선택 (GPU size selection)

@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

[!NOTE]

  • xlargelarge보다 일일 쿼터를 2배 소비합니다(예: 45초 유효 태스크는 90초 쿼터 소비)
  • xlarge는 보통 큐 대기 확률이 더 높고 대기 시간이 깁니다
  • 추가 컴퓨팅이나 메모리가 정말로 이득일 때만 xlarge를 사용하세요

지속 시간 관리 (Duration Management)

기본 60초 GPU 런타임을 초과할 것으로 예상되는 함수는 커스텀 지속 시간을 지정할 수 있어요:

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

이것은 최대 함수 런타임을 120초로 설정합니다. 더 빠른 함수에는 더 짧은 지속 시간을 지정하면 Space 방문자에게 큐 우선순위가 향상됩니다.

동적 지속 시간 (Dynamic duration)

@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

컴파일 (Compilation)

ZeroGPU는 torch.compile을 지원하지 않지만, PyTorch ahead-of-time 컴파일(torch 2.8+ 필요)은 사용할 수 있어요.

ZeroGPU에서 ahead-of-time 컴파일에 대한 전체 가이드는 이 블로그포스트를 확인하세요.

사용 티어 (Usage Tiers)

GPU 사용은 계정 티어별 일일 쿼터의 적용을 받습니다:

Account type Included daily GPU quota Queue priority
Unauthenticated 2 minutes Low
Free account 5 minutes Medium
PRO account 40 minutes (extensible) Highest
Team organization member 40 minutes (extensible) Highest
Enterprise organization member 60 minutes (extensible) Highest

포함된 일일 쿼터는 첫 GPU 사용 후 정확히 24시간에 재설정됩니다.

[!NOTE] 남은 쿼터는 ZeroGPU 큐의 우선순위에 직접 영향을 줍니다.

크레딧으로 쿼터 확장 (Extending quota with credits)

PRO, Team, Enterprise 사용자는 GPU 시간 10분당 $1 비율의 선불 크레딧을 소비해 포함된 일일 쿼터를 넘어 ZeroGPU Spaces를 계속 사용할 수 있어요. 일일 쿼터가 소진되면 추가 GPU 사용은 자동으로 크레딧 잔액으로 청구됩니다.

크레딧은 billing 설정에서 추가할 수 있어요.

호스팅 제한 (Hosting Limitations)

  • 무료 개인 계정: 좋은 상태(이메일 확인, 계정 30일 이상) 계정은 ZeroGPU Spaces 최대 2개.
  • 개인 계정 (PRO 구독자): ZeroGPU Spaces 최대 10개.
  • 조직 계정 (Team & Enterprise): ZeroGPU Spaces 최대 50개.

ZeroGPU를 활용하면 개발자가 GPU 활용을 극대화하면서 비용을 최소화하는 더 효율적이고 확장 가능한 Spaces를 만들 수 있어요.

권장사항 (Recommendations)

데모가 큰 모델을 사용한다면 ahead-of-time 컴파일과 flash-attention 3 같은 최적화를 권장합니다. ZeroGPU에서 이를 활용하는 방법은 이 포스트에서 배울 수 있어요. 이 최적화는 ZeroGPU 시간의 이점을 극대화하고 더 나은 사용자 경험을 제공하는 데 도움이 됩니다.

피드백 (Feedback)

Spaces ZeroGPU에 대한 피드백은 HF Hub에서 직접 공유할 수 있어요: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

더 알아보기 (Learn more)

ZeroGPU는 @spaces.GPU 데코레이터로 필요할 때만 GPU를 할당해 무료·비용 효율적인 Spaces 운영을 가능하게 해요. 일일 쿼터는 티어별로 다르고 PRO/Team/Enterprise는 크레딧으로 확장할 수 있습니다. 큰 모델은 ahead-of-time 컴파일과 flash-attention 3를 권장하고, size="xlarge"는 실제로 이득일 때만 쓰세요.