Windows ์น ์๋น์ค, WSL, ๋ AI ์๋ฒ์ ์คํ์ MLflow์ ๋ชจ์ผ๊ณ Notion์ ์ข ๋ฃ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก
VS Code๋ ๊ฐ๋ฐยท์ ์ ๋๊ตฌ, ์ค์ ์คํ์ด ์คํ๋๋ OS์ ์๋ฒ๋ฅผ ๊ธฐ์ค์ผ๋ก service, local, ai-1, ai-2๋ฅผ ๊ตฌ๋ถ
๊ณต๊ฐ์ฉ ์ฐธ์กฐ ๊ตฌํ๋ก ๊ธฐ์กด ์ถ์ ๊ธฐ๋ฅผ ์ ๋ฆฌํ๊ณ Notion worker๋ ๋ ๋ฆฝ ์คํํ์ผ๋ก ์๋ก ๊ตฌ์ฑํจ. ํ์ฌ ์น ๋ผ์ฐํธ ์๋ณธ, ๋ชจ๋ธ, ์ค์ ๋ฐ์ดํฐ, ํ ํฐ์ ํฌํจํ์ง ์์. ์ด์ ์ค์ธ ์ค์น๋ ๋จผ์ ์ด์ ์๋ด๋ฅผ ํ์ธ.
- ๊ธฐ๋ฅ๊ณผ ๋ฒ์
- ๊ตฌํ ๊ณผ์
- ์ค์น ์์
- ์คํ ์คํ
- ์น ๋ฒํผ ์ฐ๊ฒฐ
- Notion ํ์ ์งํ
- ์ด์ ๋ฐ ๋ฌธ์ ํด๊ฒฐ
| ๊ธฐ๋ฅ | ๋์ |
|---|---|
| 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 ๋ชจ๋ํฐ๋ง์ ์๋ ์์งํ์ง ์์.
- Windows์ MLflow๋ฅผ ์ค์นํด ์ค์ ์ ์ฅ์ ๋ง๋ค๊ธฐ.
- ๋ค ํ๊ฒฝ์์ ์ฐ๊ฒฐ ํ ์คํธ๋ฅผ ์ํํ๊ณ ์คํ ํ๊ฒฝ์ ํ๊ทธ๋ก ๊ตฌ๋ถ.
- Notion ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด๋ถ ์ฐ๊ฒฐ์ ๋ง๋ค๊ณ ์ข ๋ฃ ๊ฒฐ๊ณผ ์ ์ก worker๋ฅผ ์ฐ๊ฒฐ.
- ํ์ต ๋ช ๋ น๋ง ์คํํ๋ฉด ๊ธฐ๋ก๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CLI ๋ํผ ๋ง๋ค๊ธฐ.
- nnU-Net ๊ฒฐ๊ณผ ํ์ผ์ ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ํ์ธํด ์ด์ ํ์ต์ Dice๊ฐ ์ ์คํ์ ๋ค์ด๊ฐ์ง ์๋๋ก ํจ.
- ์น ์๋น์ค๋ ๋ช ๋ น์ด ๋์ ๋ฒํผ์ผ๋ก ์คํํ๋ฏ๋ก ๋ฐฑ์๋ ์์ฒญ๋ณ ๊ธฐ๋ก๊ธฐ์ ๋ณ๋ ์ ์ก worker๋ฅผ ์ฐ๊ฒฐ.
- ์์ 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 ๊ทธ๋ฆผ, ํธ์ง ๊ฐ๋ฅํ ์๋ณธ |
| ์์น | ์๊ตฌ ์ฌํญ | ์ญํ |
|---|---|---|
| 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 ์ฃผ์๋ก ์์ .
์ ์ค์น์ฉ 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๋ฅผ ๊ตฌ์ฑํ์ง ์์.
Windows์ ์ PowerShell:
Invoke-WebRequest http://127.0.0.1:5000/healthWSL ๋ฐ SSH๋ก ์ ์ํ ์ค์ AI ์๋ฒ ๊ฐ๊ฐ์์:
curl --connect-timeout 5 http://YOUR_WINDOWS_LAN_IP:5000/healthWSL์์ ์ฐ๊ฒฐ๋๋ค๊ณ AI ์๋ฒ์์๋ ์ฐ๊ฒฐ๋๋ ๊ฒ์ ์๋. ๊ฐ๊ฐ ํ์ธ. ๋ฐฉํ๋ฒฝยท๋ผ์ฐํ ์ ๊ฒ์ ์ด์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ .
- ์ ํ์ด์ง์ ์ด๋ฆ์
AI ์คํ ๊ธฐ๋ก์ผ๋ก ์ง์ . - ๋ฐ์ดํฐ๋ฒ ์ด์ค โ ํ๋ฅผ ๋ง๋ค๊ธฐ. ์ผ๋ฐ ํ ์คํธ ํ๊ฐ ์๋๋ผ ์์ฑ ํ์ ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค.
- ์ฒซ ์ด ์ ๋ชฉ์
Name์ผ๋ก ๋ฐ๊พธ๊ธฐ. ์ ์์ Name์ ์ฐ๋ ๊ฒ์ด ์๋. - ์๋ ์์ฑ ํ๋๋ก ์ด 14๊ฐ๋ฅผ ๊ตฌ์ฑ. ๋์๋ฌธ์ยท๋ฐ์ค๋ ๋ง์ถ๊ธฐ.
- Notion ๋ด๋ถ ์ฐ๊ฒฐ ๊ด๋ฆฌ์์
Experiment Logger๋ด๋ถ ์ฐ๊ฒฐ ๋ง๋ค๊ธฐ. - ์ฝํ ์ธ ์ฝ๊ธฐยท์ฝ์ ยท์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค. ์ฌ์ฉ์ ์ด๋ฉ์ผ ๊ถํ์ ํ์ํ์ง ์์.
- ์ฐ๊ฒฐ์ ์ฝํ ์ธ ์ฌ์ฉ ๊ถํ์ ๋์ ํ์ด์ง/๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ถ๊ฐํจ. ๋๋ ํ์ด์ง์ ์ฐ๊ฒฐ ๋ฉ๋ด์์ ๋ด๋ถ ์ฐ๊ฒฐ์ ์ถ๊ฐ. UI ๋ช ์นญ์ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์.
- ํ ํฐ์ ๋ณธ์ธ PC์ .env์๋ง ์ ์ฅ.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งํฌ์์ UUID๋ฅผ ํ์ธ.
?v=๋ค๋ ๋ณด๊ธฐ ID์ด๋ฏ๋ก ์ฌ์ฉํ์ง ์์.
Env์ ์ ํ ์ต์ : service, local, ai-1, ai-2, unknown. Status์ ์ ํ ์ต์ : FINISHED, FAILED, KILLED. **Status ์์ฑ ํ์ ์ Notion์ '์ํ'๊ฐ ์๋๋ผ '์ ํ'**์.
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์ ์์ผ๋ฉด ํด๋น ํ์ ๊ฐฑ์ ํจ.
ํ๊ฒฝ์ ๋ง๋ ๋ช ๋ น ํ๋๋ฅผ ์คํ. 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์ ์ง์ ํ๊ณ ๊ธฐ์กด ๋๊ธฐ ๊ธฐ๋ก์ ๋ณ๋๋ก ์ฒ๋ฆฌํจ.
๊ฐ Linux ํ๊ฒฝ์์:
nohup python3 -u ~/experiment-hub/tracker.py sync > ~/experiment-hub/tracker-sync.log 2>&1 &์คํ ๋ํผ๋ ์คํ ์ค ์์ ์ ์ก ์ค๋ ๋๋ฅผ ์คํ. ์ง์ worker๋ ์คํ์ด ๋๋ ๋ค์๋ ์ค์ ์๋ฒ๊ฐ ๊บผ์ ธ ์ ์กํ์ง ๋ชปํ ๊ธฐ๋ก์ ์ฌ์๋ํจ. ์ฌ๋ถํ ํ ์ง์ ๋ค์ ์ผ์ผ ํจ.
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๋ ์ฐ๊ฒฐ ํ ์คํธ์ฉ ํฉ์ฑ ๊ฐ์. ๋ชจ๋ธ ์ฑ๋ฅ์ด ์๋.
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๋ก ํ์ธํจ.
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 ๋น๋๊ธฐ ์ฐ์ฐ์ ์ ์ ํ ๋๊ธฐํํ ๋ชจ๋ธ ๊ตฌ๊ฐ์์ ์ธก์ ํด์ผ ํจ.
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 ...์ผ๋ก ์คํํ๋ฉด ์๋ฒ ํ๋ก์ธ์ค ํ ๊ฑด์ด ๊ธฐ๋ก๋จ. ์ถ๋ก ์์ฒญ ํ ๊ฑด๋ง๋ค ๊ธฐ๋กํ๋ ค๋ฉด ๋ฐฑ์๋ ์ฐ๋์ด ํ์.
- service/service_experiment_tracker.js๋ฅผ ๊ธฐ์กด ์น ํ๋ก์ ํธ์ services ํด๋์ ๋ณต์ฌ.
- service/integration_example.js๋ฅผ ์ฐธ๊ณ ํ์ฌ Auto Seg ํธ๋ค๋ฌ๋ฅผ ์์ .
- ์์ฒญ ๊ฒ์ฆ ํ start(segType)๋ฅผ ํธ์ถ.
- GPU ํ ์ฌ๋กฏ์ ์ป์ ๋ค Python ์คํ ์ง์ ์ pipelineStart()๋ฅผ ํธ์ถ. ๋ฐํ๋ ํจ์๋ Python ์๋ฃ/์ฝ๋ฐฑ ์ ํธ์ถ.
- ๊ฒฐ๊ณผ ์์ฑ ์ฑ๊ณต ์ finish(true, result), ์คํจ ์ finish(false)๋ฅผ ํธ์ถ. HTTP 200 ๋ณธ๋ฌธ์๋ ์ค๋ฅ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก HTTP ์ฝ๋๋ง ๋ณด์ง ์์.
- ์งํ ์ค ์์ฒญ์ด ๋๋ ๋ค ์น ์๋ฒ๋ฅผ ์ฌ์์.
- ๊ฐ์ 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 ํ์ | ์๋ฏธ |
|---|---|---|
| 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 ์ ๋ฌด๋ง์ผ๋ก ์ฑ๊ณต/์คํจ๋ฅผ ์ถ์ ํ์ง ์์.