| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # Upstream dsv4.1 branch image (optional TP4 image without RoCEnante, docs/tp4-optional-setups.md).
- # Same pinned base image as Dockerfile, but the SGLang python tree is replaced by the upstream
- # dsv4.1 branch at f80c91a4b (2026-09-16), fetched at build at the commit and sha256 in
- # runtime/sources.manifest, together with the kernel packages that branch pins (sglang-kernel
- # 0.4.7, sgl-deep-gemm 0.2.0; aarch64 wheels from PyPI). The SM120 page-split fix from
- # runtime/flash_mla_sm120.py is re-applied on top of the branch's kernel file
- # (runtime/flash_mla_sm120.canary.py). Everything else is identical to Dockerfile.
- #
- # docker build -f Dockerfile.canary -t dsv41-4x-spark:canary . # on every node
- # IMAGE=dsv41-4x-spark:canary in .env.tp4, plus SGLANG_DSPARK_FOLDED_SAMPLING=2
- FROM lmsysorg/sglang:dev-dsv41@sha256:3dbc313030a6ef2c5d7de8ecf48e9aece722694a82182cb618cc82b588816349 AS fetch
- COPY runtime/sources.manifest runtime/sglang-rocenante.patch runtime/flash_mla_sm120.canary.py /src/runtime/
- COPY scripts/fetch_runtime.sh scripts/b12x_next-compact-n64-m64.patch scripts/roce_ring-sparkring-f16b5f4.patch /src/scripts/
- RUN bash /src/scripts/fetch_runtime.sh /fetched sglang-canary
- FROM lmsysorg/sglang:dev-dsv41@sha256:3dbc313030a6ef2c5d7de8ecf48e9aece722694a82182cb618cc82b588816349
- # The two kernel wheels come from PyPI. A network without pypi.org points this at a
- # mirror: `docker build --build-arg PIP_INDEX=https://<mirror>/simple`, or BUILD_ARGS
- # in .env.tp4 when `./start.sh build` builds the image for you.
- ARG PIP_INDEX=https://pypi.org/simple
- RUN pip install --no-deps --no-cache-dir -i "$PIP_INDEX" "sglang-kernel==0.4.7" "sgl-deep-gemm==0.2.0"
- RUN rm -rf /sgl-workspace/sglang/python
- COPY --from=fetch /fetched/sglang-canary/python /sgl-workspace/sglang/python
- RUN python3 -c "import sglang, sglang.srt.models.deepseek_v4, sglang.srt.layers.attention.deepseek_v4_backend, sglang.srt.models.deepseek_v4_dspark; print('import ok')"
- WORKDIR /opt/dsv41
- COPY adapter /opt/dsv41/adapter
- RUN g++ -O2 -Wall -Wextra -Werror -std=c++17 -shared -fPIC -pthread \
- -DDSV41_ROW_STORE_DRM adapter/row_store.cpp -o adapter/librow_store.so
- COPY runtime/flash_mla_sm120.canary.py /sgl-workspace/sglang/python/sglang/kernels/ops/attention/flash_mla_sm120.py
- COPY boot.py /opt/dsv41/boot.py
- COPY scripts /opt/dsv41/scripts
- COPY tests /opt/dsv41/tests
- COPY benchmarks /opt/dsv41/benchmarks
- RUN PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_thinking_alias.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_max_new_tokens.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_loop_abort.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_fast_load_pacing.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_wo_a_w8.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_draft_tau.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_folded_fence.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_draft_head_fp8.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_draft_head_fp8_tp4.py \
- && BV_TEST_N=60000 PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_block_verify.py \
- && PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_autotune_keep.py \
- && CUDA_VISIBLE_DEVICES= PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_replicated_split.py \
- && CUDA_VISIBLE_DEVICES= VC_TEST_N=60000 PYTHONPATH=/opt/dsv41/adapter python3 /opt/dsv41/tests/test_verify_cap.py \
- && cd /opt/dsv41/tests && CUDA_VISIBLE_DEVICES= PYTHONPATH=/opt/dsv41/adapter python3 test_indexer_chunked_v3.py /sgl-workspace/sglang/python/sglang/srt/layers/attention/deepseek_v4_backend.py
- ENV PYTHONPATH=/opt/dsv41/adapter \
- MODEL_PATH=/models/DeepSeek-V4.1-Flash \
- STATE_PATH=/state OFFLOAD_MODE=nvme DSV41_CACHE_GIB=16
- EXPOSE 8888
- HEALTHCHECK --interval=30s --timeout=30s --start-period=30m --retries=3 \
- CMD ["python3", "-S", "/opt/dsv41/boot.py", "health"]
- ENTRYPOINT ["python3", "-u", "/opt/dsv41/boot.py"]
- CMD ["run"]
|