EulerGo

개성(기풍)을 가진 바둑 AI를 연구하는 플랫폼

강한 공통 실력층 위에 서로 다른 기풍(style)을 학습·비교·보존할 수 있도록 설계한 바둑 AI 연구용 CLI 플랫폼입니다. AI 시대에 기사마다의 개성이 하나의 '정답'으로 수렴한다는 바둑계의 오랜 고민에 대한 연구적 응답으로, 초반 수십 수에 드러나는 스타일을 style latent와 다중 알고리즘 비교로 다룹니다. 최강의 단일 엔진 대신, 여러 개성이 공존할 수 있는 연구 환경을 지향합니다.

Internal Research Platform

접근 방식

바둑계의 오랜 관심사 — 개성, 기풍 — 을 연구 과제로 다뤄보기 위한 플랫폼

초반 50수의 개성을 다루다

한 기사의 첫 50수는 오랫동안 그 사람의 사고가 새겨지는 구간으로 이야기되어 왔습니다. 어디에 두는지, 어느 변을 먼저 키우는지, 언제 침입하는지 — EulerGo는 이 초반의 스타일 차이를 학습 가능한 신호로 다루는 것을 출발점으로 삼습니다.

공통 실력층 + 교체 가능한 개성

단일 강한 망을 더 강하게 만드는 대신, 강한 공통 실력층 위에 서로 다른 개성 헤드를 바꿔 끼울 수 있는 구조를 택했습니다. 한 모델이 아니라 여러 스타일이 같은 기반 위에 공존하는 방향입니다.

연구용 플랫폼

상용 엔진이 아니라 연구 플랫폼입니다. 스타일을 어떻게 정의하고, 학습시키고, 측정하고, 분류하고, 보존할 것인가 — 이 질문들에 대해 재현 가능한 실험을 돌려볼 수 있는 환경을 제공합니다.

작동 방식 — 강한 공통 실력층 + 교체 가능한 스타일 헤드

한 모델, 여러 인격. 같은 기반, 서로 다른 손길.

Style Latent 입력 채널

입력 텐서는 9개의 base 채널 위에 N개의 style 채널을 더합니다. 각 style 차원은 보드 전체에 broadcast된 상수 평면입니다. style_vector=None이면 기존 9채널과 완전히 호환됩니다. Trainer는 features.shape[1]로 in_channels를 자동 감지하고 체크포인트의 architecture metadata로부터 자동 복원합니다.

알고리즘 교체 가능

같은 self-play / eval / league 인터페이스 위에서 --algorithm 한 줄로 MCTS, Gumbel, QZero, PGS, native_mcts, random을 바꿔 끼웁니다. 알고리즘은 손잡이입니다. 동일 조건 비교, 동일 메트릭 측정.

Self-improvement Loop

selfplay → train → checkpoint → 더 강한 selfplay → analyze / league. 각 반복은 자동으로 RunManifest (seed/git/profile/version)를 남기고, 파이프라인은 chain.json으로 warm-start 체인을 감사 가능하게 기록합니다.

Style Loss + 자동 라벨링

스타일 분류기를 학습해서 어떤 게임이 어느 인격에 속하는지 자동으로 라벨링합니다. v1은 reference-based, v2는 학습된 모델 기반(--model). Style loss weight로 학습 중 개성 신호를 직접 강화할 수 있습니다.

알고리즘 매트릭스

같은 인터페이스 위에서 비교 가능한 계열들

알고리즘 Tier 설명
mctsstableAlphaZero-class PUCT MCTS — 기본 baseline
randomstable합법수 균일 (control)
gumbelbetaGumbel root selection — 단순화된 대조 baseline
gumbel_fullstableSequential-halving + 완전 σ(q), Danihelka 2022 충실 구현
qzerostableSearchless Q-derived policy — 트리 없음
pgsstablePolicy-Gradient Search — 트리 없는 짧은 stochastic rollouts
native_mctsstableRoot-parallel MCTS + C++ playouts (19x19 실용)
distributed_selfplayplannedMulti-machine selfplay (coordinator/worker 명령으로 운영)

파이프라인 한눈에

Self-improvement loop의 데이터 흐름

selfplay
training_data.npz
game_NNNN.json
train
checkpoint
selfplay
--checkpoint
analyze / league
# Phase 3+ self-improvement loop
selfplay (with algorithm, style_vector) → training_data.npz (9+N channels) + game_NNNN.json
  → train → checkpoint (architecture metadata)
  → selfplay (--checkpoint) → 더 강한 스타일 신호
  → analyze / league → 스타일 + 강도 비교 (ELO, bootstrap CI)

CLI 표면 (요약)

플러그인 자동 발견 기반 단일 진입점 eulergo

