이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.


Part 1 에서 오목·렌쥬 오픈소스 생태계의 최상위권이 Rapfi 와 KataGomo 두 갈래라고 했습니다. KataGomo 는 바둑 엔진 KataGo 를 오목용으로 고친 것입니다. 이번 편은 두 엔진을 나란히 놓습니다.

결론부터 말하면 두 엔진은 같은 목표를 정반대의 트레이드오프로 풉니다.

  • Rapfi: 평가를 극단적으로 싸게 만들고, 그만큼 깊고 빠르게 읽습니다. CPU 한 코어에서 초당 수십만 노드입니다.
  • KataGo / KataGomo: 평가를 비싸고 정확하게 만들고, 그 평가가 가리키는 곳만 골라서 읽습니다. GPU 에서 초당 수천 번입니다.

1. KataGo 는 무엇인가#

KataGo 는 David J. Wu(lightvector)가 만든 바둑 엔진이고, 가장 널리 쓰이는 AlphaZero 계열 공개 바둑 엔진 중 하나입니다. 2026-08-30 에 v1.18.2 가 나왔습니다.

1.1 알고리즘#

  • 탐색: MCTS(몬테카를로 트리 탐색)의 PUCT 변형입니다. 각 시뮬레이션이 “정책(어디에 둘 만한가) × 탐색 보너스 + 지금까지의 평균 가치” 가 가장 큰 자식을 따라 내려가고, 잎에서 신경망을 한 번 부른 뒤 결과를 거슬러 올립니다.
  • 평가: 정책과 가치를 함께 내는 큰 잔차 신경망(ResNet)입니다. v1.17 부터는 트랜스포머 신경망도 지원하고, 주 학습 런이 그쪽으로 옮겨 가는 중입니다.
  • 학습: 사람 기보 없이 자가대국으로 강화학습합니다. 지금은 katagotraining.org 에서 분산 학습합니다.

KataGo 논문 (2019년 초판, 2020년 v5)은 AlphaZero 대비 계산량을 50배 줄였다 고 주장하고, 그 근거로 게임에 무관한 기법 넷을 듭니다.

기법한 줄 설명
Playout cap randomization일부 수만 깊게 탐색해 학습 데이터로 쓰고 나머지는 얕게 빨리 둡니다
Forced playouts + policy target pruning탐색 초기에 후보를 강제로 방문시키고, 학습 목표에서는 그 강제분을 걷어 냅니다
Global pooling판 전체의 정보를 모아 각 칸의 판단에 섞습니다
Auxiliary policy targets상대의 다음 수 등 보조 목표를 함께 학습합니다

바둑 전용 기법(집 소유권·점수 예측)도 따로 있습니다. 논문은 “AlphaZero 는 게임 전용 입력 특징 없이도 성공했지만, 그런 특징을 넣으면 여전히 학습이 크게 좋아진다” 고 적는데, 이 문장은 뒤에서 오목 이야기를 할 때 다시 나옵니다.

1.2 하드웨어와 인터페이스#

  • 백엔드: OpenCL, CUDA, TensorRT, ROCm, ONNX Runtime, Eigen(CPU), 그리고 macOS 의 Metal 입니다. README 는 CPU 용 Eigen 이 GPU 보다 “상당히 느리지만 좋은 CPU 에서 작은 신경망이면 초당 10~20 플레이아웃” 이 나온다고 적습니다. GPU 가 전제인 엔진 입니다.
  • 프로토콜: 바둑 표준인 GTP 와, 서버 백엔드용으로 설계된 JSON 분석 엔진 을 제공합니다. 분석 엔진은 한 줄짜리 JSON 질의를 비동기로 받아 여러 국면을 GPU 배치로 묶어 처리합니다.
  • 라이선스: MIT 계열의 허용적 라이선스입니다.

2. KataGomo: KataGo 의 오목판#

KataGomo 는 Zhiyang Hang(hzyhhzy)이 KataGo 를 여러 보드게임으로 옮긴 저장소입니다. 게임마다 브랜치가 따로 있고, 오목(자유룰·표준)과 렌쥬는 Gom2024 브랜치입니다. 2025년 1월에 독립 저장소로 옮겼습니다.

