iop/docs/edge-local-dev-guide.md
toki ff161b9b12 feat: runtime reconnect config refresh milestone completion
- Add runtime-reconnect-config-refresh milestone and SDD
- Archive m-runtime-reconnect-config-refresh task with full logs
- Update edge/node domain rules, bootstrap, transport sessions
- Update config package and node.yaml configuration
- Update documentation and ROADMAP/PHASE files
2026-06-21 16:14:16 +09:00

4.2 KiB

Edge Local Quickstart

이 문서는 toki-labs.com Control Plane에 native Edge를 붙이고, Ollama Node를 연결해 OpenAI-compatible smoke까지 확인하는 최소 절차다.

설정 기준은 edge.yaml이다. 주소는 환경 변수로 흩뿌리지 않는다.

1. Package

현재 toki-labs.com 원격처럼 Apple Silicon macOS에서 실행한다.

make build

2. Edge 설정

rm -rf "$HOME/iop-edge-test"
mkdir -p "$HOME/iop-edge-test"
tar -xzf build/packages/iop-edge-darwin-arm64.tar.gz -C "$HOME/iop-edge-test"
cd "$HOME/iop-edge-test/iop-edge-darwin-arm64"
./iop-edge config init

edge.yaml에서 아래 값만 맞춘다. 모델만 필요하면 바꾼다.

edge:
  id: "edge-toki-labs"
  name: "Toki Labs Edge"

server:
  listen: "0.0.0.0:19090"
  advertise_host: "toki-labs.com"

bootstrap:
  listen: "0.0.0.0:18080"
  artifact_base_url: "http://toki-labs.com:18080"
  artifact_dir: "artifacts"

control_plane:
  enabled: true
  wire_addr: "toki-labs.com:19081"

openai:
  enabled: true
  listen: "0.0.0.0:18081"
  adapter: "ollama"
  target: "gemma4:26b"
  models:
    - "gemma4:26b"
  timeout_sec: 300

nodes: []

확인:

./iop-edge --config edge.yaml env
./iop-edge --config edge.yaml config check

3. Node 등록

./iop-edge --config edge.yaml node register node-ollama-1 \
  --adapter ollama \
  --ollama-base-url http://127.0.0.1:11434

출력된 OS별 bootstrap 명령 원문을 보관한다. 명령 원문에는 실제 token이 포함되므로 tracked 문서에는 기록하지 않는다.

4. Edge 실행

mkdir -p logs run
nohup ./iop-edge --config edge.yaml serve > logs/edge.stdout.log 2>&1 &
echo $! > run/iop-edge.pid

확인:

curl -fsS http://toki-labs.com:18000/edges

5. Node 실행

3단계에서 출력된 bootstrap 명령을 Node host에서 그대로 실행한다. Linux/macOS는 generated curl | bash 명령을 사용하고, Windows native PowerShell은 generated .ps1 bootstrap과 Start-IopNode 함수를 사용한다.

Node 연결 확인:

curl -fsS http://toki-labs.com:18000/edges/edge-toki-labs/status

6. dev-runtime provider pool 반복 기준

현재 GX10 vLLM과 OneXPlayer Lemonade를 같은 model alias로 묶어 검증하는 dev-runtime 기준은 원격 runner의 동기화된 iop checkout과 build/dev-runtime/edge.yaml이다.

기준 주소:

  • Control Plane status: 원격 host의 http://127.0.0.1:18001
  • bootstrap HTTP: http://toki-labs.com:18082
  • Edge OpenAI-compatible base URL: http://toki-labs.com:18083/v1
  • Edge-Node TCP transport: toki-labs.com:18084

기준 provider pool:

  • model alias: qwen3.6:35b
  • provider candidate: gx10-vllm on gx10-vllm-node, capacity 4
  • provider candidate: onexplayer-lemonade on onexplayer-lemonade-node, capacity 3
  • connected non-candidate: mac-codex-node

capacity, provider mapping, model alias, listen port 변경은 실행 중 Edge에 hot reload되지 않는다. edge.yaml 수정 후 config check를 통과시키고 Edge process를 재시작한 뒤 검증한다. Node host OS 재부팅은 필요하지 않지만, 현재 Node bootstrap은 Edge 종료 뒤 자동 재등록 루프를 보장하지 않으므로 Edge 재시작 후 연결이 빠진 Node는 bootstrap 명령을 다시 실행한다.

반복 검증 순서:

  1. Control Plane status에서 edge-toki-labs의 connected node 수와 node id를 확인한다.
  2. Edge host에서 toki-labs.com:18084의 established node TCP connection 수를 확인한다.
  3. http://toki-labs.com:18083/healthz/v1/models를 확인한다.
  4. qwen3.6:35b로 동시 4개 /v1/chat/completions 요청을 보낸다.
  5. Edge restart 후 capacity 4/3 기준이면 동시 in-flight 전제에서 aggregate 배정 기대값은 gx10-vllm 2개, onexplayer-lemonade 2개다.

현재 공개 API는 개별 request의 최종 node_id를 응답에 노출하지 않는다. 요청별 배정을 확정해야 할 때는 Edge dispatch trace/log를 추가한 뒤 판정한다.

7. Smoke

curl -fsS http://toki-labs.com:18081/v1/models

./iop-edge --config edge.yaml smoke openai \
  --model gemma4:26b \
  --base-url http://toki-labs.com:18081 \
  --timeout 60s

외부 OpenAI-compatible client base URL:

http://toki-labs.com:18081/v1