diff --git a/.github/workflows/ci_iluvatar.yml b/.github/workflows/ci_iluvatar.yml new file mode 100644 index 0000000000..9d92553b6d --- /dev/null +++ b/.github/workflows/ci_iluvatar.yml @@ -0,0 +1,84 @@ +name: CI_ILUVATAR + +on: + pull_request: + branches: [ develop ] + workflow_dispatch: + +concurrency: + group: ${{ github.event.pull_request.number }}-iluvatar-ci + cancel-in-progress: true + +jobs: + CI_ILUVATAR: + runs-on: [self-hosted, IXUCA] + steps: + - name: Print current runner name + run: | + echo "Current runner name: ${{ runner.name }}" + # Because the system version is lower than 2.23, the checkout cannot be used. + # - name: Checkout code + # uses: actions/checkout@v4 + + - name: Code Checkout + env: + docker_image: ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-ixuca:latest + run: | + REPO="https://github.com/${{ github.repository }}.git" + FULL_REPO="${{ github.repository }}" + REPO_NAME="${FULL_REPO##*/}" + # Clean the repository directory before starting + docker run --rm --net=host -v $(pwd):/workspace -w /workspace \ + -e "REPO_NAME=${REPO_NAME}" \ + ${docker_image} /bin/bash -c ' + if [ -d ${REPO_NAME} ]; then + echo "Directory ${REPO_NAME} exists, removing it..." + rm -rf ${REPO_NAME} + fi + ' + git config --global user.name "FastDeployCI" + git config --global user.email "fastdeploy_ci@example.com" + git clone ${REPO} ${REPO_NAME} + cd FastDeploy + if [ "${{ github.event_name }}" = "pull_request" ]; then + git fetch origin pull/${{ github.event.pull_request.number }}/head:pr/${{ github.event.pull_request.number }} + git merge pr/${{ github.event.pull_request.number }} + git log -n 3 --oneline + else + git checkout ${{ github.sha }} + git log -n 3 --oneline + fi + + - name: Run CI unittest + env: + docker_image: ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-ixuca:latest + run: | + runner_name="${{ runner.name }}" + last_char="${runner_name: -1}" + + if [[ "$last_char" =~ [0-3] ]]; then + gpu_id="$last_char" + else + gpu_id="0" + fi + FD_API_PORT=$((9180 + gpu_id * 100)) + FD_ENGINE_QUEUE_PORT=$((9150 + gpu_id * 100)) + FD_METRICS_PORT=$((9170 + gpu_id * 100)) + + PARENT_DIR=$(dirname "$WORKSPACE") + echo "PARENT_DIR:$PARENT_DIR" + docker run --rm --net=host --pid=host --cap-add=ALL --privileged --shm-size=64G \ + -v /usr/src:/usr/src -v /lib/modules:/lib/modules -v /dev:/dev \ + -v $(pwd):/workspace -w /workspace \ + -v "/data1/fastdeploy:/data1/fastdeploy" \ + -e "MODEL_PATH=/ssd3/model" \ + -e "http_proxy=$(git config --global --get http.proxy)" \ + -e "https_proxy=$(git config --global --get https.proxy)" \ + -e "FD_API_PORT=${FD_API_PORT}" \ + -e "FD_ENGINE_QUEUE_PORT=${FD_ENGINE_QUEUE_PORT}" \ + -e "FD_METRICS_PORT=${FD_METRICS_PORT}" \ + ${docker_image} /bin/bash -c " + git config --global --add safe.directory /workspace/FastDeploy + cd FastDeploy + bash scripts/run_ci_iluvatar.sh + " diff --git a/requirements_iluvatar.txt b/requirements_iluvatar.txt index 14d2d42dd6..4e48a83123 100644 --- a/requirements_iluvatar.txt +++ b/requirements_iluvatar.txt @@ -1,4 +1,4 @@ -setuptools>=62.3.0,<80.0 +setuptools>=79.0.1,<80.0 pre-commit yapf flake8 diff --git a/scripts/run_ci_iluvatar.sh b/scripts/run_ci_iluvatar.sh new file mode 100644 index 0000000000..9645e29a2a --- /dev/null +++ b/scripts/run_ci_iluvatar.sh @@ -0,0 +1,43 @@ +#!/bin/bash +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +echo "$DIR" + +#先kill一遍 +ps -efww | grep -E 'run_ernie300B_4layer' | grep -v grep | awk '{print $2}' | xargs kill -9 || true +ixsmi -r + +export LD_PRELOAD=/usr/local/corex/lib64/libcuda.so.1 +ln -sf /usr/local/bin/python3 /usr/local/bin/python +echo "pip requirements" +python -m pip install -r requirements_iluvatar.txt +echo "uninstall org" +python -m pip uninstall paddlepaddle -y +python -m pip uninstall paddle-iluvatar-gpu -y +python -m pip install paddlepaddle==3.1.0a0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/ +# TODO: Change to open access URL +# python -m pip install --pre paddle-iluvatar-gpu -i https://www.paddlepaddle.org.cn/packages/nightly/ixuca/ +python -m pip install /data1/fastdeploy/packages/paddle_iluvatar_gpu-0.0.0-cp310-cp310-linux_x86_64.whl +# Patch, remove if image updated +cp /data1/fastdeploy/packages/cusolver.h /usr/local/lib/python3.10/site-packages/paddle/include/paddle/phi/backends/dynload/cusolver.h +echo "build whl" +bash build.sh || exit 1 + +unset http_proxy +unset https_proxy +unset no_proxy + +rm -rf log/* +export INFERENCE_MSG_QUEUE_ID=232132 +export FD_DEBUG=1 +export PADDLE_XCCL_BACKEND=iluvatar_gpu +python test/ci_use/iluvatar_UT/run_ernie300B_4layer.py +exit_code=$? +echo exit_code is ${exit_code} + +ps -efww | grep -E 'run_ernie300B_4layer' | grep -v grep | awk '{print $2}' | xargs kill -9 || true + +if [ ${exit_code} -ne 0 ]; then + echo "log/workerlog.0" + cat log/workerlog.0 + exit 1 +fi diff --git a/test/ci_use/iluvatar_UT/run_ernie300B_4layer.py b/test/ci_use/iluvatar_UT/run_ernie300B_4layer.py new file mode 100644 index 0000000000..33e28806e7 --- /dev/null +++ b/test/ci_use/iluvatar_UT/run_ernie300B_4layer.py @@ -0,0 +1,16 @@ +from fastdeploy import LLM, SamplingParams + +prompts = [ + "Hello, my name is", +] + +# 采样参数 +sampling_params = SamplingParams(temperature=0.8, top_p=0.00001, max_tokens=16) + +# 加载模型 +llm = LLM(model="/data1/fastdeploy/ERNIE_300B_4L", tensor_parallel_size=16, max_model_len=8192, static_decode_blocks=0, quantization='wint8', block_size=16) + +# 批量进行推理(llm内部基于资源情况进行请求排队、动态插入处理) +outputs = llm.generate(prompts, sampling_params) + +assert outputs[0].outputs.token_ids==[23768, 97000, 47814, 59335, 68170, 183, 49080, 94717, 82966, 99140, 31615, 51497, 94851, 60764, 10889, 2]