diff --git a/.github/actions/build-image/action.yml b/.github/actions/build-image/action.yml index ad2031dd7601..42b1d7b69f62 100644 --- a/.github/actions/build-image/action.yml +++ b/.github/actions/build-image/action.yml @@ -29,6 +29,46 @@ inputs: dockerfile-path: description: 'Path to the Dockerfile' required: true + arch-type: + description: 'Architecture type (e.g., x86, arm64)' + required: false + default: 'x86' + device-type: + description: 'Device type (e.g., gpu, cpu)' + required: false + default: 'gpu' + cuda-version: + description: 'CUDA version (e.g., cu129)' + required: false + default: '' + python-version: + description: 'Python version (e.g., py312)' + required: false + default: '' + os-version: + description: 'OS version (e.g., ubuntu24.04)' + required: false + default: '' + contributor: + description: 'Contributor name' + required: false + default: 'None' + customer-type: + description: 'Customer type (e.g., sagemaker, ec2, rayserve_ec2)' + required: false + default: '' + inference-toolkit-version: + description: 'Inference toolkit version (e.g., 2.0.25)' + required: false + default: '' + torchserve-version: + description: 'TorchServe version (e.g., 0.12.0)' + required: false + default: '' + transformers-version: + description: 'Transformers library version (e.g., 4.28.1)' + required: false + default: '' outputs: image-uri: @@ -60,16 +100,90 @@ runs: - name: Build image shell: bash run: | - docker buildx build --progress plain \ - --build-arg CACHE_REFRESH="$(date +"%Y-%m-%d")" \ - --build-arg BASE_IMAGE="${{ inputs.base-image }}" \ - --build-arg CONTAINER_TYPE="${{ inputs.container-type }}" \ - --build-arg FRAMEWORK="${{ inputs.framework }}" \ - --build-arg FRAMEWORK_VERSION="${{ inputs.framework-version }}" \ + # Process label values + LABEL_FRAMEWORK=$(echo "${{ inputs.framework }}" | tr '_' '-') + LABEL_FRAMEWORK_VERSION=$(echo "${{ inputs.framework-version }}" | tr '.' '-') + LABEL_ARCH="${{ inputs.arch-type }}" + LABEL_PYTHON_VERSION=$(echo "${{ inputs.python-version }}" | tr '.' '-') + LABEL_OS_VERSION=$(echo "${{ inputs.os-version }}" | tr '.' '-') + LABEL_CONTRIBUTOR="${{ inputs.contributor }}" + + # Build transformers label if version provided + LABEL_TRANSFORMERS="" + if [[ -n "${{ inputs.transformers-version }}" ]]; then + LABEL_TRANSFORMERS=$(echo "${{ inputs.transformers-version }}" | tr '.' '-') + fi + + # Build inference toolkit label if both versions provided + LABEL_INFERENCE_TOOLKIT="" + if [[ -n "${{ inputs.inference-toolkit-version }}" && -n "${{ inputs.torchserve-version }}" ]]; then + TOOLKIT_VER=$(echo "${{ inputs.inference-toolkit-version }}" | tr '.' '-') + TORCHSERVE_VER=$(echo "${{ inputs.torchserve-version }}" | tr '.' '-') + LABEL_INFERENCE_TOOLKIT="${TOOLKIT_VER}.torchserve.${TORCHSERVE_VER}" + fi + + # Construct device type label + LABEL_DEVICE_TYPE="${{ inputs.device-type }}" + if [[ "${{ inputs.device-type }}" == "gpu" && -n "${{ inputs.cuda-version }}" ]]; then + LABEL_DEVICE_TYPE="${{ inputs.device-type }}.${{ inputs.cuda-version }}" + fi + + # Build base command + BUILD_CMD="docker buildx build --progress plain \ + --build-arg CACHE_REFRESH=\"\$(date +\"%Y-%m-%d\")\" \ + --build-arg BASE_IMAGE=\"${{ inputs.base-image }}\" \ + --build-arg CONTAINER_TYPE=\"${{ inputs.container-type }}\" \ + --build-arg FRAMEWORK=\"${{ inputs.framework }}\" \ + --build-arg FRAMEWORK_VERSION=\"${{ inputs.framework-version }}\"" + + # Add SageMaker labels if customer-type is 'sagemaker' + if [[ "${{ inputs.customer-type }}" == "sagemaker" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.arch.${LABEL_ARCH}=true\" \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.device.${LABEL_DEVICE_TYPE}=true\" \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.framework.${LABEL_FRAMEWORK}.${LABEL_FRAMEWORK_VERSION}=true\" \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.job.${{ inputs.container-type }}=true\"" + + # Add OS version label if provided + if [[ -n "${{ inputs.os-version }}" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.os.${LABEL_OS_VERSION}=true\"" + fi + + # Add Python version label if provided + if [[ -n "${{ inputs.python-version }}" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.python.${LABEL_PYTHON_VERSION}=true\"" + fi + + # Add contributor label if provided + if [[ -n "${LABEL_CONTRIBUTOR}" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.contributor.${LABEL_CONTRIBUTOR}=true\"" + fi + + # Add transformers library label if provided + if [[ -n "${LABEL_TRANSFORMERS}" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.lib.transformers.${LABEL_TRANSFORMERS}=true\"" + fi + + # Add inference toolkit label if provided + if [[ -n "${LABEL_INFERENCE_TOOLKIT}" ]]; then + BUILD_CMD="${BUILD_CMD} \ + --label \"com.amazonaws.ml.engines.sagemaker.dlc.inference-toolkit.${LABEL_INFERENCE_TOOLKIT}=true\"" + fi + fi + + # Complete the build command + BUILD_CMD="${BUILD_CMD} \ --cache-to=type=inline \ --cache-from=type=registry,ref=${CI_IMAGE_URI} \ --tag ${CI_IMAGE_URI} \ --push \ --target ${{ inputs.target }} \ - -f ${{ inputs.dockerfile-path }} . + -f ${{ inputs.dockerfile-path }} ." + + # Execute build + eval ${BUILD_CMD} docker rmi ${CI_IMAGE_URI} diff --git a/.github/actions/load-config/action.yml b/.github/actions/load-config/action.yml new file mode 100644 index 000000000000..6c321d0b27e7 --- /dev/null +++ b/.github/actions/load-config/action.yml @@ -0,0 +1,51 @@ +name: 'Load Configuration Files' +description: 'Load and parse YAML configuration files into JSON format' + +inputs: + config-files: + description: 'Comma-separated list of config file paths to load' + required: true + +outputs: + ec2-config: + description: 'EC2 configuration as JSON' + value: ${{ steps.load-configs.outputs.ec2-config }} + sagemaker-config: + description: 'SageMaker configuration as JSON' + value: ${{ steps.load-configs.outputs.sagemaker-config }} + rayserve-config: + description: 'RayServe configuration as JSON' + value: ${{ steps.load-configs.outputs.rayserve-config }} + +runs: + using: 'composite' + steps: + - name: Install yq + shell: bash + run: | + if ! command -v yq &> /dev/null; then + sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + sudo chmod +x /usr/local/bin/yq + fi + + - name: Load configuration files + id: load-configs + shell: bash + run: | + # Split comma-separated config files + IFS=',' read -ra CONFIG_FILES <<< "${{ inputs.config-files }}" + + # Load each config file and output individually + for CONFIG_FILE in "${CONFIG_FILES[@]}"; do + # Extract config name from file path (e.g., "ec2" from "sglang-ec2.yml") + CONFIG_NAME=$(basename "$CONFIG_FILE" .yml | sed 's/.*-//') + + echo "Loading config: $CONFIG_FILE as '${CONFIG_NAME}-config'" + + # Output individual config + { + echo "${CONFIG_NAME}-config<> $GITHUB_OUTPUT + done diff --git a/.github/config/sglang-ec2.yml b/.github/config/sglang-ec2.yml new file mode 100644 index 000000000000..8162d97d4a73 --- /dev/null +++ b/.github/config/sglang-ec2.yml @@ -0,0 +1,30 @@ +# SGLang EC2 Image Configuration +# This file contains all configuration for building, testing, and releasing the SGLang EC2 image + +# Image identification +image: + name: "sglang-ec2" + description: "SGLang for EC2 instances" + +# Build configuration +common: + framework: "sglang" + framework_version: "0.5.8" + job_type: "general" + python_version: "py312" + cuda_version: "cu129" + os_version: "ubuntu24.04" + customer_type: "ec2" + arch_type: "x86" + prod_image: "sglang:0.5-gpu-py312-ec2" + device_type: "gpu" + contributor: "None" + +# Release configuration +release: + release: false + force_release: false + public_registry: true + private_registry: true + enable_soci: true + environment: gamma # gamma or production diff --git a/.github/config/sglang-sagemaker.yml b/.github/config/sglang-sagemaker.yml new file mode 100644 index 000000000000..9430ec68db1a --- /dev/null +++ b/.github/config/sglang-sagemaker.yml @@ -0,0 +1,30 @@ +# SGLang SageMaker Image Configuration +# This file contains all configuration for building, testing, and releasing the SGLang SageMaker image + +# Image identification +image: + name: "sglang-sagemaker" + description: "SGLang for SageMaker" + +# Build configuration +common: + framework: "sglang" + framework_version: "0.5.8" + job_type: "general" + python_version: "py312" + cuda_version: "cu129" + os_version: "ubuntu24.04" + customer_type: "sagemaker" + arch_type: "x86" + prod_image: "sglang:0.5-gpu-py312" + device_type: "gpu" + contributor: "None" + +# Release configuration +release: + release: false + force_release: false + public_registry: true + private_registry: true + enable_soci: true + environment: gamma # gamma or production diff --git a/.github/config/vllm-ec2.yml b/.github/config/vllm-ec2.yml new file mode 100644 index 000000000000..5c94048f9487 --- /dev/null +++ b/.github/config/vllm-ec2.yml @@ -0,0 +1,30 @@ +# vLLM EC2 Image Configuration +# This file contains all configuration for building, testing, and releasing the vLLM EC2 image + +# Image identification +image: + name: "vllm-ec2" + description: "vLLM for EC2 instances" + +# Build configuration +common: + framework: "vllm" + framework_version: "0.15.1" + job_type: "general" + python_version: "py312" + cuda_version: "cu129" + os_version: "ubuntu22.04" + customer_type: "ec2" + arch_type: "x86" + prod_image: "vllm:0.15-gpu-py312-ec2" + device_type: "gpu" + contributor: "None" + +# Release configuration +release: + release: false + force_release: false + public_registry: true + private_registry: true + enable_soci: true + environment: gamma # gamma or production diff --git a/.github/config/vllm-0.10.2-rayserve.yml b/.github/config/vllm-rayserve.yml similarity index 87% rename from .github/config/vllm-0.10.2-rayserve.yml rename to .github/config/vllm-rayserve.yml index 49f09d785900..d806d20d7430 100644 --- a/.github/config/vllm-0.10.2-rayserve.yml +++ b/.github/config/vllm-rayserve.yml @@ -16,7 +16,7 @@ common: os_version: "ubuntu22.04" customer_type: "rayserve_ec2" arch_type: "x86" - prod_image: "vllm:0.10-gpu-py312-rayserve" + prod_image: "vllm:0.10-gpu-py312-rayserve-ec2" device_type: "gpu" # Release configuration @@ -26,4 +26,4 @@ release: public_registry: true private_registry: false enable_soci: true - environment: production # gamma or production + environment: gamma # gamma or production diff --git a/.github/config/vllm-sagemaker.yml b/.github/config/vllm-sagemaker.yml new file mode 100644 index 000000000000..32710bd1dcb5 --- /dev/null +++ b/.github/config/vllm-sagemaker.yml @@ -0,0 +1,30 @@ +# vLLM SageMaker Image Configuration +# This file contains all configuration for building, testing, and releasing the vLLM SageMaker image + +# Image identification +image: + name: "vllm-sagemaker" + description: "vLLM for SageMaker" + +# Build configuration +common: + framework: "vllm" + framework_version: "0.15.1" + job_type: "general" + python_version: "py312" + cuda_version: "cu129" + os_version: "ubuntu22.04" + customer_type: "sagemaker" + arch_type: "x86" + prod_image: "vllm:0.15-gpu-py312" + device_type: "gpu" + contributor: "None" + +# Release configuration +release: + release: false + force_release: false + public_registry: true + private_registry: true + enable_soci: true + environment: gamma # gamma or production diff --git a/.github/workflows/pr-sglang.yml b/.github/workflows/pr-sglang.yml index e364bcf24578..5474137e7834 100644 --- a/.github/workflows/pr-sglang.yml +++ b/.github/workflows/pr-sglang.yml @@ -13,24 +13,14 @@ permissions: pull-requests: read env: - # Common - CONTAINER_TYPE: "general" - FRAMEWORK: "sglang" - SGLANG_VERSION: "0.5.8" - PYTHON_VERSION: "py312" - CUDA_VERSION: "cu129" - OS_VERSION: "ubuntu24.04" - - # SGLang EC2 - PROD_EC2_IMAGE: sglang:0.5-gpu-py312-ec2 - - # SGLang SageMaker - PROD_SAGEMAKER_IMAGE: sglang:0.5-gpu-py312 - # CI environment configuration FORCE_COLOR: "1" TEST_ARTIFACTS_DIRECTORY: "/test_artifacts/sglang" + # Config file paths + EC2_CONFIG: ".github/config/sglang-ec2.yml" + SAGEMAKER_CONFIG: ".github/config/sglang-sagemaker.yml" + jobs: gatekeeper: runs-on: ubuntu-latest @@ -47,10 +37,27 @@ jobs: - name: Run permission gate (from base) uses: ./.github/actions/pr-permission-gate - check-changes: + load-config: needs: [gatekeeper] if: success() runs-on: ubuntu-latest + outputs: + ec2-config: ${{ steps.load.outputs.ec2-config }} + sagemaker-config: ${{ steps.load.outputs.sagemaker-config }} + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Load configurations + id: load + uses: ./.github/actions/load-config + with: + config-files: ${{ env.EC2_CONFIG }},${{ env.SAGEMAKER_CONFIG }} + + check-changes: + needs: [load-config] + if: success() + runs-on: ubuntu-latest concurrency: group: ${{ github.workflow }}-check-changes-${{ github.event.pull_request.number }} cancel-in-progress: true @@ -89,7 +96,7 @@ jobs: # =============== SGLang EC2 jobs ====================== # ====================================================== build-sglang-ec2-image: - needs: [check-changes] + needs: [check-changes, load-config] if: needs.check-changes.outputs.build-change == 'true' runs-on: - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} @@ -103,22 +110,44 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Parse EC2 config + id: config + run: | + echo '${{ needs.load-config.outputs.ec2-config }}' > config.json + echo "framework=$(jq -r '.common.framework' config.json)" >> $GITHUB_OUTPUT + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "container-type=$(jq -r '.common.job_type' config.json)" >> $GITHUB_OUTPUT + echo "python-version=$(jq -r '.common.python_version' config.json)" >> $GITHUB_OUTPUT + echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT + echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT + echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT + - name: Build image id: build uses: ./.github/actions/build-image with: - framework: ${{ env.FRAMEWORK }} + framework: ${{ steps.config.outputs.framework }} target: sglang-ec2 - base-image: lmsysorg/sglang:v${{ env.SGLANG_VERSION }}-${{ env.CUDA_VERSION }}-amd64 - framework-version: ${{ env.SGLANG_VERSION }} - container-type: ${{ env.CONTAINER_TYPE }} + base-image: lmsysorg/sglang:v${{ steps.config.outputs.framework-version }}-${{ steps.config.outputs.cuda-version }}-amd64 + framework-version: ${{ steps.config.outputs.framework-version }} + container-type: ${{ steps.config.outputs.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 }}-ec2-pr-${{ github.event.pull_request.number }} - dockerfile-path: docker/${{ env.FRAMEWORK }}/Dockerfile + tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-gpu-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-ec2-pr-${{ github.event.pull_request.number }} + dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-ec2-test-environment: - needs: [check-changes, build-sglang-ec2-image] + needs: [check-changes, build-sglang-ec2-image, load-config] if: | always() && !failure() && !cancelled() && (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') @@ -129,10 +158,18 @@ jobs: outputs: aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} + framework-version: ${{ steps.config.outputs.framework-version }} steps: - name: Checkout code uses: actions/checkout@v4 + - name: Parse EC2 config + id: config + run: | + echo '${{ needs.load-config.outputs.ec2-config }}' > config.json + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "prod-image=$(jq -r '.common.prod_image' config.json)" >> $GITHUB_OUTPUT + - name: Set test environment id: set-env run: | @@ -141,7 +178,7 @@ jobs: IMAGE_URI=${{ needs.build-sglang-ec2-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_EC2_IMAGE }} + IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ steps.config.outputs.prod-image }} fi echo "Image URI to test: ${IMAGE_URI}" @@ -231,7 +268,7 @@ jobs: uses: actions/checkout@v5 with: repository: sgl-project/sglang - ref: v${{ env.SGLANG_VERSION }} + ref: v${{ needs.set-ec2-test-environment.outputs.framework-version }} path: sglang_source - name: Start container @@ -269,7 +306,7 @@ jobs: # =============== SGLang SageMaker jobs ================ # ====================================================== build-sglang-sagemaker-image: - needs: [check-changes] + needs: [check-changes, load-config] if: needs.check-changes.outputs.build-change == 'true' runs-on: - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} @@ -283,22 +320,44 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Parse SageMaker config + id: config + run: | + echo '${{ needs.load-config.outputs.sagemaker-config }}' > config.json + echo "framework=$(jq -r '.common.framework' config.json)" >> $GITHUB_OUTPUT + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "container-type=$(jq -r '.common.job_type' config.json)" >> $GITHUB_OUTPUT + echo "python-version=$(jq -r '.common.python_version' config.json)" >> $GITHUB_OUTPUT + echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT + echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT + echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT + - name: Build image id: build uses: ./.github/actions/build-image with: - framework: ${{ env.FRAMEWORK }} + framework: ${{ steps.config.outputs.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 }} + base-image: lmsysorg/sglang:v${{ steps.config.outputs.framework-version }}-${{ steps.config.outputs.cuda-version }}-amd64 + framework-version: ${{ steps.config.outputs.framework-version }} + container-type: ${{ steps.config.outputs.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 + tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-gpu-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-sagemaker-pr-${{ github.event.pull_request.number }} + dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-sagemaker-test-environment: - needs: [check-changes, build-sglang-sagemaker-image] + needs: [check-changes, build-sglang-sagemaker-image, load-config] if: | always() && !failure() && !cancelled() && (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') @@ -309,10 +368,18 @@ jobs: outputs: aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} + framework-version: ${{ steps.config.outputs.framework-version }} steps: - name: Checkout code uses: actions/checkout@v4 + - name: Parse SageMaker config + id: config + run: | + echo '${{ needs.load-config.outputs.sagemaker-config }}' > config.json + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "prod-image=$(jq -r '.common.prod_image' config.json)" >> $GITHUB_OUTPUT + - name: Set test environment id: set-env run: | @@ -321,7 +388,7 @@ jobs: IMAGE_URI=${{ needs.build-sglang-sagemaker-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 }} + IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ steps.config.outputs.prod-image }} fi echo "Image URI to test: ${IMAGE_URI}" @@ -411,7 +478,7 @@ jobs: uses: actions/checkout@v5 with: repository: sgl-project/sglang - ref: v${{ env.SGLANG_VERSION }} + ref: v${{ needs.set-sagemaker-test-environment.outputs.framework-version }} path: sglang_source - name: Start container diff --git a/.github/workflows/pr-vllm.yml b/.github/workflows/pr-vllm.yml index fbf5aae2ea5d..48f9418afab7 100644 --- a/.github/workflows/pr-vllm.yml +++ b/.github/workflows/pr-vllm.yml @@ -13,27 +13,14 @@ permissions: pull-requests: read env: - # Common - CONTAINER_TYPE: "general" - FRAMEWORK: "vllm" - PYTHON_VERSION: "py312" - CUDA_VERSION: "cu129" - OS_VERSION: "ubuntu22.04" - - # vLLM EC2 - VLLM_VERSION: 0.15.1 - PROD_EC2_IMAGE: vllm:0.15-gpu-py312-ec2 - - # vLLM SageMaker - PROD_SAGEMAKER_IMAGE: vllm:0.15-gpu-py312 - - # vLLM RayServe - VLLM_RAYSERVE_VERSION: 0.10.2 - PROD_RAYSERVE_IMAGE: vllm:0.10-gpu-py312-rayserve - # CI environment configuration FORCE_COLOR: "1" + # Config file paths + EC2_CONFIG: ".github/config/vllm-ec2.yml" + SAGEMAKER_CONFIG: ".github/config/vllm-sagemaker.yml" + RAYSERVE_CONFIG: ".github/config/vllm-rayserve.yml" + jobs: gatekeeper: @@ -51,10 +38,28 @@ jobs: - name: Run permission gate (from base) uses: ./.github/actions/pr-permission-gate - check-changes: + load-config: needs: [gatekeeper] if: success() runs-on: ubuntu-latest + outputs: + ec2-config: ${{ steps.load.outputs.ec2-config }} + sagemaker-config: ${{ steps.load.outputs.sagemaker-config }} + rayserve-config: ${{ steps.load.outputs.rayserve-config }} + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Load configurations + id: load + uses: ./.github/actions/load-config + with: + config-files: ${{ env.EC2_CONFIG }},${{ env.SAGEMAKER_CONFIG }},${{ env.RAYSERVE_CONFIG }} + + check-changes: + needs: [load-config] + if: success() + runs-on: ubuntu-latest concurrency: group: ${{ github.workflow }}-check-changes-${{ github.event.pull_request.number }} cancel-in-progress: true @@ -93,7 +98,7 @@ jobs: # =============== vLLM EC2 jobs ================ # ============================================== build-vllm-ec2-image: - needs: [check-changes] + needs: [check-changes, load-config] if: needs.check-changes.outputs.build-change == 'true' runs-on: - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} @@ -107,22 +112,44 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Parse EC2 config + id: config + run: | + echo '${{ needs.load-config.outputs.ec2-config }}' > config.json + echo "framework=$(jq -r '.common.framework' config.json)" >> $GITHUB_OUTPUT + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "container-type=$(jq -r '.common.job_type' config.json)" >> $GITHUB_OUTPUT + echo "python-version=$(jq -r '.common.python_version' config.json)" >> $GITHUB_OUTPUT + echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT + echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT + echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT + - name: Build image id: build uses: ./.github/actions/build-image with: - framework: ${{ env.FRAMEWORK }} + framework: ${{ steps.config.outputs.framework }} target: vllm-ec2 - base-image: vllm/vllm-openai:v${{ env.VLLM_VERSION }} - framework-version: ${{ env.VLLM_VERSION }} - container-type: ${{ env.CONTAINER_TYPE }} + base-image: vllm/vllm-openai:v${{ steps.config.outputs.framework-version }} + framework-version: ${{ steps.config.outputs.framework-version }} + container-type: ${{ steps.config.outputs.container-type }} aws-account-id: ${{ vars.CI_AWS_ACCOUNT_ID }} aws-region: ${{ vars.AWS_REGION }} - tag-pr: ${{ env.FRAMEWORK }}-${{ env.VLLM_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-ec2-pr-${{ github.event.pull_request.number }} - dockerfile-path: docker/${{ env.FRAMEWORK }}/Dockerfile + tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-gpu-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-ec2-pr-${{ github.event.pull_request.number }} + dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-ec2-test-environment: - needs: [check-changes, build-vllm-ec2-image] + needs: [check-changes, build-vllm-ec2-image, load-config] if: | always() && !failure() && !cancelled() && (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') @@ -133,10 +160,18 @@ jobs: outputs: aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} + framework-version: ${{ steps.config.outputs.framework-version }} steps: - name: Checkout code uses: actions/checkout@v4 + - name: Parse EC2 config + id: config + run: | + echo '${{ needs.load-config.outputs.ec2-config }}' > config.json + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "prod-image=$(jq -r '.common.prod_image' config.json)" >> $GITHUB_OUTPUT + - name: Set test environment id: set-env run: | @@ -145,7 +180,7 @@ jobs: IMAGE_URI=${{ needs.build-vllm-ec2-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_EC2_IMAGE }} + IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ steps.config.outputs.prod-image }} fi echo "Image URI to test: ${IMAGE_URI}" @@ -177,7 +212,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-ec2-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -223,7 +258,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-ec2-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -269,7 +304,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-ec2-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -290,11 +325,12 @@ jobs: run: | docker exec ${CONTAINER_ID} scripts/vllm/vllm_ec2_examples_test.sh + # =================================================== # =============== vLLM RayServe jobs ================ # =================================================== build-vllm-rayserve-image: - needs: [check-changes] + needs: [check-changes, load-config] if: needs.check-changes.outputs.build-change == 'true' runs-on: - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} @@ -308,22 +344,44 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Parse RayServe config + id: config + run: | + echo '${{ needs.load-config.outputs.rayserve-config }}' > config.json + echo "framework=$(jq -r '.common.framework' config.json)" >> $GITHUB_OUTPUT + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "container-type=$(jq -r '.common.job_type' config.json)" >> $GITHUB_OUTPUT + echo "python-version=$(jq -r '.common.python_version' config.json)" >> $GITHUB_OUTPUT + echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT + echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT + echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT + - name: Build image id: build uses: ./.github/actions/build-image with: - framework: ${{ env.FRAMEWORK }} + framework: ${{ steps.config.outputs.framework }} target: vllm-rayserve-ec2 - base-image: vllm/vllm-openai:v${{ env.VLLM_RAYSERVE_VERSION }} - framework-version: ${{ env.VLLM_RAYSERVE_VERSION }} - container-type: ${{ env.CONTAINER_TYPE }} + base-image: vllm/vllm-openai:v${{ steps.config.outputs.framework-version }} + framework-version: ${{ steps.config.outputs.framework-version }} + container-type: ${{ steps.config.outputs.container-type }} aws-account-id: ${{ vars.CI_AWS_ACCOUNT_ID }} aws-region: ${{ vars.AWS_REGION }} - tag-pr: ${{ env.FRAMEWORK }}-${{ env.VLLM_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-rayserve-ec2-pr-${{ github.event.pull_request.number }} - dockerfile-path: docker/${{ env.FRAMEWORK }}/Dockerfile + tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-gpu-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-rayserve-ec2-pr-${{ github.event.pull_request.number }} + dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-rayserve-test-environment: - needs: [check-changes, build-vllm-rayserve-image] + needs: [check-changes, build-vllm-rayserve-image, load-config] if: | always() && !failure() && !cancelled() && (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') @@ -334,10 +392,18 @@ jobs: outputs: aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} + framework-version: ${{ steps.config.outputs.framework-version }} steps: - name: Checkout code uses: actions/checkout@v4 + - name: Parse RayServe config + id: config + run: | + echo '${{ needs.load-config.outputs.rayserve-config }}' > config.json + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "prod-image=$(jq -r '.common.prod_image' config.json)" >> $GITHUB_OUTPUT + - name: Set test environment id: set-env run: | @@ -346,7 +412,7 @@ jobs: IMAGE_URI=${{ needs.build-vllm-rayserve-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_RAYSERVE_IMAGE }} + IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ steps.config.outputs.prod-image }} fi echo "Image URI to test: ${IMAGE_URI}" @@ -378,7 +444,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_RAYSERVE_VERSION }} + ref: v${{ needs.set-rayserve-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -424,7 +490,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_RAYSERVE_VERSION }} + ref: v${{ needs.set-rayserve-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -470,7 +536,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_RAYSERVE_VERSION }} + ref: v${{ needs.set-rayserve-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -495,7 +561,7 @@ jobs: # =============== vLLM SageMaker jobs ================ # ==================================================== build-vllm-sagemaker-image: - needs: [check-changes] + needs: [check-changes, load-config] if: needs.check-changes.outputs.build-change == 'true' runs-on: - codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }} @@ -509,22 +575,44 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Parse SageMaker config + id: config + run: | + echo '${{ needs.load-config.outputs.sagemaker-config }}' > config.json + echo "framework=$(jq -r '.common.framework' config.json)" >> $GITHUB_OUTPUT + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "container-type=$(jq -r '.common.job_type' config.json)" >> $GITHUB_OUTPUT + echo "python-version=$(jq -r '.common.python_version' config.json)" >> $GITHUB_OUTPUT + echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT + echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT + echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT + - name: Build image id: build uses: ./.github/actions/build-image with: - framework: ${{ env.FRAMEWORK }} + framework: ${{ steps.config.outputs.framework }} target: vllm-sagemaker - base-image: vllm/vllm-openai:v${{ env.VLLM_VERSION }} - framework-version: ${{ env.VLLM_VERSION }} - container-type: ${{ env.CONTAINER_TYPE }} + base-image: vllm/vllm-openai:v${{ steps.config.outputs.framework-version }} + framework-version: ${{ steps.config.outputs.framework-version }} + container-type: ${{ steps.config.outputs.container-type }} aws-account-id: ${{ vars.CI_AWS_ACCOUNT_ID }} aws-region: ${{ vars.AWS_REGION }} - tag-pr: ${{ env.FRAMEWORK }}-${{ env.VLLM_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-sagemaker-pr-${{ github.event.pull_request.number }} - dockerfile-path: docker/${{ env.FRAMEWORK }}/Dockerfile + tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-gpu-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-sagemaker-pr-${{ github.event.pull_request.number }} + dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-sagemaker-test-environment: - needs: [check-changes, build-vllm-sagemaker-image] + needs: [check-changes, build-vllm-sagemaker-image, load-config] if: | always() && !failure() && !cancelled() && (needs.check-changes.outputs.build-change == 'true' || needs.check-changes.outputs.test-change == 'true') @@ -535,10 +623,18 @@ jobs: outputs: aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }} image-uri: ${{ steps.set-env.outputs.IMAGE_URI }} + framework-version: ${{ steps.config.outputs.framework-version }} steps: - name: Checkout code uses: actions/checkout@v4 + - name: Parse SageMaker config + id: config + run: | + echo '${{ needs.load-config.outputs.sagemaker-config }}' > config.json + echo "framework-version=$(jq -r '.common.framework_version' config.json)" >> $GITHUB_OUTPUT + echo "prod-image=$(jq -r '.common.prod_image' config.json)" >> $GITHUB_OUTPUT + - name: Set test environment id: set-env run: | @@ -547,7 +643,7 @@ jobs: IMAGE_URI=${{ needs.build-vllm-sagemaker-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 }} + IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ steps.config.outputs.prod-image }} fi echo "Image URI to test: ${IMAGE_URI}" @@ -579,7 +675,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-sagemaker-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -625,7 +721,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-sagemaker-test-environment.outputs.framework-version }} path: vllm_source - name: Start container @@ -671,7 +767,7 @@ jobs: uses: actions/checkout@v5 with: repository: vllm-project/vllm - ref: v${{ env.VLLM_VERSION }} + ref: v${{ needs.set-sagemaker-test-environment.outputs.framework-version }} path: vllm_source - name: Start container diff --git a/.github/workflows/vllm-rayserver-auto-release.yml b/.github/workflows/vllm-rayserver-auto-release.yml index 12e1beb5849f..10473a7dac66 100644 --- a/.github/workflows/vllm-rayserver-auto-release.yml +++ b/.github/workflows/vllm-rayserver-auto-release.yml @@ -3,11 +3,18 @@ name: vLLM_RAYSERVE_AUTO_RELEASE on: # schedule run must be on the default branch # https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule - schedule: - # Runs at 10:00 AM PST/PDT on Monday and Wednesday - # Note: GitHub Actions uses UTC time. PST is UTC-8, PDT is UTC-7 - # Using 17:00 UTC = 10:00 AM PDT (most of the year) / 9:00 AM PST (winter) - - cron: '00 17 * * 1,3' # Monday and Wednesday at 10:00 AM PDT / 9:00 AM PST + # schedule: + # # Runs at 10:00 AM PST/PDT on Monday and Wednesday + # # Note: GitHub Actions uses UTC time. PST is UTC-8, PDT is UTC-7 + # # Using 17:00 UTC = 10:00 AM PDT (most of the year) / 9:00 AM PST (winter) + # - cron: '00 17 * * 1,3' # Monday and Wednesday at 10:00 AM PDT / 9:00 AM PST + + pull_request: + branches: [main] + types: [opened, reopened, synchronize] + paths: + - "**vllm**" + - "!docs/**" permissions: contents: read @@ -18,7 +25,7 @@ env: FORCE_COLOR: "1" # Config file paths - RAYSERVE_CONFIG: ".github/config/vllm-0.10.2-rayserve.yml" + RAYSERVE_CONFIG: ".github/config/vllm-rayserve.yml" jobs: @@ -42,25 +49,16 @@ jobs: if: success() runs-on: ubuntu-latest outputs: - rayserve-config: ${{ steps.load-configs.outputs.rayserve-config }} + rayserve-config: ${{ steps.load.outputs.rayserve-config }} steps: - name: Checkout code uses: actions/checkout@v5 - - name: Load configuration files - id: load-configs - run: | - # Install yq for YAML parsing - sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 - sudo chmod +x /usr/local/bin/yq - - # Load and output configs as JSON for easy parsing in other jobs - # Using multiline output format to handle special characters - { - echo "rayserve-config<> $GITHUB_OUTPUT + - name: Load configurations + id: load + uses: ./.github/actions/load-config + with: + config-files: ${{ env.RAYSERVE_CONFIG }} # =================================================== # =============== vLLM RayServe jobs ================ @@ -90,6 +88,9 @@ jobs: echo "cuda-version=$(jq -r '.common.cuda_version' config.json)" >> $GITHUB_OUTPUT echo "os-version=$(jq -r '.common.os_version' config.json)" >> $GITHUB_OUTPUT echo "device-type=$(jq -r '.common.device_type // "gpu"' config.json)" >> $GITHUB_OUTPUT + echo "arch-type=$(jq -r '.common.arch_type // "x86"' config.json)" >> $GITHUB_OUTPUT + echo "contributor=$(jq -r '.common.contributor // "None"' config.json)" >> $GITHUB_OUTPUT + echo "customer-type=$(jq -r '.common.customer_type // ""' config.json)" >> $GITHUB_OUTPUT - name: Build image id: build @@ -104,6 +105,13 @@ jobs: aws-region: ${{ vars.AWS_REGION }} tag-pr: ${{ steps.config.outputs.framework }}-${{ steps.config.outputs.framework-version }}-${{ steps.config.outputs.device-type }}-${{ steps.config.outputs.python-version }}-${{ steps.config.outputs.cuda-version }}-${{ steps.config.outputs.os-version }}-rayserve-ec2-pr-${{ github.event.pull_request.number }} dockerfile-path: docker/${{ steps.config.outputs.framework }}/Dockerfile + arch-type: ${{ steps.config.outputs.arch-type }} + device-type: ${{ steps.config.outputs.device-type }} + cuda-version: ${{ steps.config.outputs.cuda-version }} + python-version: ${{ steps.config.outputs.python-version }} + os-version: ${{ steps.config.outputs.os-version }} + contributor: ${{ steps.config.outputs.contributor }} + customer-type: ${{ steps.config.outputs.customer-type }} set-rayserve-test-environment: needs: [build-vllm-rayserve-image, load-config]