Experiments KO - k-p2p-lab/kpl-v3 GitHub Wiki

์‹คํ—˜ ์‹คํ–‰ยท์ •์ง€ยท๋ณต๊ตฌ

Wiki home โ€บ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ยท ์˜์–ด ์›๋ฌธ

๋ฌธ์„œ ์•ˆ๋‚ด ยท ์†Œ์Šค ์ €์žฅ์†Œ

Swarm ๋ฐฐํฌ์™€ Agent ์šฉ๋Ÿ‰ ์„ค์ • ์ดํ›„์˜ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค. ์ €์žฅ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์žฌ์‚ฌ์šฉํ•  ์ž…๋ ฅ, run์€ ํ•œ ๋ฒˆ์˜ ์‹คํ–‰, batch๋Š” ๋ฐ˜๋ณต ํšŒ์ฐจ์˜ ๋ฌถ์Œ, retry๋Š” ๋ฏธ์™„๋ฃŒ ํšŒ์ฐจ์˜ ์ƒˆ ์‹œ๋„์ž…๋‹ˆ๋‹ค.

์ค€๋น„์™€ ์‹œ์ž‘

  1. ๋Œ€์‹œ๋ณด๋“œ์˜ Run experiment๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์ €์žฅ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ YAML์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ์ฐธ์กฐ๊ฐ€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. Validate๋ฅผ ๋ˆ„๋ฅด๊ณ  Agent ๊ฐ€์šฉ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ์€ ์ž…๋ ฅ์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์‹คํ–‰ ์šฉ๋Ÿ‰ยท์—ฐ๊ฒฐ๊นŒ์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์€ ์ฒซ ์‹คํ—˜์€ examples/monitoring.yaml์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Runs๋ฅผ ์ง€์ •ํ•˜๊ณ  Run์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. Experiment progress์—์„œ ์ง„ํ–‰์„ ํ™•์ธํ•˜๊ณ  ๊ธฐ๋ก์€ Saved results์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์‹คํ—˜ ์˜ˆ์•ฝ

๋‹ค๋ฅธ ์‹คํ—˜์ด ์‹คํ–‰ ์ค‘์ด์–ด๋„ Run experiment โ†’ Run์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘์ˆ˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ Controller ๋Œ€๊ธฐ์—ด์— ๋“ค์–ด๊ฐ€๋ฉฐ, ํ•œ ์ œ์ถœ์˜ ๋ฐ˜๋ณต ํšŒ์ฐจ๊ฐ€ ๋ชจ๋‘ ๋๋‚œ ๋‹ค์Œ ์ œ์ถœ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‹œ๋„ยท์ด์–ดํ•˜๊ธฐยทAdd runs๋„ ๊ฐ™์€ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. YAMLยทseedยท์ƒ์†ํ•œ ๊ฒฐ๊ณผ ๊ทธ๋ฃน์€ ์ ‘์ˆ˜ ์‹œ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ ‘์ˆ˜ํ•œ ์ž‘์—…์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Experiment progress์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ๋ฐฐ์น˜ ์•ž์— ๋ช‡ ๊ฐœ์˜ ์ œ์ถœ์ด ์žˆ๋Š”์ง€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•ญ๋ชฉ์˜ ์ค‘์ง€ ๋ฒ„ํŠผ์€ ๊ทธ ์ œ์ถœ๊ณผ ๋ฐ˜๋ณต ํšŒ์ฐจ๋งŒ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ๋ฐฐ์น˜๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋ฉด ๊ทธ ๋ฐฐ์น˜์˜ ๋‚จ์€ ํšŒ์ฐจ๋งŒ ์ทจ์†Œํ•˜๊ณ , Peer ์ •๋ฆฌ์™€ ์ตœ์ข… telemetry ์ˆ˜์ง‘ ํ›„ ๋‹ค์Œ ์ œ์ถœ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์„ฑ๊ณตํ•œ ๋‹จ์ผ Run์ด ์œ ์ง€ํ•œ Peer๋„ ๋‹ค์Œ ์ œ์ถœ ์‹œ์ž‘ ์ „์— ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ •๋ฆฌ๋ฅผ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ์ œ์ถœ์€ Waiting for previous Peer cleanup์œผ๋กœ ๋Œ€๊ธฐํ•˜๋ฉฐ, ์ •๋ฆฌ ์‹œ๋„๊ฐ€ ์‹คํŒจํ•  ๋•Œ๋งˆ๋‹ค 3์ดˆ ํ›„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋Œ€๊ธฐ ํ•ญ๋ชฉ์„ ์ทจ์†Œํ•ด๋„ ์ดํ›„ ์ œ์ถœ์ด ์ •๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์•ฝ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ Run ์‹œ์ž‘ ์‹œ๊ฐยทphase timeoutยทschedule ์‹œ๊ณ„์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Controller ์žฌ์‹œ์ž‘ ์‹œ ์˜ˆ์•ฝํ•œ ๊ฒฐ๊ณผ๋Š” interrupted๋กœ ๋‚จ์œผ๋ฉฐ Retry experiment / Retry from run์œผ๋กœ ์ˆ˜๋™ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‹œ์ž‘ ํ›„ ๋Œ€๊ธฐ์—ด์„ ์ž๋™ ์žฌ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ดˆ๊ธฐํ™”

