Skip to content

About

๐Ÿ“Š AI Training/Test Experiments Automatic Tracking System

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Experiment Hub

Windows ์›น ์„œ๋น„์Šค, WSL, ๋‘ AI ์„œ๋ฒ„์˜ ์‹คํ—˜์„ MLflow์— ๋ชจ์œผ๊ณ  Notion์— ์ข…๋ฃŒ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก

VS Code๋Š” ๊ฐœ๋ฐœยท์ ‘์† ๋„๊ตฌ, ์‹ค์ œ ์‹คํ—˜์ด ์‹คํ–‰๋˜๋Š” OS์™€ ์„œ๋ฒ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ service, local, ai-1, ai-2๋ฅผ ๊ตฌ๋ถ„

์ „์ฒด ๊ตฌ์กฐ

๊ณต๊ฐœ์šฉ ์ฐธ์กฐ ๊ตฌํ˜„๋กœ ๊ธฐ์กด ์ถ”์ ๊ธฐ๋ฅผ ์ •๋ฆฌํ–ˆ๊ณ  Notion worker๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜•์œผ๋กœ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•จ. ํšŒ์‚ฌ ์›น ๋ผ์šฐํŠธ ์›๋ณธ, ๋ชจ๋ธ, ์‹ค์ œ ๋ฐ์ดํ„ฐ, ํ† ํฐ์€ ํฌํ•จํ•˜์ง€ ์•Š์Œ. ์šด์˜ ์ค‘์ธ ์„ค์น˜๋Š” ๋จผ์ € ์ด์ „ ์•ˆ๋‚ด๋ฅผ ํ™•์ธ.

๋ชฉ์ฐจ

๊ธฐ๋Šฅ๊ณผ ๋ฒ”์œ„

๊ธฐ๋Šฅ ๋™์ž‘
CLI ์‹คํ—˜ tracker.py run -- ๊ธฐ์กด ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ยท์ข…๋ฃŒยท์‹คํŒจ ๊ธฐ๋ก
ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ์‹คํ–‰ ํ™˜๊ฒฝ Env์™€ ํ˜ธ์ถœ ์ถœ์ฒ˜ Source๋ฅผ ๋ณ„๋„ ๊ธฐ๋ก
nnU-Net dataset / fold / plans๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ƒˆ validation summary์—์„œ Dice ์ˆ˜์ง‘
์ผ๋ฐ˜ Python ์‹คํ–‰๋ณ„ ์ˆซ์ž JSON ๋˜๋Š” Experiment API๋กœ ์ง€ํ‘œ ์ „๋‹ฌ
์›น ์ถ”๋ก  ์š”์ฒญ๋ณ„ ๊ธฐ๋ก๊ธฐ๋ฅผ ๋ถ™์—ฌ ๋ฒ„ํŠผ ์‹คํ–‰ ํ•œ ๊ฑด๋งˆ๋‹ค ๊ธฐ๋ก
์˜คํ”„๋ผ์ธ ๋ณด๊ด€ ๋กœ์ปฌ SQLite ํ์— ์ €์žฅํ•˜๊ณ  ์„œ๋ฒ„ ๋ณต๊ตฌ ํ›„ ์žฌ์ „์†ก
Notion ์ข…๋ฃŒ๋œ Run์„ RunID๋กœ ์ฐพ์•„ ์ƒ์„ฑยท๊ฐฑ์‹ , ๋™์ผ ๋‚ด์šฉ ์žฌ์ „์†ก ์ƒ๋žต
์‹ค์‹œ๊ฐ„ ์ƒํƒœ MLflow์—์„œ RUNNING ํ™•์ธ. Notion์—๋Š” ์ข…๋ฃŒ ๊ฒฐ๊ณผ๋งŒ ํ‘œ์‹œ

๋ชจ๋“  Python ๋ช…๋ น์„ ์ž๋™ ๊ฐ์ง€ํ•˜์ง€ ์•Š์Œ. CLI ๋ž˜ํผ ๋˜๋Š” ์ฝ”๋“œ ์—ฐ๋™์„ ๊ฑฐ์ณ์•ผ ํ•จ. ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ•™์Šต์—๋Š” ์†Œ๊ธ‰ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉฐ epoch๋ณ„ lossยทGPU ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์ž๋™ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์Œ.

