Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/actions/ecr-authenticate/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ name: ECR Authentication
description: Login to ECR, if image_uri is provided pull the image onto host runner.

inputs:
aws_region:
description: AWS Region for docker image repository
required: true
aws_account_id:
aws-account-id:
description: AWS Account ID for docker image registry
required: true
image_uri:
aws-region:
description: AWS Region for docker image repository
required: true
image-uri:
description: Docker image URI to pull from ECR
required: false

Expand Down
208 changes: 57 additions & 151 deletions .github/workflows/pr-sglang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,37 +19,51 @@ env:
PYTHON_VERSION: "py312"
CUDA_VERSION: "cu129"
OS_VERSION: "ubuntu22.04"
PROD_SAGEMAKER_IMAGE: sglang:0.5.5-gpu-py312-cu129-ubuntu22.04-sagemaker
FORCE_COLOR: "1"

jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
sglang-sagemaker: ${{ steps.changes.outputs.sglang-sagemaker }}
build-change: ${{ steps.changes.outputs.build-change }}
test-change: ${{ steps.changes.outputs.test-change }}
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
- name: Checkout DLC source
uses: actions/checkout@v5

- name: Setup python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: pre-commit/action@v3.0.1

- name: Run pre-commit
uses: pre-commit/action@v3.0.1
with:
extra_args: --all-files

- name: Detect file changes
id: changes
uses: dorny/paths-filter@v3
with:
filters: |
sglang-sagemaker:
- "docker/sglang/Dockerfile"
build-change:
- "docker/sglang/**"
- "scripts/sglang/**"
- "scripts/common/**"
- "scripts/telemetry/**"
- ".github/workflows/pr-sglang*"
test-change:
- "test/sglang/**"

build-sglang-image:
needs: [check-changes]
if: needs.check-changes.outputs.sglang-sagemaker == 'true'
if: needs.check-changes.outputs.build-change == 'true'
runs-on:
- codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }}
fleet:x86-build-runner
outputs:
image-uri: ${{ steps.image-uri-build.outputs.IMAGE_URI }}
ci-image: ${{ steps.image-uri-build.outputs.IMAGE_URI }}
steps:
- uses: actions/checkout@v5
- run: .github/scripts/runner_setup.sh
Expand All @@ -58,16 +72,16 @@ jobs:
- name: ECR login
uses: ./.github/actions/ecr-authenticate
with:
aws_region: ${{ vars.AWS_REGION }}
aws_account_id: ${{ vars.AWS_ACCOUNT_ID }}
aws-account-id: ${{ vars.AWS_ACCOUNT_ID }}
aws-region: ${{ vars.AWS_REGION }}

- name: Resolve image URI for build
id: image-uri-build
run: |
IMAGE_URI=${{ vars.AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/ci:sglang-${{ env.SGLANG_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-sagemaker-pr-${{ github.event.pull_request.number }}
echo "Image URI to build: $IMAGE_URI"
echo "IMAGE_URI=$IMAGE_URI" >> $GITHUB_ENV
echo "IMAGE_URI=$IMAGE_URI" >> $GITHUB_OUTPUT
echo "Image URI to build: ${IMAGE_URI}"
echo "IMAGE_URI=${IMAGE_URI}" >> ${GITHUB_ENV}
echo "IMAGE_URI=${IMAGE_URI}" >> ${GITHUB_OUTPUT}

- name: Build image
run: |
Expand All @@ -86,145 +100,37 @@ jobs:
docker push ${IMAGE_URI}
docker rmi ${IMAGE_URI}

sglang-local-benchmark-test:
needs: [build-sglang-image]
if: needs.build-sglang-image.result == 'success'
runs-on:
- codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }}
fleet:x86-g6xl-runner
set-test-environment:
needs: [check-changes, build-sglang-image]
runs-on: ubuntu-latest
outputs:
aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }}
image-uri: ${{ steps.set-env.outputs.IMAGE_URI }}
sglang-version: ${{ steps.set-env.outputs.SGLANG_VERSION }}
steps:
- name: Checkout DLC source
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v4

- name: Container pull
uses: ./.github/actions/ecr-authenticate
with:
aws_region: ${{ vars.AWS_REGION }}
aws_account_id: ${{ vars.AWS_ACCOUNT_ID }}
image_uri: ${{ needs.build-sglang-image.outputs.image-uri }}

- name: Setup for SGLang datasets
- name: Set test environment
id: set-env
run: |
mkdir -p /tmp/sglang/dataset
if [ ! -f /tmp/sglang/dataset/ShareGPT_V3_unfiltered_cleaned_split.json ]; then
echo "Downloading ShareGPT dataset..."
wget -P /tmp/sglang/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."
if [ "${{ needs.build-sglang-image.result }}" == "success"]; then
AWS_ACCOUNT_ID=${{ vars.AWS_ACCOUNT_ID }}
IMAGE_URI=${{ needs.build-sglang-image.outputs.ci-image }}
elif [ "${{ needs.build-sglang-image.result }}" != "success"]; then
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

- name: Start container
run: |
CONTAINER_ID=$(docker run -d -it --rm --gpus=all \
-v ${HOME}/.cache/huggingface:/root/.cache/huggingface \
-v /tmp/sglang/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.build-sglang-image.outputs.image-uri }})
echo "CONTAINER_ID=$CONTAINER_ID" >> $GITHUB_ENV
echo "Waiting for container startup ..."
sleep 60s
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

- name: Cleanup container and images
if: always()
uses: ./.github/actions/container-cleanup
with:
container_id: ${{ env.CONTAINER_ID }}

sglang-lang-test:
needs: [build-sglang-image]
if: needs.build-sglang-image.result == 'success'
runs-on:
- codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }}
fleet:x86-g6exl-runner
steps:
- name: Checkout DLC source
uses: actions/checkout@v5

- name: Container pull
uses: ./.github/actions/ecr-authenticate
with:
aws_region: ${{ vars.AWS_REGION }}
aws_account_id: ${{ vars.AWS_ACCOUNT_ID }}
image_uri: ${{ needs.build-sglang-image.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.build-sglang-image.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

# Frontend Test
cd /workdir/test/lang
python3 run_suite.py --suite per-commit
'

- name: Cleanup container and images
if: always()
uses: ./.github/actions/container-cleanup
with:
container_id: ${{ env.CONTAINER_ID }}

sglang-sagemaker-endpoint-test:
needs: [build-sglang-image]
if: needs.build-sglang-image.result == 'success'
runs-on:
- codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }}
fleet:default-runner
steps:
- name: Checkout DLC source
uses: actions/checkout@v5

- run: .github/scripts/runner_setup.sh
- name: Install test dependencies
run: |
uv venv
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.build-sglang-image.outputs.image-uri }} sglang/sagemaker
echo IMAGE_URI=${IMAGE_URI} >> ${GITHUB_OUTPUT}
echo AWS_ACCOUNT_ID=${AWS_ACCOUNT_ID} >> ${GITHUB_OUTPUT}
echo SGLANG_VERSION=${SGLANG_VERSION} >> ${GITHUB_OUTPUT}

test-sglang-image:
needs: [set-test-environment]
if: needs.set-test-environment.result == 'success'
uses: ./.github/workflows/test-sglang.yml
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 }}
sglang-version: ${{ needs.set-test-environment.outputs.sglang-version }}
Loading
Loading