KataGo 를 오목에 옮기면서 덧붙인 것을 보면 흥미롭습니다. Gom2024 브랜치에는 다음이 추가되어 있습니다.

  • cpp/vcfsolver/ — VCF(연속 사로 이기기) 솔버
  • cpp/forbiddenPoint/ — 렌쥬 금수 판정기
  • cpp/command/gomprotocol.cpp — Piskvork 프로토콜 처리

Gomocup 2021 소개문은 KataGomo 가 “엄격한 VCF 솔버를 추가하고, VCF 특징을 입력으로 받는 새 신경망” 을 썼다고 적습니다. 순수한 AlphaZero 방식의 엔진조차 오목에서는 전용 전술 탐색기를 붙였다 는 점이 이 비교의 핵심 단서입니다.

강도와 속도에 대해서는 저자가 릴리스 노트에 직접 적은 수치가 있습니다.

  • 2025-02 릴리스 Gomoku_20250206 은 b28c512nbt 신경망(28블록 512채널)을 제공합니다.
  • 같은 신경망이 RTX 4090 에서 초당 약 5,000 방문 입니다.
  • Gomocup 용 단일 스레드 CPU 버전 은 1/50 크기의 b10c128nbt 신경망으로 초당 약 40 방문입니다.
  • 저자는 GPU 풀버전이 이 CPU 버전보다 “1000~1500 Elo 강하다” 고 적었습니다. 저자 본인의 추정이고 측정값이라고 밝히지는 않았습니다.

KataGomo 는 Gomocup 2025 에 나오지 않았습니다. 릴리스 노트의 이유는 “Gomocup 은 룰마다 다른 엔진을 제출하는 것을 허용하지 않는다” 였습니다. 2026년에 돌아와 Rapfi 가 우승한 5개 리그에서 모두 2위를 했습니다.


3. 나란히 놓고 보기#

항목KataGo (바둑)KataGomo (오목)Rapfi
탐색MCTS (PUCT)MCTS (PUCT) + VCF 솔버알파-베타 (PVS) + VCF 잎 탐색. MCTS 는 선택 사항
평가큰 ResNet·트랜스포머KataGo 신경망 (b28c512nbt 등)초경량 NNUE (Mixnet) + 패턴 기반 고전 평가
주 하드웨어GPUGPU (CPU 판은 크게 약함)CPU SIMD (SSE/AVX2/AVX-512/NEON/WASM SIMD)
속도 (단위가 다름)CPU 에서 초당 10~20 플레이아웃GPU 에서 초당 약 5,000 방문CPU 1코어에서 초당 수십만 노드
학습자가대국 강화학습 (분산)자가대국 강화학습KataGomo 기보 + ResNet 교사 신경망으로 증류
프로토콜GTP, JSON 분석 엔진PiskvorkPiskvork + Yixin-Board 확장
브라우저공식 WASM 빌드 없음없음공식 WASM 빌드 (Gomocalc 가 사용)
라이선스MIT 계열MIT 계열GPLv3 (가중치는 CC0)

속도 행의 단위가 서로 다르다는 점에 주의하십시오. MCTS 의 “방문(visit)” 한 번은 신경망 평가 한 번이고, 알파-베타의 “노드” 하나는 대개 그보다 훨씬 싼 연산입니다. Rapfi 는 고전 평가가 탐색 창에서 멀리 벗어난 노드에서는 신경망을 아예 부르지 않기도 합니다(Part 3). 그래서 이 숫자들을 직접 나누어 “몇 배 빠르다” 고 말할 수는 없습니다.

같은 탐색 알고리즘에서 신경망만 바꿔 잰 공정한 비교는 Rapfi 논문의 Table 1 에 있습니다.

모델추론 FLOPs (천)가중치 크기MCTS 플레이아웃/초알파-베타 노드/초
Mixnet small5128.4 MiB47,575428K
Mixnet medium13154.7 MiB36,823257K
Mixnet large381111 MiB18,401104K
ResNet 6b96f225,3963.81 MiB297484
ResNet 20b256f5,318,72790.0 MiB1132

