Hugging Face ZeroGPU 사전 컴파일 가이드
Hugging Face는 ZeroGPU Spaces를 위해 사전 컴파일(AoT) 방식을 도입했으며, 이를 통해 개발자는 모델 지연 시간을 최적화하고 콜드 스타트 시간을 없앨 수 있습니다. 모델을 한 번 컴파일하고 짧은 수명의 GPU 프로세스에서 즉시 다시 로드함으로써, Flux, Wan, LTX와 같은 모델에서 1.3Ñ–1.8Ñ의 속도 향상을 달성할 수 있습니다.
ZeroGPU 아키텍처와 AoT 필요성
ZeroGPU는 GPU 초기화를 위해 즉시 실행(just-in-time) 방식을 사용하여 자원 효율성을 극대화합니다. Space 전체 수명 동안 GPU를 예약하는 대신, ZeroGPU는 프로세스를 포크하고 Nvidia H200에서 GPU 작업을 실행(3g.71gb MIG 슬라이스 사용)하며 작업이 완료되면 포크를 종료합니다.
torch.compile은 표준 환경에서 효과적이지만, ZeroGPU에서는 거의 모든 작업마다 프로세스를 새로 시작하기 때문에 파일 시스템 캐시에 의존합니다. 이 캐시 과정은 수십 초에서 몇 분까지 걸릴 수 있어 실시간 데모에 적합하지 않습니다. AoT 컴파일은 모델을 한 번 내보내어 어떤 프로세스에서도 즉시 다시 로드할 수 있게 함으로써 이를 해결합니다.
ZeroGPU에서 AoT 컴파일 구현
Implementing AoT 컴파일은 spaces 패키지와 PyTorch 유틸리티를 사용한 다섯 단계 워크플로우를 포함합니다:
- 예시 입력 캡처:
spaces.aoti_capture를 사용하여 모델 구성 요소(예: 확산 파이프라인의 트랜스포머)에 전달되는 인수와 키워드 인수를 가로챕니다. - 모델 내보내기:
torch.export.export를 사용해 모델을ExportedProgram으로 변환합니다. 이는 텐서 연산과 모델 파라미터를 포함하는 계산 그래프입니다. - 내보낸 모델 컴파일:
spaces.aoti_compile(torch._inductor.aot_compile의 래퍼)를 사용해 AoT 컴파일 바이너리를 생성합니다. - 컴파일된 모델 적용:
spaces.aoti_apply를 사용해 모델의forward메서드를 패치하고 원래 모델 파라미터를 메모리에서 제거하여 메모리 부족(OOM) 오류를 방지합니다. - GPU 컨텍스트로 래핑: 컴파일은 하드웨어에 의존하고 실제 GPU가 필요하므로, 컴파일 단계는 앱 시작 단계에서
@spaces.GPU함수로 래핑해야 합니다.
FLUX.1-dev 모델의 경우, 이 과정으로 1.7x 속도 향상을 얻었습니다.
고급 최적화 기법
FP8 양자화
AoT 컴파일은 torchao 라이브러리를 통한 FP8 사후 훈련 동적 양자화와 결합할 수 있습니다. ZeroGPU는 H200 GPU(컴퓨팅 능력 9.0+)를 사용하므로 FP8를 지원하며, 이는 추가로 1.2x 속도 향상을 제공합니다.
동적 형태 처리
다양한 이미지 또는 비디오 해상도를 지원하기 위해, 개발자는 torch.export.Dim을 사용해 동적 차원을 정의할 수 있습니다. Flux.1-Dev의 경우, hidden_states의 flattened_latent_dim와 img_ids의 height * width를 동적으로 설정합니다. 이러한 구성은 dynamic_shapes 맵을 통해 torch.export.export에 전달됩니다.
다중 컴파일 및 공유 가중치
동적 형태가 단일 그래프 동적 차원으로 처리하기 어려울 정도로 극심한 경우(예: Wan 비디오 생성 계열), 개발자는 해상도별로 모델을 컴파일하고 모델 파라미터를 공유하며 런타임에 올바른 컴파일된 그래프를 선택해 실행할 수 있습니다.
FlashAttention-3 (FA3)
ZeroGPU는 FlashAttention-3과 호환됩니다. FA3를 소스에서 빌드하는 데 소요되는 시간을 피하기 위해, Hugging Face는 kernels 라이브러리를 제공하며, 이를 통해 사용자는 사전 구축된 하드웨어 호환 커널(예: kernels-community/vllm-flash-attn3)을 로드할 수 있습니다.
영역별 컴파일
전체 모델을 컴파일하는 대신, 개발자는 반복되는 계산 블록만 컴파일할 수 있습니다(예: Flux의 FluxTransformerBlock 및 FluxSingleTransformerBlock). 이는 콜드 스타트 시간을 크게 줄이며—Flux.1-Dev의 컴파일 시간을 6분에서 30초로 감소시킴—전체 모델 컴파일과 동일한 속도 향상을 유지합니다.
배포 및 배포
컴파일된 그래프 모듈은 아티팩트로 직렬화하여 Hugging Face Hub에 업로드할 수 있습니다. 모델 파라미터 없이 컴파일된 모델 그래프만 저장하면 저장 용량이 적게 유지됩니다. 데모는 이러한 사전 컴파일된 그래프를 다운로드하고 로드하여 시작 시 컴파일 단계 자체를 건너뛸 수 있습니다.
SUMMARY: Hugging Face는 ZeroGPU Spaces를 위한 사전 컴파일(AoT) 방식을 도입하여, Flux, Wan, LTX와 같은 생성 모델에서 JIT 컴파일 오버헤드를 제거함으로써 1.3배에서 1.8배까지 속도 향상을 가능하게 합니다.
TITLE: Hugging Face ZeroGPU 사전 컴파일 가이드