Gradio gr.Workflow: 시각적 AI 파이프라인 오케스트레이션
Hugging Face는 AI 파이프라인을 숨겨진 Python 스크립트에서 시각적이고 대화형인 인터페이스로 변환하는 Gradio의 새로운 기능인 gr.Workflow를 도입했습니다. gr.Workflow는 파이프라인을 타입이 지정된 노드의 그래프로 표현함으로써, 개발자가 중간 결과를 실시간으로 확인하고 전체 그래프를 사용자 인터페이스와 REST API 엔드포인트 세트로 모두 배포할 수 있도록 합니다.
Visual Pipeline Orchestration with gr.Workflow
gr.Workflow는 AI 파이프라인을 인터페이스 그 자체로 취급합니다. 여러 Python 단계를 거치는 데이터 흐름을 추적하기 위해 print-debugging에 의존하는 대신, 개발자는 모든 노드가 실행 가능하고 모든 중간 결과가 드래그 앤 드롭 캔버스에 표시되는 그래프로 파이프라인을 설명할 수 있습니다.
Core Architecture
A workflow는 세 가지 주요 노드 유형으로 구성됩니다:
- References: workflow의 입력값으로 사용됩니다.
- Operators: 작업을 수행하는 기능적 단계입니다. operator는 사용자 정의 Python 함수, Hugging Face Inference Providers를 통해 호스팅되는 모델, 다른 Gradio Space, 또는 Hub dataset의 행(row)이 될 수 있습니다.
- Subjects: workflow의 출력값으로 사용됩니다.
이러한 노드들은 타입이 지정된 포트를 통해 연결되어, 데이터가 그래프를 통해 이동할 때 데이터 일관성을 보장합니다.
Key Capabilities and Patterns
gr.Workflow는 병렬 실행 및 하이브리드 인프라 배포를 포함한 여러 복잡한 AI 오케스트레이션 패턴을 지원합니다.
Parallel Execution (Fan-out)
"fan-out" 패턴은 단일 입력이 여러 operator 노드에 동시에 공급될 수 있도록 합니다. 예를 들어, 단일 프롬프트가 여러 병렬 프로세스를 트리거할 수 있습니다: FLUX를 통해 기본 이미지를 생성하고, 해당 이미지의 두 가지 서로 다른 스타일의 재해석을 만들고, LLM을 사용하여 갤러리 제목을 생성하는 작업이 모두 병렬로 발생합니다.
Hybrid Infrastructure
Workflows는 단일 그래프 내에서 다양한 컴퓨팅 소스를 혼합하여 사용할 수 있습니다:
- Inference Providers: 노드는 Hugging Face Inference Providers를 통해 외부 모델을 호출할 수 있습니다.
- External Spaces: 노드는 다른 기존 Gradio Spaces를 호출할 수 있습니다.
- Local GPU Execution:
@spaces.GPU데코레이터를 바인딩된 함수에 적용함으로써, 개발자는 ZeroGPU를 사용하여 Space 내에서 모델을 직접 실행할 수 있습니다. ZeroGPU는 해당 호출에 대해 GPU 리소스를 동적으로 할당하고 해제합니다.
Automatic API Generation
모든 gr.Workflow는 자동으로 API로 변환됩니다. 그래프의 각 출력(subject)은 레이블 이름으로 지정된 REST 엔드포인트로 할 assigned, 파이프라인을 UI 없이 코드로 트리거할 수 있습니다.
Programmatic Access
개발자는 gradio_client Python 라이브러리 또는 curl을 통한 일반 HTTP 요청을 사용하여 이러한 엔드포인트를 사용할 수 있습니다. 예를 들어, /word_count 엔드포인트가 있는 workflow는 다음과 같이 호출할 수 있습니다:
from gradio_client import Client
client = Client("ysharma/gr-workflow-multi-endpoint-API")
print(client.predict("hello there friend", api_name="/word_count"))
Implementation and Deployment
Workflow를 Hugging Face Spaces에 배포하는 것은 한 번의 명령으로 처리되도록 설계되었습니다. Python에서의 가장 간단한 구현은 단 몇 줄의 코드만 필요합니다:
import gradio as gr
def your_function(text: str) -> str:
pass
gr.Workflow(bind=[your_function]).launch()
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch