From 7185de5eef3d9448707676409dba71991474a4e3 Mon Sep 17 00:00:00 2001 From: project6-dev Date: Mon, 10 Aug 2026 10:25:31 +0000 Subject: [PATCH] build(CRITICAL): complete .so build + deploy pipeline for competition submission MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dockerfile was missing ALL .so compilation steps: Step 1: build.sh → ex_factor_0.so (MoE topk), ex_factor_2.so (MoE GEMM), libex_registry.so Step 2: precompile_moe_topk.py → moe_topk_softmax_v3.so (CUB BlockReduce) Step 3: precompile_moe_kernels.py → moe_ops_v055.so (vllm v0.5.5 MoE kernels) Step 4: patch_ops.sh → deploy all Python + .so + serving layer Step 5: precompile_gdn.py → flash_qla GDN .so patch_ops.sh was missing .so deployment: Added section 8: Deploy ex_engine package + .so to Python site-packages Added section 9: Deploy precompiled MoE .so to site-packages Both system path (/usr/local/corex/lib/python3/dist-packages/) and vllm path (model_executor/models/ex_engine/) covered .so inventory for competition: - ex_factor_0.so: MoE topk_softmax CUDA kernel (corex clang, ivcore10) - ex_factor_2.so: MoE fused GEMM CUDA kernel - libex_registry.so: dlopen registry - moe_topk_softmax_v3.so: JIT compiled via torch.utils.cpp_extension - moe_ops_v055.so: vllm v0.5.5 compatible MoE kernels - flash_qla_sm70 GDN .so: GatedDeltaNet fused kernel --- Dockerfile | 20 ++++++++++++ qwen3_6_scripts/patch_ops.sh | 63 ++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/Dockerfile b/Dockerfile index 70ec09f5..f0d73a7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,30 @@ FROM git.modelhub.org.cn:9443/enginex-iluvatar/bi100-3.2.3-x86-ubuntu20.04-py3.1 RUN mkdir -p /workspace WORKDIR /workspace/ +# Copy all sources COPY ./qwen3_6_scripts /workspace/qwen3_6_scripts COPY ./computility-run.yaml /workspace/computility-run.yaml COPY ./ex_engine /workspace/ex_engine +# Step 1: Build EX Engine .so libraries +RUN chmod +x /workspace/ex_engine/build.sh && \ + bash /workspace/ex_engine/build.sh --corex 2>&1 | tee /workspace/ex_build.log ; \ + echo "[Dockerfile] ex_engine build exit code: $?" + +# Step 2: Precompile MoE CUDA kernels +RUN python3 /workspace/ex_engine/precompile_moe_topk.py 2>&1 | tee -a /workspace/ex_build.log ; \ + echo "[Dockerfile] moe_topk precompile exit code: $?" + +# Step 3: Precompile vllm v0.5.5 MoE kernels +RUN python3 /workspace/ex_engine/precompile_moe_kernels.py 2>&1 | tee -a /workspace/ex_build.log ; \ + echo "[Dockerfile] moe_v055 precompile exit code: $?" + +# Step 4: Deploy patches (serving + engine fixes) RUN chmod +x /workspace/qwen3_6_scripts/patch_ops.sh && \ bash /workspace/qwen3_6_scripts/patch_ops.sh 2>&1 | tee /workspace/patch_ops.log ; \ echo "[Dockerfile] patch_ops exit code: $?" + +# Step 5: Precompile GDN kernel (needs vllm in path, so after patch_ops) +RUN python3 /workspace/qwen3_6_scripts/precompile_gdn.py \ + /workspace/qwen3_6_scripts/flash_qla_sm70 2>&1 | tee -a /workspace/ex_build.log ; \ + echo "[Dockerfile] gdn precompile exit code: $?" diff --git a/qwen3_6_scripts/patch_ops.sh b/qwen3_6_scripts/patch_ops.sh index bc544ae7..291b0b90 100755 --- a/qwen3_6_scripts/patch_ops.sh +++ b/qwen3_6_scripts/patch_ops.sh @@ -167,3 +167,66 @@ if [ -d "$_FLASH_SRC" ]; then fi echo "[patch_ops] DONE" + +# ---- 8. Deploy ex_engine package + compiled .so to Python path ---- +_SITE="/usr/local/corex/lib/python3/dist-packages" +if [ -d "$_SITE" ]; then + # Deploy ex_engine as importable package + _EX_DST="$_SITE/ex_engine" + mkdir -p "$_EX_DST/python" "$_EX_DST/build" "$_EX_DST/csrc" + + # Python files + cp /workspace/ex_engine/python/*.py "$_EX_DST/python/" 2>/dev/null || true + touch "$_EX_DST/__init__.py" + touch "$_EX_DST/python/__init__.py" + + # Compiled .so files from build.sh + if [ -d "/workspace/ex_engine/build" ]; then + cp /workspace/ex_engine/build/*.so "$_EX_DST/build/" 2>/dev/null || true + # Also copy to package root for easy loading + cp /workspace/ex_engine/build/*.so "$_EX_DST/" 2>/dev/null || true + echo "[patch_ops] ex_engine .so files deployed: $(ls /workspace/ex_engine/build/*.so 2>/dev/null | wc -l) files" + fi + + # C++ sources for JIT compilation at runtime + cp /workspace/ex_engine/csrc/ix_full_bridge.cpp "$_EX_DST/csrc/" 2>/dev/null || true + cp /workspace/ex_engine/csrc/moe_topk_softmax_v3.cu "$_EX_DST/csrc/" 2>/dev/null || true + if [ -d "/workspace/ex_engine/csrc/moe_v055" ]; then + cp -r /workspace/ex_engine/csrc/moe_v055 "$_EX_DST/csrc/" 2>/dev/null || true + fi + + # Also deploy to vllm models dir for import compatibility + _EX_VLLM="$VLLM/model_executor/models/ex_engine" + mkdir -p "$_EX_VLLM/python" "$_EX_VLLM/csrc" + cp /workspace/ex_engine/python/*.py "$_EX_VLLM/python/" 2>/dev/null || true + touch "$_EX_VLLM/__init__.py" + touch "$_EX_VLLM/python/__init__.py" + cp /workspace/ex_engine/csrc/ix_full_bridge.cpp "$_EX_VLLM/csrc/" 2>/dev/null || true + if [ -d "/workspace/ex_engine/build" ]; then + cp /workspace/ex_engine/build/*.so "$_EX_VLLM/" 2>/dev/null || true + fi + + echo "[patch_ops] ex_engine deployed to $_SITE and $VLLM" +fi + +# ---- 9. Deploy precompiled MoE .so ---- +# moe_topk_softmax_v3.so (from precompile_moe_topk.py) +for _SO in /workspace/ex_engine/moe_topk_softmax_v3*.so /tmp/torch_extensions/*/moe_topk_softmax_v3*.so; do + if [ -f "$_SO" ]; then + cp "$_SO" "$_SITE/" 2>/dev/null || true + echo "[patch_ops] MoE topk .so deployed: $(basename $_SO)" + break + fi +done + +# moe_v055 kernels .so (from precompile_moe_kernels.py) +for _SO in /workspace/ex_engine/moe_ops_v055*.so /tmp/torch_extensions/*/moe_ops_v055*.so; do + if [ -f "$_SO" ]; then + cp "$_SO" "$_SITE/" 2>/dev/null || true + echo "[patch_ops] MoE v055 .so deployed: $(basename $_SO)" + break + fi +done + +echo "[patch_ops] FINAL: all .so and Python packages deployed" +ls -la "$_EX_DST/build/"*.so 2>/dev/null || echo "[patch_ops] WARNING: no .so in ex_engine/build/"