lc0:基于神经网络的UCI国际象棋引擎,支持多后端加速

Open source neural network chess engine with GPU acceleration and broad hardware support.

分支26Tags90
文件最后提交记录最后更新时间
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 年前

CircleCI AppVeyor

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

如果您希望下载压缩包:

  • 下载 .zip 文件(也提供 .tar.gz 格式的压缩包)
  • 解压

通过上述任一方法成功获取 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

通用步骤

  1. 安装后端(也请阅读后续章节中的详细说明):
    • 如果您想使用 NVIDIA 显卡,请安装 CUDA(以及可选的 cuDNN)。
    • 如果您想使用 AMD 或 Intel 显卡,可以尝试 SYCL。
    • 如果您想使用 BLAS,请安装 OpenBLAS 或 DNNL。
  2. 安装 ninja build(ninja-build 包)、meson,以及(可选的)gtest(libgtest-dev 包)。
  3. 进入 lc0/ 目录
  4. 运行 ./build.sh
  5. lc0 可执行文件将位于 lc0/build/release/ 目录中
  6. 下载一个 神经网络 并将其放在与二进制文件相同的目录中(无需解压缩)。

如果您希望使用不同的编译器,请传递 CCCXX 环境变量:

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 以及以下部分中的说明。

  1. 安装 Microsoft Visual Studio(2019 版本 16.11 或更高版本)
  2. 安装 CUDA
  3. (可选安装 cuDNN)。
  4. 如果未随 Visual Studio 一起安装 Python3,请安装 Python3。
  5. 安装 Meson:pip3 install --upgrade meson
  6. 如果未设置 CUDA_PATH(运行 set 命令查看完整变量列表),请编辑 build.cmd 并将 CUDA_PATH 设置为您的 CUDA 目录
  • 如果您还想使用 cuDNN,请将 CUDNN_PATH 设置为您的 cuDNN 目录(如果与 CUDA_PATH 相同,则无需设置)。
  1. 运行 build.cmd。它会请求删除构建目录的权限,然后生成 MSVS 项目并暂停。

之后,您可以选择:

  1. Enter 键进行构建。
  2. 生成的二进制文件将位于 build/lc0.exe

或者:

  1. 在 Visual Studio 中打开生成的解决方案 build/lc0.sln 并自行构建。

Mac

您需要安装 xcode 和 python3。然后,您需要通过终端安装一些必需的软件包:

  1. 安装 meson:pip3 install meson
  2. 安装 ninja:pip3 install ninja

如果您尚未下载 lc0 源代码,请按照本页前面的说明进行下载。

  1. 进入 lc0 目录。
  2. 运行 ./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_libdironnx_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_libdirship_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 后端(blasopenclsycl 子目录中的所有文件)外,Lc0 的源文件具有以下附加许可,该许可根据 GNU GPL 第三版第 7 节获得允许:

如果您通过将本程序或任何涵盖作品与 NVIDIA 公司的 NVIDIA CUDA 工具包库和 NVIDIA CUDA 深度神经网络库(或这些库的修改版本)进行链接或组合来修改本程序或任何涵盖作品,且这些库包含受各自许可协议条款约束的部分,则本程序的许可方授予您额外的权限来传播由此产生的作品。

项目介绍

原为TensorFlow设计的改写引擎,现已将所有其他后端迁移至此。【此简介由AI生成】

定制我的领域
943.14 K599访问 GitHub