์‹คํ—˜ ๋„คํŠธ์›Œํฌ ์ค€๋น„ API๋Š” ๋ฐ˜๋ณต ํšŒ์ฐจยท์žฌ์‹œ๋„ยท์ด์–ดํ•˜๊ธฐยท์ถ”๊ฐ€ Run์„ ํฌํ•จํ•˜์—ฌ ๋งค Run ์ „์— ์ƒˆ Peer overlay๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. Peer ์ •๋ฆฌ ํ™•์ธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๋ชจ๋“  Agent๊ฐ€ ์ƒˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์ˆ˜๋ฝํ•œ ๋’ค ์‹คํ—˜ ์‹œ๊ณ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Preparing network ์‹œ๊ฐ„์€ ์‹œ๋‚˜๋ฆฌ์˜ค phase์™€ schedule ์‹œ๊ฐ„์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์‹คํŒจ ์‹œ ์ฒซ phase๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์‹คํŒจยท์˜ˆ์•ฝ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜๋Š” Swarm stack์—์„œ๋Š” ์ดˆ๊ธฐํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฐํฌ์—๋Š” ๊ฐฑ์‹ ํ•œ ์ด๋ฏธ์ง€์™€ stack์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋„คํŠธ์›Œํฌ ์ดˆ๊ธฐํ™”๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰

Run experiment์—์„œ YAML์„ ์ž…๋ ฅํ•˜๊ณ  Run ์˜†์˜ Runs๋ฅผ 1~100 ์ •์ˆ˜๋กœ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค. Controller๊ฐ€ ๋ชจ๋“  ํšŒ์ฐจ๋ฅผ ๋Œ€๊ธฐ์—ด์— ๋“ฑ๋กํ•œ ๋’ค ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ํšŒ์ฐจ๋งˆ๋‹ค ๊ณ ์œ  run ID, ๋ณ„๋„ ๊ฒฐ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ batchId, iteration, repetitions๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

2ํšŒ ์ด์ƒ์ด๋ฉด ๊ฐ ํšŒ์ฐจ์˜ ์ข…๋ฃŒ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์™„๋ฃŒ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ํ•ด๋‹น ํšŒ์ฐจ์˜ Peer ์ƒ์„ฑ์„ ์ฐจ๋‹จํ•˜๊ณ  ์ œ๊ฑฐํ•œ ๋’ค Agent ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ๋‹ค์Œ ํšŒ์ฐจ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ยท์ •๋ฆฌ ์‹คํŒจ๋Š” ํ•ด๋‹น ๋ฐฐ์น˜์˜ ๋‚จ์€ ํšŒ์ฐจ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ๋Œ€๊ธฐ ์ค‘์ธ ํ•ญ๋ชฉ์˜ Stop batch๋Š” ๊ทธ ์ œ์ถœ์˜ ํ˜„์žฌ ํšŒ์ฐจ์™€ ๋‚˜๋จธ์ง€ ๋ฐ˜๋ณต๋งŒ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ œ์ถœ์˜ ๋Œ€๊ธฐ ์ˆœ์„œ๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํšŒ์ฐจ์˜ YAML์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œํ•œ 0์ด ์•„๋‹Œ seed๋Š” ์žฌ์‚ฌ์šฉํ•˜๊ณ , 0์ด๊ฑฐ๋‚˜ ์ƒ๋žต๋˜๋ฉด ํšŒ์ฐจ๋ณ„๋กœ ์ƒˆ seed๋ฅผ ์ƒ์„ฑํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋™์ผ seed๋Š” ํ‘œ๋ณธ ์ถ”์ถœ ์ž…๋ ฅ์„ ๋ฐ˜๋ณตํ•˜์ง€๋งŒ Docker ํƒ€์ด๋ฐ, ํ›„๋ณด ์ง‘ํ•ฉ, ๋„คํŠธ์›Œํฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๊นŒ์ง€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Controller ์žฌ์‹œ์ž‘ ์‹œ ๋Œ€๊ธฐ์—ด์„ ์ž๋™์œผ๋กœ ์žฌ๊ฐœํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚จ์€ queuedยทrunning ๊ธฐ๋ก์€ interrupted๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋Š” ์‹คํ—˜ ์ œ์ถœ API๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์™„๋ฃŒ ๊ทธ๋ฃน์— Run ์ถ”๊ฐ€

