Skip to content

feat(weight-sync): add engine-group wave scheduling #4341

feat(weight-sync): add engine-group wave scheduling

feat(weight-sync): add engine-group wave scheduling #4341

Workflow file for this run

name: conda CI
on:
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# Read the sglang base image tag from docker/Dockerfile so we only have to bump
# the Dockerfile when sglang versions change. We use lmsysorg/sglang (upstream
# sglang's CUDA image) rather than slimerl/sglang so the conda build starts
# from a clean sglang-only base instead of one with slime already installed.
resolve-image:
if: contains(github.event.pull_request.title, '[release]')
runs-on: ubuntu-latest
outputs:
image: ${{ steps.read.outputs.image }}
steps:
- uses: actions/checkout@v6
- id: read
shell: bash
run: |
tag=$(grep -oP '^ARG SGLANG_IMAGE_TAG=\K\S+' docker/Dockerfile)
if [ -z "$tag" ]; then
echo "Failed to parse SGLANG_IMAGE_TAG from docker/Dockerfile" >&2
exit 1
fi
echo "image=slimerl/sglang:${tag}" >> "$GITHUB_OUTPUT"
build-conda:
needs: resolve-image
if: contains(github.event.pull_request.title, '[release]')
runs-on: self-hosted
container:
image: ${{ needs.resolve-image.outputs.image }}
options: --privileged --cap-add SYS_NICE --security-opt seccomp=unconfined --gpus all --ipc=host --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 --memory=0 --memory-swap=0 -v /mnt/nvme0n1/models:/root/models -v /mnt/nvme0n1/datasets:/root/datasets
defaults:
run:
working-directory: ${{ github.workspace }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Construct Conda
run: |
echo "📦 Installing slime..."
cd $GITHUB_WORKSPACE
echo "Current directory: $(pwd)"
mkdir -p /root/
BASE_DIR=/root bash build_conda.sh
shell: bash
- name: Download model and dataset
run: |
echo "🔗 Downloading up model and dataset..."
# Create cache directories if they don't exist
mkdir -p /root/models /root/datasets
echo "Downloading Qwen3-30B-A3B..."
hf download Qwen/Qwen3-30B-A3B --local-dir /root/models/Qwen3-30B-A3B
hf download Qwen/Qwen3-30B-A3B-FP8 --local-dir /root/models/Qwen3-30B-A3B-FP8
hf download --repo-type dataset zhuzilin/dapo-math-17k --local-dir /root/datasets/dapo-math-17k
hf download --repo-type dataset zhuzilin/aime-2024 --local-dir /root/datasets/aime-2024
shell: bash
- name: Convert checkpoint
run: |
echo "🔄 Converting model checkpoint..."
cd $GITHUB_WORKSPACE
echo "Current directory: $(pwd)"
source ~/.bashrc
micromamba activate slime
export CUDA_HOME="$CONDA_PREFIX"
source scripts/models/qwen3-30B-A3B.sh
PYTHONPATH=/root/Megatron-LM torchrun --nproc-per-node 8 tools/convert_hf_to_torch_dist.py \
${MODEL_ARGS[@]} \
--hf-checkpoint /root/models/Qwen3-30B-A3B \
--save /root/Qwen3-30B-A3B_torch_dist
shell: bash
- name: Run tests
run: |
echo "🧪 Running tests..."
cd $GITHUB_WORKSPACE
echo "Current directory: $(pwd)"
source ~/.bashrc
micromamba activate slime
export CUDA_HOME="$CONDA_PREFIX"
SLIME_TEST_ENABLE_EVAL=0 SLIME_TEST_USE_DEEPEP=0 SLIME_TEST_USE_FP8_ROLLOUT=0 python tests/test_qwen3_30B_A3B.py
shell: bash
- name: Cleanup
if: always()
run: |
echo "🧹 Cleaning up..."
pkill -9 ray || true
ray stop --force || true
pkill -9 python || true
shell: bash