[Currency] SGLang 0.5.7 v2 #252
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: PR - SGLang | |
| on: | |
| pull_request: | |
| branches: [main] | |
| types: [opened, reopened, synchronize] | |
| paths: | |
| - "**sglang**" | |
| - "!docs/**" | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| env: | |
| # Common | |
| CONTAINER_TYPE: "general" | |
| FRAMEWORK: "sglang" | |
| SGLANG_VERSION: "0.5.7" | |
| PYTHON_VERSION: "py312" | |
| CUDA_VERSION: "cu129" | |
| OS_VERSION: "ubuntu22.04" | |
| # SGLang SageMaker | |
| PROD_SAGEMAKER_IMAGE: sglang:0.5-gpu-py312 | |
| # CI environment configuration | |
| FORCE_COLOR: "1" | |
| TEST_ARTIFACTS_DIRECTORY: "/test_artifacts/sglang" | |
| jobs: | |
| gatekeeper: | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: ${{ github.workflow }}-gate-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Checkout base branch (safe) | |
| uses: actions/checkout@v5 | |
| with: | |
| ref: ${{ github.event.pull_request.base.sha }} | |
| fetch-depth: 1 | |
| - name: Run permission gate (from base) | |
| uses: ./.github/actions/pr-permission-gate | |
| check-changes: | |
| needs: [gatekeeper] | |
| if: success() | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: ${{ github.workflow }}-check-changes-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| outputs: | |
| build-change: ${{ steps.changes.outputs.build-change }} | |
| test-change: ${{ steps.changes.outputs.test-change }} | |
| steps: | |
| - name: Checkout DLC source | |
| uses: actions/checkout@v5 | |
| - name: Setup python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Run pre-commit | |
| uses: pre-commit/[email protected] | |
| with: | |
| extra_args: --all-files | |
| - name: Detect file changes | |
| id: changes | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| filters: | | |
| build-change: | |
| - "docker/sglang/**" | |
| - "scripts/sglang/**" | |
| - "scripts/common/**" | |
| - "scripts/telemetry/**" | |
| - ".github/workflows/pr-sglang*" | |
| test-change: | |
| - "test/sglang/**" | |
| # ====================================================== | |
| # =============== SGLang SageMaker jobs ================ | |
| # ====================================================== | |
| build-sglang-image: | |
| needs: [check-changes] | |
| if: needs.check-changes.outputs.build-change == 'true' | |
| runs-on: | |
| - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} | |
| fleet:x86-build-runner | |
| buildspec-override:true | |
| concurrency: | |
| group: ${{ github.workflow }}-build-sglang-image-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| outputs: | |
| ci-image: ${{ steps.build.outputs.image-uri }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Build image | |
| id: build | |
| uses: ./.github/actions/build-image | |
| with: | |
| framework: ${{ env.FRAMEWORK }} | |
| target: sglang-sagemaker | |
| base-image: lmsysorg/sglang:v${{ env.SGLANG_VERSION }}-${{ env.CUDA_VERSION }}-amd64 | |
| framework-version: ${{ env.SGLANG_VERSION }} | |
| container-type: ${{ env.CONTAINER_TYPE }} | |
| aws-account-id: ${{ vars.CI_AWS_ACCOUNT_ID }} | |
| aws-region: ${{ vars.AWS_REGION }} | |
| tag-pr: ${{ env.FRAMEWORK }}-${{ env.SGLANG_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-sagemaker-pr-${{ github.event.pull_request.number }} | |
| dockerfile-path: docker/${{ env.FRAMEWORK }}/Dockerfile | |
| set-test-environment: | |
| needs: [check-changes, build-sglang-image] | |
| if: | | |
| always() && !failure() && !cancelled() && | |
| (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: ${{ github.workflow }}-set-test-environment-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| outputs: | |
| aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} | |
| image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set test environment | |
| id: set-env | |
| run: | | |
| if [[ "${{ needs.build-sglang-image.result }}" == "success" ]]; then | |
| AWS_ACCOUNT_ID=${{ vars.CI_AWS_ACCOUNT_ID }} | |
| IMAGE_URI=${{ needs.build-sglang-image.outputs.ci-image }} | |
| else | |
| AWS_ACCOUNT_ID=${{ vars.PROD_AWS_ACCOUNT_ID }} | |
| IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ env.PROD_SAGEMAKER_IMAGE }} | |
| fi | |
| echo "Image URI to test: ${IMAGE_URI}" | |
| echo "AWS_ACCOUNT_ID=${AWS_ACCOUNT_ID}" >> ${GITHUB_OUTPUT} | |
| echo "IMAGE_URI=${IMAGE_URI}" >> ${GITHUB_OUTPUT} | |
| sglang-local-benchmark-test: | |
| needs: [build-sglang-image, set-test-environment] | |
| if: success() | |
| runs-on: | |
| - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} | |
| fleet:x86-g6xl-runner | |
| buildspec-override:true | |
| concurrency: | |
| group: ${{ github.workflow }}-sglang-local-benchmark-test-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Checkout DLC source | |
| uses: actions/checkout@v5 | |
| - name: Container pull | |
| uses: ./.github/actions/ecr-authenticate | |
| with: | |
| aws-account-id: ${{ needs.set-test-environment.outputs.aws-account-id }} | |
| aws-region: ${{ vars.AWS_REGION }} | |
| image-uri: ${{ needs.set-test-environment.outputs.image-uri }} | |
| - name: Setup for SGLang datasets | |
| run: | | |
| mkdir -p ${TEST_ARTIFACTS_DIRECTORY}/dataset | |
| if [ ! -f ${TEST_ARTIFACTS_DIRECTORY}/dataset/ShareGPT_V3_unfiltered_cleaned_split.json ]; then | |
| echo "Downloading ShareGPT dataset..." | |
| wget -P ${TEST_ARTIFACTS_DIRECTORY}/dataset https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json | |
| else | |
| echo "ShareGPT dataset already exists. Skipping download." | |
| fi | |
| - name: Start container | |
| run: | | |
| CONTAINER_ID=$(docker run -d -it --rm --gpus=all \ | |
| -v ${HOME}/.cache/huggingface:/root/.cache/huggingface \ | |
| -v ${TEST_ARTIFACTS_DIRECTORY}/dataset:/dataset \ | |
| -p 30000:30000 \ | |
| -e SM_SGLANG_MODEL_PATH=Qwen/Qwen3-0.6B \ | |
| -e SM_SGLANG_REASONING_PARSER=qwen3 \ | |
| -e SM_SGLANG_HOST=127.0.0.1 \ | |
| -e SM_SGLANG_PORT=30000 \ | |
| -e HF_TOKEN=${{ secrets.HUGGING_FACE_HUB_TOKEN }} \ | |
| ${{ needs.set-test-environment.outputs.image-uri }}) | |
| echo "CONTAINER_ID=${CONTAINER_ID}" >> ${GITHUB_ENV} | |
| echo "Waiting for serving endpoint startup ..." | |
| sleep 120s | |
| docker logs ${CONTAINER_ID} | |
| - name: Run SGLang tests | |
| run: | | |
| docker exec ${CONTAINER_ID} python3 -m sglang.bench_serving \ | |
| --backend sglang \ | |
| --host 127.0.0.1 --port 30000 \ | |
| --num-prompts 1000 \ | |
| --model Qwen/Qwen3-0.6B \ | |
| --dataset-name sharegpt \ | |
| --dataset-path /dataset/ShareGPT_V3_unfiltered_cleaned_split.json | |
| sglang-upstream-test: | |
| needs: [build-sglang-image, set-test-environment] | |
| if: success() | |
| runs-on: | |
| - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} | |
| fleet:x86-g6exl-runner | |
| buildspec-override:true | |
| concurrency: | |
| group: ${{ github.workflow }}-sglang-frontend-test-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Checkout DLC source | |
| uses: actions/checkout@v5 | |
| - name: Container pull | |
| uses: ./.github/actions/ecr-authenticate | |
| with: | |
| aws-account-id: ${{ needs.set-test-environment.outputs.aws-account-id }} | |
| aws-region: ${{ vars.AWS_REGION }} | |
| image-uri: ${{ needs.set-test-environment.outputs.image-uri }} | |
| - name: Checkout SGLang tests | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: sgl-project/sglang | |
| ref: v${{ env.SGLANG_VERSION }} | |
| path: sglang_source | |
| - name: Start container | |
| run: | | |
| CONTAINER_ID=$(docker run -d -it --rm --gpus=all --entrypoint /bin/bash \ | |
| -v ${HOME}/.cache/huggingface:/root/.cache/huggingface \ | |
| -v ./sglang_source:/workdir --workdir /workdir \ | |
| -e HF_TOKEN=${{ secrets.HUGGING_FACE_HUB_TOKEN }} \ | |
| ${{ needs.set-test-environment.outputs.image-uri }}) | |
| echo "CONTAINER_ID=${CONTAINER_ID}" >> ${GITHUB_ENV} | |
| - name: Setup for SGLang tests | |
| run: | | |
| docker exec ${CONTAINER_ID} sh -c ' | |
| set -eux | |
| bash scripts/ci/ci_install_dependency.sh | |
| ' | |
| - name: Run SGLang tests | |
| run: | | |
| docker exec ${CONTAINER_ID} sh -c ' | |
| set -eux | |
| nvidia-smi | |
| # SRT backend Test | |
| cd /workdir/test | |
| python3 run_suite.py --hw cuda --suite stage-a-test-1 | |
| ' | |
| sglang-sagemaker-endpoint-test: | |
| needs: [set-test-environment] | |
| if: | | |
| always() && !failure() && !cancelled() && | |
| needs.set-test-environment.result == 'success' | |
| runs-on: | |
| - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} | |
| fleet:default-runner | |
| buildspec-override:true | |
| concurrency: | |
| group: ${{ github.workflow }}-sglang-sagemaker-endpoint-test-${{ github.event.pull_request.number }} | |
| cancel-in-progress: false | |
| steps: | |
| - name: Checkout DLC source | |
| uses: actions/checkout@v5 | |
| - name: Install test dependencies | |
| run: | | |
| uv venv --python 3.12 | |
| source .venv/bin/activate | |
| uv pip install -r test/requirements.txt | |
| uv pip install -r test/sglang/sagemaker/requirements.txt | |
| - name: Run sagemaker tests | |
| run: | | |
| source .venv/bin/activate | |
| cd test/ | |
| python3 -m pytest -vs -rA --image-uri ${{ needs.set-test-environment.outputs.image-uri }} sglang/sagemaker |