Mixnet small 과 ResNet 6b96f 를 비교하면 계산량은 약 4,400배, 알파-베타 탐색 속도는 약 880배 차이입니다. 반대로 Mixnet 은 가중치(대부분 미리 계산한 codebook)가 훨씬 큽니다. 계산을 메모리로 바꾼 설계 입니다.

논문은 정확도도 공정하게 적습니다. Mixnet 의 가치 예측은 ResNet 6b96f 급이지만, 정책 예측은 가장 큰 Mixnet 도 ResNet 4b64f 수준에 겨우 다가간다고 합니다. 한 번의 판단은 덜 정확하지만 수백 배 많이 판단한다 는 것이 Rapfi 쪽의 내기입니다.


4. 왜 오목에서는 이 내기가 통하는가#

아래는 1차 출처가 뒷받침하는 사실과 그로부터의 추론을 구분해 적은 것입니다.

출처가 뒷받침하는 사실

  1. 오목은 위협 공간 탐색(threat-space search)과 증명수 탐색으로 이미 풀렸습니다 (Allis 외, 1993~1996). 사(4)와 삼(3)으로 상대의 응수를 강제하는 수순을 좁게 파고드는 탐색이 이 게임에서 특히 강력하다는 뜻입니다.
  2. Rapfi 논문은 VCF 잎 탐색이 “방어 측에 단 하나의 응수만 허용하는 공격 수만 고려하므로 분기 수를 줄이고, 순수한 평가 모델로는 찾을 수 없는 숨은 전술 경로를 찾는다” 고 설명합니다.
  3. 같은 논문은 증분 업데이트가 “깊이 우선 탐색과 결합할 때 특히 빨라지며”, 알파-베타 탐색이 “깊이 우선 순회 덕분에 훨씬 높은 강도를 보였다” 고 보고합니다.
  4. MCTS 진영의 KataGomo 도 VCF 솔버와 VCF 입력 특징을 추가했습니다.

추론 (출처에 이 표현으로 적혀 있지는 않음)

  • 오목의 결정적 순간은 대부분 강제 수순 입니다. 사를 두면 상대는 한 곳만 막을 수 있으므로 분기 수가 1에 가깝고, 이런 수순은 통계적으로 표본을 뽑기보다 정확히 끝까지 읽는 편 이 낫습니다.
  • 한 수가 바꾸는 것은 돌 하나이고, 오목의 평가는 그 돌이 지나는 네 방향의 선 모양 에 크게 좌우됩니다. 바뀐 선만 다시 계산하는 증분 평가가 바둑보다 훨씬 잘 맞습니다.
  • 바둑은 사활과 집처럼 판 전체를 봐야 하는 판단이 많고, 이런 판단은 큰 신경망의 전역 풀링이 잘하는 일입니다. KataGo 가 집 소유권·점수 같은 보조 목표를 둔 이유이기도 합니다.
flowchart LR
    H0[" "]:::hdr
    H1["평가가 싸다<br/>(초당 수십만)"]:::hdr
    H2["평가가 비싸다<br/>(초당 수천)"]:::hdr
    R1["강제 수순이<br/>승부를 가름"]:::hdr
    A["오목의 Rapfi<br/>깊게 읽어<br/>수순을 확인"]
    B["오목의 KataGomo<br/>VCF 솔버를<br/>따로 붙여 보완"]
    R2["전역 판단이<br/>승부를 가름"]:::hdr
    C["바둑의 고전 엔진<br/>평가가 부정확해<br/>한계"]
    D["바둑의 KataGo<br/>정확한 평가로<br/>골라 읽음"]
    H0 ~~~ H1 ~~~ H2
    R1 ~~~ A ~~~ B
    R2 ~~~ C ~~~ D
    classDef hdr fill:none,stroke:none,color:#dddddd
    style A fill:#FFD700,color:#000000
    style B fill:#87CEEB,color:#000000
    style C fill:#555555,color:#999999
    style D fill:#90EE90,color:#000000

5. 그래서 누가 더 강한가#

이 질문에 1차 출처가 답하는 범위는 좁습니다.

