CABT Linux Runtime with Docker¶
更新日: 2026-06-17
背景¶
手元の cg/libcg.so は次の形式だった。
ELF 64-bit LSB shared object, x86-64, GNU/Linux
このため、macOS の Python 仮想環境に置くだけでは動かない。
Rosetta は macOS 向け x86_64 バイナリ向けで、Linux ELF の .so には効かない。
方針¶
Linux + x86_64 の最小コンテナだけを用意し、その中で repo 直下の cg/ と sample/ をそのまま使う。
追加したファイル:
- Dockerfile.cabt
- scripts/run_cabt_docker.sh
- scripts/render_cabt_html_docker.sh
- scripts/run_cabt_viewer_docker.sh
- scripts/collect_selfplay_docker.sh
- scripts/evaluate_docker.sh
- .dockerignore
使い方¶
- Docker Desktop を起動する
- リポジトリ直下で次を実行する
bash scripts/run_cabt_docker.sh
このスクリプトは次を行う。
Dockerfile.cabtから Linux amd64 イメージを build- repo 全体を
/appに mount CABT_CG_LIB_PATH=/appを使ってsample/run_local_battle.pyを実行
引数の渡し方¶
そのまま sample/run_local_battle.py に渡せる。
bash scripts/run_cabt_docker.sh --max-steps 50 --seed 1
対戦画面の出し方¶
HTML リプレイを作る場合は次を使う。
bash scripts/render_cabt_html_docker.sh --output sample/result.html
これで sample/result.html が生成される。あとはその HTML をブラウザで開けば対戦画面を確認できる。
リアルタイム viewer¶
事後リプレイではなく、現在進行中の状態をブラウザで見るには次を使う。
bash scripts/run_cabt_viewer_docker.sh
その後、ブラウザで http://localhost:8000 を開く。
この viewer は sample/realtime_server.py を Docker 内で動かし、以下をリアルタイム表示する。
- 現在の turn / yourIndex / result
- Player 0 / Player 1 の Active / Bench / handCount / deckCount / prizeCount
- 現在の
select.contextと option 一覧 - 直近ログ
visualize_data()の生データ
自己対戦データを集める¶
学習用の SelfPlayRecord JSONL を Docker 内で作るには次を使う。
bash scripts/collect_selfplay_docker.sh \
--games 1 \
--max-steps 50 \
--output /app/data/selfplay/bootstrap.jsonl
--output はコンテナ内の /app がリポジトリ直下に mount されているため、上の例ではローカルの data/selfplay/bootstrap.jsonl に保存される。
2026-06-21 の smoke test:
bash scripts/collect_selfplay_docker.sh \
--games 1 \
--max-steps 5 \
--output /app/data/selfplay/docker-smoke.jsonl
結果:
data/selfplay/docker-smoke.jsonl- 5 records
max-steps=5のため試合は未決着、各final_resultは draw 扱いの0.0
head-to-head 評価¶
2つの policy を CABT 上で対戦させ、勝敗・平均step・1手あたりの推論時間を JSON に保存する。
bash scripts/evaluate_docker.sh \
--games 1 \
--max-steps 5 \
--policy0 deterministic \
--policy1 random \
--output /app/data/eval/docker-smoke.json
2026-06-21 の smoke test:
data/eval/docker-smoke.json- 1 game
max-steps=5のため未決着policy0_avg_seconds/policy1_avg_secondsが記録される
期待する動作¶
cg/game.pyからcg/libcg.soを読めるbattle_start()が通る- ランダム対戦を 1 試合進められる
うまくいかない場合¶
- Docker Desktop が起動しているか確認
- Apple Silicon Mac では
--platform=linux/amd64のエミュレーションを使うため、初回 build は少し遅い cg/配下が欠けていないか確認 (api.py,game.py,libcg.so,__init__.py)