๊ตฌํ˜„ ๊ณผ์ •

  1. Windows์— MLflow๋ฅผ ์„ค์น˜ํ•ด ์ค‘์•™ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ.
  2. ๋„ค ํ™˜๊ฒฝ์—์„œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํƒœ๊ทธ๋กœ ๊ตฌ๋ถ„.
  3. Notion ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ณ  ์ข…๋ฃŒ ๊ฒฐ๊ณผ ์ „์†ก worker๋ฅผ ์—ฐ๊ฒฐ.
  4. ํ•™์Šต ๋ช…๋ น๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CLI ๋ž˜ํผ ๋งŒ๋“ค๊ธฐ.
  5. nnU-Net ๊ฒฐ๊ณผ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด ์ด์ „ ํ•™์Šต์˜ Dice๊ฐ€ ์ƒˆ ์‹คํ–‰์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ํ•จ.
  6. ์›น ์„œ๋น„์Šค๋Š” ๋ช…๋ น์–ด ๋Œ€์‹  ๋ฒ„ํŠผ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ๋ฐฑ์—”๋“œ ์š”์ฒญ๋ณ„ ๊ธฐ๋ก๊ธฐ์™€ ๋ณ„๋„ ์ „์†ก worker๋ฅผ ์—ฐ๊ฒฐ.
  7. ์ˆœ์ˆ˜ inference์™€ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ๊ฐ„์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ณต๊ฐœ ์ฝ”๋“œ์—์„œ ๋กœ์ปฌ ๊ฒฐ๊ณผ ๊ฒฝ๋กœ ์ „์†ก์„ ์ œ๊ฑฐ.

์ €์žฅ์†Œ ๊ตฌ์„ฑ

๊ฒฝ๋กœ ์—ญํ• 
tracker.py ํ™˜๊ฒฝ ์„ค์ •, ๋กœ์ปฌ ํ, CLI ๋ž˜ํผ, MLflow ์ „์†ก
sync_notion.py ์ค‘์•™ PC์˜ Notion ๋™๊ธฐํ™”
service_worker.py ์›น JSON outbox โ†’ MLflow
service/service_experiment_tracker.js Node ์š”์ฒญ๋ณ„ ๋น„๋™๊ธฐ ๊ธฐ๋ก๊ธฐ
service/integration_example.js ๊ธฐ์กด ์›น ๋ฐฑ์—”๋“œ์— ๋ถ™์ด๋Š” ์˜ˆ์ œ
examples/demo_metrics.py ๋ชจ๋ธ ์—†๋Š” ํ•ฉ์„ฑ ์ง€ํ‘œ ํ…Œ์ŠคํŠธ
.env.example ์ค‘์•™ PC ์„ค์ • ํ…œํ”Œ๋ฆฟ
requirements-hub.txt ์ค‘์•™ MLflow ์˜์กด์„ฑ
tests/ Python ์ž๋™ ํ…Œ์ŠคํŠธ
docs/ ์šด์˜ยท์ด์ „ ์•ˆ๋‚ด, PNGยทSVG ๊ทธ๋ฆผ, ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์›๋ณธ

์„ค์น˜ ์ˆœ์„œ

์„ค์น˜ ์ˆœ์„œ

1. ์ค€๋น„

์œ„์น˜ ์š”๊ตฌ ์‚ฌํ•ญ ์—ญํ• 
Windows ์ค‘์•™ PC Python 3.10+, MLflow 3.18.0 ์ค‘์•™ ์ €์žฅ์†Œ, Notion worker
WSL local Python 3.9+ init --env local, CLI ์‹คํ—˜
AI ์„œ๋ฒ„ 1ยท2 Python 3.9+, ๊ธฐ์กด conda ํ™˜๊ฒฝ ๊ฐ ์„œ๋ฒ„์—์„œ init, CLI ์‹คํ—˜
Windows ์›น ์„œ๋น„์Šค ๊ธฐ์กด Node ์•ฑ, Node 18+ ๊ถŒ์žฅ ์š”์ฒญ๋ณ„ JS ๊ธฐ๋ก๊ธฐ์™€ service worker