Saved results์˜ ์™„๋ฃŒ ๊ทธ๋ฃน์—์„œ Add runs๋ฅผ ๋ˆ„๋ฅด๊ณ  Additional runs์— ์ถ”๊ฐ€ ์ˆ˜๋Ÿ‰์„ ์ž…๋ ฅํ•œ ๋’ค ์ดํ•ฉ์„ ํ™•์ธํ•˜๊ณ  Add and start๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. 10ํšŒ ์™„๋ฃŒ ๊ทธ๋ฃน์— 10ํšŒ๋ฅผ ๋”ํ•˜๋ฉด ๊ฐ™์€ ๋ฐฐ์น˜ ID๋กœ Run 11 of 20๋ถ€ํ„ฐ Run 20 of 20๊นŒ์ง€ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ YAML๊ณผ seed ์ •์ฑ…์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๊ธฐ์กด ๊ฒฐ๊ณผยท๊ฐœ๋ณ„ ๋ฉ”๋ชจยทGroup ๋ฉ”๋ชจ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋œ ๋‹จ์ผ Run์—๋„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๋ฃน์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์ดํ•ฉ์€ ๊ธฐ์กด๊ณผ ๊ฐ™์ด ์ตœ๋Œ€ 100ํšŒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ํšŒ์ฐจ๊ฐ€ ๋น ์ง์—†์ด ์™„๋ฃŒ๋œ ๊ทธ๋ฃน๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ยท์ข…๋ฃŒ ์ •๋ฆฌยท๋‹ค์šด๋กœ๋“œยท๊ฐœ๋ณ„/๋ฐฐ์น˜ ๋ถ„์„์ด ์ง„ํ–‰ ์ค‘์ด๋ฉด ์ถ”๊ฐ€๋ฅผ ๋ง‰์œผ๋ฉฐ, ๋ฏธ์™„๋ฃŒ ๊ทธ๋ฃน์€ ๊ธฐ์กด ์žฌ์‹œ๋„ยท์ด์–ดํ•˜๊ธฐ ๊ธฐ๋Šฅ์œผ๋กœ ๋จผ์ € ๋งˆ๋ฌด๋ฆฌํ•˜์‹ญ์‹œ์˜ค. ์ƒˆ ํšŒ์ฐจ ์ „์— ์ด์ „ Peer๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋กœ์ปฌ ์—ฌ์œ  ๊ณต๊ฐ„ ๊ฒ€์‚ฌ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ง€ยท์‹คํŒจํ•˜๋ฉด ์ƒˆ ๋Œ€๊ธฐ ํšŒ์ฐจ๋ฅผ ์ทจ์†Œํ•˜๋ฉฐ Retry from run์€ ์™„๋ฃŒ ํšŒ์ฐจ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ๋ฏธ์™„๋ฃŒ ์ถ”๊ฐ€๋ถ„์„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ ‘์ˆ˜๋œ ์‹คํ–‰์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์‹คํ–‰์ด ๋๋‚˜๋ฉด Analyze batch mean์œผ๋กœ ๊ทธ๋ฃน ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์›์ด ๋ฐ”๋€Œ๋ฉด ๊ธฐ์กด ๋ถ„์„ ์บ์‹œ๋ฅผ ์ตœ์‹  ๊ฒฐ๊ณผ๋กœ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 10 + 10์ด๋ฉด 20ํšŒ ์ „์ฒด์—์„œ ์ •์˜๋œ ์ง€ํ‘œ์˜ ๊ธฐ์—ฌ ํ‘œ๋ณธ ์ˆ˜๋Š” 20์ด๋ฉฐ ๊ฐ Run์„ ๋™์ผ ๊ฐ€์ค‘์น˜๋กœ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์‹คํŒจ ์‹œ๋„๋Š” ๊ณ„์† ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. Completed ํ•„ํ„ฐ์—์„œ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ๊ทธ๋ฃน์ด ๊ณ„์† ๋ณด์ด๋„๋ก ์ƒํƒœ ํ•„ํ„ฐ๋ฅผ All๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ดˆ ์ œ์ถœยท์žฌ์‹œ๋„ยท์ด์–ดํ•˜๊ธฐยท์ถ”๊ฐ€ ์ ‘์ˆ˜๋Š” ๋ชจ๋‘ ๋กœ์ปฌ result-groups/<batch-id>/batch.json ๊ธฐ๋ก์œผ๋กœ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ • ์ „ ์ค€๋น„ ์ค‘ ์ค‘๋‹จ๋œ ์˜ˆ์•ฝ์€ ๋กค๋ฐฑํ•˜๊ณ , ํ™•์ • ํ›„ ์žฌ์‹œ์ž‘๋œ ๋ฏธ์™„๋ฃŒ Run์€ interrupted๋กœ ๋ณด์กดํ•˜์—ฌ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจยท์‹œ๊ฐ„ ์ดˆ๊ณผ ์š”์ฒญ์€ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•œ ๋’ค ์žฌ์š”์ฒญ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜์‹ญ์‹œ์˜ค. result-groups/๋„ ๋ฐฑ์—…์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด experiment.json๊ณผ ๊ณผ๊ฑฐ ๋ถ„์„ ์Šค๋ƒ…์ƒท์€ ๋‹น์‹œ ์ดํ•ฉ์„ ์œ ์ง€ํ•˜๊ณ  ํ˜„์žฌ ๋ชฉ๋กยท์ƒˆ ํ†ตํ•ฉ ๋ถ„์„์€ ํ™•์ •๋œ ๊ทธ๋ฃน ์ดํ•ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์ดˆ ์ œ์ถœ ์‘๋‹ต์ด ์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€ ์ œ์ถœ ํ‚ค๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์ด ์œ ์‹ค๋œ ๋’ค ๊ฐ™์€ ์ž…๋ ฅ์„ ์žฌ์ „์†กํ•˜๋ฉด ๊ธฐ์กด ๊ทธ๋ฃน์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ค‘๋ณต ์‹คํ–‰์„ ๋ง‰์Šต๋‹ˆ๋‹ค. ์ž๋™ํ™”์—์„œ๋Š” API ๊ฐ€์ด๋“œ์˜ Idempotency-Key๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ตœ์‹  ์‹œ๋„ ์ •๋ณด๋Š” ๊ฐœ๋ณ„ ๊ฒฐ๊ณผ ์‚ญ์ œ ํ›„์—๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ์žฌ์‹œ๋„๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ํšŒ์ฐจ๊ฐ€ ๋ˆ„๋ฝ์œผ๋กœ ๋‚จ์œผ๋ฉฐ ์ด์ „ ์‹คํŒจ๊ฐ€ ํ˜„์žฌ ํšŒ์ฐจ๋กœ ๋˜์‚ด์•„๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฃน์„ ํ™•์žฅํ•˜๋ ค๋ฉด ๋ˆ„๋ฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณต๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์˜ˆ์•ฝ ๊ธฐ๋ก์ด ์†์ƒ๋˜๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน์˜ ์ž‘์—…์„ ๋ง‰๊ณ  Controller ๋กœ๊ทธ์— ๋‚จ๊ธฐ๋ฉฐ ๋‹ค๋ฅธ ๊ทธ๋ฃน์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ๋˜๋Š” ๋ฐฐ์น˜ ์ •์ง€

