GitHub - gradio-app/daggr: Chain apps and models to build robust AI workflows ๐Ÿค—
Service

GitHub - gradio-app/daggr: Chain apps and models to build robust AI workflows ๐Ÿค—

gradio-app
2026.01.30
ยทGitHubยทby ์ดํ˜ธ๋ฏผ
#AI#workflow#Gradio#Python#LLM

ํ•ต์‹ฌ ํฌ์ธํŠธ

  • 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๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฆ…๋‹ˆ๋‹ค.

  1. ๋…ธ๋“œ ์œ ํ˜• (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)์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ๋ฆฌ์†Œ์Šค ๊ฒฝํ•ฉ์„ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ, concurrent=Trueconcurrent=True ์„ค์ • ๋˜๋Š” concurrency_group ๋ฐ max_concurrent ์„ค์ •์„ ํ†ตํ•ด ๋™์‹œ ์‹คํ–‰์„ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • InferenceNode: Hugging Face Inference Providers๋ฅผ ํ†ตํ•ด ํ˜ธ์ŠคํŒ…๋œ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. model ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ชจ๋ธ ID๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. inputs์™€ outputs ์ •์˜ ๋ฐฉ์‹์€ GradioNode์™€ ์œ ์‚ฌํ•˜๋ฉฐ, InferenceNode ๋˜ํ•œ ์™ธ๋ถ€ API ํ˜ธ์ถœ์ด๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  1. ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ํฌํŠธ (Input & Output Ports)
    • Input ports:
      • Gradio component (gr.Textbox, gr.Image ๋“ฑ): UI์— ๋…๋ฆฝ์ ์ธ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • Port reference (other_node.output_name): ์ด์ „ ๋…ธ๋“œ์˜ ์ถœ๋ ฅ ํฌํŠธ์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
      • Fixed value: ์ƒ์ˆ˜๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜๋ฉฐ UI์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      • Callable: workflow๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค (์˜ˆ: random.random for seed).
    • Output ports:
      • Gradio component: ๋…ธ๋“œ ์นด๋“œ์— ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
      • None: ์ถœ๋ ฅ์€ UI์—์„œ ์ˆจ๊ฒจ์ง€์ง€๋งŒ, ๋‹ค์Œ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ํŠน์ˆ˜ ๊ธฐ๋Šฅ (Special Features)
    • Scatter / Gather (๋ถ„์‚ฐ/์ง‘ํ•ฉ): ๋…ธ๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ ํ•ญ๋ชฉ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•  ๋•Œ .{output_port_name}.each๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์‚ฐ(scatter)์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ .{output_port_name}.all()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์‚ฐ๋œ ํ•ญ๋ชฉ๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ์ง‘ํ•ฉ(gather)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Choice Nodes (์„ ํƒ ๋…ธ๋“œ): | ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋Œ€์•ˆ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์— UI์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋Œ€์•ˆ์€ ๋™์ผํ•œ output ports๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜์ง€๋งŒ, input ports๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ํŠน์ง•

  • ์‹œ๊ฐ์  ์บ”๋ฒ„์Šค (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 deploy CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ workflow๋ฅผ Hugging Face Spaces์— ์†์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์˜์กด์„ฑ, requirements.txt, README.md ๋“ฑ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, private Space, ํ•˜๋“œ์›จ์–ด ํ‹ฐ์–ด, ์‹œํฌ๋ฆฟ(secret) ์„ค์ • ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž๋™ ๋กœ์ปฌ ์‹คํ–‰ (Automatic Local Execution): GradioNode์— runlocally=Truerun_locally=True๋ฅผ ์„ค์ •ํ•˜๋ฉด, daggr๊ฐ€ ํ•ด๋‹น Gradio Space๋ฅผ ๋กœ์ปฌ์— ํด๋ก ํ•˜๊ณ  ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜์—ฌ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์‹คํ–‰ ์‹คํŒจ ์‹œ ์›๊ฒฉ API๋กœ ์ž๋™ ํด๋ฐฑ(fallback)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • API ์ ‘๊ทผ (API Access): daggr workflow๋Š” 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๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.