Backend GPU dan Optimasi
Artikel ini memperkenalkan berbagai backend GPU yang didukung KataGo, perbedaan performa, dan cara melakukan tuning untuk mendapatkan performa optimal.
KataGo menyediakan empat backend komputasi: CUDA, OpenCL, Metal, dan Eigen; GPU NVIDIA memberikan performa terbaik dengan CUDA, lintas merek dapat menggunakan OpenCL, Apple Silicon menggunakan Metal, dan CPU murni menggunakan Eigen. Kunci optimasi adalah memilih backend yang tepat serta menyetel ukuran batch (nnMaxBatchSize) dan jumlah thread agar GPU dimanfaatkan secara maksimal.
Gambaran Backend
KataGo mendukung empat backend komputasi:
| Backend | Dukungan Hardware | Performa | Kesulitan Instalasi |
|---|---|---|---|
| CUDA | GPU NVIDIA | Terbaik | Sedang |
| OpenCL | GPU NVIDIA/AMD/Intel | Baik | Mudah |
| Metal | Apple Silicon | Baik | Mudah |
| Eigen | CPU saja | Lebih lambat | Paling 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
| Komponen | Versi yang Disarankan |
|---|---|
| CUDA | 11.x atau 12.x |
| cuDNN | 8.x |
| Driver | 470+ |
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 GPU | Driver yang Disarankan |
|---|---|
| AMD | ROCm atau AMDGPU-PRO |
| Intel | intel-opencl-icd |
| NVIDIA | nvidia-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
| Chip | Performa 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
| GPU | Model | Playouts/detik |
|---|---|---|
| RTX 3060 | b18c384 | ~2500 |
| RTX 3080 | b18c384 | ~4500 |
| RTX 4090 | b18c384 | ~8000 |
| M1 Pro | b18c384 | ~1500 |
| M2 Max | b18c384 | ~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
- Pastikan menggunakan backend yang benar (CUDA > OpenCL > Eigen)
- Periksa apakah
numSearchThreadscukup - Pastikan GPU tidak digunakan program lain
- Gunakan perintah
benchmarkuntuk konfirmasi performa
Checklist Optimasi Performa
- Pilih backend yang benar (CUDA/OpenCL/Metal)
- Instal driver GPU terbaru
- Sesuaikan
nnMaxBatchSizedengan VRAM - Sesuaikan
numSearchThreadsdengan CPU - Jalankan
benchmarkuntuk konfirmasi performa - Monitor utilisasi GPU (seharusnya > 80%)
Bacaan Lanjutan
- Detail Implementasi MCTS — Sumber kebutuhan inferensi batch
- Kuantisasi Model dan Deployment — Optimasi performa lebih lanjut
- Panduan Instalasi Lengkap — Langkah instalasi per platform