์ง„ํ–‰ ์ค‘ ์‹คํ—˜์˜ ์ •์ง€ ๋ฒ„ํŠผ์ด๋‚˜ ๋ฐ˜๋ณต ๊ทธ๋ฃน์˜ Stop batch๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ทจ์†Œ๊ฐ€ ์ ‘์ˆ˜๋˜๋ฉด ์ž‘์—…๊ณผ Peer๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋™์•ˆ **Stoppingโ€ฆ**๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณตํ•ด์„œ ๋ˆ„๋ฅผ ํ•„์š” ์—†์ด ์ƒํƒœ๊ฐ€ ํ™•์ •๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํ™œ์„ฑ ๋ฐฐ์น˜๋ฅผ ์ •์ง€ํ•˜๋ฉด ์‹คํ–‰ยท๋Œ€๊ธฐ ํšŒ์ฐจ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. Controller ์ข…๋ฃŒยท๋น„์ •์ƒ ์ข…๋ฃŒ์˜ ์ •๋ฆฌ ๋ฒ”์œ„๋Š” ์žฅ์• ์™€ ์ข…๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

Peer ์ข…๋ฃŒ ์‹œ HTTP ๋ฐœํ–‰ ์š”์ฒญ์—๋„ ๊ฐ™์€ ์ทจ์†Œ ์‹ ํ˜ธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐœํ–‰ ์ž ๊ธˆ์ด๋‚˜ topic ์ค€๋น„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์š”์ฒญ์€ ์ตœ์ข… telemetry drain ์ „์— ์‹ ์†ํžˆ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ ‘์ˆ˜๋œ ์‹คํ–‰ ๋ฌถ์Œ๋งˆ๋‹ค ์ƒˆ executionId๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ run ID๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์ด์–ดํ•˜๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. UI๋Š” ์ค‘์ง€ ์š”์ฒญ์— ์ด ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ **Stoppingโ€ฆ**๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์‹คํ–‰์˜ ์ง€์—ฐ๋œ ์ค‘์ง€ ์š”์ฒญ์ด ์ƒˆ ์žฌ์‹œ๋„ยท์ถ”๊ฐ€ ์‹คํ–‰์„ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. API ํด๋ผ์ด์–ธํŠธ๋„ X-KPL-Execution์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์ƒํƒœ, Peer ์ •๋ฆฌ, ๋กœ๊ทธ ์ˆ˜์ง‘ ์ƒํƒœ๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. canceled๋งŒ์œผ๋กœ ์ •๋ฆฌ ์„ฑ๊ณต์„ ํŒ๋‹จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ €์žฅ ๊ฒฐ๊ณผ๋Š” ์ •๋ฆฌ ์‹คํŒจ์™€ ๋ถˆ์™„์ „ยท๋ฏธํ™•์ธ ๋กœ๊ทธ๋ฅผ ํ•จ๊ป˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž์—ฐ ์ข…๋ฃŒ ํ›„ Peer๋ฅผ ์œ ์ง€ํ•œ ๋‹จ์ผ ์‹คํ–‰์€ cleanupState: retained, dataState: collecting์ด๋ฉฐ ๋กœ๊ทธ๊ฐ€ ๊ณ„์† ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ๋œ ์‹คํ—˜ ๋ณต๊ตฌ