์ถ”์ ๊ธฐ์™€ Notion worker๋Š” Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•จ. ํ•™์Šต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ์กด conda ํ™˜๊ฒฝ์— ๋‘ก๋‹ˆ๋‹ค. MLflow ์„ค์น˜๋Š” ์ค‘์•™ PC์—๋งŒ ํ•„์š”ํ•จ. Node ํ…Œ์ŠคํŠธ๋Š” Node 22 ๊ธฐ์ค€์ž„.

์ €์žฅ์†Œ ํŒŒ์ผ์„ Windows C:\experiment-hub, ๊ฐ Linux ํ™˜๊ฒฝ ~/experiment-hub์— ๋ฐฐ์น˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•จ. YOUR_WINDOWS_LAN_IP๋Š” Windows ipconfig์—์„œ ํ™•์ธํ•œ IPv4 ์ฃผ์†Œ๋กœ ์ˆ˜์ •.

2. Windows MLflow ์‹œ์ž‘

์ƒˆ ์„ค์น˜์šฉ PowerShell. ๊ธฐ์กด ์„ค์น˜์—์„œ๋Š” ๊ธฐ์กด ์‹คํ–‰ ๋ช…๋ น๊ณผ DB ๊ฒฝ๋กœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์Šคํ‚ต. ๋‹ค๋ฅธ DB๋ฅผ ์—ด๋ฉด ์ด์ „ ์‹คํ—˜์ด ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ.

cd C:\experiment-hub
py -3.10 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements-hub.txt
New-Item -ItemType Directory -Force runtime
$HubIP = "YOUR_WINDOWS_LAN_IP"
.\.venv\Scripts\mlflow.exe server --host 0.0.0.0 --port 5000 --backend-store-uri "sqlite:///C:/experiment-hub/runtime/mlflow.db" --artifacts-destination "C:/experiment-hub/runtime/artifacts" --allowed-hosts "localhost:*,127.0.0.1:*,$($HubIP):*"

์ด ์ฐฝ์€ ์ผœ๋‘” ์ƒํƒœ๋กœ ์œ ์ง€. ์„ค์น˜๋œ Python์ด ๋‹ค๋ฅด๋ฉด py -0์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์ง€์› ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝ. MLflow๋Š” ์‹ ๋ขฐํ•˜๋Š” ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ. ์ด ์ฝ”๋“œ๋Š” ์™ธ๋ถ€ ์ธํ„ฐ๋„ท ๊ณต๊ฐœ์šฉ ์ธ์ฆ/TLS๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์Œ.

3. ์—ฐ๊ฒฐ ํ™•์ธ

Windows์˜ ์ƒˆ PowerShell:

Invoke-WebRequest http://127.0.0.1:5000/health

WSL ๋ฐ SSH๋กœ ์ ‘์†ํ•œ ์‹ค์ œ AI ์„œ๋ฒ„ ๊ฐ๊ฐ์—์„œ:

curl --connect-timeout 5 http://YOUR_WINDOWS_LAN_IP:5000/health

WSL์—์„œ ์—ฐ๊ฒฐ๋œ๋‹ค๊ณ  AI ์„œ๋ฒ„์—์„œ๋„ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜. ๊ฐ๊ฐ ํ™•์ธ. ๋ฐฉํ™”๋ฒฝยท๋ผ์šฐํŒ… ์ ๊ฒ€์€ ์šด์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ .

4. Notion ์ค€๋น„

  1. ์ƒˆ ํŽ˜์ด์ง€์˜ ์ด๋ฆ„์„ AI ์‹คํ—˜ ๊ธฐ๋ก์œผ๋กœ ์ง€์ •.
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค โ†’ ํ‘œ๋ฅผ ๋งŒ๋“ค๊ธฐ. ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํ‘œ๊ฐ€ ์•„๋‹ˆ๋ผ ์†์„ฑ ํƒ€์ž…์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.
  3. ์ฒซ ์—ด ์ œ๋ชฉ์„ Name์œผ๋กœ ๋ฐ”๊พธ๊ธฐ. ์…€ ์•ˆ์— Name์„ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹˜.
  4. ์•„๋ž˜ ์†์„ฑ ํ‘œ๋Œ€๋กœ ์—ด 14๊ฐœ๋ฅผ ๊ตฌ์„ฑ. ๋Œ€์†Œ๋ฌธ์žยท๋ฐ‘์ค„๋„ ๋งž์ถ”๊ธฐ.
  5. Notion ๋‚ด๋ถ€ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ์—์„œ Experiment Logger ๋‚ด๋ถ€ ์—ฐ๊ฒฐ ๋งŒ๋“ค๊ธฐ.
  6. ์ฝ˜ํ…์ธ  ์ฝ๊ธฐยท์‚ฝ์ž…ยท์—…๋ฐ์ดํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ ๊ถŒํ•œ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ.
  7. ์—ฐ๊ฒฐ์˜ ์ฝ˜ํ…์ธ  ์‚ฌ์šฉ ๊ถŒํ•œ์— ๋Œ€์ƒ ํŽ˜์ด์ง€/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ. ๋˜๋Š” ํŽ˜์ด์ง€์˜ ์—ฐ๊ฒฐ ๋ฉ”๋‰ด์—์„œ ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€. UI ๋ช…์นญ์€ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.
  8. ํ† ํฐ์€ ๋ณธ์ธ PC์˜ .env์—๋งŒ ์ €์žฅ.
  9. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งํฌ์—์„œ UUID๋ฅผ ํ™•์ธ. ?v= ๋’ค๋Š” ๋ณด๊ธฐ ID์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.

Env์˜ ์„ ํƒ ์˜ต์…˜: service, local, ai-1, ai-2, unknown. Status์˜ ์„ ํƒ ์˜ต์…˜: FINISHED, FAILED, KILLED. **Status ์†์„ฑ ํƒ€์ž…์€ Notion์˜ '์ƒํƒœ'๊ฐ€ ์•„๋‹ˆ๋ผ '์„ ํƒ'**์ž„.

5. .env์™€ Notion worker

cd C:\experiment-hub
Copy-Item .env.example .env
notepad .env

์„ค์ • ์ฑ„์šฐ๊ธฐ. ๋‹ค์Œ์€ ์ž๋ฆฌํ‘œ์‹œ์ž์ด๋ฉฐ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•จ.

MLFLOW_TRACKING_URI=http://127.0.0.1:5000
MLFLOW_PUBLIC_URL=http://YOUR_WINDOWS_LAN_IP:5000
NOTION_TOKEN=๋ณธ์ธ์˜_๋‚ด๋ถ€์—ฐ๊ฒฐ_ํ† ํฐ
NOTION_DATABASE_ID=๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค_UUID
NOTION_DATA_SOURCE_ID=
SYNC_INTERVAL_SECONDS=30

์ „์ฒด URL์€ ๋„ฃ์ง€ ์•Š์•„์•ผ ํ•จ. ์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ID๋ฅผ ์ฐพ์Œ. ์—ฌ๋Ÿฌ ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด NOTION_DATA_SOURCE_ID๋ฅผ ์ง์ ‘ ์ง€์ •. API ๋ฒ„์ „์€ 2025-09-03์œผ๋กœ ๊ณ ์ •.

.\.venv\Scripts\python.exe -X utf8 sync_notion.py --check
.\.venv\Scripts\python.exe -X utf8 -u sync_notion.py

--check๋Š” ๊ถŒํ•œยท์—ด ์ด๋ฆ„ยทํƒ€์ž…์„ ๊ฒ€์ฆํ•˜๊ณ  ํ–‰์€ ์“ฐ์ง€ ์•Š์Œ. ์ฒซ ๋™๊ธฐํ™”๋Š” ๋ชจ๋“  ํ™œ์„ฑ MLflow ์‹คํ—˜์˜ ์ข…๋ฃŒ Run์„ ์กฐํšŒ. ๊ฐ™์€ RunID๊ฐ€ Notion์— ์žˆ์œผ๋ฉด ํ•ด๋‹น ํ–‰์„ ๊ฐฑ์‹ ํ•จ.

