|
@@ -0,0 +1,102 @@
|
|
|
|
|
+# DeepSeek-V4-Flash-Vision-Exp on 2× GB10 — aiden image, flag route.
|
|
|
|
|
+#
|
|
|
|
|
+# aidendle94/sparkrun-vllm-ds4-gb10:production-3.72-vision, TP2 over ds4.
|
|
|
|
|
+# His production 2x DSpark-6 profile translated to our launcher shape: his
|
|
|
|
|
+# own serve line (moe/linear b12x, B12X_MLA_SPARSE attention, fp8 KV, block
|
|
|
|
|
+# 256, DSpark-6 greedy, graphs FULL_AND_PIECEWISE) as plain flags — the
|
|
|
|
|
+# image's BAKED-IN entrypoint is his env-script (which doubles our tail args
|
|
|
|
|
+# if left in place), so the recipe sets entrypoint = ["vllm","serve"] and one
|
|
|
|
|
+# mods line, which makes the launcher wrap everything in `--entrypoint sh -c`
|
|
|
|
|
+# and exec our tail directly with the image's system vllm — which IS his
|
|
|
|
|
+# multimodal wheel (the dist-packages vllm here carries the DeepseekV4 vision
|
|
|
|
|
+# wrap; the earlier "not multimodal" 400s came from OUR overlay image, not
|
|
|
|
|
+# this one).
|
|
|
|
|
+#
|
|
|
|
|
+# Weights from the SHARED NAS HF cache (all 4 nodes mount nas.lan:/sna as
|
|
|
|
|
+# /mnt/nas; the repo's refs/main resolves offline). 2x reference: his 4x
|
|
|
|
|
+# DCP1 DSpark profile is 73.8-75.2 tok/s; 2x should sit below that.
|
|
|
|
|
+# Boot markers: "Model loading took ~82 GiB" → "GPU KV cache size" →
|
|
|
|
|
+# "Application startup complete". Smoke: 47*83 → 3901 + image_url ask.
|
|
|
|
|
+#
|
|
|
|
|
+# PARKED 2026-09-03 (2x aiden image): after clean weight load (82 GiB), the
|
|
|
|
|
+# warmup dies in the B12X sparse attention O-proj —
|
|
|
|
|
+# DeepGEMM fp8_einsum "layout.hpp:39: t.dim() == N" (shared by the
|
|
|
|
|
+# FlashMLA/FlashInfer sparse paths). Reproduced on his verified TP2 values
|
|
|
|
|
+# (GMU 0.85, KV pin off) and with the KV pin at 12 GiB. The 4x production
|
|
|
|
|
+# shape (DCP2) is the lane that carries the profile; 2x vision stays on our
|
|
|
|
|
+# proven dsv4-flash-vision overlay image (88/100) until the TP2 o_proj path
|
|
|
|
|
+# is sorted.
|
|
|
|
|
+
|
|
|
|
|
+engine = "vllm"
|
|
|
|
|
+name = "DeepSeek V4 Flash Vision-Exp (aiden image, 2x Spark, DSpark-6)"
|
|
|
|
|
+docker_image = "aidendle94/sparkrun-vllm-ds4-gb10:production-3.72-vision"
|
|
|
|
|
+model = "deepseek-ai/DeepSeek-V4-Flash-Vision-Exp"
|
|
|
|
|
+required_nodes = 2
|
|
|
|
|
+tensor_parallel_size = 2
|
|
|
|
|
+pipeline_parallel_size = 1
|
|
|
|
|
+distributed_backend = "mp"
|
|
|
|
|
+shm_size = "32gb"
|
|
|
|
|
+# required for the launcher's `--entrypoint sh -c` override path (mods),
|
|
|
|
|
+# which also replaces the image's baked env-script entrypoint.
|
|
|
|
|
+entrypoint = ["vllm", "serve"]
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+args = [
|
|
|
|
|
+ "--served-model-name", "deepseek-v4-vision",
|
|
|
|
|
+ "--trust-remote-code",
|
|
|
|
|
+ "--attention-backend", "B12X_MLA_SPARSE",
|
|
|
|
|
+ "--moe-backend", "b12x",
|
|
|
|
|
+ "--linear-backend", "b12x",
|
|
|
|
|
+ "--kv-cache-dtype", "fp8",
|
|
|
|
|
+ "--block-size", "256",
|
|
|
|
|
+ # his verified 2x (TP2) values: 0.75 fails KV alloc, 0.82 leaves one rank
|
|
|
|
|
+ # short, 0.85 works; KV pin left OFF (a pin caps the pool ~26 GB/rank and
|
|
|
|
|
+ # hides the layout headroom)
|
|
|
|
|
+ "--gpu-memory-utilization", "0.85",
|
|
|
|
|
+ "--max-model-len", "393216",
|
|
|
|
|
+ "--max-num-seqs", "8",
|
|
|
|
|
+ "--max-num-batched-tokens", "8192",
|
|
|
|
|
+ "--max-cudagraph-capture-size", "56",
|
|
|
|
|
+ "--compilation-config", """
|
|
|
|
|
+'{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}'""",
|
|
|
|
|
+ "--async-scheduling",
|
|
|
|
|
+ "--no-scheduler-reserve-full-isl",
|
|
|
|
|
+ "--enable-chunked-prefill",
|
|
|
|
|
+ "--enable-prefix-caching",
|
|
|
|
|
+ "--tokenizer-mode", "deepseek_v4",
|
|
|
|
|
+ "--tool-call-parser", "deepseek_v4",
|
|
|
|
|
+ "--enable-auto-tool-choice",
|
|
|
|
|
+ "--reasoning-parser", "deepseek_v4",
|
|
|
|
|
+ "--reasoning-config", """
|
|
|
|
|
+'{"reasoning_parser":"deepseek_v4","reasoning_start_str":"","reasoning_end_str":""}'""",
|
|
|
|
|
+ "--default-chat-template-kwargs", """
|
|
|
|
|
+'{"thinking":true}'""",
|
|
|
|
|
+ "--speculative-config", """
|
|
|
|
|
+'{"method":"dspark","num_speculative_tokens":6,"draft_sample_method":"greedy"}'""",
|
|
|
|
|
+ "--disable-chunked-mm-input",
|
|
|
|
|
+ "--limit-mm-per-prompt", """
|
|
|
|
|
+'{"image":4}'""",
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+[mods]
|
|
|
|
|
+commands = [
|
|
|
|
|
+ # (mods exist so the launcher takes the --entrypoint sh override path;
|
|
|
|
|
+ # the pre-serve work — page-cache flush — is done host-side by before_serve)
|
|
|
|
|
+ "true",
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+[env]
|
|
|
|
|
+CUTE_DSL_ARCH = "sm_121a"
|
|
|
|
|
+VLLM_ENABLE_DSPARK = "1"
|
|
|
|
|
+VLLM_ENABLE_MTP = "0"
|
|
|
|
|
+NUM_SPECULATIVE_TOKENS = "6"
|
|
|
|
|
+DSPARK_DRAFT_SAMPLE_METHOD = "greedy"
|
|
|
|
|
+DSPARK_SPS_CURVE = "auto"
|
|
|
|
|
+VLLM_CUDAGRAPH_MODE = "FULL_AND_PIECEWISE"
|
|
|
|
|
+VISION_MHC = "1"
|
|
|
|
|
+MAX_CUDAGRAPH_CAPTURE_SIZE = "56"
|
|
|
|
|
+# (DCP prefill gather envs are DCP2-only; DCP1 here needs none)
|
|
|
|
|
+HF_HUB_OFFLINE = "1"
|
|
|
|
|
+TRANSFORMERS_OFFLINE = "1"
|
|
|
|
|
+VLLM_NO_USAGE_STATS = "1"
|
|
|
|
|
+
|