์žฌ์‹œ์ž‘ ํ›„ ์ €์žฅ ์ƒํƒœ๊ฐ€ running ๋˜๋Š” queued์ธ ์‹คํ—˜์€ interrupted๋กœ ํ‘œ์‹œํ•˜๋ฉฐ ZIP ์›๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ‘œ์‹œ ์ƒํƒœ์ด๋ฉฐ ์‹ค์ œ Peer ์ข…๋ฃŒ๋ฅผ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์ƒํƒœยท์นด์šดํ„ฐ๋ฅผ ๋ณต์›ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰์„ ์ž๋™ ์žฌ๊ฐœํ•˜์ง€ ์•Š์ง€๋งŒ ZIP ์ง€ํ‘œ๋Š” ๋ณด์กด๋œ ๋กœ๊ทธ์—์„œ ์žฌ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋Š” ํ•ญ๋ชฉ์€ unreadable๋กœ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ๋กœ๊ทธยท์ €์žฅ ํŒŒ์ผ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Runs 1โ€“3 ์™„๋ฃŒ ํ›„ Run 4 of 10์ด ์‹คํŒจํ–ˆ๋‹ค๋ฉด ๋ชฉ์ ์— ๋งž๊ฒŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ๋‹ค์Œ ์‹คํ–‰ ์ด์ „ ์‹œ๋„
Continue remaining ์•„์ง ์‹œ์ž‘ํ•˜์ง€ ์•Š์€ Runs 5โ€“10๋งŒ ์‹คํ–‰ Run 4๋Š” ์‹คํŒจ๋กœ ๋‚จ์œผ๋ฉฐ ์„ฑ๊ณต 10ํšŒ๋ฅผ ์ฑ„์šฐ๋Š” ๋Œ€์ฒด ํšŒ์ฐจ๋Š” ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Œ
Retry from run 4 ๋ฏธ์™„๋ฃŒ Runs 4โ€“10์„ ๊ฐ๊ฐ ์ฒซ phase๋ถ€ํ„ฐ ์‹คํ–‰ ์™„๋ฃŒ ํšŒ์ฐจ๋Š” ๋ณด์กดํ•˜๊ณ  ์žฌ์‹œ๋„ ํšŒ์ฐจ๋Š” ์ƒˆ run ID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด์ „ ๋กœ๊ทธ๋ฅผ ์œ ์ง€

