Gradio를 사용하여 Hugging Face Spaces에서 ComfyUI 워크플로 실행하기
Hugging Face는 복잡한 ComfyUI 워크플로를 독립형 Gradio 애플리케이션으로 변환하는 방법을 도입했으며, 이를 통해 Hugging Face Spaces의 서버리스 ZeroGPU 인프라를 사용해 무료로 배포하고 실행할 수 있습니다.
ComfyUI 워크플로를 Python으로 내보내기
ComfyUI 워크플로를 노드 기반 UI 없이 실행하려면, 워크플로를 순수 Python 스크립트로 먼저 내보내야 합니다. 이는 Peyton DeNiro가 만든 ComfyUI-to-Python-Extension을 사용하여 수행됩니다.
내보내기 과정:
- ComfyUI의 Custom Nodes Manager를 통해
ComfyUI to Python Extension을 설치합니다. - UI 설정에 접근하여 새 메뉴를 비활성화하고 "Save as Script"를 선택합니다.
- 이 과정은 워크플로의 백엔드 로직을 나타내는 Python 스크립트를 생성합니다.
Gradio 인터페이스 만들기
워크플로를 Python으로 내보낸 후, 스크립트를 조정하고 사용자 친화적인 인터페이스를 제공하는 Gradio 앱을 구축할 수 있습니다.
UI 구현
개발자는 gr.Blocks()를 사용하여 최종 사용자에게 노출하고자 하는 입력을 정의할 수 있습니다. 예를 들어 Flux[dev] Redux + Flux[dev] Depth 워크플로에서는 일반적으로 노출되는 매개변수는 다음과 같습니다:
- 텍스트 프롬프트
- 구조 및 스타일 이미지
- 깊이 및 스타일 강도 슬라이더
로직 통합
UI를 기능적으로 만들기 위해, Python 스크립트에서 내보낸 main() 함수를 생성 함수(예: generate_image)로 변환합니다. 내보낸 스크립트 내의 하드코딩된 값은 Gradio 입력에서 전달된 변수로 교체하고, 최종 이미지 출력 노드는 저장된 이미지 경로를 반환하도록 수정합니다.
Hugging Face Spaces에 배포하기
Hugging Face Spaces에 배포하려면 대용량 모델 파일 업로드를 방지하고 서버리스 GPU 가속을 활용하기 위한 특정 최적화가 필요합니다.
모델 관리
모델을 직접 업로드하는 대신, huggingface_hub 라이브러리의 hf_hub_download 함수를 사용하여 로컬 ComfyUI 모델 경로를 Hugging Face Hub의 해당 버전과 프로그래밍 방식으로 매핑합니다. 이를 통해 Space가 시작될 때 모델이 한 번만 다운로드됩니다.
ZeroGPU 최적화
무료 추론을 활성화하려면 생성 함수에 @spaces.GPU 데코레이터를 적용해야 합니다. ZeroGPU에서 성능을 최적화하고 매 실행 시 모델을 디스크에서 GPU로 다시 로드하는 것을 방지하려면, 모델 선언을 데코레이터가 적용된 함수에서 전역 Python 컨텍스트로 이동시켜야 합니다. 사전 로드는 ComfyUI model_management.load_models_gpu 함수를 통해 처리됩니다.
배포 단계
- Requirements:
custom_nodes폴더의 모든 요구 사항을 하나의 루트requirements.txt파일로 통합합니다. - Space Configuration: 새 Space를 생성하고 하드웨어를 ZeroGPU로 설정합니다 (PRO 구독자에게 제공되거나 ComfyUI 백엔드에 대한 지원 요청을 통해 이용 가능).
- File Upload:
models폴더를 제외한 모든 ComfyUI 폴더 파일을 업로드합니다. - Authentication: 제한된 모델(예: FLUX)의 경우, Space 설정에
HF_TOKEN이라는 비밀로 Hugging Face 토큰을 추가합니다.
향후 자동화
Hugging Face는 2025년 초에 "workflow-to-app" 프로세스를 자동화하고 간소화할 계획이며, 이를 통해 수동 코딩 및 설정 필요성을 줄일 예정입니다.