Lc0神经网络训练与优化:打造顶尖象棋AI的完整教程
【免费下载链接】lc0Open source neural network chess engine with GPU acceleration and broad hardware support.项目地址: https://gitcode.com/gh_mirrors/lc/lc0
Lc0是一款基于神经网络的国际象棋引擎,专为通过神经网络下象棋而设计,特别是LeelaChessZero项目的神经网络。它支持GPU加速并具有广泛的硬件支持,是开源社区打造顶尖象棋AI的理想选择。
快速获取Lc0源代码 🚀
获取Lc0的源代码非常简单,你可以通过git克隆或从GitHub下载归档文件。对于几乎所有用途,包括自对弈游戏生成和比赛,我们强烈建议使用最新的release/version分支。
使用git下载:
git clone -b release/0.32 https://gitcode.com/gh_mirrors/lc/lc0如果你已经克隆了旧版本,可以通过以下命令获取并切换到新分支:
git fetch --all git branch --all git checkout -t remotes/origin/release/0.32编译和运行Lc0的详细步骤 🔧
编译前的准备工作
编译Lc0需要Meson构建系统和至少一个用于评估神经网络的后端库,以及一些其他库。此外,Lc0需要支持C++20的编译器,经过测试的最低版本包括g++ v10.0、clang v12.0和Visual Studio 2019 version 16.11。
后端支持理论上包括任何与CBLAS兼容的CPU库,但主要使用OpenBLAS或Intel的DNNL。对于GPU,支持以下后端:CUDA(可选cuDNN)、各种onnxruntime版本以及Apple的Metal Performance Shaders。还有针对AMD和Intel GPU的实验性SYCL支持。
Linux系统编译指南
通用步骤
- 安装后端(也请阅读后面部分的详细说明):
- 如果你想使用NVIDIA显卡,请安装CUDA(可选cuDNN)。
- 如果你想使用AMD或Intel显卡,可以尝试SYCL。
- 如果你想使用BLAS,请安装OpenBLAS或DNNL。
- 安装ninja build(
ninja-build)、meson和(可选)gtest(libgtest-dev)。 - 进入
lc0/目录 - 运行
./build.sh lc0将在lc0/build/release/目录中生成- 在与二进制文件相同的目录中下载一个神经网络(无需解压)。
如果你想使用不同的编译器,可以传递CC和CXX环境变量:
CC=clang CXX=clang++ ./build.shUbuntu 20.04特别说明
对于Ubuntu 20.04,在执行上述步骤之前,你需要安装meson、ninja和gcc-10。以下命令应该可行:
apt-get update apt-get -y install git python3-pip gcc-10 g++-10 zlib1g zlib1g-dev pip3 install meson pip3 install ninja CC=gcc-10 CXX=g++-10 INSTALL_PREFIX=~/.local ./build.sh确保~/.local/bin在你的PATH环境变量中。现在你可以输入lc0 --help开始使用了。
Windows系统编译指南
以下是CUDA/cuDNN的简要说明,有关详细信息和其他选项,请参见windows-build.md和以下部分中的说明。
安装Microsoft Visual Studio(2019 version 16.11或更高版本)
安装CUDA
(可选安装cuDNN)。
如果没有随Visual Studio安装Python3,请安装它。
安装Meson:
pip3 install --upgrade meson如果未设置
CUDA_PATH(运行set命令查看所有变量列表),编辑build.cmd并设置CUDA_PATH为你的CUDA目录- 如果你还想使用cuDNN,设置
CUDNN_PATH为你的cuDNN目录(如果与CUDA_PATH相同则不需要)。
- 如果你还想使用cuDNN,设置
运行
build.cmd。它会请求删除构建目录的权限,然后生成MSVS项目并暂停。
然后可以选择:
- 按
Enter键进行构建。 - 生成的二进制文件将是
build/lc0.exe
或者:
- 在Visual Studio中打开生成的解决方案
build/lc0.sln并自行构建。
Mac系统编译指南
你需要安装xcode和python3。然后需要通过终端安装一些必需的软件包:
- 安装meson:
pip3 install meson - 安装ninja:
pip3 install ninja
现在按照页面前面的说明下载lc0源代码(如果你还没有这样做)。
- 进入lc0目录。
- 运行
./build.sh -Dgtest=false
编译好的Lc0将在build/release中。
从v0.32.0开始,我们还提供预编译版本,可以从发布页面下载。
不同后端的配置与优化 ⚡
CUDA后端设置
CUDA可以按照https://developer.nvidia.com/cuda-downloads上的说明下载和安装。在大多数情况下,构建会自动检测到它。但是,如果找不到cuda编译器(nvcc),你可以这样调用构建:PATH=/usr/local/cuda/bin:$PATH ./build.sh,将路径替换为nvcc的正确路径。
请注意,CUDA使用系统编译器,如果不识别版本,即使是更新的版本,也会停止。这在新的Linux版本上更为常见,但你可以使用nvcc_ccbin构建选项来为cuda指定不同的编译器。例如,在构建命令行中添加-Dnvcc_ccbin=g++-11将使用g++-11而不是系统编译器。
ONNX后端配置
Lc0提供了几个基于ONNX的后端,即onnx-cpu、onnx-cuda、onnx-trt、onnx-rocm,在Windows上还有onnx-dml,利用onnxruntime提供的执行提供程序。
一些Linux系统开始提供onnxruntime软件包,因此安装后,Lc0构建很可能无需进一步操作就能检测到它。否则,你可以设置onnx_libdir和onnx_include构建选项,分别指向onnxruntime库和包含目录。如果你从https://github.com/microsoft/onnxruntime/releases下载了软件包并解压,也使用相同的选项。
对于Windows,我们提供onnx-dml和onnx-trt的预编译软件包,请参阅包含的README以获取安装说明。
SYCL后端实验性支持
请注意,SYCL支持是v0.32.0中的新功能,因此仍被视为实验性的。
你将需要Intel"oneAPI DPC++/C++ Compiler"、"DPC++ Compatibility Tool"和(对于Intel GPU)"oneAPI Math Kernel Library (oneMKL)"或(对于AMD GPU)hipBLAS。
Intel工具可以在"oneAPI Base Toolkit"或"C++ Essentials"软件包中找到,可以从https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html下载,而hipBLAS可以从https://rocm.docs.amd.com/projects/hipBLAS/en/latest/下载。
C代码的编译器是icx,C++代码的编译器在Windows上是icx,但在Linux上是icpx。
要使用SYCL构建Lc0,你需要使用-Dsycl=l0(即el zero)设置sycl构建选项以用于Intel GPU,或-Dsycl=amd用于(你猜对了)AMD GPU。
你可能还需要设置dpct_include选项以指向DPC++ Compatibility Tool包含,onemkl_include类似地指向oneMKL包含,或hip_libdirs和hip_include分别指向AMD HIP库和包含。
在Linux上,典型的会话如下:
. /opt/intel/oneapi/setvars.sh --include-intel-llvm CC=icx CXX=icpx AR=llvm-ar ./build.sh release -Dgtest=false -Dsycl=l0第一行用于初始化构建环境,每个会话只需一次,而构建行可能需要如上所述进行修改。
在Windows上,你将必须使用ninja进行构建,如果你安装了CMake组件,Visual Studio会提供它。我们提供了build-sycl.cmd脚本,对于Intel GPU应该可以很好地构建。此脚本尚未在AMD GPU上测试,可能需要一些编辑。
你还可以安装oneAPI DPC++/C++ Compiler Runtime,这样你就可以运行Lc0,而无需每次都初始化构建环境。
BLAS后端配置
Lc0也可以在CPU上运行(速度稍慢),使用BLAS库中的矩阵乘法函数。默认情况下,如果可用,将使用OpenBLAS,因为它似乎在各种处理器上都能提供良好的性能。如果你的系统没有提供OpenBLAS软件包(例如libopenblas-dev),或者你有较新的处理器,你可以从这里获取DNNL。要使用DNNL,你必须将-Ddnnl=true传递给构建,并使用-Ddnnl_dir=选项指定安装目录。对于macs,将使用Accelerate库。
如果安装了"Intel Implicit SPMD Program Compiler"(ispc),一些性能关键函数将使用向量化代码以加快执行速度。
请注意,Lc0不能控制所有BLAS库的线程数。有些库会尝试积极地利用内核,在这种情况下,最好将线程设置为默认(即自动)设置。
Python绑定使用方法 🐍
Python绑定可以按如下方式构建和安装:
pip install --user git+https://gitcode.com/gh_mirrors/lc/lc0.git这将构建lczero-bindings包并将其安装到你的Python用户安装目录。所有与位置评估相关的lc0功能现在都在lczero.backends模块中可用。
获取帮助与支持 🤝
如果你遇到问题或上述说明不清楚,你总是可以寻求帮助。最快的方法是在我们的discord聊天的帮助频道中提问,但你也可以打开github issue(在检查问题尚未被报告之后)。
许可证信息 📜
Leela Chess是自由软件:你可以根据自由软件基金会发布的GNU通用公共许可证第3版或(根据你的选择)任何更高版本重新分发和/或修改它。
Leela Chess的分发希望它会有用,但没有任何保证;甚至没有适销性或特定用途适用性的暗示保证。有关更多详细信息,请参见GNU通用公共许可证。
你应该已经收到了GNU通用公共许可证的副本。如果没有,请参见http://www.gnu.org/licenses/。
GNU GPL第3版第7节的附加许可
除了BLAS、OpenCL和SYCL后端(blas、opencl和sycl子目录中的所有文件)之外,Lc0的源文件具有以下附加许可,根据GNU GPL第3版第7节允许:
如果你通过链接或组合本程序或任何涵盖的作品与NVIDIA Corporation的NVIDIA CUDA Toolkit和NVIDIA CUDA Deep Neural Network库(或这些库的修改版本),包含各自许可协议条款涵盖的部分,本程序的许可方授予你额外的许可来传达由此产生的作品。
【免费下载链接】lc0Open source neural network chess engine with GPU acceleration and broad hardware support.项目地址: https://gitcode.com/gh_mirrors/lc/lc0
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考