Release Docker Images Nightly ROCm7.2 (AMD) #83
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: Release Docker Images Nightly ROCm7.2 (AMD) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| job_select: | |
| description: 'Select which release job to run' | |
| required: false | |
| type: choice | |
| default: 'all' | |
| options: | |
| - 'all' | |
| - publish | |
| - publish_dsv4 | |
| schedule: | |
| - cron: '0 12 * * *' | |
| concurrency: | |
| # A PR number if a pull request and otherwise the commit hash. This cancels | |
| # queued and in-progress runs for the same PR (presubmit) or commit | |
| # (postsubmit). The workflow name is prepended to avoid conflicts between | |
| # different workflows. | |
| group: ${{ github.workflow }}-${{ github.event.number || github.sha }} | |
| cancel-in-progress: True | |
| jobs: | |
| publish: | |
| if: github.repository == 'sgl-project/sglang' && (github.event_name != 'workflow_dispatch' || inputs.job_select == 'all' || inputs.job_select == 'publish') | |
| runs-on: amd-docker-scale | |
| environment: 'prod' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| gpu_arch: ['gfx942-rocm720', 'gfx950-rocm720'] | |
| build_type: ['all'] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Required for git describe to find tags | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: "Set Date" | |
| run: | | |
| echo "DATE=$(date +%Y%m%d)" >> $GITHUB_ENV | |
| - name: Get version from latest tag | |
| id: version | |
| run: | | |
| # Use the shared helper so stable/post releases sort above rc tags. | |
| VERSION=$(python3 python/tools/get_version_tag.py --tag-only | sed 's/^v//') | |
| if [ -z "$VERSION" ]; then | |
| echo "::error::Could not determine version from git tags" | |
| exit 1 | |
| fi | |
| # Get short commit hash of current HEAD | |
| COMMIT_HASH=$(git rev-parse --short HEAD) | |
| # Compose pretend version for setuptools_scm: e.g., 0.5.8.post1.dev20260211+g1a2b3c4 | |
| PRETEND_VERSION="${VERSION}.dev${{ env.DATE }}+g${COMMIT_HASH}" | |
| echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
| echo "pretend_version=${PRETEND_VERSION}" >> $GITHUB_OUTPUT | |
| echo "Detected version: ${VERSION}" | |
| echo "Pretend version for pip: ${PRETEND_VERSION}" | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_AMD_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_AMD_TOKEN }} | |
| - name: Build and Push to rocm/sgl-dev | |
| run: | | |
| version=${{ steps.version.outputs.version }} | |
| pretend_version=${{ steps.version.outputs.pretend_version }} | |
| echo "Version: ${version}" | |
| echo "Pretend version: ${pretend_version}" | |
| if [ "${{ matrix.gpu_arch }}" = "gfx942-rocm720" ]; then | |
| rocm_tag="rocm720-mi30x" | |
| elif [ "${{ matrix.gpu_arch }}" = "gfx950-rocm720" ]; then | |
| rocm_tag="rocm720-mi35x" | |
| else | |
| echo "Unsupported gfx arch" | |
| exit 1 | |
| fi | |
| tag=v${version}-${rocm_tag} | |
| echo "IMAGE_TAG=${tag}-${{ env.DATE }}" >> $GITHUB_ENV | |
| # remove --build-arg NIC_BACKEND=ainic for auto detection nic support in mori | |
| # UBUNTU_MIRROR forces apt over HTTPS to dodge port-80 reachability flakes | |
| # to Canonical's archive.ubuntu.com mirror IPs from the amd-docker-scale runner. | |
| docker build . -f docker/rocm.Dockerfile --build-arg SGL_BRANCH=${{ github.ref_name }} --build-arg BUILD_TYPE=${{ matrix.build_type }} --build-arg GPU_ARCH=${{ matrix.gpu_arch }} --build-arg ENABLE_MORI=1 --build-arg SETUPTOOLS_SCM_PRETEND_VERSION=${pretend_version} --build-arg UBUNTU_MIRROR=https://archive.ubuntu.com -t rocm/sgl-dev:${tag}-${{ env.DATE }} --no-cache | |
| docker push rocm/sgl-dev:${tag}-${{ env.DATE }} | |
| # Persist the tag right after rocm/sgl-dev push succeeds so the local | |
| # registry mirror can run even if a later step in this job (lmsys push) | |
| # fails. By default this step only runs when the previous step succeeded, | |
| # so the artifact only exists when an image actually landed on Docker Hub. | |
| - name: Save published image tag | |
| run: | | |
| mkdir -p image-tag | |
| echo "${{ env.IMAGE_TAG }}" > "image-tag/${{ matrix.gpu_arch }}.txt" | |
| - name: Upload image tag artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: image-tag-${{ matrix.gpu_arch }} | |
| path: image-tag/${{ matrix.gpu_arch }}.txt | |
| retention-days: 1 | |
| - name: Login to Docker Hub (lmsys) | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Push to lmsysorg/sglang-rocm | |
| run: | | |
| docker tag rocm/sgl-dev:${{ env.IMAGE_TAG }} lmsysorg/sglang-rocm:${{ env.IMAGE_TAG }} | |
| docker push lmsysorg/sglang-rocm:${{ env.IMAGE_TAG }} | |
| # Mirror the freshly published rocm/sgl-dev image to the in-network Docker | |
| # registry so AMD CI runners can pull without hitting Docker Hub rate limits. | |
| # The tag is read verbatim from the publish job's artifact so this job uses | |
| # exactly the same tag that publish pushed (only the registry prefix differs). | |
| # `!cancelled()` lets us still mirror successful matrix legs when other legs | |
| # of publish failed; legs without an artifact will fail at download and be | |
| # the only ones marked red. | |
| push_local_registry: | |
| if: ${{ !cancelled() && github.repository == 'sgl-project/sglang' && (github.event_name != 'workflow_dispatch' || inputs.job_select == 'all' || inputs.job_select == 'publish') }} | |
| runs-on: linux-mi300-1gpu-sglang | |
| environment: 'prod' | |
| needs: publish | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| gpu_arch: ['gfx942-rocm720', 'gfx950-rocm720'] | |
| steps: | |
| - name: Download image tag artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: image-tag-${{ matrix.gpu_arch }} | |
| - name: Read image tag | |
| run: | | |
| image_tag=$(tr -d '[:space:]' < "${{ matrix.gpu_arch }}.txt") | |
| if [ -z "${image_tag}" ]; then | |
| echo "::error::Image tag artifact is empty" | |
| exit 1 | |
| fi | |
| echo "IMAGE_TAG=${image_tag}" >> $GITHUB_ENV | |
| echo "Resolved IMAGE_TAG=${image_tag}" | |
| - name: Login to Docker Hub (AMD) | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_AMD_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_AMD_TOKEN }} | |
| - name: Mirror rocm/sgl-dev to local registry | |
| run: | | |
| src="rocm/sgl-dev:${{ env.IMAGE_TAG }}" | |
| dst="10.245.143.50:5000/rocm/sgl-dev:${{ env.IMAGE_TAG }}" | |
| docker pull "${src}" | |
| docker tag "${src}" "${dst}" | |
| docker push "${dst}" | |
| publish_dsv4: | |
| if: github.repository == 'sgl-project/sglang' && (github.event_name != 'workflow_dispatch' || inputs.job_select == 'all' || inputs.job_select == 'publish_dsv4') | |
| runs-on: amd-docker-scale | |
| environment: 'prod' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| gpu_arch: ['gfx942-rocm720', 'gfx950-rocm720'] | |
| build_type: ['all'] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: amd/deepseek_v4 | |
| fetch-depth: 0 # Required for git describe to find tags | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: "Set Date" | |
| run: | | |
| echo "DATE=$(date +%Y%m%d)" >> $GITHUB_ENV | |
| - name: Get version from latest tag | |
| id: version | |
| run: | | |
| # Use the shared helper so stable/post releases sort above rc tags. | |
| VERSION=$(python3 python/tools/get_version_tag.py --tag-only | sed 's/^v//') | |
| if [ -z "$VERSION" ]; then | |
| echo "::error::Could not determine version from git tags" | |
| exit 1 | |
| fi | |
| # Get short commit hash of current HEAD | |
| COMMIT_SHA=$(git rev-parse HEAD) | |
| COMMIT_HASH=${COMMIT_SHA:0:7} | |
| # Compose pretend version for setuptools_scm: e.g., 0.5.8.post1.dev20260211+g1a2b3c4 | |
| PRETEND_VERSION="${VERSION}.dev${{ env.DATE }}+g${COMMIT_HASH}" | |
| echo "commit_sha=${COMMIT_SHA}" >> "$GITHUB_OUTPUT" | |
| echo "commit_hash=${COMMIT_HASH}" >> "$GITHUB_OUTPUT" | |
| echo "version=${VERSION}" >> "$GITHUB_OUTPUT" | |
| echo "pretend_version=${PRETEND_VERSION}" >> "$GITHUB_OUTPUT" | |
| echo "DeepSeek V4 commit: ${COMMIT_SHA}" | |
| echo "Detected version: ${VERSION}" | |
| echo "Pretend version for pip: ${PRETEND_VERSION}" | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_AMD_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_AMD_TOKEN }} | |
| - name: Build and Push DSv4 image to rocm/sgl-dev | |
| run: | | |
| version=${{ steps.version.outputs.version }} | |
| pretend_version=${{ steps.version.outputs.pretend_version }} | |
| echo "Version: ${version}" | |
| echo "Pretend version: ${pretend_version}" | |
| if [ "${{ matrix.gpu_arch }}" = "gfx942-rocm720" ]; then | |
| rocm_tag="rocm720-mi30x" | |
| elif [ "${{ matrix.gpu_arch }}" = "gfx950-rocm720" ]; then | |
| rocm_tag="rocm720-mi35x" | |
| else | |
| echo "Unsupported gfx arch" | |
| exit 1 | |
| fi | |
| image_tag="${rocm_tag}-${{ steps.version.outputs.commit_hash }}-${{ env.DATE }}-DSv4" | |
| echo "IMAGE_TAG=${image_tag}" >> "$GITHUB_ENV" | |
| echo "Building rocm/sgl-dev:${image_tag} from amd/deepseek_v4 @ ${{ steps.version.outputs.commit_sha }}" | |
| # UBUNTU_MIRROR forces apt over HTTPS to dodge port-80 reachability flakes | |
| # to Canonical's archive.ubuntu.com mirror IPs from the amd-docker-scale runner. | |
| docker build . -f docker/rocm.Dockerfile \ | |
| --build-arg SGL_BRANCH=${{ steps.version.outputs.commit_sha }} \ | |
| --build-arg BUILD_TYPE=${{ matrix.build_type }} \ | |
| --build-arg GPU_ARCH=${{ matrix.gpu_arch }} \ | |
| --build-arg ENABLE_MORI=1 \ | |
| --build-arg SETUPTOOLS_SCM_PRETEND_VERSION=${pretend_version} \ | |
| --build-arg UBUNTU_MIRROR=https://archive.ubuntu.com \ | |
| -t rocm/sgl-dev:${image_tag} \ | |
| --no-cache | |
| docker push rocm/sgl-dev:${image_tag} |