์ˆ˜๋™ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์ด๋ฉฐ phase ์ค‘๊ฐ„ ์ง€์  ๋ณต์›์ด๋‚˜ ์ž๋™ ์žฅ์•  ์ „ํ™˜์€ ์•„๋‹™๋‹ˆ๋‹ค.

์‹คํŒจ ํ›„ ๋‚จ์€ ํšŒ์ฐจ ์ด์–ด์„œ ์‹คํ–‰

Saved results์—์„œ ์ค‘๋‹จ๋œ ์‹œ๋ฆฌ์ฆˆ์˜ **Continue remaining (N)**์„ ๋ˆ„๋ฅด๋ฉด ์•„์ง ์‹œ์ž‘ํ•˜์ง€ ์•Š์€ ํšŒ์ฐจ๋งŒ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒยท์‹คํŒจํ•œ ํšŒ์ฐจ์™€ ๊ทธ ๋ฐ–์˜ ์ด๋ฏธ ์‹œ์ž‘ํ•œ ํšŒ์ฐจ๋Š” ๋ณด์กดํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๋ž˜ batch ID, run ID, ํšŒ์ฐจ ๋ฒˆํ˜ธ, ์ „์ฒด ๋ฐ˜๋ณต ์ˆ˜, ์ €์žฅ YAML๊ณผ ํšŒ์ฐจ๋ณ„ seed๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Run 2 of 5์—์„œ ์‹คํŒจํ–ˆ๋‹ค๋ฉด Runs 3โ€“5๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์„ฑ๊ณต 5ํšŒ๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ๋Œ€์ฒด ํšŒ์ฐจ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ํ‰๊ท ์—๋Š” ๊ณ„์† ์™„๋ฃŒ๋œ ํšŒ์ฐจ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Controller ์žฌ์‹œ์ž‘ ํ›„์—๋„ ์ €์žฅ ๊ฒฐ๊ณผ์—์„œ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ ํšŒ์ฐจ ๋˜๋Š” ์‹œ์ž‘ ํ›„ interrupted๊ฐ€ ๋œ ํšŒ์ฐจ๊ฐ€ ์žˆ๊ณ  ๋ฏธ์‹œ์ž‘ ํšŒ์ฐจ๊ฐ€ ๋ณด์กด๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Controller๋Š” ํ”ผ์–ด ์ƒ์„ฑ ์ „์— ๊ธฐ๋กํ•œ ์†Œ์œ  Agent์— ์ •๋ฆฌ๋ฅผ ์žฌ์š”์ฒญํ•œ ๋’ค ๋‚˜๋จธ์ง€๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Controller ์žฌ์‹œ์ž‘ ํ›„ Agent๊ฐ€ ์•„์ง ์žฌ๋“ฑ๋กํ•˜์ง€ ์•Š์•„๋„ ์ €์žฅ๋œ ์†Œ์œ  ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ด๋‹น Agent์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ƒˆ ํšŒ์ฐจ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์†Œ์œ  ๊ธฐ๋ก์ด ์—†๋Š” ๊ณผ๊ฑฐ ๊ฒฐ๊ณผ๋Š” ํ˜„์žฌ ๋“ฑ๋ก๋œ Agent๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ํ˜ธ์ŠคํŠธ์˜ ์ •๋ฆฌ๊นŒ์ง€ ์ฆ๋ช…ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ •๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‚จ์€ ํšŒ์ฐจ๋Š” ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ Continue remaining์„ ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํšŒ์ฐจ๊ฐ€ ๋˜ ์‹คํŒจํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ๋‹ค์‹œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต ์žฌ๊ฐœ, ํ™œ์„ฑ ๋ฐฐ์น˜, ๋‹ค์šด๋กœ๋“œ์™€ ์ง„ํ–‰ ์ค‘์ธ ๋ถ„์„ ์ž‘์—…์€ ์žฌ๊ฐœ ์ ‘์ˆ˜๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค. Stop batch๋กœ ์žฌ๊ฐœ ์ „ ์ •๋ฆฌ ๋‹จ๊ณ„๋„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๊ณ , ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ ‘์ˆ˜๋œ ์ž‘์—…์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

