Hub documentation

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

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

ZeroGPU schema

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

  1. 무료 GPU 액세스: Spaces에서 비용 효율적인 GPU 사용을 가능하게 합니다.
  2. 멀티 GPU 지원: 단일 애플리케이션에서 여러 GPU를 동시에 활용하도록 Spaces에 허용합니다.

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

ZeroGPU Spaces 사용 및 호스팅

  • Using existing ZeroGPU Spaces
    • ZeroGPU Spaces는 모든 사용자가 무료로 사용할 수 있습니다. (큐레이션된 목록을 방문하세요).
    • PRO 사용자는 일일 사용 한도가 8배 더 많고, GPU 대기열에서 가장 높은 우선순위를 가지며, ZeroGPU Spaces를 사용할 때 선불 크레딧을 통해 일일 한도를 초과하여 사용할 수 있습니다.
  • Hosting your own ZeroGPU Spaces
    • 무료 개인 계정: 정상 상태의 계정(이메일 인증 완료, 계정 생성 30일 이상)은 ZeroGPU Spaces를 최대 2개까지 무료로 호스팅할 수 있습니다.
    • PRO 계정: PRO 구독을 통해 계정당 최대 10개의 ZeroGPU Spaces를 호스팅할 수 있습니다.
    • 조직: Team 또는 Enterprise 플랜에 구독하여 조직의 모든 멤버에게 ZeroGPU Spaces를 활성화합니다.

기술 사양

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

GPU 크기하드웨어 백업Vram할당량 비용
large (기본값)NVIDIA RTX Pro 6000 Blackwell의 절반48GB1×
xlargeNVIDIA RTX Pro 6000 Blackwell 전체96GB2×

크기 사용법에 대해 자세히 알아보려면 GPU 크기 선택을 참조하세요

호환성

ZeroGPU Spaces는 대부분의 PyTorch 기반 GPU Spaces와 호환되도록 설계되었습니다. transformers와 diffusers와 같은 고급 Hugging Face 라이브러리에 대한 호환성은 강화되었지만, 사용자는 다음 사항을 인지해야 합니다:

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

지원되는 버전

  • 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 시작하기

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

  1. Space 설정에서 ZeroGPU 하드웨어가 선택되어 있는지 확인하세요.
  2. spaces 모듈을 가져옵니다.
  3. GPU에 의존하는 함수를 @spaces.GPU로 장식합니다.

이 장식(decoration) 과정을 통해 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 내에서 모델을 지연 로드하거나 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는 large보다 일일 할당량을 2배 더 소모합니다(예: 유효 작업 지속 시간이 45초인 경우 할당량 90초를 소모합니다).
  • xlarge는 일반적으로 더 높은 대기열 확률과 더 긴 대기 시간을 의미합니다
  • 워크로드가 추가 컴퓨트 또는 메모리에서 실제로 이점을 얻을 때만 xlarge를 사용하세요

기간 관리

기본 60초의 GPU 실행 시간을 초과할 것으로 예상되는 함수의 경우, 사용자 지정 지속 시간을 지정할 수 있습니다:

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

이 설정은 함수의 최대 실행 시간을 120초로 지정합니다. 더 짧은 실행 시간을 가진 빠른 함수의 경우, 더 짧은 기간을 지정하면 Space 방문자의 대기열 우선순위가 향상됩니다.

동적 지속 시간

@spaces.GPU는 동적 지속 시간도 지원합니다.

기간을 직접 전달하는 대신, 장식된 함수와 동일한 입력을 받아 기간 값을 반환하는 콜러블을 전달합니다:

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 사전 컴파일을 사용할 수 있습니다(torch 2.8+ 필요)

ZeroGPU의 사전 컴파일(AOT compilation)에 대한 전체 가이드는 이 블로그 포스트를 확인하세요.

사용량 등급

GPU 사용량은 계정 등급별로 일일 할당량이 적용됩니다:

계정 유형포함된 일일 GPU 할당량큐 우선순위
인증되지 않음2분낮음
무료 계정5분중간
PRO 계정40분 (확장 가능)가장 높은
팀 조직 구성원40분 (확장 가능)가장 높은
Enterprise 조직 멤버60분 (확장 가능)가장 높은

포함된 일일 할당량은 GPU를 처음 사용한 시점부터 정확히 24시간 후에 초기화됩니다.

남은 할당량은 ZeroGPU 대기열에서 우선순위에 직접적인 영향을 미칩니다.

크레딧으로 쿼터 확장

PRO, Team, Enterprise 사용자는 포함된 일일 할당량을 초과하여 GPU 시간 10분당 $1의 비율로 선불 크레딧을 소모함으로써 ZeroGPU Spaces를 계속 사용할 수 있습니다. 일일 할당량이 소진되면 추가 GPU 사용량은 자동으로 크레딧 잔액에서 차감됩니다.

결제 설정에서 크레딧을 추가할 수 있습니다.

호스팅 제한

  • 무료 개인 계정: 상태가 양호한 계정(이메일 인증 완료, 계정 생성 30일 이상)의 경우 최대 2개의 ZeroGPU Spaces를 사용할 수 있습니다.
  • 개인 계정(PRO 구독자): 최대 10개의 ZeroGPU Spaces.
  • 조직 계정(Team & Enterprise): 최대 50개의 ZeroGPU Spaces.

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

권장 사항

데모에 대규모 모델을 사용하는 경우, ahead-of-time compilation과 flash-attention 3와 같은 최적화를 사용하는 것을 권장합니다. 이 포스트에서 ZeroGPU와 함께 이러한 최적화를 활용하는 방법을 배울 수 있습니다. 이러한 최적화는 ZeroGPU 시간의 이점을 극대화하고 더 나은 사용자 경험을 제공하는 데 도움이 됩니다.

피드백

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

Update on GitHub