GitHub - gradio-app/daggr: Chain apps and models to build robust AI workflows ๐ค
ํต์ฌ ํฌ์ธํธ
- 1Daggr๋ Gradio ์ฑ, Hugging Face ๋ชจ๋ธ ๋ฐ Python ํจ์๋ฅผ ์ฐ๊ฒฐํ์ฌ AI ์ํฌํ๋ก์ฐ๋ฅผ ์ฝ๋๋ก ๊ตฌ์ถํ๊ณ ์๊ฐ์ ์บ๋ฒ์ค๋ฅผ ํตํด ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฒ์ฌ ๋ฐ ๋จ๊ณ ์ฌ์คํ์ ์ง์ํ๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- 2์ด ๋๊ตฌ๋ ์ํฌํ๋ก์ฐ ์ํ ์ ์ฅ์ ์ํ persistence ๊ธฐ๋ฅ๊ณผ, ์ด์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ๊ณ ์ ๋ ฅ ๊ฐ์ ๋ณต์ํ๋ provenance ์ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ณต์กํ๊ฑฐ๋ ์ฅ๊ธฐ ์คํ๋๋ AI/ML ์์ ์ ์ ์ฉํฉ๋๋ค.
- 3๋ํ, Daggr๋ Hugging Face Spaces๋ก์ ๊ฐํธํ ๋ฐฐํฌ, GradioNode์ `run_locally` ์ต์ ์ ํตํ ๋ก์ปฌ ์คํ, LLM ์นํ์ ์ธ ์ค๋ฅ ๋ฉ์์ง ๋ฐ REST API ์ ๊ทผ์ ํตํด ์ํฌํ๋ก์ฐ ๊ฐ๋ฐ ๋ฐ ํตํฉ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
daggr๋ Gradio ์ฑ, ML ๋ชจ๋ธ (Hugging Face Inference Providers๋ฅผ ํตํด), ๊ทธ๋ฆฌ๊ณ ์ปค์คํ
Python ํจ์๋ค์ ์ฐ๊ฒฐํ์ฌ ๊ฐ๋ ฅํ AI workflow๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์ด๋ workflow๋ฅผ ์ฝ๋๋ก ์ ์ํ๋ฉด ์๊ฐ์ ์บ๋ฒ์ค(visual canvas)๋ฅผ ์๋์ผ๋ก ์์ฑํ์ฌ, ์ฌ์ฉ์์๊ฒ ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฒ์ฌ, ๊ฐ๋ณ ๋จ๊ณ ์ฌ์คํ, ๋ณต์กํ๊ฑฐ๋ ์ฅ๊ธฐ ์คํ workflow์ ์ํ ๋ณด์กด, ๊ทธ๋ฆฌ๊ณ provenance ์ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก (Core Methodology)
daggr workflow๋ ๋
ธ๋(node)๋ค์ด ์ฐ๊ฒฐ๋ Directed Acyclic Graph (DAG) ํํ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ๋
ธ๋๋ ์ฐ์ฐ(computation)์ ๋ํ๋ด๋ฉฐ, input ports์ output ports๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ํ๋ฆ
๋๋ค.
- ๋
ธ๋ ์ ํ (Node Types)
GradioNode:Gradio Space์ API endpoint๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.space_or_url๋งค๊ฐ๋ณ์๋ก Hugging Face Space ID ๋๋ URL์,api_name์ผ๋ก ํธ์ถํ API ์๋ํฌ์ธํธ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.inputs๋์ ๋๋ฆฌ์ ํค๋ ๋์ API์ ๋งค๊ฐ๋ณ์ ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํ๋ฉฐ,outputs๋์ ๋๋ฆฌ๋ API ๋ฐํ ๊ฐ์ ์์์ ๋งคํ๋ฉ๋๋ค.GradioNode๋ ์ธ๋ถ API ํธ์ถ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋์(concurrent) ์คํ๋ฉ๋๋ค.FnNode: Python ํจ์๋ฅผ ์คํํฉ๋๋ค.fn๋งค๊ฐ๋ณ์์ ํธ์ถํ ํจ์๋ฅผ ์ ๋ฌํฉ๋๋ค.inputs๋์ ๋๋ฆฌ์ ํค๋ ํจ์์ ๋งค๊ฐ๋ณ์ ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํ๋ฉฐ,outputs๋์ ๋๋ฆฌ๋ ํจ์์ ๋ฐํ ๊ฐ ์์์ ๋งคํ๋ฉ๋๋ค. ๋จ์ผ ๊ฐ์ ๋ฐํํ๊ฑฐ๋, ์ฌ๋ฌ ๊ฐ์tupleํํ๋ก ๋ฐํํ์ฌ ์ฌ๋ฌoutput port์ ๋งคํํ ์ ์์ต๋๋ค.FnNode๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ (session)๋น ์์ฐจ(sequential)์ ์ผ๋ก ์คํ๋์ด ๋ฆฌ์์ค ๊ฒฝํฉ์ ๋ฐฉ์งํ์ง๋ง, ์ค์ ๋๋concurrency_group๋ฐmax_concurrent์ค์ ์ ํตํด ๋์ ์คํ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.InferenceNode: Hugging Face Inference Providers๋ฅผ ํตํด ํธ์คํ ๋ ๋ชจ๋ธ์ ํธ์ถํฉ๋๋ค.model๋งค๊ฐ๋ณ์์ ๋ชจ๋ธ ID๋ฅผ ์ง์ ํฉ๋๋ค.inputs์outputs์ ์ ๋ฐฉ์์GradioNode์ ์ ์ฌํ๋ฉฐ,InferenceNode๋ํ ์ธ๋ถ API ํธ์ถ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ์คํ๋ฉ๋๋ค.
- ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ํฌํธ (Input & Output Ports)
Input ports:Gradio component(gr.Textbox,gr.Image๋ฑ): UI์ ๋ ๋ฆฝ์ ์ธ ์ ๋ ฅ ํ๋๋ฅผ ์์ฑํฉ๋๋ค.Port reference(other_node.output_name): ์ด์ ๋ ธ๋์ ์ถ๋ ฅ ํฌํธ์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฌํฉ๋๋ค.Fixed value: ์์๋ก ์ง์ ์ ๋ฌ๋๋ฉฐ UI์ ๋ํ๋์ง ์์ต๋๋ค.Callable: workflow๊ฐ ์คํ๋ ๋๋ง๋ค ํธ์ถ๋๋ ํจ์์ ๋๋ค (์:random.randomfor seed).
Output ports:Gradio component: ๋ ธ๋ ์นด๋์ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ํ์ํฉ๋๋ค.None: ์ถ๋ ฅ์ UI์์ ์จ๊ฒจ์ง์ง๋ง, ๋ค์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค.
- ํน์ ๊ธฐ๋ฅ (Special Features)
- Scatter / Gather (๋ถ์ฐ/์งํฉ): ๋
ธ๋๊ฐ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๊ณ ๊ฐ ํญ๋ชฉ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ ๋
.{output_port_name}.each๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ(scatter)์ํฌ ์ ์์ต๋๋ค. ์ดํ.{output_port_name}.all()์ ์ฌ์ฉํ์ฌ ๋ถ์ฐ๋ ํญ๋ชฉ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๋ฆฌ์คํธ๋ก ์งํฉ(gather)ํ ์ ์์ต๋๋ค. - Choice Nodes (์ ํ ๋
ธ๋):
|์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋์ ๋ ธ๋๋ฅผ ์ ์ํ๊ณ , ๋ฐํ์์ UI์์ ์ฌ์ฉ์๊ฐ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค. ๋ชจ๋ ๋์์ ๋์ผํoutput ports๋ฅผ ๊ฐ์ ธ์ผ ํ์ง๋ง,input ports๋ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- Scatter / Gather (๋ถ์ฐ/์งํฉ): ๋
ธ๋๊ฐ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๊ณ ๊ฐ ํญ๋ชฉ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ ๋
์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ํน์ง
- ์๊ฐ์ ์บ๋ฒ์ค (Visual Canvas): Python ์ฝ๋๋ก workflow๋ฅผ ์ ์ํ๋ฉด,
daggr๊ฐ ์ด๋ฅผ ํด์ํ์ฌ ์ฌ์ฉ์ ์นํ์ ์ธ ์๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. - ์ํ ๋ณด์กด ๋ฐ ์ํธ (Persistence & Sheets): ์ ๋ ฅ ๊ฐ, ๋ ธ๋ ๊ฒฐ๊ณผ, ์บ๋ฒ์ค ์์น ๋ฑ workflow ์ํ๋ฅผ ์๋์ผ๋ก ์ ์ฅํฉ๋๋ค. "์ํธ(sheets)" ๊ธฐ๋ฅ์ ํตํด ๋จ์ผ ์ฑ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ฆฌ๋ ์์ ๊ณต๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ฐ ์ํธ๋ ๋ ๋ฆฝ์ ์ธ ์ ๋ ฅ ๊ฐ๊ณผ ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์งํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์ด๋ ฅ ๋ฐ Provenance ์ถ์ (Result History & Provenance Tracking): ๋
ธ๋๊ฐ ์คํ๋ ๋๋ง๋ค ํด๋น ์์ ์ ๋ชจ๋ ์
๋ ฅ ๊ฐ ์ค๋
์ท๊ณผ ํจ๊ป ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ด์ ๊ฒฐ๊ณผ ํ์: ๋ ธ๋ ํธํฐ์ ํ์ดํ๋ฅผ ํตํด ์บ์๋ ์ด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
- ์๋ ์ ๋ ฅ ๋ณต์: ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ฉด, ํด๋น ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ์ ํํ ์ ๋ ฅ ๊ฐ์ด ์๋์ผ๋ก ๋ณต์๋ฉ๋๋ค.
- ์๊ฐ์ ๋ ธํํ ์งํ (Visual Staleness Indicators): ์ฃ์ง(edge) ์์์ผ๋ก workflow์ ์ด๋ค ๋ถ๋ถ์ด ์ต์ (orange)์ด๊ณ ์ด๋ค ๋ถ๋ถ์ด ๋ ธํํ(stale, gray)๋์๋์ง ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ค๋๋ค. ์์ ๋ ธ๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ํ์ ๋ ธ๋๊ฐ ์์ง ์คํ๋์ง ์์์ ๋ ์ฃ์ง๊ฐ ๋ ธํํ ์ํ๊ฐ ๋ฉ๋๋ค.
- ๋ฐฐํฌ (Deployment):
- ๋ก์ปฌ ์คํ:
graph.launch()๋ฅผ ํตํด ๋ก์ปฌ์์ ์คํํ๊ฑฐ๋,daggr app.py๋ช ๋ น์ด๋ก ํซ ๋ฆฌ๋ก๋ฉ(hot reloading)์ ์ง์ํฉ๋๋ค. - Hugging Face Spaces ๋ฐฐํฌ:
daggr deployCLI ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ workflow๋ฅผ Hugging Face Spaces์ ์์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ํ์ํ ์์กด์ฑ,requirements.txt,README.md๋ฑ์ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, private Space, ํ๋์จ์ด ํฐ์ด, ์ํฌ๋ฆฟ(secret) ์ค์ ๋ฑ์ ์ง์ํฉ๋๋ค. - ์๋ ๋ก์ปฌ ์คํ (Automatic Local Execution):
GradioNode์ ๋ฅผ ์ค์ ํ๋ฉด,daggr๊ฐ ํด๋น Gradio Space๋ฅผ ๋ก์ปฌ์ ํด๋ก ํ๊ณ ๊ฐ์ ํ๊ฒฝ์ ์์กด์ฑ์ ์ค์นํ์ฌ ์๋์ผ๋ก ์คํํฉ๋๋ค. ๋ก์ปฌ ์คํ ์คํจ ์ ์๊ฒฉ API๋ก ์๋ ํด๋ฐฑ(fallback)ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ก์ปฌ ์คํ:
- API ์ ๊ทผ (API Access):
daggrworkflow๋ REST API๋ฅผ ํตํด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํธ์ถ๋ ์ ์์ต๋๋ค./api/schema์๋ํฌ์ธํธ๋ฅผ ํตํด workflow์ ์ ๋ ฅ/์ถ๋ ฅ ์คํค๋ง๋ฅผ ํ์ธํ๊ณ ,/api/call์๋ํฌ์ธํธ์ JSON ํ์ด๋ก๋๋ก ์ ๋ ฅ์ POSTํ์ฌ workflow๋ฅผ ์คํํ ์ ์์ต๋๋ค. - LLM ์นํ์ ๊ธฐ๋ฅ (LLM-Friendly Features):
- ์์ธํ ์๋ฌ ๋ฉ์์ง: ์๋ชป๋ API ์๋ํฌ์ธํธ, ๋งค๊ฐ๋ณ์ ์คํ, ๋๋ฝ๋ ํ์ ๋งค๊ฐ๋ณ์ ๋ฑ ํํ ์ค๋ฅ์ ๋ํด ์์ธํ๊ณ ์คํ ๊ฐ๋ฅํ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ฌ LLM์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์์ ํ ์ ์๋๋ก ๋์ต๋๋ค.
.test()๋ฉ์๋: ๊ฐ ๋ ธ๋์.test()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ ๋ ฅ์ผ๋ก ๋ ธ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์คํํ๊ณ ์ค์ ์ถ๋ ฅ ํ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ LLM์ด ๋ ธ๋์ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ๋ณํ ๋ก์ง์ ์ดํดํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- Hugging Face ์ธ์ฆ (Authentication): ๋ก์ปฌ Hugging Face ํ ํฐ์ ์๋์ผ๋ก ์ฌ์ฉํ์ฌ ZeroGPU ํ ๋น๋ ์ถ์ , Private Space ์ ๊ทผ, Gate ๋ชจ๋ธ ์ ๊ทผ ๋ฑ์ ์ง์ํฉ๋๋ค.
๋ค๋ฅธ ๋๊ตฌ๋ค๊ณผ์ ๋น๊ต
- ComfyUI:
ComfyUI๊ฐ ์๊ฐ์ ๋ ธ๋ ํธ์ง๊ธฐ์ธ ๋ฐ๋ฉด,daggr๋ Python ์ฝ๋๋ก workflow๋ฅผ ์ ์ํ๊ณ ์๊ฐ์ ์บ๋ฒ์ค๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ์ฝ๋-ํผ์คํธ(code-first) ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค.Gradio Spaces๋ฐ Hugging Face ๋ชจ๋ธ๊ณผ ์ง์ ์ฐ๋๋ฉ๋๋ค. - Airflow/Prefect: ์ด๋ค ์ค์ผ์คํธ๋ ์ด์
ํ๋ซํผ์ด ๋๊ท๋ชจ ํ์ดํ๋ผ์ธ์ ์ค์ผ์ค๋ง, ๋ชจ๋ํฐ๋ง, ๊ด๋ฆฌ์ ์ด์ ์ ๋ง์ถ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ,
daggr๋ ์ค์๊ฐ ์๊ฐ์ ํผ๋๋ฐฑ๊ณผ ์ฆ๊ฐ์ ์ธ ์คํ์ ์ ๊ณตํ๋ ๋ํํ AI/ML workflow์ ์ค์ ์ ๋ก๋๋ค. ํ๋กํ ํ์ดํ, ๋ฐ๋ชจ, ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฒ์ฌ ๋ฐ ๊ฐ๋ณ ๋จ๊ณ ์ฌ์คํ์ ์ ํฉํฉ๋๋ค. - Gradio:
Gradio๋ ๋จ์ผ ML ๋ชจ๋ธ ๋๋ ๋ฐ๋ชจ๋ฅผ ์ํ ์น UI๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.daggr๋ ์ฌ๋ฌGradio์ฑ, ์ปค์คํ Python ํจ์, ๊ทธ๋ฆฌ๊ณ Inference Providers๋ฅผ ํฌ๋ช ํ๊ณ ์ฝ๊ฒ ๊ฒ์ฌํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๋ณต์กํ workflow๋ฅผ ๊ตฌ์ถํฉ๋๋ค.