6. ๊ฐ ์‹คํ–‰ ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”

ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ช…๋ น ํ•˜๋‚˜๋ฅผ ์‹คํ–‰. Windows ์„ค์ •์€ WSL์ด๋‚˜ SSH ์„œ๋ฒ„์— ๊ณต์œ ๋˜์ง€ ์•Š์Œ.

# AI ์„œ๋ฒ„ 1์—์„œ
python3 ~/experiment-hub/tracker.py init --env ai-1 --uri http://YOUR_WINDOWS_LAN_IP:5000
# AI ์„œ๋ฒ„ 2์—์„œ
python3 ~/experiment-hub/tracker.py init --env ai-2 --uri http://YOUR_WINDOWS_LAN_IP:5000
# WSL์—์„œ
python3 ~/experiment-hub/tracker.py init --env local --uri http://YOUR_WINDOWS_LAN_IP:5000

ํ๋Š” ๊ฐ ํ™˜๊ฒฝ์˜ ~/.experiment-tracker/queue.sqlite3์— ์ €์žฅ๋จ. ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์ด์ „ํ•  ๋•Œ ๊ธฐ์กด ํ์˜ URI๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ. ์ƒˆ EXPERIMENT_TRACKER_HOME์„ ์ง€์ •ํ•˜๊ณ  ๊ธฐ์กด ๋Œ€๊ธฐ ๊ธฐ๋ก์„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•จ.

7. ์ง€์† ์ „์†ก worker

๊ฐ Linux ํ™˜๊ฒฝ์—์„œ:

nohup python3 -u ~/experiment-hub/tracker.py sync > ~/experiment-hub/tracker-sync.log 2>&1 &

์‹คํ—˜ ๋ž˜ํผ๋„ ์‹คํ–‰ ์ค‘ ์ž„์‹œ ์ „์†ก ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰. ์ง€์† worker๋Š” ์‹คํ—˜์ด ๋๋‚œ ๋’ค์—๋„ ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ๊บผ์ ธ ์ „์†กํ•˜์ง€ ๋ชปํ•œ ๊ธฐ๋ก์„ ์žฌ์‹œ๋„ํ•จ. ์žฌ๋ถ€ํŒ… ํ›„ ์ง์ ‘ ๋‹ค์‹œ ์ผœ์•ผ ํ•จ.

8. ๋ชจ๋ธ ์—†๋Š” ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

cd ~/experiment-hub
mkdir -p runtime
METRICS_FILE="$PWD/runtime/demo-$(date +%s)-$$.json"
python3 tracker.py run --project connection-demo --model synthetic-demo --job test --metrics-file "$METRICS_FILE" -- python3 examples/demo_metrics.py --output "$METRICS_FILE"

MLflow์˜ connection-demo์™€ Notion ํ–‰์„ ํ™•์ธ. Dice 0.9์™€ Inference_s 0.25๋Š” ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์šฉ ํ•ฉ์„ฑ ๊ฐ’์ž„. ๋ชจ๋ธ ์„ฑ๋Šฅ์ด ์•„๋‹˜.

์‹คํ—˜ ์‹คํ–‰

์‹คํ–‰ ์ƒํƒœ

nnU-Net