조건판정근거
CPU 1코어, 대회 시간 제한Rapfi 우세Gomocup 2022~2026. 2026년에도 5개 리그 모두 Rapfi 1위, KataGomo 2위
CPU 전용, 제한된 자원Rapfi 가 약 400 Elo 우세Rapfi 논문 §5.3. KataGomo 를 CPU 버전으로 돌림
강한 GPU 를 쓰는 KataGomo 풀버전 대 멀티코어 Rapfi확인 불가두 엔진을 이 조건에서 맞붙인 1차 자료를 찾지 못했습니다

KataGomo 저자는 GPU 풀버전이 CPU 버전보다 1000~1500 Elo 강하다고 추정했고, 논문의 +400 은 CPU 버전 기준입니다. 두 숫자를 이어 붙이면 GPU KataGomo 가 더 강하다는 결론이 나올 것 같지만, 앞의 숫자는 측정값이 아니고 두 숫자의 기준 조건(시간, 오프닝, 스레드 수)도 다릅니다. 그래서 이 글은 “CPU 조건에서는 Rapfi 가 가장 강하다” 까지만 말합니다.

2026년 Gomocup 자유룰-15 에서 두 엔진의 차이가 9 Elo 였다는 점도 기억해 둘 만합니다. 대회 조건에서도 격차는 벌어지는 중이 아니라 좁혀지는 중일 수 있습니다.


6. 경쟁자이자 협력자#

두 엔진의 관계는 단순한 라이벌이 아닙니다.

flowchart TB
    KG["KataGo<br/>(바둑, lightvector)"] -->|"포크"| KM["KataGomo<br/>(hzyhhzy)"]
    KM -->|"자가대국 기보<br/>약 3,080만 국면"| DS["학습 데이터"]
    DS --> T["ResNet-6b128f<br/>교사 신경망"]
    DS --> M["Mixnet<br/>(Rapfi NNUE)"]
    T -->|"지식 증류"| M
    M --> R["Rapfi"]
    SF["Stockfish<br/>(체스)"] -->|"탐색 코드 일부"| R
    style R fill:#FFD700,color:#000000
    style KM fill:#87CEEB,color:#000000
  • Rapfi 논문의 학습 데이터는 “KataGomo 가 몇 주에 걸쳐 AlphaZero 식 자가대국으로 만든” 약 3,080만 국면입니다.
  • Mixnet 은 같은 데이터로 학습한 ResNet-6b128f 를 교사로 삼아 지식 증류(knowledge distillation) 로 학습합니다.
  • KataGomo 저자는 Rapfi 논문의 공저자이고 Rapfi AUTHORS 파일에도 올라 있습니다. Gomocup 2022 소개문도 Rapfi 의 첫 NNUE 가 KataGomo 기보로 학습했다고 적었습니다.

정리하면 KataGomo 가 GPU 로 비싸게 얻은 지식을 Rapfi 가 CPU 에서 싸게 쓸 수 있는 형태로 압축한 구조입니다. 바둑의 KataGo 에서 시작한 강화학습의 성과가 오목의 KataGomo 를 거쳐, 체스 엔진 Stockfish 에서 빌려 온 탐색 뼈대 위에 얹힌 것이 Rapfi 입니다.


7. 어느 쪽을 고를 것인가#

엔진을 가져다 무언가를 만들 사람의 관점에서 정리하면 다음과 같습니다. 자세한 고려사항은 Part 5 에서 다룹니다.

상황권장이유
브라우저 안에서 돌리고 싶다Rapfi공식 WASM 빌드와 Gomocalc 라는 선례가 있습니다
GPU 없는 서버, 낮은 대국당 비용RapfiCPU 1코어에서 대회 최상위 강도입니다
GPU 서버가 있고 최고 강도의 분석이 목표KataGomo 검토GPU 에서의 우열은 확인되지 않았으므로 직접 대국시켜 재 봐야 합니다
엔진을 고쳐서 앱에 넣어 배포라이선스 검토 필수Rapfi 는 GPLv3, KataGomo 는 MIT 계열입니다

다음 편에서는 Rapfi 가 한 수를 고르기까지 무슨 일을 하는지 소스 코드를 따라가 봅니다.


References#

1차 출처 (2025~2026)#

배경 자료 (구자료, 연도 명시)#