๋ฏธ์™„๋ฃŒ ํšŒ์ฐจ ์žฌ์‹œ๋„

**Saved results โ†’ Retry from run N (์ˆ˜๋Ÿ‰)**์œผ๋กœ ์‹คํŒจยท์ค‘๋‹จ๋œ ํšŒ์ฐจ๋ฅผ ํฌํ•จํ•œ ๋ฏธ์™„๋ฃŒ ํšŒ์ฐจ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ๋œ ํšŒ์ฐจ์˜ ๊ฒฐ๊ณผ๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์‹คํ—˜ ์‹คํŒจ์—๋Š” Retry experiment๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Controller๊ฐ€ ๋จผ์ € ์ด์ „ Peer๋ฅผ ์ •๋ฆฌํ•œ ๋’ค ์›๋ž˜ ์‹œ๋‚˜๋ฆฌ์˜คยทํšŒ์ฐจ ๋ฒˆํ˜ธยทseed๋กœ ๊ฐ ํšŒ์ฐจ์˜ ์ฒซ phase๋ถ€ํ„ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ƒˆ ํšŒ์ฐจ๋Š” ์ทจ์†Œ ์ƒํƒœ๋กœ ๋‚จ์œผ๋ฉฐ ์›์ธ์„ ํ•ด๊ฒฐํ•œ ๋’ค ๋‹ค์‹œ ์ด์–ดํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋กœ๊ทธ๋Š” Previous attempts์— ๋ณด์กดํ•˜๊ณ  ๋ฐฐ์น˜ ์ง„ํ–‰๋ฅ ยทํ‰๊ท ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด Continue remaining์€ ์‹œ๋„ํ–ˆ๋˜ ํšŒ์ฐจ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฏธ์‹œ์ž‘ ์ž”์—ฌ ํšŒ์ฐจ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ์ด์ „ Peer๋ฅผ ์ •๋ฆฌํ•œ ๋’ค ์ƒˆ ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Agent ์—ฐ๊ฒฐยท์ •๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•œ ๋’ค ์žฌ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ํ™œ์„ฑ ์‹คํ–‰ยท์ข…๋ฃŒ ์ฒ˜๋ฆฌยท๋‹ค์šด๋กœ๋“œยท์ง„ํ–‰ ์ค‘ run/batch ๋ถ„์„์ด ์žˆ์œผ๋ฉด ๋ณต๊ตฌ ์ ‘์ˆ˜๊ฐ€ ๊ฑฐ์ ˆ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘์ˆ˜ ์กฐ๊ฑด์€ ๋ณต๊ตฌ API, ๋น„๊ต์— ํฌํ•จํ•  ์‹œ๋„ ์ด๋ ฅ ๋ณด๊ณ ๋Š” ์—ฐ๊ตฌ ์›์น™์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์ง„ํ–‰๊ณผ ๊ฒฐ๊ณผ์˜ ์ •๋ ฌ

Experiment progress๋Š” ์ง„ํ–‰ ์ค‘ โ†’ ์ œ์ถœ ์ˆœ์„œ์˜ ๋Œ€๊ธฐ ํ•ญ๋ชฉ โ†’ ์ข…๋ฃŒ ์ˆœ์„œ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์ค‘์ธ ๊ฐ™์€ ์ œ์ถœ์˜ ๋ฐ˜๋ณต์€ ํšŒ์ฐจ ์ˆซ์ž ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Saved results์˜ ๋ฐฐ์น˜ ๋‚ด๋ถ€๋Š” Run n of M์˜ ํšŒ์ฐจ ์ˆซ์ž ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์ด์ „ ์‹œ๋„๋Š” ๋ณ„๋„๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ยท๋‚ด๋ณด๋‚ด๊ธฐยท์‚ญ์ œ๋Š” ๊ฒฐ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ์ƒ ์ข…๋ฃŒ ์‹œ๊ฐ