명령 설명
selfplay셀프플레이 게임 생성 (--algorithm, --workers N)
train신경망 학습 (PyTorch, --style-loss-weight)
shuffle학습 데이터 셔플/합치기
export체크포인트 내보내기/목록
eval두 설정 간 대국 평가
analyze초수 분석 및 스타일 비교
league라운드로빈 토너먼트 + ELO (--bootstrap CI)
algorithms사용 가능한 알고리즘 + tier 출력
classify스타일 자동 라벨링 (reference-based 또는 학습된 v2)
coordinator(Phase 6) 분산 selfplay 코디네이터
worker(Phase 6) 분산 selfplay 워커
tournament(Phase 6) 정보량 기반 동적 페어링
dashboard(Phase 6) 웹 대시보드 (i18n)
pipeline(Phase 6) 반복 학습 파이프라인
app(Phase 6.1, optional) Toga 기반 GUI 앱 — pip install eulergo[app]

모든 help와 실행 출력이 --lang ko|en|zh|ja|es 에 따라 번역됩니다.

튜토리얼 인덱스

단계별 가이드 18편 — 입문부터 분산 학습, GUI 앱까지

01EulerGo 시작하기 — 입문 + --workers 멀티코어 (5분)
029x9 스타일 비교 — 같은 알고리즘 + 다른 하이퍼파라미터
03멀티 알고리즘 비교 (Phase 4)
04JSON 기보 읽기 (Phase 4)
05리그 + ELO 추정
06Style Latent 입력 채널 (Phase 3 도입)
0719x19 Baseline 재현
08QZero — Searchless Self-Play (Phase 5)
09PGS — Tree-Free Rollouts (Phase 5)
10Style Loss + Style Classifier (Phase 5)
11Bootstrap ELO 신뢰구간 (Phase 5)
12Native C++ MCTS + GPU Batching (Phase 5)
13다중 머신 분산 Self-Play (Phase 6)
14정보량 기반 Tournament Scheduler (Phase 6)
15Web Dashboard (Phase 6, i18n)
1619x19 Long-Running Training Pipeline (Phase 6)
17Style Classifier v2 — 학습된 분류기 (Phase 6)
18데스크톱/모바일 앱으로 체크포인트와 직접 플레이 (Phase 6.1)

설치 + 퀵스타트

가상환경, 설치, 첫 selfplay 한 줄까지

# 가상환경 + dev 설치
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# PyTorch 기반 신경망 학습이 필요하면
pip install -e ".[nn]"

# 9x9 self-play (RandomPolicy, PyTorch 불필요)
eulergo selfplay --games 10 --board-size 9 --simulations 30

# 사용 가능한 알고리즘 확인
eulergo algorithms

# 다른 알고리즘으로 selfplay
eulergo selfplay --algorithm gumbel --games 5 --board-size 9

# 두 알고리즘 비교 (JSON 기반 풍부한 메트릭)
eulergo analyze outputs/algo_mcts_9x9 \
  --compare outputs/algo_gumbel_9x9 \
  --name-a mcts --name-b gumbel

i18n + 플랫폼

5개국어 CLI, 선택적 GUI, 선택적 네이티브 빌드

5개 언어 CLI

모든 help 실행 출력이 --lang ko|en|zh|ja|es 옵션으로 전환됩니다. 기본은 한국어. 한국 바둑 문화에 뿌리를 두되, 처음부터 다국어로 설계되었습니다.

eulergo --lang en selfplay --games 1
eulergo --lang zh selfplay --games 1
eulergo --lang ja selfplay --games 1

선택적 GUI 앱 (Toga)

pip install eulergo[app]로 Toga 기반 크로스플랫폼 GUI 앱을 설치합니다 (Mac/Win/Linux/iOS/Android). 학습된 체크포인트와 직접 둘 수 있습니다. app 명령은 패키지가 import 가능할 때만 CLI에 노출됩니다 (strict plugin 정책).

선택적 네이티브 C++ MCTS

bash eulergo/native/build.sh로 19x19 실용 속도를 위한 root-parallel MCTS + C++ playouts를 빌드합니다. 빌드되지 않아도 native_mcts는 Python MCTS로 자동 fallback합니다.

EulerGo는 내부 연구 프로젝트입니다

상용 엔진이 아닙니다. 한 사람의 기풍이 어떻게 학습되고, 비교되고, 보존될 수 있는지에 대한 재현 가능한 실험 환경을 지향합니다.

이세돌 九단의 공개 발언에 영감을 받아 시작된 프로젝트이며, 그분께 어떤 형태로든 공식적으로 연결되어 있지 않습니다.

GitHub에서 시작하기 문의하기