メインコンテンツまでスキップ

GPUバックエンドと最適化

本記事では、KataGoがサポートする各種GPUバックエンド、パフォーマンスの違い、最適なパフォーマンスを得るためのチューニング方法を紹介します。


バックエンド概要

KataGoは4種類の計算バックエンドをサポートしています:

バックエンドハードウェアサポートパフォーマンスインストール難易度
CUDANVIDIA GPU最高中程度
OpenCLNVIDIA/AMD/Intel GPU良好簡単
MetalApple Silicon良好簡単
EigenCPU専用遅い最も簡単

CUDAバックエンド

適用シナリオ

  • NVIDIA GPU(GTX 10シリーズ以上)
  • 最高パフォーマンスが必要
  • CUDA開発環境がある

インストール要件

# CUDAバージョンを確認
nvcc --version

# cuDNNを確認
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR
コンポーネント推奨バージョン
CUDA11.x または 12.x
cuDNN8.x
ドライバ470以上

コンパイル

cd KataGo/cpp
mkdir build && cd build

cmake .. -DUSE_BACKEND=CUDA \
-DCUDNN_INCLUDE_DIR=/usr/local/cuda/include \
-DCUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so

make -j$(nproc)

パフォーマンス特性

  • Tensor Cores:FP16アクセラレーションをサポート(RTXシリーズ)
  • バッチ推論:GPU使用率が最適
  • メモリ管理:VRAM使用量を精密に制御可能

OpenCLバックエンド

適用シナリオ

  • AMD GPU
  • Intel内蔵グラフィックス
  • NVIDIA GPU(CUDA環境なし)
  • クロスプラットフォームデプロイ

インストール要件

# Linux - OpenCL開発キットをインストール
sudo apt install ocl-icd-opencl-dev

# 利用可能なOpenCLデバイスを確認
clinfo

コンパイル

cmake .. -DUSE_BACKEND=OPENCL
make -j$(nproc)

ドライバの選択

GPUタイプ推奨ドライバ
AMDROCm または AMDGPU-PRO
Intelintel-opencl-icd
NVIDIAnvidia-opencl-icd

パフォーマンスチューニング

# config.cfg
openclDeviceToUse = 0 # GPU番号
openclUseFP16 = auto # 半精度(サポート時)
openclUseFP16Storage = true # FP16ストレージ

Metalバックエンド

適用シナリオ

  • Apple Silicon(M1/M2/M3)
  • macOSシステム

コンパイル

cmake .. -DUSE_BACKEND=METAL
make -j$(sysctl -n hw.ncpu)

Apple Silicon最適化

Apple Siliconのユニファイドメモリアーキテクチャには特別な利点があります:

# Apple Silicon推奨設定
numNNServerThreadsPerModel = 1
nnMaxBatchSize = 16
numSearchThreads = 4

パフォーマンス比較

チップ相対パフォーマンス
M1~RTX 2060
M1 Pro/Max~RTX 3060
M2~RTX 2070
M3 Pro/Max~RTX 3070

Eigenバックエンド(CPU専用)

適用シナリオ

  • GPU環境なし
  • クイックテスト
  • 軽度の使用

コンパイル

sudo apt install libeigen3-dev
cmake .. -DUSE_BACKEND=EIGEN
make -j$(nproc)

パフォーマンス予測

CPUシングルコア:~10-30 playouts/秒
CPUマルチコア:~50-150 playouts/秒
GPU(ミドルレンジ):~1000-3000 playouts/秒

パフォーマンスチューニングパラメータ

コアパラメータ

# config.cfg

# === ニューラルネットワーク設定 ===
# GPU番号(マルチGPU時に使用)
nnDeviceIdxs = 0

# モデルごとの推論スレッド数
numNNServerThreadsPerModel = 2

# 最大バッチサイズ
nnMaxBatchSize = 16

# キャッシュサイズ(2^N個の位置)
nnCacheSizePowerOfTwo = 20

# === 探索設定 ===
# 探索スレッド数
numSearchThreads = 8

