From 0c84583416bc443e714d7857e05081c47f869a53 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 18:57:42 +0700 Subject: [PATCH 1/9] feat(ci): init commit for windows with/ without GPU support --- .github/workflows/build.yml | 517 ++++++++++++++++++++++++------------ 1 file changed, 352 insertions(+), 165 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee9e9a2c8..cdd28a198 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,6 +10,7 @@ on: push: branches: - master + - 57-add-github-ci-cd-for-windows paths: ['.github/workflows/**', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu'] pull_request: types: [opened, synchronize, reopened] @@ -19,211 +20,397 @@ env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} jobs: - ubuntu-amd64-build: - runs-on: ubuntu-20.04 - permissions: - contents: write - steps: - - name: Clone - id: checkout - uses: actions/checkout@v3 - with: - submodules: recursive + # ubuntu-amd64-build: + # runs-on: ubuntu-20.04 + # permissions: + # contents: write + # steps: + # - name: Clone + # id: checkout + # uses: actions/checkout@v3 + # with: + # submodules: recursive - - name: Dependencies - id: depends - run: | - sudo apt-get update - sudo apt-get install build-essential gcc-8 + # - name: Dependencies + # id: depends + # run: | + # sudo apt-get update + # sudo apt-get install build-essential gcc-8 - - name: Build - id: make_build - run: | - ./install_deps.sh - mkdir build && cd build - cmake .. - CC=gcc-8 make -j $(nproc) - ls -la + # - name: Build + # id: make_build + # run: | + # ./install_deps.sh + # mkdir build && cd build + # cmake .. + # CC=gcc-8 make -j $(nproc) + # ls -la - - name: Extract branch name - shell: bash - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - name: Extract commit short SHA - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + # - name: Extract branch name + # shell: bash + # id: extract_branch + # run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + # - name: Extract commit short SHA + # id: extract_commit_id + # run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - name: Package - shell: bash - run: | - mkdir -p nitro && mkdir -p nitro/config - cp config.json nitro/config/ - cp build/nitro nitro/ - zip -r nitro.zip nitro + # - name: Package + # shell: bash + # run: | + # mkdir -p nitro && mkdir -p nitro/config + # cp config.json nitro/config/ + # cp build/nitro nitro/ + # zip -r nitro.zip nitro - - name: Upload binaries to release - if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-linux-amd64.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} - - ubuntu-amd64-cuda-build: - runs-on: linux-gpu - permissions: - contents: write - steps: - - name: Clone - id: checkout - uses: actions/checkout@v3 - with: - submodules: recursive + # - name: Upload binaries to release + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + # uses: svenstaro/upload-release-action@v2 + # with: + # repo_token: ${{ secrets.GITHUB_TOKEN }} + # file: nitro.zip + # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-linux-amd64.zip + # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} - # - name: Dependencies - # id: depends - # run: | - # sudo apt-get update - # sudo apt-get install build-essential gcc-8 uuid-dev + # ubuntu-amd64-cuda-build: + # runs-on: linux-gpu + # permissions: + # contents: write + # steps: + # - name: Clone + # id: checkout + # uses: actions/checkout@v3 + # with: + # submodules: recursive - - name: Build - id: make_build - run: | - ./install_deps.sh - mkdir build && cd build - cmake -DLLAMA_CUBLAS=ON .. - CC=gcc-8 make -j $(nproc) - ls -la + # # - name: Dependencies + # # id: depends + # # run: | + # # sudo apt-get update + # # sudo apt-get install build-essential gcc-8 uuid-dev - - name: Extract branch name - shell: bash - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + # - name: Build + # id: make_build + # run: | + # ./install_deps.sh + # mkdir build && cd build + # cmake -DLLAMA_CUBLAS=ON .. + # CC=gcc-8 make -j $(nproc) + # ls -la - - name: Extract commit short SHA - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + # - name: Extract branch name + # shell: bash + # id: extract_branch + # run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - name: Package - shell: bash - run: | - mkdir -p nitro && mkdir -p nitro/config - cp config.json nitro/config/ - cp build/nitro nitro/ - zip -r nitro.zip nitro + # - name: Extract commit short SHA + # id: extract_commit_id + # run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + # - name: Package + # shell: bash + # run: | + # mkdir -p nitro && mkdir -p nitro/config + # cp config.json nitro/config/ + # cp build/nitro nitro/ + # zip -r nitro.zip nitro + + # - name: Upload binaries to release + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + # uses: svenstaro/upload-release-action@v2 + # with: + # repo_token: ${{ secrets.GITHUB_TOKEN }} + # file: nitro.zip + # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-linux-amd64-cuda.zip + # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} + + # macOS-M-build: + # runs-on: mac-silicon + # permissions: + # contents: write + # steps: + # - name: Clone + # id: checkout + # uses: actions/checkout@v3 + # with: + # submodules: recursive + + # - name: Dependencies + # id: depends + # continue-on-error: true + # run: | + # brew update + # brew install cmake gcc@8 + + # - name: Build + # id: cmake_build + # run: | + # ./install_deps.sh + # mkdir build && cd build + # cmake .. + # CC=gcc-8 make -j $(nproc) + # ls -la + + # - name: Extract branch name + # shell: bash + # id: extract_branch + # run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + + # - name: Extract commit short SHA + # id: extract_commit_id + # run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + # - name: Package + # shell: bash + # run: | + # mkdir -p nitro && mkdir -p nitro/config + # cp config.json nitro/config/ + # cp llama.cpp/ggml-metal.h nitro/ + # cp build/nitro nitro/ + # zip -r nitro.zip nitro + + # - name: Upload binaries to release + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + # uses: svenstaro/upload-release-action@v2 + # with: + # repo_token: ${{ secrets.GITHUB_TOKEN }} + # file: nitro.zip + # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-arm64.zip + # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} + + # macOS-Intel-build: + # runs-on: macos-latest + # permissions: + # contents: write + # steps: + # - name: Clone + # id: checkout + # uses: actions/checkout@v3 + # with: + # submodules: recursive + + # - name: Dependencies + # id: depends + # continue-on-error: true + # run: | + # brew update + + # - name: Build + # id: cmake_build + # run: | + # ./install_deps.sh + # mkdir build && cd build + # cmake -DLLAMA_METAL=OFF .. + # CC=gcc-8 make -j $(nproc) + # ls -la + + # - name: Extract branch name + # shell: bash + # id: extract_branch + # run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + + # - name: Extract commit short SHA + # id: extract_commit_id + # run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + # - name: Package + # shell: bash + # run: | + # mkdir -p nitro && mkdir -p nitro/config + # cp config.json nitro/config/ + # cp build/nitro nitro/ + # zip -r nitro.zip nitro + + # - name: Upload binaries to release + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + # uses: svenstaro/upload-release-action@v2 + # with: + # repo_token: ${{ secrets.GITHUB_TOKEN }} + # file: nitro.zip + # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-amd64.zip.zip + # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} + + windows-latest-cmake: + runs-on: windows-latest + + env: + OPENBLAS_VERSION: 0.3.23 + OPENCL_VERSION: 2023.04.17 + CLBLAST_VERSION: 1.6.0 + + strategy: + matrix: + include: + - build: 'avx2' + defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DBUILD_SHARED_LIBS=ON' + - build: 'avx512' + defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON' + - build: 'clblast' + defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CLBLAST=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/clblast"' + - build: 'openblas' + defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' - - name: Upload binaries to release - if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-linux-amd64-cuda.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} - - macOS-M-build: - runs-on: mac-silicon - permissions: - contents: write steps: - name: Clone id: checkout uses: actions/checkout@v3 with: - submodules: recursive + fetch-depth: 0 + + - name: Download OpenCL SDK + id: get_opencl + if: ${{ matrix.build == 'clblast' }} + run: | + curl.exe -o $env:RUNNER_TEMP/opencl.zip -L "https://github.com/KhronosGroup/OpenCL-SDK/releases/download/v${env:OPENCL_VERSION}/OpenCL-SDK-v${env:OPENCL_VERSION}-Win-x64.zip" + mkdir $env:RUNNER_TEMP/opencl + tar.exe -xvf $env:RUNNER_TEMP/opencl.zip --strip-components=1 -C $env:RUNNER_TEMP/opencl + + - name: Download CLBlast + id: get_clblast + if: ${{ matrix.build == 'clblast' }} + run: | + curl.exe -o $env:RUNNER_TEMP/clblast.7z -L "https://github.com/CNugteren/CLBlast/releases/download/${env:CLBLAST_VERSION}/CLBlast-${env:CLBLAST_VERSION}-windows-x64.7z" + curl.exe -o $env:RUNNER_TEMP/CLBlast.LICENSE.txt -L "https://github.com/CNugteren/CLBlast/raw/${env:CLBLAST_VERSION}/LICENSE" + 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/clblast.7z + rename-item $env:RUNNER_TEMP/CLBlast-${env:CLBLAST_VERSION}-windows-x64 clblast + foreach ($f in (gci -Recurse -Path "$env:RUNNER_TEMP/clblast" -Filter '*.cmake')) { + $txt = Get-Content -Path $f -Raw + $txt.Replace('C:/vcpkg/packages/opencl_x64-windows/', "$($env:RUNNER_TEMP.Replace('\','/'))/opencl/") | Set-Content -Path $f -Encoding UTF8 + } - - name: Dependencies - id: depends - continue-on-error: true + - name: Download OpenBLAS + id: get_openblas + if: ${{ matrix.build == 'openblas' }} run: | - brew update - brew install cmake gcc@8 + curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip" + curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE" + mkdir $env:RUNNER_TEMP/openblas + tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas + $vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath) + $msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim())) + $lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe') + & $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll - name: Build id: cmake_build run: | - ./install_deps.sh - mkdir build && cd build - cmake .. - CC=gcc-8 make -j $(nproc) - ls -la + cmake --build ./build_deps/nitro_deps --config Release + mkdir build + cd build + cmake .. ${{ matrix.defines }} + cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - - name: Extract branch name - shell: bash - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - - name: Extract commit short SHA - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Package + - name: Add clblast.dll + id: add_clblast_dll + if: ${{ matrix.build == 'clblast' }} + run: | + cp $env:RUNNER_TEMP/clblast/lib/clblast.dll ./build/bin/Release + cp $env:RUNNER_TEMP/CLBlast.LICENSE.txt ./build/bin/Release/CLBlast-${env:CLBLAST_VERSION}.txt + + - name: Add libopenblas.dll + id: add_libopenblas_dll + if: ${{ matrix.build == 'openblas' }} + run: | + cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/bin/Release/openblas.dll + cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/bin/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt + + - name: Determine tag name + id: tag shell: bash run: | - mkdir -p nitro && mkdir -p nitro/config - cp config.json nitro/config/ - cp llama.cpp/ggml-metal.h nitro/ - cp build/nitro nitro/ - zip -r nitro.zip nitro + BUILD_NUMBER="$(git rev-list --count HEAD)" + SHORT_HASH="$(git rev-parse --short=7 HEAD)" + if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then + echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT + else + SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') + echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT + fi - - name: Upload binaries to release - if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: svenstaro/upload-release-action@v2 + - name: Pack artifacts + id: pack_artifacts + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + run: | + Copy-Item LICENSE .\build\bin\Release\llama.cpp.txt + robocopy build_deps\_install\bin\zlib.dll $dst + robocopy build\bin\Release\llama.dll $dst + 7z a nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip .\build\bin\Release\* + + - name: Upload artifacts + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + uses: actions/upload-artifact@v3 with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-arm64.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} - - macOS-Intel-build: - runs-on: macos-latest - permissions: - contents: write + path: | + nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip + + windows-latest-cmake-cublas: + runs-on: windows-gpu + + strategy: + matrix: + cuda: ['12.2.0', '11.7.1'] + build: ['cublas'] + steps: - name: Clone id: checkout uses: actions/checkout@v3 with: - submodules: recursive + fetch-depth: 0 - - name: Dependencies - id: depends - continue-on-error: true - run: | - brew update + - uses: Jimver/cuda-toolkit@v0.2.11 + id: cuda-toolkit + with: + cuda: ${{ matrix.cuda }} + method: 'network' + sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]' - name: Build id: cmake_build run: | - ./install_deps.sh - mkdir build && cd build - cmake -DLLAMA_METAL=OFF .. - CC=gcc-8 make -j $(nproc) - ls -la + cmake --build ./build_deps/nitro_deps --config Release + mkdir build + cd build + cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON + cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - - name: Extract branch name - shell: bash - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - - name: Extract commit short SHA - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Package + - name: Determine tag name + id: tag shell: bash run: | - mkdir -p nitro && mkdir -p nitro/config - cp config.json nitro/config/ - cp build/nitro nitro/ - zip -r nitro.zip nitro + BUILD_NUMBER="$(git rev-list --count HEAD)" + SHORT_HASH="$(git rev-parse --short=7 HEAD)" + if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then + echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT + else + SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') + echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT + fi - - name: Upload binaries to release + - name: Pack artifacts + id: pack_artifacts if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: svenstaro/upload-release-action@v2 + run: | + 7z a nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip .\build\bin\Release\* + + - name: Upload artifacts + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + uses: actions/upload-artifact@v3 + with: + path: | + nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip + + - name: Copy and pack Cuda runtime + run: | + echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}" + $dst='.\build\bin\cudart\' + robocopy "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll + robocopy build_deps\_install\bin\zlib.dll $dst + robocopy build\bin\Release\llama.dll $dst + 7z a cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip $dst\* + + - name: Upload Cuda runtime + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} + uses: actions/upload-artifact@v3 with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-amd64.zip.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} \ No newline at end of file + path: | + cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip \ No newline at end of file From a22e01514a579c7f9e42bd66d75470f25624bc34 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 19:01:26 +0700 Subject: [PATCH 2/9] fix(ci): Update windows-nvidia runners and git clone recursive --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdd28a198..c346a7a92 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -254,7 +254,7 @@ jobs: id: checkout uses: actions/checkout@v3 with: - fetch-depth: 0 + submodules: recursive - name: Download OpenCL SDK id: get_opencl @@ -343,7 +343,7 @@ jobs: nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip windows-latest-cmake-cublas: - runs-on: windows-gpu + runs-on: windows-nvidia strategy: matrix: @@ -355,7 +355,7 @@ jobs: id: checkout uses: actions/checkout@v3 with: - fetch-depth: 0 + submodules: recursive - uses: Jimver/cuda-toolkit@v0.2.11 id: cuda-toolkit From 17a5d89b97eeed881114517fe007063912619790 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 19:06:19 +0700 Subject: [PATCH 3/9] fix(ci-windows): Update cmake for preparation --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c346a7a92..9506d0b7f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -293,6 +293,7 @@ jobs: - name: Build id: cmake_build run: | + cmake -S ./nitro_deps -B ./build_deps/nitro_deps cmake --build ./build_deps/nitro_deps --config Release mkdir build cd build @@ -367,6 +368,7 @@ jobs: - name: Build id: cmake_build run: | + cmake -S ./nitro_deps -B ./build_deps/nitro_deps cmake --build ./build_deps/nitro_deps --config Release mkdir build cd build From 3770272731adec604e67c5ed9e87d47f65a4c498 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 19:29:29 +0700 Subject: [PATCH 4/9] fix(ci-windows): Update step name, remove cuda-toolkit installation, Add release job --- .github/workflows/build.yml | 85 +++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9506d0b7f..000c41e95 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -229,7 +229,7 @@ jobs: # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-amd64.zip.zip # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} - windows-latest-cmake: + windows-amd64-build: runs-on: windows-latest env: @@ -240,12 +240,8 @@ jobs: strategy: matrix: include: - - build: 'avx2' - defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DBUILD_SHARED_LIBS=ON' - build: 'avx512' defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON' - - build: 'clblast' - defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CLBLAST=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/clblast"' - build: 'openblas' defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' @@ -343,12 +339,12 @@ jobs: path: | nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip - windows-latest-cmake-cublas: + windows-amd64-cuda-build: runs-on: windows-nvidia strategy: matrix: - cuda: ['12.2.0', '11.7.1'] + cuda: ['12.2.0'] build: ['cublas'] steps: @@ -358,12 +354,12 @@ jobs: with: submodules: recursive - - uses: Jimver/cuda-toolkit@v0.2.11 - id: cuda-toolkit - with: - cuda: ${{ matrix.cuda }} - method: 'network' - sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]' + # - uses: Jimver/cuda-toolkit@v0.2.11 + # id: cuda-toolkit + # with: + # cuda: ${{ matrix.cuda }} + # method: 'network' + # sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]' - name: Build id: cmake_build @@ -415,4 +411,65 @@ jobs: uses: actions/upload-artifact@v3 with: path: | - cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip \ No newline at end of file + cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip + + release: + runs-on: ubuntu-latest + + needs: + - windows-amd64-build + - windows-amd64-cuda-build + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Determine tag name + id: tag + shell: bash + run: | + BUILD_NUMBER="$(git rev-list --count HEAD)" + SHORT_HASH="$(git rev-parse --short=7 HEAD)" + if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then + echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT + else + SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') + echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT + fi + + - name: Download artifacts + id: download-artifact + uses: actions/download-artifact@v3 + + - name: Create release + id: create_release + uses: anzz1/action-create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.tag.outputs.name }} + + - name: Upload release + id: upload_release + uses: actions/github-script@v3 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const path = require('path'); + const fs = require('fs'); + const release_id = '${{ steps.create_release.outputs.id }}'; + for (let file of await fs.readdirSync('./artifact')) { + if (path.extname(file) === '.zip') { + console.log('uploadReleaseAsset', file); + await github.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release_id, + name: file, + data: await fs.readFileSync(`./artifact/${file}`) + }); + } + } \ No newline at end of file From 0b08e1c394f8e2709bb0da3fb8f7c3d02d4a7152 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 19:50:47 +0700 Subject: [PATCH 5/9] fix(ci-windows): Use 1 value in windows matrix, package nitro windows GPU dll --- .github/workflows/build.yml | 185 +++++++++--------------------------- 1 file changed, 44 insertions(+), 141 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 000c41e95..6a3bdfb0b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -226,11 +226,13 @@ jobs: # with: # repo_token: ${{ secrets.GITHUB_TOKEN }} # file: nitro.zip - # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-amd64.zip.zip + # asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-mac-amd64.zip # tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} windows-amd64-build: runs-on: windows-latest + permissions: + contents: write env: OPENBLAS_VERSION: 0.3.23 @@ -240,39 +242,17 @@ jobs: strategy: matrix: include: - - build: 'avx512' - defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON' - build: 'openblas' defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' steps: - name: Clone + id: checkout uses: actions/checkout@v3 with: submodules: recursive - - name: Download OpenCL SDK - id: get_opencl - if: ${{ matrix.build == 'clblast' }} - run: | - curl.exe -o $env:RUNNER_TEMP/opencl.zip -L "https://github.com/KhronosGroup/OpenCL-SDK/releases/download/v${env:OPENCL_VERSION}/OpenCL-SDK-v${env:OPENCL_VERSION}-Win-x64.zip" - mkdir $env:RUNNER_TEMP/opencl - tar.exe -xvf $env:RUNNER_TEMP/opencl.zip --strip-components=1 -C $env:RUNNER_TEMP/opencl - - - name: Download CLBlast - id: get_clblast - if: ${{ matrix.build == 'clblast' }} - run: | - curl.exe -o $env:RUNNER_TEMP/clblast.7z -L "https://github.com/CNugteren/CLBlast/releases/download/${env:CLBLAST_VERSION}/CLBlast-${env:CLBLAST_VERSION}-windows-x64.7z" - curl.exe -o $env:RUNNER_TEMP/CLBlast.LICENSE.txt -L "https://github.com/CNugteren/CLBlast/raw/${env:CLBLAST_VERSION}/LICENSE" - 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/clblast.7z - rename-item $env:RUNNER_TEMP/CLBlast-${env:CLBLAST_VERSION}-windows-x64 clblast - foreach ($f in (gci -Recurse -Path "$env:RUNNER_TEMP/clblast" -Filter '*.cmake')) { - $txt = Get-Content -Path $f -Raw - $txt.Replace('C:/vcpkg/packages/opencl_x64-windows/', "$($env:RUNNER_TEMP.Replace('\','/'))/opencl/") | Set-Content -Path $f -Encoding UTF8 - } - - name: Download OpenBLAS id: get_openblas if: ${{ matrix.build == 'openblas' }} @@ -296,51 +276,46 @@ jobs: cmake .. ${{ matrix.defines }} cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - - name: Add clblast.dll - id: add_clblast_dll - if: ${{ matrix.build == 'clblast' }} - run: | - cp $env:RUNNER_TEMP/clblast/lib/clblast.dll ./build/bin/Release - cp $env:RUNNER_TEMP/CLBlast.LICENSE.txt ./build/bin/Release/CLBlast-${env:CLBLAST_VERSION}.txt - - name: Add libopenblas.dll id: add_libopenblas_dll if: ${{ matrix.build == 'openblas' }} run: | - cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/bin/Release/openblas.dll - cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/bin/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt + cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/Release/openblas.dll + cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt - - name: Determine tag name - id: tag + - name: Extract branch name shell: bash - run: | - BUILD_NUMBER="$(git rev-list --count HEAD)" - SHORT_HASH="$(git rev-parse --short=7 HEAD)" - if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then - echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT - else - SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') - echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT - fi + id: extract_branch + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + + - name: Extract commit short SHA + id: extract_commit_id + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - name: Pack artifacts id: pack_artifacts # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} run: | - Copy-Item LICENSE .\build\bin\Release\llama.cpp.txt + $dst='.\build\Release' robocopy build_deps\_install\bin\zlib.dll $dst robocopy build\bin\Release\llama.dll $dst - 7z a nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip .\build\bin\Release\* + mkdir -p .\build\Release\config + robocopy config.json .\build\Release\config + 7z a nitro.zip .\build\Release\* - - name: Upload artifacts + - name: Upload binaries to release # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: actions/upload-artifact@v3 + uses: svenstaro/upload-release-action@v2 with: - path: | - nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-x64.zip + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: nitro.zip + asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}.zip + tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} windows-amd64-cuda-build: runs-on: windows-nvidia + permissions: + contents: write strategy: matrix: @@ -371,105 +346,33 @@ jobs: cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - - name: Determine tag name - id: tag + - name: Extract branch name shell: bash - run: | - BUILD_NUMBER="$(git rev-list --count HEAD)" - SHORT_HASH="$(git rev-parse --short=7 HEAD)" - if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then - echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT - else - SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') - echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT - fi + id: extract_branch + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + + - name: Extract commit short SHA + id: extract_commit_id + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - name: Pack artifacts id: pack_artifacts if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} run: | - 7z a nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip .\build\bin\Release\* - - - name: Upload artifacts - # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: actions/upload-artifact@v3 - with: - path: | - nitro-${{ steps.tag.outputs.name }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip - - - name: Copy and pack Cuda runtime - run: | - echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}" - $dst='.\build\bin\cudart\' - robocopy "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll + $dst='.\build\Release' robocopy build_deps\_install\bin\zlib.dll $dst robocopy build\bin\Release\llama.dll $dst - 7z a cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip $dst\* + robocopy "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll + mkdir -p .\build\Release\config + robocopy config.json .\build\Release\config + 7z a nitro.zip .\build\Release\* - - name: Upload Cuda runtime + - name: Upload binaries to release # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} - uses: actions/upload-artifact@v3 - with: - path: | - cudart-nitro-bin-win-cu${{ matrix.cuda }}-x64.zip - - release: - runs-on: ubuntu-latest - - needs: - - windows-amd64-build - - windows-amd64-cuda-build - - steps: - - name: Clone - id: checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Determine tag name - id: tag - shell: bash - run: | - BUILD_NUMBER="$(git rev-list --count HEAD)" - SHORT_HASH="$(git rev-parse --short=7 HEAD)" - if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then - echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT - else - SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') - echo "name=${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT - fi - - - name: Download artifacts - id: download-artifact - uses: actions/download-artifact@v3 - - - name: Create release - id: create_release - uses: anzz1/action-create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ steps.tag.outputs.name }} - - - name: Upload release - id: upload_release - uses: actions/github-script@v3 + uses: svenstaro/upload-release-action@v2 with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - const path = require('path'); - const fs = require('fs'); - const release_id = '${{ steps.create_release.outputs.id }}'; - for (let file of await fs.readdirSync('./artifact')) { - if (path.extname(file) === '.zip') { - console.log('uploadReleaseAsset', file); - await github.repos.uploadReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release_id, - name: file, - data: await fs.readFileSync(`./artifact/${file}`) - }); - } - } \ No newline at end of file + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: nitro.zip + asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}-cu${{ matrix.cuda }}.zip + tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} From 2882bb41ee53ec6db1594f2649e1d23693485603 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 19:56:43 +0700 Subject: [PATCH 6/9] fix(ci-windows): Update cmd as shell --- .github/workflows/build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6a3bdfb0b..4ab9b021d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -268,6 +268,7 @@ jobs: - name: Build id: cmake_build + shell: cmd run: | cmake -S ./nitro_deps -B ./build_deps/nitro_deps cmake --build ./build_deps/nitro_deps --config Release @@ -284,11 +285,12 @@ jobs: cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt - name: Extract branch name - shell: bash + shell: cmd id: extract_branch run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Extract commit short SHA + shell: cmd id: extract_commit_id run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" @@ -338,6 +340,7 @@ jobs: - name: Build id: cmake_build + shell: cmd run: | cmake -S ./nitro_deps -B ./build_deps/nitro_deps cmake --build ./build_deps/nitro_deps --config Release @@ -347,11 +350,12 @@ jobs: cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - name: Extract branch name - shell: bash + shell: cmd id: extract_branch run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Extract commit short SHA + shell: cmd id: extract_commit_id run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" From 3da740aba5cf3768872abe9ea6cb920bc8ad11cb Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 20:10:45 +0700 Subject: [PATCH 7/9] fix(ci-windows): Fix cmake build -j nproc --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4ab9b021d..88e6867b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -275,7 +275,7 @@ jobs: mkdir build cd build cmake .. ${{ matrix.defines }} - cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} + cmake --build . --config Release -j $(nproc) - name: Add libopenblas.dll id: add_libopenblas_dll @@ -347,7 +347,7 @@ jobs: mkdir build cd build cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON - cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} + cmake --build . --config Release -j $(nproc) - name: Extract branch name shell: cmd From 3fbfab0673ddb3efdc972dac270da8712da2caf9 Mon Sep 17 00:00:00 2001 From: vuonghoainam Date: Sun, 8 Oct 2023 21:01:38 +0700 Subject: [PATCH 8/9] fix(ci-windows): Update nproc --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88e6867b0..1f299c5b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -275,7 +275,7 @@ jobs: mkdir build cd build cmake .. ${{ matrix.defines }} - cmake --build . --config Release -j $(nproc) + cmake --build . --config Release -j 4 - name: Add libopenblas.dll id: add_libopenblas_dll @@ -347,7 +347,7 @@ jobs: mkdir build cd build cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON - cmake --build . --config Release -j $(nproc) + cmake --build . --config Release -j 4 - name: Extract branch name shell: cmd From aafcb82077bfb657130935ea0407d971b26f6fb3 Mon Sep 17 00:00:00 2001 From: Hien To Date: Fri, 13 Oct 2023 13:50:16 +0700 Subject: [PATCH 9/9] Refactor CICD windows nitro --- .github/workflows/build.yml | 133 +++++++++++++----------------------- 1 file changed, 49 insertions(+), 84 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b65f000c0..31dc9614e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,29 +45,15 @@ jobs: if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') permissions: contents: write - - env: - OPENBLAS_VERSION: 0.3.23 - OPENCL_VERSION: 2023.04.17 - CLBLAST_VERSION: 1.6.0 - - strategy: - matrix: - include: - - build: 'openblas' - defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' - steps: - name: Clone - id: checkout uses: actions/checkout@v3 with: submodules: recursive - - name: Download OpenBLAS - id: get_openblas - if: ${{ matrix.build == 'openblas' }} + - name: Dependencies + id: depends run: | sudo apt-get update sudo apt-get install build-essential gcc-8 @@ -167,7 +153,6 @@ jobs: - name: Build id: cmake_build - shell: cmd run: | ./install_deps.sh mkdir build && cd build @@ -225,12 +210,10 @@ jobs: - name: Package shell: bash run: | - $dst='.\build\Release' - robocopy build_deps\_install\bin\zlib.dll $dst - robocopy build\bin\Release\llama.dll $dst - mkdir -p .\build\Release\config - robocopy config.json .\build\Release\config - 7z a nitro.zip .\build\Release\* + mkdir -p nitro && mkdir -p nitro/config + cp config.json nitro/config/ + cp build/nitro nitro/ + zip -r nitro.zip nitro - uses: actions/upload-release-asset@v1.0.1 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') @@ -244,6 +227,8 @@ jobs: windows-amd64-build: runs-on: windows-latest + needs: create-draft-release + if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') permissions: contents: write @@ -255,7 +240,7 @@ jobs: strategy: matrix: include: - - build: 'openblas' + - build: 'normal' defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' steps: @@ -266,18 +251,17 @@ jobs: with: submodules: recursive - - name: Download OpenBLAS - id: get_openblas - if: ${{ matrix.build == 'openblas' }} - run: | - curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip" - curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE" - mkdir $env:RUNNER_TEMP/openblas - tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas - $vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath) - $msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim())) - $lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe') - & $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll + - name: Setup VSWhere.exe + uses: warrenbuckley/Setup-VSWhere@v1 + with: + version: latest + silent: true + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + + + - name: actions-setup-cmake + uses: jwlawson/actions-setup-cmake@v1.14.1 - name: Build id: cmake_build @@ -287,26 +271,9 @@ jobs: cmake --build ./build_deps/nitro_deps --config Release mkdir build cd build - cmake .. ${{ matrix.defines }} + cmake .. cmake --build . --config Release -j 4 - - name: Add libopenblas.dll - id: add_libopenblas_dll - if: ${{ matrix.build == 'openblas' }} - run: | - cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/Release/openblas.dll - cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt - - - name: Extract branch name - shell: cmd - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - - name: Extract commit short SHA - shell: cmd - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - name: Pack artifacts id: pack_artifacts run: | @@ -317,16 +284,20 @@ jobs: robocopy config.json .\build\Release\config 7z a nitro.zip .\build\Release\* - - name: Upload binaries to release - uses: svenstaro/upload-release-action@v2 + - uses: actions/upload-release-asset@v1.0.1 + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./nitro.zip + asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-win-amd64-${{ matrix.build }}.zip + asset_content_type: application/zip windows-amd64-cuda-build: runs-on: windows-nvidia + needs: create-draft-release + if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') permissions: contents: write @@ -342,12 +313,13 @@ jobs: with: submodules: recursive - # - uses: Jimver/cuda-toolkit@v0.2.11 - # id: cuda-toolkit - # with: - # cuda: ${{ matrix.cuda }} - # method: 'network' - # sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]' + - name: Setup VSWhere.exe + uses: warrenbuckley/Setup-VSWhere@v1 + with: + version: latest + silent: true + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true - name: Build id: cmake_build @@ -360,35 +332,28 @@ jobs: cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON cmake --build . --config Release -j 4 - - name: Extract branch name - shell: cmd - id: extract_branch - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - - name: Extract commit short SHA - shell: cmd - id: extract_commit_id - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Pack artifacts id: pack_artifacts + shell: cmd run: | + set PATH=%PATH%;C:\Program Files\7-Zip\ + echo %PATH% $dst='.\build\Release' robocopy build_deps\_install\bin\zlib.dll $dst robocopy build\bin\Release\llama.dll $dst - robocopy "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll mkdir -p .\build\Release\config robocopy config.json .\build\Release\config 7z a nitro.zip .\build\Release\* - - name: Upload binaries to release - uses: svenstaro/upload-release-action@v2 + - uses: actions/upload-release-asset@v1.0.1 + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: nitro.zip - asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}-cu${{ matrix.cuda }}.zip - tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }} + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./nitro.zip + asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-win-amd64-${{ matrix.build }}-cu${{ matrix.cuda }}.zip + asset_content_type: application/zip update_release_draft: needs: [ubuntu-amd64-build, ubuntu-amd64-cuda-build, macOS-M-build, macOS-Intel-build, windows-amd64-build, windows-amd64-cuda-build]