Lewati ke konten utama

Backend GPU dan Optimasi

Artikel ini memperkenalkan berbagai backend GPU yang didukung KataGo, perbedaan performa, dan cara melakukan tuning untuk mendapatkan performa optimal.


Gambaran Backend

KataGo mendukung empat backend komputasi:

BackendDukungan HardwarePerformaKesulitan Instalasi
CUDAGPU NVIDIATerbaikSedang
OpenCLGPU NVIDIA/AMD/IntelBaikMudah
MetalApple SiliconBaikMudah
EigenCPU sajaLebih lambatPaling mudah

Backend CUDA

Skenario Penggunaan

  • GPU NVIDIA (GTX seri 10 ke atas)
  • Membutuhkan performa tertinggi
  • Memiliki lingkungan pengembangan CUDA

Kebutuhan Instalasi

# Periksa versi CUDA
nvcc --version

# Periksa cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR
KomponenVersi yang Disarankan
CUDA11.x atau 12.x
cuDNN8.x
Driver470+

Kompilasi

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)

Karakteristik Performa

  • Tensor Cores: Mendukung akselerasi FP16 (seri RTX)
  • Inferensi Batch: Utilisasi GPU optimal
  • Manajemen Memori: Kontrol VRAM yang presisi

Backend OpenCL

Skenario Penggunaan

  • GPU AMD
  • GPU terintegrasi Intel
  • GPU NVIDIA (tanpa lingkungan CUDA)
  • Deployment lintas platform

Kebutuhan Instalasi

# Linux - Instal paket pengembangan OpenCL
sudo apt install ocl-icd-opencl-dev

# Periksa perangkat OpenCL yang tersedia
clinfo

Kompilasi

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

Pilihan Driver

Tipe GPUDriver yang Disarankan
AMDROCm atau AMDGPU-PRO
Intelintel-opencl-icd
NVIDIAnvidia-opencl-icd

Tuning Performa

# config.cfg
openclDeviceToUse = 0 # Nomor GPU
openclUseFP16 = auto # Half precision (jika didukung)
openclUseFP16Storage = true # Penyimpanan FP16

Backend Metal

Skenario Penggunaan

  • Apple Silicon (M1/M2/M3)
  • Sistem macOS

Kompilasi

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

Optimasi Apple Silicon

Arsitektur unified memory Apple Silicon memiliki keunggulan khusus:

# Pengaturan yang disarankan untuk Apple Silicon
numNNServerThreadsPerModel = 1
nnMaxBatchSize = 16
numSearchThreads = 4

Perbandingan Performa

ChipPerforma Relatif
M1~RTX 2060
M1 Pro/Max~RTX 3060
M2~RTX 2070
M3 Pro/Max~RTX 3070

Backend Eigen (CPU Saja)

Skenario Penggunaan

  • Lingkungan tanpa GPU
  • Pengujian cepat
  • Penggunaan intensitas rendah

Kompilasi

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

Ekspektasi Performa

CPU single-core: ~10-30 playouts/sec
CPU multi-core: ~50-150 playouts/sec
GPU (mid-range): ~1000-3000 playouts/sec

Parameter Tuning Performa

Parameter Inti

# config.cfg

# === Pengaturan Neural Network ===
# Nomor GPU (untuk multi-GPU)
nnDeviceIdxs = 0

# Jumlah thread inferensi per model
numNNServerThreadsPerModel = 2

# Ukuran batch maksimum
nnMaxBatchSize = 16

# Ukuran cache (2^N posisi)
nnCacheSizePowerOfTwo = 20

# === Pengaturan Pencarian ===
# Jumlah thread pencarian
numSearchThreads = 8

# Maksimum kunjungan per langkah
maxVisits = 800

Panduan Tuning Parameter

nnMaxBatchSize

Terlalu kecil: Utilisasi GPU rendah, latensi inferensi tinggi
Terlalu besar: VRAM tidak cukup, waktu tunggu lama

Nilai yang disarankan:
- 4GB VRAM: 8-12
- 8GB VRAM: 16-24
- 16GB+ VRAM: 32-64

numSearchThreads

Terlalu sedikit: Tidak bisa memenuhi kebutuhan GPU
Terlalu banyak: Bottleneck CPU, tekanan memori

Nilai yang disarankan:
- 1-2x jumlah core CPU
- Mendekati nnMaxBatchSize

numNNServerThreadsPerModel

CUDA: 1-2
OpenCL: 1-2
Eigen: Jumlah core CPU

Tuning Memori

# Kurangi penggunaan VRAM
nnMaxBatchSize = 8
nnCacheSizePowerOfTwo = 18

# Tingkatkan penggunaan VRAM (tingkatkan performa)
nnMaxBatchSize = 32
nnCacheSizePowerOfTwo = 22

Konfigurasi Multi-GPU

Multi-GPU Satu Mesin

# Gunakan GPU 0 dan GPU 1
nnDeviceIdxs = 0,1

# Jumlah thread per GPU
numNNServerThreadsPerModel = 2

Load Balancing

# Alokasikan bobot berdasarkan performa GPU
# GPU 0 lebih kuat, alokasikan lebih banyak pekerjaan
nnDeviceIdxs = 0,0,1

Benchmark

Menjalankan Benchmark

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

Interpretasi Output

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

Data Performa Umum

GPUModelPlayouts/detik
RTX 3060b18c384~2500
RTX 3080b18c384~4500
RTX 4090b18c384~8000
M1 Prob18c384~1500
M2 Maxb18c384~2200

Akselerasi TensorRT

Skenario Penggunaan

  • GPU NVIDIA
  • Mengejar performa ekstrem
  • Dapat menerima waktu inisialisasi lebih lama

Cara Mengaktifkan

# Aktifkan saat kompilasi
cmake .. -DUSE_BACKEND=CUDA -DUSE_TENSORRT=ON

# Atau gunakan versi pre-compiled
katago-tensorrt

Peningkatan Performa

CUDA standar: 100%
TensorRT FP32: +20-30%
TensorRT FP16: +50-80% (seri RTX)
TensorRT INT8: +100-150% (perlu kalibrasi)

Catatan

  • Startup pertama perlu kompilasi engine TensorRT (beberapa menit)
  • GPU berbeda perlu kompilasi ulang
  • FP16/INT8 mungkin sedikit mengurangi presisi

Masalah Umum

GPU Tidak Terdeteksi

# Periksa status GPU
nvidia-smi # NVIDIA
rocm-smi # AMD
clinfo # OpenCL

# KataGo list GPU yang tersedia
katago gpuinfo

VRAM Tidak Cukup

# Gunakan model lebih kecil
# b18c384 → b10c128

# Kurangi batch size
nnMaxBatchSize = 4

# Kurangi cache
nnCacheSizePowerOfTwo = 16

Performa Tidak Sesuai Harapan

  1. Pastikan menggunakan backend yang benar (CUDA > OpenCL > Eigen)
  2. Periksa apakah numSearchThreads cukup
  3. Pastikan GPU tidak digunakan program lain
  4. Gunakan perintah benchmark untuk konfirmasi performa

Checklist Optimasi Performa

  • Pilih backend yang benar (CUDA/OpenCL/Metal)
  • Instal driver GPU terbaru
  • Sesuaikan nnMaxBatchSize dengan VRAM
  • Sesuaikan numSearchThreads dengan CPU
  • Jalankan benchmark untuk konfirmasi performa
  • Monitor utilisasi GPU (seharusnya > 80%)

Bacaan Lanjutan