conda activate nnunetv2
mkdir -p ~/nnunet/logs
CUDA_VISIBLE_DEVICES=1 nohup python3 -u ~/experiment-hub/tracker.py run -- nnUNetv2_train 302 3d_fullres 2 -p nnUNetResEncUNetMPlans > ~/nnunet/logs/tracked_302_fold2.log 2>&1 &
  • ์ด ๋ช…๋ น์€ ์ƒˆ ํ•™์Šต์„ ์‹œ์ž‘. ์ง„ํ–‰ ์ค‘์ธ ๋™์ผ fold์— ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ.
  • python3๋Š” 3.9 ์ด์ƒ์ด์–ด์•ผ ํ•จ. ์ถ”์ ๊ธฐ๋งŒ ๋‹ค๋ฅธ Python์œผ๋กœ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ํ•˜์œ„ nnUNet ๋ช…๋ น์€ ํ™œ์„ฑ conda PATH์—์„œ ์ฐพ์Œ.
  • nnUNet_results์™€ ํ•„์š”์‹œ nnUNet_preprocessed ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.
  • ์ž๋™ nnU-Net ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด --project๋ฅผ ์ƒ๋žต. ์ง€์ •ํ•˜๋ฉด ์ผ๋ฐ˜ ๋ช…๋ น ๋ชจ๋“œ์ž„.
  • ์ด๋ฒˆ ์‹คํ–‰์—์„œ ์ƒ์„ฑยท๋ณ€๊ฒฝ๋œ validation/summary.json์˜ foreground_mean.Dice๋งŒ ์ฝ์Œ. ๊ธฐ์กด ํŒŒ์ผ์€ ๊ฑด๋„ˆ๋œ€.
  • ๊ฐ™์€ ๊ฒฐ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ ํ•™์Šต์„ ๋™์‹œ์— ์“ฐ์ง€ ์•Š์Œ.
  • ์ข…๋ฃŒ ์ฝ”๋“œ 0์ด์–ด๋„ ์ง€ํ‘œ๋ฅผ ๋ชป ์ฝ์œผ๋ฉด FINISHED์— metric_warning์ด ๋ถ™์„ ์ˆ˜ ์žˆ์Œ.
tail -n 80 ~/nnunet/logs/tracked_302_fold2.log
python3 ~/experiment-hub/tracker.py status

์‹ค์ œ ํ•™์Šต ๋กœ๊ทธ๋Š” ์™ธ๋ถ€ nohup ๋กœ๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ ์•ˆ์˜ Output log: ๊ฒฝ๋กœ์ž„. ~/.experiment-tracker/logs/<์‹คํ–‰ID>.log๋ฅผ tail -f๋กœ ํ™•์ธํ•จ.

์ผ๋ฐ˜ Python ํ‰๊ฐ€

python3 ~/experiment-hub/tracker.py run --project bone-seg --model model-v1 --job evaluate --metrics-file /absolute/path/unique-run-metrics.json -- python evaluate.py

๋ณธ์ธ์˜ evaluate.py๊ฐ€ ํ•ด๋‹น JSON์„ ์‹ค์ œ๋กœ ์จ์•ผ ํ•จ. ์‹คํ–‰๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉ. ๊ฐ’ ์˜ˆ์‹œ:

{"dice_mean": 0.91, "hd95_mean_mm": 1.4, "model_inference_mean_sec": 2.1}

์ˆซ์ž ์ง€ํ‘œ๋Š” MLflow์— ์ €์žฅ๋จ. Notion์€ ์•„๋ž˜ ๋งคํ•‘์— ์žˆ๋Š” ๊ฐ’๋งŒ ํ‘œ์‹œ. ์ •๋‹ต ์—†์ด Dice๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ „์ฒด ์‹œ๊ฐ„์„ ์ˆœ์ˆ˜ inference ์‹œ๊ฐ„์œผ๋กœ ๋Œ€์‹  ์ฑ„์šฐ์ง€ ์•Š์Œ. GPU ๋น„๋™๊ธฐ ์—ฐ์‚ฐ์€ ์ ์ ˆํžˆ ๋™๊ธฐํ™”ํ•œ ๋ชจ๋ธ ๊ตฌ๊ฐ„์—์„œ ์ธก์ •ํ•ด์•ผ ํ•จ.

Python API

tracker.py๋ฅผ importํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ๋‘๊ณ  ์ง€์† sync worker๋ฅผ ์œ ์ง€.

from tracker import Experiment
with Experiment('bone-seg', model='model-v1', job='evaluate') as record:
    result = evaluate_model()  # ๋ณธ์ธ์˜ ํ•จ์ˆ˜
    record.log(dice_mean=result['dice'])

Experiment API ์ž์ฒด๋Š” ๋„คํŠธ์›Œํฌ worker๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ. ๋กœ์ปฌ ๋””์Šคํฌ ์˜ค๋ฅ˜๋Š” ํ˜ธ์ถœ์ž์— ์ „ํŒŒ๋  ์ˆ˜ ์žˆ์Œ.

