واجهات GPU والتحسين
يقدم هذا المقال واجهات GPU المختلفة التي يدعمها KataGo، والفروقات في الأداء، وكيفية ضبطها للحصول على أفضل أداء.
يوفّر KataGo أربع واجهات حوسبة هي CUDA وOpenCL وMetal وEigen؛ تحقق CUDA أفضل أداء على معالجات NVIDIA، وتعمل OpenCL عبر مختلف الشركات المصنّعة، وتُستخدم Metal على شرائح Apple Silicon، وEigen على المعالج المركزي فقط. ويتمثل مفتاح التحسين في اختيار الواجهة المناسبة وضبط حجم الدفعة (nnMaxBatchSize) وعدد الخيوط لاستغلال معالج الرسوميات بالكامل.
نظرة عامة على الواجهات
يدعم KataGo أربع واجهات حسابية:
| الواجهة | دعم الأجهزة | الأداء | صعوبة التثبيت |
|---|---|---|---|
| CUDA | NVIDIA GPU | الأفضل | متوسطة |
| OpenCL | NVIDIA/AMD/Intel GPU | جيد | سهلة |
| Metal | Apple Silicon | جيد | سهلة |
| Eigen | CPU فقط | أبطأ | الأسهل |
واجهة CUDA
حالات الاستخدام
- NVIDIA GPU (GTX 10 series وأحدث)
- الحاجة لأعلى أداء
- وجود بيئة تطوير CUDA
متطلبات التثبيت
# التحقق من إصدار CUDA
nvcc --version
# التحقق من cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR
| المكون | الإصدار المقترح |
|---|---|
| CUDA | 11.x أو 12.x |
| cuDNN | 8.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 integrated graphics
- NVIDIA GPU (بدون بيئة CUDA)
- النشر عبر المنصات
متطلبات التثبيت
# Linux - تثبيت حزمة تطوير OpenCL
sudo apt install ocl-icd-opencl-dev
# التحقق من أجهزة OpenCL المتاحة
clinfo
البناء
cmake .. -DUSE_BACKEND=OPENCL
make -j$(nproc)
اختيار برنامج التشغيل
| نوع GPU | برنامج التشغيل المقترح |
|---|---|
| AMD | ROCm أو AMDGPU-PRO |
| Intel | intel-opencl-icd |
| NVIDIA | nvidia-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/sec
CPU متعدد النواة: ~50-150 playouts/sec
GPU (متوسط): ~1000-3000 playouts/sec
معلمات ضبط الأداء
المعلمات الأساسية
# config.cfg
# === إعدادات الشبكة العصبية ===
# رقم GPU (لأجهزة GPU متعددة)
nnDeviceIdxs = 0
# عدد خيوط الاستدلال لكل نموذج
numNNServerThreadsPerModel = 2
# الحد الأقصى لحجم الدفعة
nnMaxBatchSize = 16
# حجم الذاكرة المؤقتة (2^N مواقع)
nnCacheSizePowerOfTwo = 20
# === إعدادات البحث ===
# عدد خيوط البحث
numSearchThreads = 8
# الحد الأقصى للزيارات لكل حركة
maxVisits = 800
دليل ضبط المعلمات
nnMaxBatchSize
صغير جداً: استخدام GPU منخفض، تأخر استدلال عالي
كبير جداً: VRAM غير كافي، وقت انتظار طويل
القيم المقترحة:
- 4GB VRAM: 8-12
- 8GB VRAM: 16-24
- 16GB+ VRAM: 32-64
numSearchThreads
قليل جداً: لا يمكن إشباع GPU
كثير جداً: عنق زجاجة CPU، ضغط الذاكرة
القيم المقترحة:
- 1-2 ضعف عدد نوى CPU
- قريب من 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 3060 | b18c384 | ~2500 |
| RTX 3080 | b18c384 | ~4500 |
| RTX 4090 | b18c384 | ~8000 |
| M1 Pro | b18c384 | ~1500 |
| M2 Max | b18c384 | ~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
الأداء أقل من المتوقع
- تأكد من استخدام الواجهة الصحيحة (CUDA > OpenCL > Eigen)
- تحقق من أن
numSearchThreadsكافٍ - تأكد من أن GPU غير مشغول ببرامج أخرى
- استخدم أمر
benchmarkللتأكد من الأداء
قائمة فحص تحسين الأداء
- اختيار الواجهة الصحيحة (CUDA/OpenCL/Metal)
- تثبيت أحدث برامج تشغيل GPU
- ضبط
nnMaxBatchSizeليتناسب مع VRAM - ضبط
numSearchThreadsليتناسب مع CPU - تشغيل
benchmarkللتأكد من الأداء - مراقبة استخدام GPU (يجب > 80%)
قراءات إضافية
- تفاصيل تنفيذ MCTS — مصدر الحاجة للاستدلال الدفعي
- تكميم النموذج والنشر — مزيد من تحسين الأداء
- دليل التثبيت الكامل — خطوات التثبيت لمختلف المنصات