Spaces ZeroGPU: Spaces를 위한 동적 GPU 할당
Spaces ZeroGPU: Spaces를 위한 동적 GPU 할당
ZeroGPU는 Hugging Face Spaces에서 AI 모델·데모의 GPU 사용을 최적화하는 공유 인프라예요. 필요한 만큼 NVIDIA RTX Pro 6000 Blackwell GPU를 동적으로 할당·해제하며 다음을 제공합니다:
- 무료 GPU 접근: Spaces에 비용 효율적인 GPU 사용을 가능하게 함.
- 멀티 GPU 지원: 단일 애플리케이션에서 여러 GPU를 동시에 활용할 수 있게 함.
출처: 문서
본문
ZeroGPU는 Hugging Face Spaces에서 AI 모델·데모의 GPU 사용을 최적화하는 공유 인프라입니다. 필요에 따라 NVIDIA RTX Pro 6000 Blackwell GPU를 동적으로 할당하고 해제하며 다음을 제공합니다:
- 무료 GPU 접근 (Free GPU Access): Spaces에 비용 효율적인 GPU 사용을 가능하게 함.
- 멀티 GPU 지원 (Multi-GPU Support): 단일 애플리케이션에서 여러 GPU를 동시에 활용할 수 있게 함.
전통적인 단일 GPU 할당과 달리 ZeroGPU의 효율적인 시스템은 리소스 활용과 전력 효율을 극대화해 개발자·연구자·조직이 AI 모델을 배포하는 장벽을 낮춥니다.
ZeroGPU Spaces 사용·호스팅하기 (Using and hosting ZeroGPU Spaces)
- 기존 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 | 1× |
xlarge |
Full NVIDIA RTX Pro 6000 Blackwell | 96GB | 2× |
[!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를 사용하려면 다음 단계를 따르세요:
- Space 설정에서 ZeroGPU 하드웨어가 선택되었는지 확인하세요.
spaces모듈을 import 하세요.- 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]
xlarge는large보다 일일 쿼터를 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"는 실제로 이득일 때만 쓰세요.