์›น ๋ฒ„ํŠผ ์—ฐ๊ฒฐ

์•ฑ ์ „์ฒด๋ฅผ tracker.py run -- npm ...์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ํ•œ ๊ฑด์ด ๊ธฐ๋ก๋จ. ์ถ”๋ก  ์š”์ฒญ ํ•œ ๊ฑด๋งˆ๋‹ค ๊ธฐ๋กํ•˜๋ ค๋ฉด ๋ฐฑ์—”๋“œ ์—ฐ๋™์ด ํ•„์š”.

์›น ์‹œ๊ฐ„ ๋ฒ”์œ„

  1. service/service_experiment_tracker.js๋ฅผ ๊ธฐ์กด ์›น ํ”„๋กœ์ ํŠธ์˜ services ํด๋”์— ๋ณต์‚ฌ.
  2. service/integration_example.js๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Auto Seg ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ˆ˜์ •.
  3. ์š”์ฒญ ๊ฒ€์ฆ ํ›„ start(segType)๋ฅผ ํ˜ธ์ถœ.
  4. GPU ํ ์Šฌ๋กฏ์„ ์–ป์€ ๋’ค Python ์‹คํ–‰ ์ง์ „์— pipelineStart()๋ฅผ ํ˜ธ์ถœ. ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜๋Š” Python ์™„๋ฃŒ/์ฝœ๋ฐฑ ์‹œ ํ˜ธ์ถœ.
  5. ๊ฒฐ๊ณผ ์ƒ์„ฑ ์„ฑ๊ณต ์‹œ finish(true, result), ์‹คํŒจ ์‹œ finish(false)๋ฅผ ํ˜ธ์ถœ. HTTP 200 ๋ณธ๋ฌธ์—๋„ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ HTTP ์ฝ”๋“œ๋งŒ ๋ณด์ง€ ์•Š์Œ.
  6. ์ง„ํ–‰ ์ค‘ ์š”์ฒญ์ด ๋๋‚œ ๋’ค ์›น ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘.
  7. ๊ฐ™์€ Windows ๊ณ„์ •์˜ ์ƒˆ PowerShell์—์„œ ์ „์†ก worker๋ฅผ ์ผœ๊ธฐ.
cd C:\experiment-hub
.\.venv\Scripts\python.exe -X utf8 -u service_worker.py --uri http://127.0.0.1:5000

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

์›น ๊ธฐ๋ก๊ธฐ๋Š” ํ—ˆ์šฉ ๋ชฉ๋ก์˜ segmentation ํƒ€์ž…, ์ž„์˜ UUID, ์ƒํƒœ, ์‹œ๊ฐ„, STL ๊ฐœ์ˆ˜๋งŒ ๊ธฐ๋ก. ํ™˜์ž๋ช…ยทZIP๋ช…ยทDICOM ๊ฒฝ๋กœยท์›๋ณธ ์˜ค๋ฅ˜ยท๊ฒฐ๊ณผ ๊ฐ์ฒด ์ „์ฒด๋Š” ์ „์†กํ•˜์ง€ ์•Š์Œ. Notion ํ† ํฐ์€ ์›น ์•ฑ์— ๋„ฃ์ง€ ์•Š์Œ.

Notion ํ‘œ์™€ ์ง€ํ‘œ

