From 156a718ad4722aec625a2fa4a824d1415ebe0ce9 Mon Sep 17 00:00:00 2001 From: ltoniazzi Date: Fri, 16 Aug 2024 13:38:38 +0100 Subject: [PATCH 1/6] Add lora test workflow --- .../workflows/server-convert-and-infer.yml | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 .github/workflows/server-convert-and-infer.yml diff --git a/.github/workflows/server-convert-and-infer.yml b/.github/workflows/server-convert-and-infer.yml new file mode 100644 index 000000000..f7937fede --- /dev/null +++ b/.github/workflows/server-convert-and-infer.yml @@ -0,0 +1,166 @@ +# Server build and tests conversion from safetensors and inference +name: Server conversion and inference + +on: + workflow_dispatch: # allows manual triggering + inputs: + sha: + description: 'Commit SHA1 to build' + required: false + type: string + slow_tests: + description: 'Run slow tests' + required: true + type: boolean + push: + branches: + - master + paths: ['.github/workflows/server.yml', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu', '**/*.swift', '**/*.m', 'examples/server/**.*'] + pull_request: + types: [opened, synchronize, reopened] + paths: ['.github/workflows/server.yml', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu', '**/*.swift', '**/*.m', 'examples/server/**.*'] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + server: + runs-on: ubuntu-latest + + strategy: + matrix: + sanitizer: [ADDRESS, UNDEFINED] # THREAD is broken + build_type: [RelWithDebInfo] + include: + - build_type: Release + sanitizer: "" + fail-fast: false # While -DLLAMA_SANITIZE_THREAD=ON is broken + + steps: + - name: Dependencies + id: depends + run: | + sudo apt-get update + sudo apt-get -y install \ + build-essential \ + xxd \ + git \ + cmake \ + curl \ + wget \ + language-pack-en \ + libcurl4-openssl-dev + + - name: Clone + id: checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }} + + - name: Python setup + id: setup_python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Tests dependencies + id: test_dependencies + run: | + pip install -r examples/server/tests/requirements.txt + + - name: Verify server deps + id: verify_server_deps + run: | + git config --global --add safe.directory $(realpath .) + cd examples/server + git ls-files --others --modified + git status + ./deps.sh + git status + not_ignored_files="$(git ls-files --others --modified)" + echo "Modified files: ${not_ignored_files}" + if [ -n "${not_ignored_files}" ]; then + echo "Repository is dirty or server deps are not built as expected" + echo "${not_ignored_files}" + exit 1 + fi + + - name: Build (no OpenMP) + id: cmake_build_no_openmp + if: ${{ matrix.sanitizer == 'THREAD' }} + run: | + cmake -B build \ + -DGGML_NATIVE=OFF \ + -DLLAMA_BUILD_SERVER=ON \ + -DLLAMA_CURL=ON \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ + -DGGML_OPENMP=OFF ; + cmake --build build --config ${{ matrix.build_type }} -j $(nproc) --target llama-server + + - name: Build + id: cmake_build + if: ${{ matrix.sanitizer != 'THREAD' }} + run: | + cmake -B build \ + -DGGML_NATIVE=OFF \ + -DLLAMA_BUILD_SERVER=ON \ + -DLLAMA_CURL=ON \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON ; + cmake --build build --config ${{ matrix.build_type }} -j $(nproc) --target llama-server + + - name: Lora convert and inference tests + id: test_lora_conversion_inference + if: ${{ (github.event.schedule || github.event.inputs.slow_tests == 'true') && matrix.build_type == 'Release' }} + run: ./tests/test-lora-conversion-inference.sh + + + server-windows: + runs-on: windows-2019 + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }} + + - name: libCURL + id: get_libcurl + env: + CURL_VERSION: 8.6.0_6 + run: | + curl.exe -o $env:RUNNER_TEMP/curl.zip -L "https://curl.se/windows/dl-${env:CURL_VERSION}/curl-${env:CURL_VERSION}-win64-mingw.zip" + mkdir $env:RUNNER_TEMP/libcurl + tar.exe -xvf $env:RUNNER_TEMP/curl.zip --strip-components=1 -C $env:RUNNER_TEMP/libcurl + + - name: Build + id: cmake_build + run: | + cmake -B build -DLLAMA_CURL=ON -DCURL_LIBRARY="$env:RUNNER_TEMP/libcurl/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:RUNNER_TEMP/libcurl/include" + cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS} --target llama-server + + - name: Python setup + id: setup_python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Tests dependencies + id: test_dependencies + run: | + pip install -r examples/server/tests/requirements.txt + + - name: Copy Libcurl + id: prepare_libcurl + run: | + cp $env:RUNNER_TEMP/libcurl/bin/libcurl-x64.dll ./build/bin/Release/libcurl-x64.dll + + - name: Lora convert and inference tests + id: test_lora_conversion_inference + if: ${{ (github.event.schedule || github.event.inputs.slow_tests == 'true') && matrix.build_type == 'Release' }} + run: ./tests/test-lora-conversion-inference.sh From d1304ec4bff240a23a329de1ca0daf713418d9ec Mon Sep 17 00:00:00 2001 From: ltoniazzi <61414566+ltoniazzi@users.noreply.github.com> Date: Sun, 18 Aug 2024 12:23:38 +0100 Subject: [PATCH 2/6] Update .github/workflows/server-convert-and-infer.yml Co-authored-by: Xuan Son Nguyen --- .github/workflows/server-convert-and-infer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/server-convert-and-infer.yml b/.github/workflows/server-convert-and-infer.yml index f7937fede..042c9c2d4 100644 --- a/.github/workflows/server-convert-and-infer.yml +++ b/.github/workflows/server-convert-and-infer.yml @@ -68,7 +68,7 @@ jobs: - name: Tests dependencies id: test_dependencies run: | - pip install -r examples/server/tests/requirements.txt + pip install -r requirements/requirements-all.txt - name: Verify server deps id: verify_server_deps From b8c86b10957344c8cb6c385409912f689465d91f Mon Sep 17 00:00:00 2001 From: ltoniazzi <61414566+ltoniazzi@users.noreply.github.com> Date: Sun, 18 Aug 2024 12:24:15 +0100 Subject: [PATCH 3/6] Update .github/workflows/server-convert-and-infer.yml Co-authored-by: Xuan Son Nguyen --- .github/workflows/server-convert-and-infer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/server-convert-and-infer.yml b/.github/workflows/server-convert-and-infer.yml index 042c9c2d4..bfde857c2 100644 --- a/.github/workflows/server-convert-and-infer.yml +++ b/.github/workflows/server-convert-and-infer.yml @@ -1,5 +1,5 @@ # Server build and tests conversion from safetensors and inference -name: Server conversion and inference +name: LoRA adapters conversion and inference on: workflow_dispatch: # allows manual triggering From 56f2a80f164dd0707b68114d387798698e5273ee Mon Sep 17 00:00:00 2001 From: ltoniazzi Date: Sun, 18 Aug 2024 13:35:25 +0100 Subject: [PATCH 4/6] Address comments --- .../workflows/server-convert-and-infer.yml | 95 +------------------ 1 file changed, 3 insertions(+), 92 deletions(-) diff --git a/.github/workflows/server-convert-and-infer.yml b/.github/workflows/server-convert-and-infer.yml index bfde857c2..95e28d59f 100644 --- a/.github/workflows/server-convert-and-infer.yml +++ b/.github/workflows/server-convert-and-infer.yml @@ -28,15 +28,6 @@ jobs: server: runs-on: ubuntu-latest - strategy: - matrix: - sanitizer: [ADDRESS, UNDEFINED] # THREAD is broken - build_type: [RelWithDebInfo] - include: - - build_type: Release - sanitizer: "" - fail-fast: false # While -DLLAMA_SANITIZE_THREAD=ON is broken - steps: - name: Dependencies id: depends @@ -44,13 +35,11 @@ jobs: sudo apt-get update sudo apt-get -y install \ build-essential \ - xxd \ git \ cmake \ curl \ - wget \ - language-pack-en \ - libcurl4-openssl-dev + curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash + sudo apt-get install -y git-lfs - name: Clone id: checkout @@ -70,41 +59,11 @@ jobs: run: | pip install -r requirements/requirements-all.txt - - name: Verify server deps - id: verify_server_deps - run: | - git config --global --add safe.directory $(realpath .) - cd examples/server - git ls-files --others --modified - git status - ./deps.sh - git status - not_ignored_files="$(git ls-files --others --modified)" - echo "Modified files: ${not_ignored_files}" - if [ -n "${not_ignored_files}" ]; then - echo "Repository is dirty or server deps are not built as expected" - echo "${not_ignored_files}" - exit 1 - fi - - - name: Build (no OpenMP) - id: cmake_build_no_openmp - if: ${{ matrix.sanitizer == 'THREAD' }} - run: | - cmake -B build \ - -DGGML_NATIVE=OFF \ - -DLLAMA_BUILD_SERVER=ON \ - -DLLAMA_CURL=ON \ - -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ - -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ - -DGGML_OPENMP=OFF ; - cmake --build build --config ${{ matrix.build_type }} -j $(nproc) --target llama-server - - name: Build id: cmake_build if: ${{ matrix.sanitizer != 'THREAD' }} run: | - cmake -B build \ + make llama-cli llama-export-lora \ -DGGML_NATIVE=OFF \ -DLLAMA_BUILD_SERVER=ON \ -DLLAMA_CURL=ON \ @@ -116,51 +75,3 @@ jobs: id: test_lora_conversion_inference if: ${{ (github.event.schedule || github.event.inputs.slow_tests == 'true') && matrix.build_type == 'Release' }} run: ./tests/test-lora-conversion-inference.sh - - - server-windows: - runs-on: windows-2019 - - steps: - - name: Clone - id: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }} - - - name: libCURL - id: get_libcurl - env: - CURL_VERSION: 8.6.0_6 - run: | - curl.exe -o $env:RUNNER_TEMP/curl.zip -L "https://curl.se/windows/dl-${env:CURL_VERSION}/curl-${env:CURL_VERSION}-win64-mingw.zip" - mkdir $env:RUNNER_TEMP/libcurl - tar.exe -xvf $env:RUNNER_TEMP/curl.zip --strip-components=1 -C $env:RUNNER_TEMP/libcurl - - - name: Build - id: cmake_build - run: | - cmake -B build -DLLAMA_CURL=ON -DCURL_LIBRARY="$env:RUNNER_TEMP/libcurl/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:RUNNER_TEMP/libcurl/include" - cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS} --target llama-server - - - name: Python setup - id: setup_python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Tests dependencies - id: test_dependencies - run: | - pip install -r examples/server/tests/requirements.txt - - - name: Copy Libcurl - id: prepare_libcurl - run: | - cp $env:RUNNER_TEMP/libcurl/bin/libcurl-x64.dll ./build/bin/Release/libcurl-x64.dll - - - name: Lora convert and inference tests - id: test_lora_conversion_inference - if: ${{ (github.event.schedule || github.event.inputs.slow_tests == 'true') && matrix.build_type == 'Release' }} - run: ./tests/test-lora-conversion-inference.sh From 42f65b0289ef359e4d75df20227f3e304af0430d Mon Sep 17 00:00:00 2001 From: ltoniazzi Date: Sat, 24 Aug 2024 09:05:43 +0100 Subject: [PATCH 5/6] clone repo commit --- tests/test-lora-conversion-inference.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/test-lora-conversion-inference.sh b/tests/test-lora-conversion-inference.sh index fe90ce0d1..bc7436208 100755 --- a/tests/test-lora-conversion-inference.sh +++ b/tests/test-lora-conversion-inference.sh @@ -10,11 +10,20 @@ declare -a params=( MODELS_REPO=lora-tests MODELS_REPO_URL=https://huggingface.co/ggml-org/$MODELS_REPO +COMMIT=c26d5fb85b4070a9e9c4e65d132c783b98086890 # Clone the Hugging Face repository if the directory does not exist if [ ! -d "$MODELS_REPO" ]; then echo "Cloning the Hugging Face repository..." - git clone $MODELS_REPO_URL --depth 1 + git clone --depth=1 $MODELS_REPO_URL $MODELS_REPO + cd $MODELS_REPO + + # Fetch the specific commit + git fetch --depth=1 origin $COMMIT + + # Reset to the specific commit + git reset --hard $COMMIT + cd - else echo "Repository already exists. Skipping clone." fi From fc6abde7aa99d7c0492982ed85577f6e8b8934fa Mon Sep 17 00:00:00 2001 From: ltoniazzi Date: Sat, 24 Aug 2024 09:20:31 +0100 Subject: [PATCH 6/6] rm comments --- tests/test-lora-conversion-inference.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/test-lora-conversion-inference.sh b/tests/test-lora-conversion-inference.sh index bc7436208..fb308a9ff 100755 --- a/tests/test-lora-conversion-inference.sh +++ b/tests/test-lora-conversion-inference.sh @@ -15,13 +15,9 @@ COMMIT=c26d5fb85b4070a9e9c4e65d132c783b98086890 # Clone the Hugging Face repository if the directory does not exist if [ ! -d "$MODELS_REPO" ]; then echo "Cloning the Hugging Face repository..." - git clone --depth=1 $MODELS_REPO_URL $MODELS_REPO + git clone $MODELS_REPO_URL --depth 1 cd $MODELS_REPO - - # Fetch the specific commit git fetch --depth=1 origin $COMMIT - - # Reset to the specific commit git reset --hard $COMMIT cd - else