# 1手あたりの最大訪問回数
maxVisits = 800

パラメータチューニングガイド

nnMaxBatchSize

小さすぎ:GPU使用率が低い、推論遅延が高い
大きすぎ:VRAM不足、待機時間が長い

推奨値:
- 4GB VRAM: 8-12
- 8GB VRAM: 16-24
- 16GB以上 VRAM: 32-64

numSearchThreads

少なすぎ:GPUを十分に活用できない
多すぎ:CPUボトルネック、メモリ圧力

推奨値:
- CPUコア数の1-2倍
- nnMaxBatchSizeに近い値

numNNServerThreadsPerModel

CUDA:1-2
OpenCL:1-2
Eigen:CPUコア数

メモリチューニング

# VRAM使用量を削減
nnMaxBatchSize = 8
nnCacheSizePowerOfTwo = 18

# VRAM使用量を増やす(パフォーマンス向上)
nnMaxBatchSize = 32
nnCacheSizePowerOfTwo = 22

マルチGPU設定

シングルマシン・マルチGPU

# GPU 0とGPU 1を使用
nnDeviceIdxs = 0,1

# 各GPUのスレッド数
numNNServerThreadsPerModel = 2

負荷分散

# GPUパフォーマンスに応じて重みを割り当て
# GPU 0の方が高性能で、より多くの作業を割り当て
nnDeviceIdxs = 0,0,1

ベンチマーク

ベンチマークの実行

katago benchmark -model model.bin.gz -config config.cfg

出力の解釈

GPU 0: NVIDIA GeForce RTX 3080
Threads: 8, Batch Size: 16

Benchmark results:
- Neural net evals/second: 2847.3
- Playouts/second: 4521.8
- Time per move (1000 visits): 0.221 sec

Memory usage:
- Peak GPU memory: 2.1 GB
- Peak system memory: 1.3 GB

一般的なパフォーマンスデータ

GPUモデルPlayouts/秒
RTX 3060b18c384~2500
RTX 3080b18c384~4500
RTX 4090b18c384~8000
M1 Prob18c384~1500
M2 Maxb18c384~2200

TensorRTアクセラレーション

適用シナリオ

  • NVIDIA GPU
  • 最高パフォーマンスを追求
  • 長い初期化時間を許容できる

有効化方法

# コンパイル時に有効化
cmake .. -DUSE_BACKEND=CUDA -DUSE_TENSORRT=ON

# またはプリコンパイル版を使用
katago-tensorrt

パフォーマンス向上

標準CUDA:100%
TensorRT FP32:+20-30%
TensorRT FP16:+50-80%(RTXシリーズ)
TensorRT INT8:+100-150%(キャリブレーションが必要)

注意事項

  • 初回起動時にTensorRTエンジンのコンパイルが必要(数分)
  • 異なるGPUでは再コンパイルが必要
  • FP16/INT8は精度がわずかに低下する可能性あり

よくある問題

GPUが検出されない

# GPUステータスを確認
nvidia-smi # NVIDIA
rocm-smi # AMD
clinfo # OpenCL

# KataGoで利用可能なGPUをリスト
katago gpuinfo

VRAM不足

# より小さいモデルを使用
# b18c384 → b10c128

# バッチサイズを削減
nnMaxBatchSize = 4

# キャッシュを削減
nnCacheSizePowerOfTwo = 16

パフォーマンスが期待通りでない

  1. 正しいバックエンドを使用しているか確認(CUDA > OpenCL > Eigen)
  2. numSearchThreadsが十分か確認
  3. GPUが他のプログラムに占有されていないか確認
  4. benchmarkコマンドでパフォーマンスを確認

パフォーマンス最適化チェックリスト

  • 正しいバックエンドを選択(CUDA/OpenCL/Metal)
  • 最新のGPUドライバをインストール
  • nnMaxBatchSizeをVRAMに合わせて調整
  • numSearchThreadsをCPUに合わせて調整
  • benchmarkでパフォーマンスを確認
  • GPU使用率を監視(80%以上が目標)

関連記事