
この記事の目的
1〜7回で段階ごとに説明した内容を実際に実装した、MariaGO のソースコード全体を公開します。ファイルが多いのでフォルダごとに折りたたんであり、ファイルを開いたときだけコードを読み込みます。
使用したモデル
- 運用モデル: Qwen3-VL-8B-Instruct + LoRA アダプター lora_mix_qwen_r5(rank 16、alpha 32)
- 入力方式: 盤の画像の代わりに、2桁で整列したテキストの盤(aligned)を入れる text-only モード
- 学習・推論環境: Mac Studio(Apple Silicon)で MLX(mlx-vlm)による LoRA 学習とサービング
- 学習データ: u-go.net の KGS 四段以上の SGF 棋譜。勝者の手を中心に、アタリ・取りの局面に重みを付け、座標読み取り専用のデータを混ぜました
- 学習の順序: 座標専用アダプターから出発し、座標と手のデータの比率を変えながら r1 から r5 まで五ラウンド学習。各ラウンドで座標テストの正答率90%以上を通過したアダプターだけを次のラウンドに進めました
最初に試したモデル
最初は Gemma 4 E4B-it 4bit(mlx-community)に LoRA(rank 8、後に16)を付けました。モデルが座標を片側に寄せて読む問題が観測されたため、学習とサービングの盤の形式を aligned に統一し、ベースモデルを Qwen3-VL-8B に替えました。
補助として使ったもの
- KataGo(b18c384nbt): 形勢の分析と、複数のアダプターが出した候補から一つを選ぶアンサンブル判定の実験
- NumPy 2層 MLP ポリシー: 合法手マスクをかけた REINFORCE 自己対局の実験(rl_env)
- C++ ヒューリスティックAI: アタリへの応手の安全網と、モデルの応答失敗時の代わりの手
フォルダ構成
- src, tests: Qt6/C++ の囲碁クライアント、ルールエンジン(goboard)、整地(gamejudge)、ヒューリスティックAI
- vlm_server: SGF の解析、学習データの生成、LoRA 学習、座標テスト、手の推薦サーバー
- rl_env: NumPy の強化学習の実験
- mariago-web: Next.js のWeb対局画面と棋譜保存 API
サーバーのデプロイ設定、リモート接続・監視スクリプト、学習の自動化・実験用スクリプト、学習データとモデルの重み(数百GB)は公開範囲から除外しました。広告・ログイン・ランキングのようなWeb運用のコードと設定ファイル、デバッグ用ツール、以前の Gemma モデルのダウンロードスクリプトも除いたため、一部の import は公開していないファイルを指しています。コード内の /Volumes/MY_WORK/... のようなパスは作者の Mac 基準なので、実行するときは自分のパスに置き換えてください。
全ソース
76ファイル · 18,629行 — フォルダを開いてファイルを押すとコードを読み込みます。
プロジェクトルート
CMakeLists.txt
コードを読み込んでいます…
README.md
コードを読み込んでいます…
mariago-web/
mariago-web/app/api/analyze/route.ts
コードを読み込んでいます…
mariago-web/app/api/game/[code]/route.ts
コードを読み込んでいます…
mariago-web/app/api/game/list/route.ts
コードを読み込んでいます…
mariago-web/app/api/game/route.ts
コードを読み込んでいます…
mariago-web/app/api/player/route.ts
コードを読み込んでいます…
mariago-web/app/globals.css
コードを読み込んでいます…
mariago-web/app/kibo/kibo.module.css
コードを読み込んでいます…
mariago-web/app/kibo/page.tsx
コードを読み込んでいます…
mariago-web/app/layout.tsx
コードを読み込んでいます…
mariago-web/app/page.tsx
コードを読み込んでいます…
mariago-web/app/play/page.tsx
コードを読み込んでいます…
mariago-web/app/play/play.module.css
コードを読み込んでいます…
mariago-web/components/GoBoard.module.css
コードを読み込んでいます…
mariago-web/components/GoBoard.tsx
コードを読み込んでいます…
mariago-web/components/ModelSelector.module.css
コードを読み込んでいます…
mariago-web/components/ModelSelector.tsx
コードを読み込んでいます…
mariago-web/lib/board.ts
コードを読み込んでいます…
mariago-web/lib/db.ts
コードを読み込んでいます…
mariago-web/lib/gameTypes.ts
コードを読み込んでいます…
mariago-web/lib/guest.ts
コードを読み込んでいます…
mariago-web/lib/katagoTypes.ts
コードを読み込んでいます…
mariago-web/lib/vlmClient.ts
コードを読み込んでいます…
mariago-web/lib/vlmModels.ts
コードを読み込んでいます…
mariago-web/package.json
コードを読み込んでいます…
mariago-web/README.md
コードを読み込んでいます…
rl_env/
rl_env/__init__.py
コードを読み込んでいます…
rl_env/board.py
コードを読み込んでいます…
rl_env/env.py
コードを読み込んでいます…
rl_env/eval_policy.py
コードを読み込んでいます…
rl_env/policy_numpy.py
コードを読み込んでいます…
rl_env/requirements-train.txt
コードを読み込んでいます…
rl_env/test_legal.py
コードを読み込んでいます…
rl_env/test_phase2.py
コードを読み込んでいます…
rl_env/test_phase3.py
コードを読み込んでいます…
rl_env/train_reinforce.py
コードを読み込んでいます…
rl_env/train_selfplay.py
コードを読み込んでいます…
src/
src/aiplayer.cpp
コードを読み込んでいます…
src/aiplayer.h
コードを読み込んでいます…
src/boardwidget.cpp
コードを読み込んでいます…
src/boardwidget.h
コードを読み込んでいます…
src/gamejudge.cpp
コードを読み込んでいます…
src/gamejudge.h
コードを読み込んでいます…
src/goboard.cpp
コードを読み込んでいます…
src/goboard.h
コードを読み込んでいます…
src/main.cpp
コードを読み込んでいます…
src/mainwindow.cpp
コードを読み込んでいます…
src/mainwindow.h
コードを読み込んでいます…
src/tcpvlmclient.cpp
コードを読み込んでいます…
src/tcpvlmclient.h
コードを読み込んでいます…
tests/
tests/atari_smoketest.cpp
コードを読み込んでいます…
tests/test_cross_lessons.py
コードを読み込んでいます…
tests/test_monitor_heuristic.py
コードを読み込んでいます…
tests/test_pass_guard.py
コードを読み込んでいます…
vlm_server/
vlm_server/__init__.py
コードを読み込んでいます…
vlm_server/__main__.py
コードを読み込んでいます…
vlm_server/cross_lessons.py
コードを読み込んでいます…
vlm_server/dataset_baduk.py
コードを読み込んでいます…
vlm_server/dataset_coords.py
コードを読み込んでいます…
vlm_server/dataset_hogu.py
コードを読み込んでいます…
vlm_server/dataset_ladder.py
コードを読み込んでいます…
vlm_server/dataset_opening.py
コードを読み込んでいます…
vlm_server/eval_vlm_vs_vlm.py
コードを読み込んでいます…
vlm_server/ladder.py
コードを読み込んでいます…
vlm_server/policy_backend.py
コードを読み込んでいます…
vlm_server/README.md
コードを読み込んでいます…
vlm_server/requirements.txt
コードを読み込んでいます…
vlm_server/server.py
コードを読み込んでいます…
vlm_server/sgf_download.py
コードを読み込んでいます…
vlm_server/sgf_parser.py
コードを読み込んでいます…
vlm_server/shapes.py
コードを読み込んでいます…
vlm_server/train_lora.py
コードを読み込んでいます…
vlm_server/TRAINING.md
コードを読み込んでいます…
vlm_server/verify_board.py
コードを読み込んでいます…
vlm_server/verify_coords.py
コードを読み込んでいます…
COMMENTS · CHAPTER 08
全ソースコードと使用したモデル コメント 0
まだコメントはありません。気になった点や補足があれば残してください。
コメントを登録するには、Googleで始めてニックネームとメールアドレスを登録してください。
Googleで始める