Skip to content

Commit

Permalink
build MacOS & WebAssembly, install CUDA-11.6 + TensorRT8.2.4 (#231)
Browse files Browse the repository at this point in the history
* - nproc

* - YANEURAOU_ENGINE_MATERIAL* ビルドテストの一部省略

* - release build material lv1,lv9

* - pacboy -Syuu

* - remove base-devel: from actions

* - remove base-devel:

* - pacman update

* - POPCNT, BSF, BSR の実装パターン追加

* - MacOS

* - NuGet packages bump up

* - CUDA 11.6 Update 2, TensorRT 8.2 GA Update 3, cuda-nvrtc, remove copy cuda dlls
- CUDA gpg-key change
  cf. NVIDIA/cuda-repo-management#4

* - clang-15

* - DNN_Batch_Size max 1024

* - fp16

* - .gitignore

* - badge MacOS, WebAssembly

* - WASM port
  cf. https://github.com/arashigaoka/YaneuraOu.wasm
  cf. https://github.com/niklasf/stockfish.wasm
  cf. https://github.com/hi-ogawa/Stockfish

* - wasm_build

* - github workflows: wasm
  • Loading branch information
mizar committed Apr 30, 2022
1 parent 904692c commit 16e7fc2
Show file tree
Hide file tree
Showing 47 changed files with 2,316 additions and 325 deletions.
30 changes: 23 additions & 7 deletions .github/workflows/make-deep-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ jobs:
- clang++-12
- clang++-13
- clang++-14
- clang++-15
target:
- normal
archcpu:
Expand Down Expand Up @@ -100,23 +101,38 @@ jobs:
sudo cat /etc/apt/sources.list
sudo ls -R /etc/apt/sources.list.d
if: ${{ matrix.compiler == 'clang++-14' }}
- name: install clang-15
# LLVM APT
run: |
# Remove packages that conflict with clang-15 installation
sudo apt remove -y \
liblldb-10 libomp-10-dev libomp5-10 lldb-10 python3-lldb-10 \
liblldb-11 libomp-11-dev libomp5-11 lldb-11 python3-lldb-11 \
liblldb-12 libomp-12-dev libomp5-12 lldb-12 python3-lldb-12
# install clang-15
wget https://apt.llvm.org/llvm.sh
sudo bash ./llvm.sh 15
sudo cat /etc/apt/sources.list
sudo ls -R /etc/apt/sources.list.d
if: ${{ matrix.compiler == 'clang++-15' }}

- name: install CUDA, TensorRT
# ここではCUDAアプリケーションの開発環境用に、CUDAドライバーを含まない cuda-minimal-build-11-5 をインストールしている。
# CUDAアプリケーションの実行環境用にセットアップする場合、 cuda-minimal-build-11-5 の代わりに
# CUDAドライバーを含むメタパッケージ、 cuda-11-5 もしくは cuda をインストールする。
# ここではCUDAアプリケーションの開発環境用に、CUDAドライバーを含まない cuda-minimal-build-11-6 をインストールしている。
# CUDAアプリケーションの実行環境用にセットアップする場合、 cuda-minimal-build-11-6 の代わりに
# CUDAドライバーを含むメタパッケージ、 cuda-11-6 もしくは cuda をインストールする。
# https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#package-manager-metas
# https://github.com/NVIDIA/cuda-repo-management/issues/4
run: |
sudo curl "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin" -o /etc/apt/preferences.d/cuda-repository-pin-600
sudo curl "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub" -o /usr/share/keyrings/cuda.gpg.asc
echo "deb [signed-by=/usr/share/keyrings/cuda.gpg.asc] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" | sudo tee /etc/apt/sources.list.d/cuda.list &&\
sudo curl "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004-keyring.gpg" -o /usr/share/keyrings/cuda-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" | sudo tee /etc/apt/sources.list.d/cuda-ubuntu2004-x86_64.list &&\
sudo cat /etc/apt/sources.list
sudo ls -R /etc/apt/sources.list.d
sudo apt update
sudo apt install cuda-minimal-build-11-5 libnvinfer-dev libnvinfer-plugin-dev libnvonnxparsers-dev libnvparsers-dev
sudo apt install cuda-minimal-build-11-6 cuda-nvrtc-dev-11-6 libcublas-11-6 libcublas-dev-11-6 libnvinfer-dev libnvinfer-plugin-dev libnvonnxparsers-dev libnvparsers-dev
- name: make
run: ./main/script/build.sh -e ${{ matrix.edition }} -c ${{ matrix.compiler }} -t ${{ matrix.target }} -a ${{ matrix.archcpu }} -x "EXTRA_CPPFLAGS='-I/usr/local/cuda-11.5/include' EXTRA_LDFLAGS='-L/usr/local/cuda-11.5/lib64'"
run: ./main/script/build.sh -e ${{ matrix.edition }} -c ${{ matrix.compiler }} -t ${{ matrix.target }} -a ${{ matrix.archcpu }} -x "EXTRA_CPPFLAGS=-I/usr/local/cuda-11.6/include EXTRA_LDFLAGS=-L/usr/local/cuda-11.6/lib64 EXTRA_LDFLAGS+=-L/usr/local/cuda-11.6/lib64/stubs"

- uses: actions/upload-artifact@v2
with:
Expand Down
255 changes: 255 additions & 0 deletions .github/workflows/make-macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
# for Linux environment
name: Make CI (for MacOS)

on:
push:
branches:
- "**"
pull_request:
branches:
- "**"

jobs:
build-macos:
# macos-11
# https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md
runs-on: macos-11

strategy:
matrix:
edition:
- YANEURAOU_ENGINE_NNUE
- "YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32,YANEURAOU_ENGINE_NNUE_HALFKPE9,YANEURAOU_ENGINE_NNUE_KP256"
- "YANEURAOU_ENGINE_KPPT,YANEURAOU_ENGINE_KPP_KKPT"
- "YANEURAOU_ENGINE_MATERIAL,YANEURAOU_ENGINE_MATERIAL9"
- "YANEURAOU_MATE_ENGINE,TANUKI_MATE_ENGINE"
- USER_ENGINE
compiler:
- clang++
- g++-11
target:
- "normal,tournament"
archcpu:
#- AVX2
#- SSE42
- APPLEAVX2
- APPLESSE42
- APPLEM1
exclude:
- compiler: g++-11
archcpu: APPLEAVX2
- compiler: g++-11
archcpu: APPLESSE42
- compiler: g++-11
archcpu: APPLEM1

steps:
- name: Checkout own repository
uses: actions/checkout@v2
with:
path: main

- name: make
uses: actions/github-script@v5
env:
JOBS: '8'
EDITION: '${{ matrix.edition }}'
COMPILER: '${{ matrix.compiler }}'
TARGET: '${{ matrix.target }}'
CPU: '${{ matrix.archcpu }}'
OS: 'macos11'
with:
script: |
const fs = require('fs');
const {JOBS, EDITION, COMPILER, TARGET, CPU, OS, EXTRA} = process.env;
const editionh = {
"YANEURAOU_ENGINE_NNUE": "YANEURAOU_ENGINE_NNUE",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "YANEURAOU_ENGINE_NNUE_HALFKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "YANEURAOU_ENGINE_NNUE_KP256",
"YANEURAOU_ENGINE_DEEP_TENSOR_RT": "YANEURAOU_ENGINE_DEEP_TENSOR_RT",
"YANEURAOU_ENGINE_KPPT": "YANEURAOU_ENGINE_KPPT",
"YANEURAOU_ENGINE_KPP_KKPT": "YANEURAOU_ENGINE_KPP_KKPT",
"YANEURAOU_ENGINE_MATERIAL": "YANEURAOU_ENGINE_MATERIAL",
"YANEURAOU_ENGINE_MATERIAL2": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=2",
"YANEURAOU_ENGINE_MATERIAL3": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=3",
"YANEURAOU_ENGINE_MATERIAL4": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=4",
"YANEURAOU_ENGINE_MATERIAL5": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=5",
"YANEURAOU_ENGINE_MATERIAL6": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=6",
"YANEURAOU_ENGINE_MATERIAL7": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=7",
"YANEURAOU_ENGINE_MATERIAL8": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=8",
"YANEURAOU_ENGINE_MATERIAL9": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=9",
"YANEURAOU_ENGINE_MATERIAL10": "YANEURAOU_ENGINE_MATERIAL MATERIAL_LEVEL=10",
"YANEURAOU_MATE_ENGINE": "YANEURAOU_MATE_ENGINE",
"TANUKI_MATE_ENGINE": "TANUKI_MATE_ENGINE",
"USER_ENGINE": "USER_ENGINE",
};
const dirh = {
"YANEURAOU_ENGINE_NNUE": "NNUE",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "NNUE_HALFKP_VM",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "NNUE_HALFKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "NNUE_KP256",
"YANEURAOU_ENGINE_DEEP_TENSOR_RT": "DEEP_TRT",
"YANEURAOU_ENGINE_KPPT": "KPPT",
"YANEURAOU_ENGINE_KPP_KKPT": "KPP_KKPT",
"YANEURAOU_ENGINE_MATERIAL": "MaterialLv1",
"YANEURAOU_ENGINE_MATERIAL2": "MaterialLv2",
"YANEURAOU_ENGINE_MATERIAL3": "MaterialLv3",
"YANEURAOU_ENGINE_MATERIAL4": "MaterialLv4",
"YANEURAOU_ENGINE_MATERIAL5": "MaterialLv5",
"YANEURAOU_ENGINE_MATERIAL6": "MaterialLv6",
"YANEURAOU_ENGINE_MATERIAL7": "MaterialLv7",
"YANEURAOU_ENGINE_MATERIAL8": "MaterialLv8",
"YANEURAOU_ENGINE_MATERIAL9": "MaterialLv9",
"YANEURAOU_ENGINE_MATERIAL10": "MaterialLv10",
"YANEURAOU_MATE_ENGINE": "YaneuraOu_MATE",
"TANUKI_MATE_ENGINE": "tanuki_MATE",
"USER_ENGINE": "USER",
};
const fileh = {
"YANEURAOU_ENGINE_NNUE": "YaneuraOu_NNUE",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "YaneuraOu_NNUE_HALFKP_VM",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "YaneuraOu_NNUE_HalfKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "YaneuraOu_NNUE_KP256",
"YANEURAOU_ENGINE_DEEP_TENSOR_RT": "YaneuraOu_Deep_TRT",
"YANEURAOU_ENGINE_KPPT": "YaneuraOu_KPPT",
"YANEURAOU_ENGINE_KPP_KKPT": "YaneuraOu_KPP_KKPT",
"YANEURAOU_ENGINE_MATERIAL": "YaneuraOu_MaterialLv1",
"YANEURAOU_ENGINE_MATERIAL2": "YaneuraOu_MaterialLv2",
"YANEURAOU_ENGINE_MATERIAL3": "YaneuraOu_MaterialLv3",
"YANEURAOU_ENGINE_MATERIAL4": "YaneuraOu_MaterialLv4",
"YANEURAOU_ENGINE_MATERIAL5": "YaneuraOu_MaterialLv5",
"YANEURAOU_ENGINE_MATERIAL6": "YaneuraOu_MaterialLv6",
"YANEURAOU_ENGINE_MATERIAL7": "YaneuraOu_MaterialLv7",
"YANEURAOU_ENGINE_MATERIAL8": "YaneuraOu_MaterialLv8",
"YANEURAOU_ENGINE_MATERIAL9": "YaneuraOu_MaterialLv9",
"YANEURAOU_ENGINE_MATERIAL10": "YaneuraOu_MaterialLv10",
"YANEURAOU_MATE_ENGINE": "YaneuraOu_MATE",
"TANUKI_MATE_ENGINE": "tanuki_MATE",
"USER_ENGINE": "user",
};
for(let edition of EDITION.split(',')) {
for(let compiler of COMPILER.split(',')) {
for(let target of TARGET.split(',')) {
for(let cpu of CPU.split(',')) {
const builddir = `../build/${OS}/${dirh[edition]}`;
const filename = `${fileh[edition]}-${OS}-${compiler}-${target}-${cpu.toLowerCase()}`;
let log = '';
await io.mkdirP(`./main/source/${builddir}`);
await exec.exec('nice', `make -j${JOBS} ${target} TARGET_CPU=${cpu} YANEURAOU_EDITION=${editionh[edition]} COMPILER=${compiler} TARGET=${builddir}/${filename}`.split(' '), {
"cwd": "./main/source/",
listeners: {
stdout: (data) => { log += data.toString(); },
stderr: (data) => { log += data.toString(); },
}
});
await exec.exec(`make`, `clean TARGET_CPU=${cpu} YANEURAOU_EDITION=${edition}`.split(' '), {"cwd": "./main/source/"});
fs.writeFileSync(`./main/source/${builddir}/${filename}.log`, log);
}}}}
- uses: actions/upload-artifact@v2
with:
name: build-macos_${{ github.run_number }}_${{ github.sha }}
path: ./main/build/**/**/*

build-macos-suisho:
# macos-11
# https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md
runs-on: macos-11

strategy:
matrix:
edition:
- YANEURAOU_ENGINE_NNUE
compiler:
- clang++
- g++-11
target:
- normal
- tournament
archcpu:
#- AVX2
#- SSE42
- APPLEAVX2
- APPLESSE42
- APPLEM1
exclude:
- compiler: g++-11
archcpu: APPLEAVX2
- compiler: g++-11
archcpu: APPLESSE42
- compiler: g++-11
archcpu: APPLEM1

steps:
- name: Checkout own repository
uses: actions/checkout@v2
with:
path: main

- name: suisho5 embedded_nnue
run: |
curl -LRo ./main/source/eval/nnue/embedded_nnue.cpp.gz "https://github.com/mizar/YaneuraOu/releases/download/resource/suisho5_20211123.halfkp.nnue.cpp.gz";
gzip -df ./main/source/eval/nnue/embedded_nnue.cpp.gz;
- name: make
uses: actions/github-script@v5
env:
JOBS: '8'
EDITION: '${{ matrix.edition }}'
COMPILER: '${{ matrix.compiler }}'
TARGET: '${{ matrix.target }}'
CPU: '${{ matrix.archcpu }}'
OS: 'macos11'
with:
script: |
const fs = require('fs');
const {JOBS, EDITION, COMPILER, TARGET, CPU, OS, EXTRA} = process.env;
const editionh = {
"YANEURAOU_ENGINE_NNUE": "YANEURAOU_ENGINE_NNUE",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "YANEURAOU_ENGINE_NNUE_HALFKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "YANEURAOU_ENGINE_NNUE_KP256",
};
const dirh = {
"YANEURAOU_ENGINE_NNUE": "NNUE",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "NNUE_HALFKP_VM",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "NNUE_HALFKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "NNUE_KP256",
};
const fileh = {
"YANEURAOU_ENGINE_NNUE": "Suisho5_YaneuraOu",
"YANEURAOU_ENGINE_NNUE_HALFKP_VM_256X2_32_32": "YaneuraOu_NNUE_HALFKP_VM",
"YANEURAOU_ENGINE_NNUE_HALFKPE9": "YaneuraOu_NNUE_HalfKPE9",
"YANEURAOU_ENGINE_NNUE_KP256": "YaneuraOu_NNUE_KP256",
};
for(let edition of EDITION.split(',')) {
for(let compiler of COMPILER.split(',')) {
for(let target of TARGET.split(',')) {
for(let cpu of CPU.split(',')) {
const builddir = `../build/${OS}/${dirh[edition]}`;
const filename = `${fileh[edition]}-${OS}-${compiler}-${target}-${cpu.toLowerCase()}`;
let log = '';
await io.mkdirP(`./main/source/${builddir}`);
await exec.exec('nice', `make -j${JOBS} ${target} TARGET_CPU=${cpu} YANEURAOU_EDITION=${editionh[edition]} COMPILER=${compiler} TARGET=${builddir}/${filename} EVAL_EMBEDDING=ON EXTRA_CPPFLAGS='-DENGINE_OPTIONS=\\\\\"\\\"option=name=FV_SCALE=type=spin=default=24=min=1=max=128\\;option=name=BookFile=type=combo=default=no_book=var=no_book=var=standard_book.db=var=yaneura_book1.db=var=yaneura_book2.db=var=yaneura_book3.db=var=yaneura_book4.db=var=user_book1.db=var=user_book2.db=var=user_book3.db=var=book.bin\\\\\\\"\"'`.split(' '), {
"cwd": "./main/source/",
listeners: {
stdout: (data) => { log += data.toString(); },
stderr: (data) => { log += data.toString(); },
}
});
await exec.exec(`make`, `clean TARGET_CPU=${cpu} YANEURAOU_EDITION=${edition} EVAL_EMBEDDING=ON`.split(' '), {"cwd": "./main/source/"});
fs.writeFileSync(`./main/source/${builddir}/${filename}.log`, log);
}}}}
- name: add resource
run: |
echo 'Suisho5(20211123)-YaneuraOu' > ./main/build/macos11/NNUE/engine_name.txt;
echo 'yaneurao, tayayan' >> ./main/build/macos11/NNUE/engine_name.txt;
- uses: actions/upload-artifact@v2
with:
name: build-macos-embed_${{ github.run_number }}_${{ github.sha }}
path: ./main/build/**/**/*
5 changes: 4 additions & 1 deletion .github/workflows/make-mingw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ jobs:
- YANEURAOU_ENGINE_NNUE_KP256
- YANEURAOU_ENGINE_KPPT
- YANEURAOU_ENGINE_KPP_KKPT
- YANEURAOU_ENGINE_MATERIAL*
#- YANEURAOU_ENGINE_MATERIAL*
- "YANEURAOU_ENGINE_MATERIAL,YANEURAOU_ENGINE_MATERIAL9"
- YANEURAOU_MATE_ENGINE
- TANUKI_MATE_ENGINE
- USER_ENGINE
Expand Down Expand Up @@ -66,6 +67,8 @@ jobs:
# There is no machine learning implementation for the following editions
- edition: YANEURAOU_ENGINE_MATERIAL*
target: evallearn
- edition: "YANEURAOU_ENGINE_MATERIAL,YANEURAOU_ENGINE_MATERIAL9"
target: evallearn
- edition: YANEURAOU_MATE_ENGINE
target: evallearn
- edition: TANUKI_MATE_ENGINE
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/make-msys2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ jobs:
- YANEURAOU_ENGINE_NNUE_KP256
- YANEURAOU_ENGINE_KPPT
- YANEURAOU_ENGINE_KPP_KKPT
- YANEURAOU_ENGINE_MATERIAL*
#- YANEURAOU_ENGINE_MATERIAL*
- "YANEURAOU_ENGINE_MATERIAL,YANEURAOU_ENGINE_MATERIAL9"
- YANEURAOU_MATE_ENGINE
- TANUKI_MATE_ENGINE
- USER_ENGINE
Expand All @@ -46,6 +47,8 @@ jobs:
# There is no machine learning implementation for the following editions
- edition: YANEURAOU_ENGINE_MATERIAL*
target: evallearn
- edition: "YANEURAOU_ENGINE_MATERIAL,YANEURAOU_ENGINE_MATERIAL9"
target: evallearn
- edition: YANEURAOU_MATE_ENGINE
target: evallearn
- edition: TANUKI_MATE_ENGINE
Expand Down Expand Up @@ -88,7 +91,7 @@ jobs:
C:\msys64\usr\bin\bash.exe -lc 'pacman --needed --noconfirm -Syuu'
C:\msys64\usr\bin\bash.exe -lc 'pacman --needed --noconfirm -Syuu'
C:\msys64\usr\bin\bash.exe -lc 'pacman --needed --noconfirm -Syuu pactoys'
C:\msys64\usr\bin\bash.exe -lc 'pacboy --needed --noconfirm -Sy clang:m lld:m openblas:x openmp:x toolchain:m base-devel:'
C:\msys64\usr\bin\bash.exe -lc 'pacboy --needed --noconfirm -Syuu clang:m lld:m openblas:x openmp:x toolchain:m'
$ErrorActionPreference = 'Stop'
- name: make
Expand Down
Loading

0 comments on commit 16e7fc2

Please sign in to comment.