ipex-llm/.github/workflows/llm-binary-build.yml
xingyuan li cdfbe652ca [LLM] Add chatglm support for llm-cli (#8641)
* add chatglm build
* add llm-cli support
* update git
* install cmake
* add ut for chatglm
* add files to setup
* fix bug cause permission error when sf lack file
2023-08-01 14:30:17 +09:00

326 lines
12 KiB
YAML

name: LLM Binary Build
# Cancel previous runs in the PR when you push new commits
# concurrency:
# group: ${{ github.workflow }}-llm-binary-build-${{ github.event.pull_request.number || github.run_id }}
# cancel-in-progress: false
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [main]
paths:
- ".github/workflows/llm-binary-build.yml"
pull_request:
branches: [main]
paths:
- ".github/workflows/llm-binary-build.yml"
workflow_dispatch:
workflow_call:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
check-linux-avx2-artifact:
runs-on: ubuntu-latest
outputs:
if-exists: ${{steps.check_artifact.outputs.exists}}
steps:
- name: Check if built
id: check_artifact
uses: xSAVIKx/artifact-exists-action@v0
with:
name: linux-avx2
linux-build-avx2:
runs-on: [self-hosted, AVX2, centos7]
needs: check-linux-avx2-artifact
if: needs.check-linux-avx2-artifact.outputs.if-exists == 'false'
steps:
- name: Set access token
run: |
echo "github_access_token=${GITHUB_ACCESS_TOKEN}" >> "$GITHUB_ENV"
- name: Update Git
shell: bash
run: |
yum -y remove git
yum -y remove git-*
yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm || true
yum -y install git
- uses: actions/checkout@v3
with:
repository: "intel-analytics/llm.cpp"
token: ${{ env.github_access_token }}
submodules: 'recursive'
- name: Install Build Environment
shell: bash
run: |
yum update -y
yum install -y centos-release-scl
yum install -y devtoolset-11
yum install -y sshpass netcat
- name: Build binary
shell: bash
run: |
scl enable devtoolset-11 'make'
- name: Move release binary
shell: bash
run: |
mkdir release
mv build/main-bloom release/main-bloom_avx2
mv build/quantize-bloom release/quantize-bloom
mv build/libbloom.so release/libbloom_avx2.so
mv build/main-llama release/main-llama_avx2
mv build/quantize-llama release/quantize-llama
mv build/libllama.so release/libllama_avx2.so
mv build/main-gptneox release/main-gptneox_avx2
mv build/quantize-gptneox release/quantize-gptneox
mv build/libgptneox.so release/libgptneox_avx2.so
mv build/main-starcoder release/main-starcoder_avx2
mv build/quantize-starcoder release/quantize-starcoder
mv build/libstarcoder.so release/libstarcoder_avx2.so
- name: Download cmake
shell: bash
run: |
export http_proxy=${HTTP_PROXY}
export https_proxy=${HTTPS_PROXY}
cd ..
if [ -f "cmake-3.27.1-linux-x86_64.tar.gz" ]; then
actual_sha256=$(sha256sum "cmake-3.27.1-linux-x86_64.tar.gz" | awk '{print $1}')
if [ "$actual_sha256" != "9fef63e1cf87cab1153f9433045df2e43c336e462518b0f5e52d2cc91d762cff" ]; then
wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-x86_64.tar.gz
fi
else
wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-x86_64.tar.gz
fi
tar zxvf cmake-3.27.1-linux-x86_64.tar.gz
- name: Build Chatglm
shell: bash
run: |
cmake_path="$(pwd)/../cmake-3.27.1-linux-x86_64/bin/cmake"
cd src/chatglm
scl enable devtoolset-11 "$cmake_path -B build"
scl enable devtoolset-11 "$cmake_path --build build --config Release"
- name: Move Chatglm binaries
shell: bash
run: |
mv src/chatglm/build/main release/main-chatglm_vnni
- name: Archive build files
uses: actions/upload-artifact@v3
with:
name: linux-avx2
path: |
release
- name: Clean up test environment
shell: bash
run: |
make clean
check-linux-avx512-artifact:
runs-on: ubuntu-latest
outputs:
if-exists: ${{steps.check_artifact.outputs.exists}}
steps:
- name: Check if built
id: check_artifact
uses: xSAVIKx/artifact-exists-action@v0
with:
name: linux-avx512
linux-build-avx512:
runs-on: [self-hosted, AVX512, centos7]
needs: check-linux-avx512-artifact
if: needs.check-linux-avx512-artifact.outputs.if-exists == 'false'
steps:
- name: Set access token
run: |
echo "github_access_token=${GITHUB_ACCESS_TOKEN}" >> "$GITHUB_ENV"
- name: Update Git
shell: bash
run: |
yum -y remove git
yum -y remove git-*
yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm || true
yum -y install git
- uses: actions/checkout@v3
with:
repository: "intel-analytics/llm.cpp"
token: ${{ env.github_access_token }}
submodules: 'recursive'
- name: Install Build Environment
shell: bash
run: |
yum update -y
yum install -y centos-release-scl
yum install -y devtoolset-11
yum install -y sshpass netcat
- name: Build binary
shell: bash
run: |
scl enable devtoolset-11 'make'
- name: Move release binary
shell: bash
run: |
mkdir release
mv build/main-bloom release/main-bloom_avx512
mv build/quantize-bloom release/quantize-bloom_avx512
mv build/libbloom.so release/libbloom_avx512.so
mv build/main-llama release/main-llama_avx512
mv build/quantize-llama release/quantize-llama_avx512
mv build/libllama.so release/libllama_avx512.so
mv build/main-gptneox release/main-gptneox_avx512
mv build/quantize-gptneox release/quantize-gptneox_avx512
mv build/libgptneox.so release/libgptneox_avx512.so
mv build/main-starcoder release/main-starcoder_avx512
mv build/quantize-starcoder release/quantize-starcoder_avx512
mv build/libstarcoder.so release/libstarcoder_avx512.so
# - name: Download cmake
# shell: bash
# run: |
# export http_proxy=${HTTP_PROXY}
# export https_proxy=${HTTPS_PROXY}
# cd ..
# if [ -f "cmake-3.27.1-linux-x86_64.tar.gz" ]; then
# actual_sha256=$(sha256sum "cmake-3.27.1-linux-x86_64.tar.gz" | awk '{print $1}')
# if [ "$actual_sha256" != "9fef63e1cf87cab1153f9433045df2e43c336e462518b0f5e52d2cc91d762cff" ]; then
# wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-x86_64.tar.gz
# fi
# else
# wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-x86_64.tar.gz
# fi
# tar zxvf cmake-3.27.1-linux-x86_64.tar.gz
# - name: Build Chatglm
# shell: bash
# run: |
# cmake_path="$(pwd)/../cmake-3.27.1-linux-x86_64/bin/cmake"
# cd src/chatglm
# scl enable devtoolset-11 "$cmake_path -B build"
# scl enable devtoolset-11 "$cmake_path --build build --config Release"
- name: Archive build files
uses: actions/upload-artifact@v3
with:
name: linux-avx512
path: |
release
- name: Clean up test environment
shell: bash
run: |
make clean
check-windows-avx2-artifact:
runs-on: ubuntu-latest
outputs:
if-exists: ${{steps.check_artifact.outputs.exists}}
steps:
- name: Check if built
id: check_artifact
uses: xSAVIKx/artifact-exists-action@v0
with:
name: windows-avx2
windows-build-avx2:
runs-on: [self-hosted, Windows]
needs: check-windows-avx2-artifact
if: needs.check-windows-avx2-artifact.outputs.if-exists == 'false'
steps:
- name: Set access token
run: |
echo "github_access_token=$env:GITHUB_ACCESS_TOKEN" >> $env:GITHUB_ENV
echo "github_access_token=$env:GITHUB_ACCESS_TOKEN"
- uses: actions/checkout@v3
with:
repository: "intel-analytics/llm.cpp"
token: ${{ env.github_access_token }}
submodules: 'recursive'
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.1
with:
msbuild-architecture: x64
- name: Add cmake to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Build binary
shell: powershell
run: |
cmake .
cmake --build . --config Release
- name: Archive build files
uses: actions/upload-artifact@v3
with:
name: windows-avx2
path: |
build/Release
check-windows-avx2-vnni-artifact:
runs-on: ubuntu-latest
outputs:
if-exists: ${{steps.check_artifact.outputs.exists}}
steps:
- name: Check if built
id: check_artifact
uses: xSAVIKx/artifact-exists-action@v0
with:
name: windows-avx2-vnni
windows-build-avx2-vnni:
runs-on: [self-hosted, Windows]
needs: check-windows-avx2-vnni-artifact
if: needs.check-windows-avx2-vnni-artifact.outputs.if-exists == 'false'
steps:
- name: Set access token
run: |
echo "github_access_token=$env:GITHUB_ACCESS_TOKEN" >> $env:GITHUB_ENV
echo "github_access_token=$env:GITHUB_ACCESS_TOKEN"
- uses: actions/checkout@v3
with:
repository: "intel-analytics/llm.cpp"
token: ${{ env.github_access_token }}
submodules: 'recursive'
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.1
with:
msbuild-architecture: x64
- name: Add cmake to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Build binary
shell: powershell
run: |
cmake -DAVXVNNI=ON .
cmake --build . --config Release
- name: Move release binary
shell: powershell
run: |
if (Test-Path ./release) { rm -r -fo release }
mkdir release
# mv build/Release/main-bloom.exe release/main-bloom_vnni.exe
mv build/Release/quantize-bloom.exe release/quantize-bloom_vnni.exe
mv build/Release/bloom.dll release/libbloom_vnni.dll
# mv build/Release/main-llama.exe release/main-llama_vnni.exe
mv build/Release/quantize-llama.exe release/quantize-llama_vnni.exe
mv build/Release/llama.dll release/libllama_vnni.dll
# mv build/Release/main-gptneox.exe release/main-gptneox_vnni.exe
mv build/Release/quantize-gptneox.exe release/quantize-gptneox_vnni.exe
mv build/Release/gptneox.dll release/libgptneox_vnni.dll
# mv build/Release/main-starcoder.exe release/main-starcoder_vnni.exe
mv build/Release/quantize-starcoder.exe release/quantize-starcoder_vnni.exe
mv build/Release/starcoder.dll release/libstarcoder_vnni.dll
- name: Build Chatglm
shell: powershell
run: |
cd src/chatglm
cmake -DAVXVNNI=ON -B build
cmake --build build --config Release
- name: Move Chatglm binaries
shell: powershell
run: |
mv src/chatglm/build/Release/main.exe release/main-chatglm_vnni.exe
- name: Archive build files
uses: actions/upload-artifact@v3
with:
name: windows-avx2-vnni
path: |
release