Open source neural network chess engine with GPU acceleration and broad hardware support.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 7 个月前 | ||
| 6 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 8 个月前 | ||
| 6 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 6 个月前 | ||
| 4 年前 | ||
| 1 年前 | ||
| 9 个月前 | ||
| 10 个月前 | ||
| 2 年前 | ||
| 11 个月前 | ||
| 7 年前 | ||
| 4 年前 | ||
| 9 个月前 | ||
| 1 个月前 | ||
| 1 年前 | ||
| 6 个月前 | ||
| 9 个月前 | ||
| 1 年前 | ||
| 10 个月前 | ||
| 7 年前 | ||
| 1 个月前 | ||
| 6 个月前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 2 年前 |
Lc0
Lc0 是一款兼容 UCI 协议的国际象棋引擎,旨在通过神经网络下国际象棋,特别是 LeelaChessZero 项目 所使用的神经网络。
下载源代码
您可以通过 git 克隆或从 GitHub 下载压缩包的方式获取 Lc0。
对于几乎所有用途,包括自对弈生成和比赛对战,我们强烈建议使用最新的 release/version 分支(例如 release/0.32),这与使用最新的版本标签效果相同。
版本控制遵循语义化版本(Semantic Versioning)规范,包含主版本号、次版本号和修订号。训练服务器会利用客户端和引擎输出的版本信息来确保对局质量。
使用 git 下载:
git clone -b release/0.32 https://github.com/LeelaChessZero/lc0.git
如果您已克隆了旧版本,请获取、查看并检出新分支:
git fetch --all
git branch --all
git checkout -t remotes/origin/release/0.32
如果您希望下载压缩包:
通过上述任一方法成功获取 Lc0 后,请继续阅读下面的构建部分,并按照适用于您操作系统的说明进行操作。
构建和运行 Lc0
现在构建 Lc0 应该比过去更容易了。如果遇到任何问题,请报告。
构建 lc0 需要 Meson 构建系统、至少一个用于评估神经网络的后端库,以及一些其他库。如果您的系统已安装这些库,将直接使用它们;否则,Meson 会生成自己的副本(一个“子项目”),这进而要求安装 git(是的,这与克隆 lc0 仓库是分开的)。Meson 还需要 python 和 Ninja。
后端支持(理论上)包括任何与 CBLAS 兼容的 CPU 库,但主要是 OpenBLAS 或 Intel 的 DNNL。对于 GPU,支持以下选项:CUDA(可选搭配 cuDNN)、各种版本的 onnxruntime 以及 Apple 的 Metal Performance Shaders。此外,还对 AMD 和 Intel GPU 提供实验性的 SYCL 支持。
最后,lc0 需要支持 C++20 的编译器。经过测试的最低版本为 g++ v10.0、clang v12.0 和 Visual Studio 2019 version 16.11。
了解上述基本要求后,以下是针对特定操作系统和后端的详细说明。
Linux
通用步骤
- 安装后端(也请阅读后续章节中的详细说明):
- 安装 ninja build(
ninja-build包)、meson,以及(可选的)gtest(libgtest-dev包)。 - 进入
lc0/目录 - 运行
./build.sh lc0可执行文件将位于lc0/build/release/目录中- 下载一个 神经网络 并将其放在与二进制文件相同的目录中(无需解压缩)。
如果您希望使用不同的编译器,请传递 CC 和 CXX 环境变量:
CC=clang CXX=clang++ ./build.sh
Ubuntu 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 版本 16.11 或更高版本)
- 安装 CUDA
- (可选安装 cuDNN)。
- 如果未随 Visual Studio 一起安装 Python3,请安装 Python3。
- 安装 Meson:
pip3 install --upgrade meson - 如果未设置
CUDA_PATH(运行set命令查看完整变量列表),请编辑build.cmd并将CUDA_PATH设置为您的 CUDA 目录
- 如果您还想使用 cuDNN,请将
CUDNN_PATH设置为您的 cuDNN 目录(如果与CUDA_PATH相同,则无需设置)。
- 运行
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 将使 cuda 使用 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++ 编译器”、“DPC++ 兼容性工具”,以及(对于 Intel GPU)“oneAPI 数学核心库 (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)为 Intel GPU 设置 sycl 构建选项,或通过 -Dsycl=amd(你猜对了)为 AMD GPU 设置该选项。
你可能还需要设置 dpct_include 选项以指向 DPC++ 兼容性工具的头文件目录,设置 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++ 编译器运行时,这样您就可以运行 Lc0,而无需每次都初始化构建环境。
BLAS
Lc0 也可以在 CPU 上运行(速度稍慢),它使用 BLAS 库中的矩阵乘法函数。默认情况下,如果 OpenBLAS 可用,将使用它,因为它在各种处理器上都能提供良好的性能。如果您的系统没有提供 OpenBLAS 包(例如 libopenblas-dev),或者您有较新的处理器,您可以从 此处 获取 DNNL。要使用 DNNL,您必须在构建时传递 -Ddnnl=true,并使用 -Ddnnl_dir= 选项指定其安装目录。对于 Mac,将使用 Accelerate 库。
如果安装了“Intel Implicit SPMD Program Compiler”(ispc)(安装方法),一些性能关键函数将使用向量化代码以加快执行速度。
注意,Lc0 并非能够控制所有 BLAS 库的线程数量。有些库会积极地利用核心,在这种情况下,最好将线程数设置为默认值(即自动)。
获取帮助
如果遇到问题或上述说明不够清晰,您随时可以寻求帮助。最快的方式是在我们的 Discord 聊天 的帮助频道中提问,您也可以提交 GitHub issue(提交前请检查该问题是否已被报告)。
Python 绑定
Python 绑定可按以下步骤构建和安装。
pip install --user git+https://github.com/LeelaChessZero/lc0.git
这将构建 lczero-bindings 包并将其安装到您的 Python 用户安装目录。
所有与局面评估相关的 lc0 功能现在都可在 lczero.backends 模块中使用。
交互式会话示例可在此处找到。
许可协议
Leela Chess 是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证(第三版或任何更新版本)的条款重新分发和/或修改它。
Leela Chess 的分发旨在希望它能有所用处,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途适用性的担保。有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该已经随 Leela Chess 收到了 GNU 通用公共许可证的副本。如果没有,请查看 http://www.gnu.org/licenses/。
GNU GPL 第三版第 7 节规定的附加许可
除 BLAS、OpenCL 和 SYCL 后端(blas、opencl 和 sycl 子目录中的所有文件)外,Lc0 的源文件具有以下附加许可,该许可根据 GNU GPL 第三版第 7 节获得允许:
如果您通过将本程序或任何涵盖作品与 NVIDIA 公司的 NVIDIA CUDA 工具包库和 NVIDIA CUDA 深度神经网络库(或这些库的修改版本)进行链接或组合来修改本程序或任何涵盖作品,且这些库包含受各自许可协议条款约束的部分,则本程序的许可方授予您额外的权限来传播由此产生的作品。
项目介绍
原为TensorFlow设计的改写引擎,现已将所有其他后端迁移至此。【此简介由AI生成】