Experiment progress์˜ ์‹คํ–‰ ์ค‘ยท๋Œ€๊ธฐ ์ค‘์ธ ๊ฐ Run์— Est. finish์™€ ๋Œ€๋žต์ ์ธ ๋‚จ์€ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์นด๋“œ ์œ„ ์š”์•ฝ์—๋Š” ์ง„ํ–‰ ์ค‘์ธ ๋ฐ˜๋ณต ์‹คํ–‰ ๊ทธ๋ฃน๋ณ„ Group est. finish๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ์‹œ๊ฐ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ํ˜„์ง€ ์‹œ๊ฐ„๋Œ€์ด๋ฉฐ, ๋‚จ์€ ์‹œ๊ฐ„์€ Controller๊ฐ€ ๊ฐ™์€ ๊ทธ๋ฃน์—์„œ ๋จผ์ € ์‹คํ–‰๋  Run์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊นŒ์ง€ ํฌํ•จํ•ด ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์•ž์„  ๋ฐฐ์น˜๋‚˜ ์ด์ „ Peer ์ •๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ œ์ถœ์€ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ **Estimatingโ€ฆ**์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, ์„ ํ–‰ ์ž‘์—…์ด ํ•ด๊ฒฐ๋˜๊ธฐ ์ „์— ํ™•์ •์ ์ธ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ์ œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ Scenario estimate๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„, ๋ฐ˜๋ณต ํšŸ์ˆ˜์™€ ์ƒ˜ํ”Œ๋งํ•œ interval์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์˜ ๊ฒน์นจ, wait-jobs, stop-all, onExit์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ค€๋น„ ๋ฐฐ๋ฆฌ์–ด๋Š” ์ฒ˜์Œ์— ์„ค์ •๋œ timeout์„ ์‹œ๊ฐ„ ์—ฌ์œ ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ์ˆ˜๋Š” ์„ค์ •๋œ ์ตœ๋Œ“๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹ค์ œ publishยทleave ํ›„๋ณด๊ฐ€ ์ ์œผ๋ฉด ๋” ๋นจ๋ฆฌ ๋๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ๊ธฐ๋™, ์šฉ๋Ÿ‰ ๋Œ€๊ธฐ, ์š”์ฒญ ์ฒ˜๋ฆฌ์™€ ์ •๋ฆฌ ์‹œ๊ฐ„์€ ์‚ฌ์ „์— ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๋ฉด ์‹ค์ œ ์‹œ์ž‘ยท์ข…๋ฃŒ ์‹œ๊ฐ์œผ๋กœ ์˜ˆ์ธก์„ ๊ฐฑ์‹ ํ•˜๊ณ , ๊ฐ™์€ ์ง„ํ–‰ ์ค‘ ๊ทธ๋ฃน์—์„œ ์„ฑ๊ณตํ•œ Run์˜ ํ‰๊ท  ๋‹จ๊ณ„ ์‹œ๊ฐ„๊ณผ ์ •๋ฆฌ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์†Œ์š” ์‹œ๊ฐ„์œผ๋กœ ์ดํ›„ ์ถ”์ •์น˜๋ฅผ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ Based on N completed runs๋กœ ๋ณด์ • ๊ทผ๊ฑฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ์น˜๋Š” ์ข…๋ฃŒ ๊ธฐํ•œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด Estimatingโ€ฆ, ์˜ˆ์ƒ์„ ์ดˆ๊ณผํ•˜๋ฉด Taking longer than estimated๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋’ค์˜ ๋Œ€๊ธฐ Run๊ณผ ๊ทธ๋ฃน์˜ ์˜ˆ์ƒ ์‹œ๊ฐ์„ ๋Šฆ์ถฅ๋‹ˆ๋‹ค. Run ์ค‘์ง€ยท์ข…๋ฃŒ ํ›„์—๋Š” ํ•ด๋‹น ์˜ˆ์ธก์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์œผ๋กœ ์ž๋™ ์ค‘์ง€ํ•˜์ง€ ์•Š์œผ๋ฉฐ Saved results์— ์˜ˆ์ธก์„ ๋ณด์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