์†์„ฑ Notion ํƒ€์ž… ์˜๋ฏธ
Name ์ œ๋ชฉ ์‹คํ–‰ ์ด๋ฆ„
Project ํ…์ŠคํŠธ MLflow ์‹คํ—˜ ์ด๋ฆ„
Source ํ…์ŠคํŠธ vscode / service ๋“ฑ ํ˜ธ์ถœ ์ถœ์ฒ˜
Env ์„ ํƒ ์‹ค์ œ ์‹คํ–‰ ํ™˜๊ฒฝ
Job ์„ ํƒ train / evaluate / inference / test
Model ํ…์ŠคํŠธ ๋ชจ๋ธ/์„ค์ • ํ‘œ์‹œ๋ช…; ๊ฐ€์ค‘์น˜ ํ•ด์‹œ๊ฐ€ ์•„๋‹˜
Started ๋‚ ์งœ ์‹œ์ž‘ ์‹œ๊ฐ; UTC ์ „๋‹ฌ, Notion์—์„œ ํ‘œ์‹œ
Status ์„ ํƒ FINISHED / FAILED / KILLED
Dice ์ˆซ์ž dice_mean; 0~1 ์›๊ฐ’
Inference_s ์ˆซ์ž model_inference_mean_sec; ๋ณ„๋„ ์ธก์ •๊ฐ’
Pipeline_s ์ˆซ์ž python_pipeline_sec; ์›น Python ํŒŒ์ดํ”„๋ผ์ธ
Total_s ์ˆซ์ž pipeline_total_sec; CLI ์ „์ฒด / ์›น ์Šน์ธ ํ›„ ์ฒ˜๋ฆฌ
RunID ํ…์ŠคํŠธ MLflow Run ID, ์ค‘๋ณต ๋ฐฉ์ง€ ๊ฒ€์ƒ‰ ํ‚ค
MLflow URL ์ƒ์„ธ ์‹คํ–‰ ๋งํฌ

์ถ”์ฒœ ๋ณด๊ธฐ: Env๋กœ ๊ทธ๋ฃนํ™”, Started ๋‚ด๋ฆผ์ฐจ์ˆœ, Project ํ•„ํ„ฐ. Source๋กœ๋งŒ ๊ทธ๋ฃนํ™”ํ•˜๋ฉด ai-1ยทai-2ยทlocal์ด vscode ๊ทธ๋ฃน์— ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Œ.

์šด์˜ ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ ํ•ด๊ฒฐ

ํ˜„์ƒ ํ™•์ธ
ํ•™์Šต ์ค‘ Notion์— ์•ˆ ๋ณด์ž„ ์ •์ƒ์ผ ์ˆ˜ ์žˆ์Œ. MLflow RUNNING ํ™•์ธ
MLflow์—๋„ ์—†์Œ /health, ํ™˜๊ฒฝ๋ณ„ init URI, tracker.py status์˜ PENDING
๋๋‚ฌ๋Š”๋ฐ Notion์— ์—†์Œ sync_notion.py ์‹คํ–‰๊ณผ ํ† ํฐยท๊ถŒํ•œยท์—ด ํƒ€์ž…
Dice๊ฐ€ ๋น„์–ด ์žˆ์Œ ์ƒˆ summary ๋ฐ ์œ ํšจํ•œ foreground_mean.Dice
์›น ์‹œ๊ฐ„์ด ๋น„์–ด ์žˆ์Œ ์‹ค์ œ ํ•ธ๋“ค๋Ÿฌ ์—ฐ๋™ ๋ฐ ๋™์ผ ์‚ฌ์šฉ์ž ๊ณ„์ • worker
์ค‘๋ณต RunID ์˜ค๋ฅ˜ ๊ธฐ์กด ์ค‘๋ณต ํ–‰ ํ™•์ธ ํ›„ ํ•˜๋‚˜๋งŒ ๋‚จ๊น€
์žฌ๋ถ€ํŒ… ํ›„ ์•ˆ ๋จ ์ค‘์•™ ์„œ๋ฒ„์™€ ํ•„์š”ํ•œ worker ์žฌ์‹œ์ž‘
python3 ~/experiment-hub/tracker.py sync --once

ํ•™์Šต์„ ์žฌ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ „์†ก๋งŒ ์žฌ์‹œ๋„ํ•จ. ๊ฐ•์ œ ์ข…๋ฃŒ/์ •์ „์€ RUNNING์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ. PID ์œ ๋ฌด๋งŒ์œผ๋กœ ์„ฑ๊ณต/์‹คํŒจ๋ฅผ ์ถ”์ •ํ•˜์ง€ ์•Š์Œ.

์šด์˜๊ณผ ๋ณต๊ตฌ ยท ์ด์ „ ์•ˆ๋‚ด

์ฐธ๊ณ  ๋ฌธ์„œ

About

๐Ÿ“Š AI Training/Test Experiments Automatic Tracking System

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages