Have been running eugr’s VLLM container build for a while, so this version of DS4 caught my attention when looking among the several repos floating around. Attempting to run this and seeing a looooong spike on loading safetensors for over 20 minutes without any movement.
I might have to switch to another repo to see if it’s a repeat issue, but wondering if anyone else has experienced similar here.
Both Sparks have been rebooted and have resources.
total used free shared buff/cache available
Mem: 123Gi 6.6Gi 118Gi 2.9Mi 216Mi 117Gi
Swap: 8.0Gi 459Mi 7.6Gi
The cluster startup indicates the correct IB links are being used:
VLLM_SPARK_EXTRA_DOCKER_ARGS="-v /opt/data/models/:/models:ro" /opt/data/tools/spark-vllm-docker/run-recipe.sh recipe.yaml -e HF_HUB_OFFLINE=1 -e TRANSFORMERS_OFFLINE=1
=== Launching ===
Container: vllm-node
Cluster: 2 nodes
Loading configuration from .env file...
Loaded .env variables: DOTENV_CLUSTER_NODES DOTENV_COPY_HOSTS DOTENV_ETH_IF DOTENV_IB_IF DOTENV_LOCAL_IP
Using launch script: /tmp/tmp66_j5je_.sh
Head Node: 192.168.61.11
Worker Nodes: 192.168.61.12
Container Name: vllm_node
Image Name: vllm-node
Action: exec
Checking SSH connectivity to worker nodes...
SSH to 192.168.61.12: OK
Starting Head Node on 192.168.61.11...
024e18a60f538a12a7b2edb10d1c2a7a704d17f4632845e9ab2d979e50608a2a
Starting Worker Node on 192.168.61.12...
f45cec6dd58092e313cf1782c4ee50893caf1fd1faf8de08638d7b9331a8e359
Copying launch script to head node (192.168.61.11)...
Successfully copied 3.07kB to vllm_node:/workspace/exec-script.sh
Copying launch script to worker 192.168.61.12...
vllm_node_script_p37HUn.sh 100% 1090 560.5KB/s 00:00
Executing command: /workspace/exec-script.sh
Launching worker (rank 1) on 192.168.61.12...
Executing command on head node (rank 0): /workspace/exec-script.sh
Logs so far:
(APIServer pid=65) WARNING 07-15 05:17:11 [envs.py:2094] Unknown vLLM environment variable detected: VLLM_BASE_DIR
(APIServer pid=65) INFO 07-15 05:17:11 [config.py:744] Detected quantization_config.scale_fmt=ue8m0; enabling UE8M0 for DeepGEMM.
(APIServer pid=65) INFO 07-15 05:17:11 [model.py:619] Resolved architecture: DeepseekV4ForCausalLM
(APIServer pid=65) INFO 07-15 05:17:11 [model.py:1770] Using max model len 262144
(APIServer pid=65) INFO 07-15 05:17:13 [cache.py:285] Using fp8 data type to store kv cache. It reduces the GPU memory footprint and boosts the performance. Meanwhile, it may cause accuracy drop without a proper scaling factor
(APIServer pid=65) INFO 07-15 05:17:13 [arg_utils.py:2042] Inferred data_parallel_rank 0 from node_rank 0
(APIServer pid=65) INFO 07-15 05:17:14 [model.py:619] Resolved architecture: DeepSeekV4MTPModel
(APIServer pid=65) INFO 07-15 05:17:14 [model.py:1770] Using max model len 1048576
(APIServer pid=65) INFO 07-15 05:17:14 [speculative.py:1067] Overriding draft model max model len from 1048576 to 262144
(APIServer pid=65) INFO 07-15 05:17:14 [scheduler.py:252] Chunked prefill is enabled with max_num_batched_tokens=8192.
(APIServer pid=65) INFO 07-15 05:17:14 [vllm.py:1090] Asynchronous scheduling is enabled.
(APIServer pid=65) INFO 07-15 05:17:14 [kernel.py:292] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native'])
(APIServer pid=65) WARNING 07-15 05:17:14 [vllm.py:1697] max_num_scheduled_tokens is set to 8176 based on the speculative decoding settings. This may lead to suboptimal performance. Consider increasing max_num_batched_tokens to accommodate the additional draft token slots, or decrease num_speculative_tokens or max_num_seqs.
(APIServer pid=65) WARNING 07-15 05:17:14 [vllm.py:2198] Model Runner V2 does not yet support the thinking_token_budget request parameter. Set VLLM_USE_V2_MODEL_RUNNER=0 if this is required.
(APIServer pid=65) INFO 07-15 05:17:15 [compilation.py:312] Enabled custom fusions: norm_quant, act_quant
(EngineCore pid=195) INFO 07-15 05:17:22 [core.py:114] Initializing a V1 LLM engine (v0.23.1rc1.dev1104+ga0eebc3c1.d20260714) with config: model='/models/deepseek-ai/DeepSeek-V4-Flash-DSpark', speculative_config=SpeculativeConfig(method='dspark', model='/models/deepseek-ai/DeepSeek-V4-Flash-DSpark', num_spec_tokens=5), tokenizer='/models/deepseek-ai/DeepSeek-V4-Flash-DSpark', skip_tokenizer_init=False, tokenizer_mode=deepseek_v4, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=262144, download_dir=None, load_format=safetensors, tensor_parallel_size=2, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=True, quantization=deepseek_v4_fp8, quantization_config=None, enforce_eager=False, enable_return_routed_experts=False, kv_cache_dtype=fp8, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='deepseek_v4', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, kv_cache_metrics=False, kv_cache_metrics_sample=0.01, cudagraph_metrics=False, enable_layerwise_nvtx_tracing=False, enable_mfu_metrics=False, enable_mm_processor_stats=False, enable_logging_iteration_details=False, jit_monitor_mode='warn', jit_monitor_verbose=False), seed=0, served_model_name=/models/deepseek-ai/DeepSeek-V4-Flash-DSpark, enable_prefix_caching=True, enable_chunked_prefill=True, pooler_config=None, compilation_config={'mode': <CompilationMode.VLLM_COMPILE: 3>, 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['+quant_fp8', 'none', '+quant_fp8'], 'ir_enable_torch_wrap': True, 'splitting_ops': ['vllm::unified_attention_with_output', 'vllm::unified_mla_attention_with_output', 'vllm::mamba_mixer2', 'vllm::mamba_mixer', 'vllm::short_conv', 'vllm::linear_attention', 'vllm::plamo2_mamba_mixer', 'vllm::qwen_gdn_attention_core', 'vllm::gdn_attention_core_xpu', 'vllm::olmo_hybrid_gdn_full_forward', 'vllm::kda_attention', 'vllm::sparse_attn_indexer', 'vllm::rocm_aiter_sparse_attn_indexer', 'vllm::deepseek_v4_attention', 'vllm::hpc_rope_norm_forward', 'vllm::unified_kv_cache_update', 'vllm::unified_mla_kv_cache_update'], 'compile_mm_encoder': False, 'cudagraph_mm_encoder': False, 'encoder_cudagraph_token_budgets': [], 'encoder_cudagraph_max_vision_items_per_batch': 0, 'encoder_cudagraph_max_frames_per_batch': None, 'compile_sizes': [], 'compile_ranges_endpoints': [8192], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'size_asserts': False, 'alignment_asserts': False, 'scalar_asserts': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': <CUDAGraphMode.FULL_AND_PIECEWISE: (2, 1)>, 'cudagraph_num_of_warmups': 1, 'cudagraph_capture_sizes': [1, 2, 4, 8, 16, 24, 32, 40, 48], 'cudagraph_copy_inputs': False, 'cudagraph_specialize_lora': True, 'use_inductor_graph_partition': False, 'pass_config': {'fuse_norm_quant': True, 'fuse_act_quant': True, 'fuse_attn_quant': False, 'enable_sp': False, 'fuse_gemm_comms': False, 'fuse_allreduce_rms': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False}, 'max_cudagraph_capture_size': 48, 'dynamic_shapes_config': {'type': <DynamicShapesType.BACKED: 'backed'>, 'evaluate_guards': False, 'assume_32_bit_indexing': False}, 'local_cache_dir': None, 'fast_moe_cold_start': False, 'static_all_moe_layers': []}, kernel_config=KernelConfig(ir_op_priority=IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, moe_backend='auto', linear_backend='auto')
(EngineCore pid=195) WARNING 07-15 05:17:22 [multiproc_executor.py:1070] Reducing Torch parallelism from 20 threads to 1 to avoid unnecessary CPU contention. Set OMP_NUM_THREADS in the external environment to tune this value as needed.
(EngineCore pid=195) INFO 07-15 05:17:22 [multiproc_executor.py:140] DP group leader: node_rank=0, node_rank_within_dp=0, master_addr=192.168.61.11, mq_connect_ip=192.168.61.11 (local), world_size=2, local_world_size=1
(Worker pid=248) INFO 07-15 05:17:30 [parallel_state.py:1607] world_size=2 rank=0 local_rank=0 distributed_init_method=tcp://192.168.61.11:29501 backend=nccl
(Worker pid=248) INFO 07-15 05:17:38 [pynccl.py:113] vLLM is using nccl==2.30.7
(Worker pid=248) WARNING 07-15 05:17:40 [symm_mem.py:66] SymmMemCommunicator: Device capability 12.1 not supported, communicator is not available.
(Worker pid=248) INFO 07-15 05:17:40 [cuda_communicator.py:264] Using ['PYNCCL'] all-reduce backends (in dispatch order) for group 'tp:0' out of potential backends: ['NCCL_SYMM_MEM', 'QUICK_REDUCE', 'FLASHINFER', 'AITER_CUSTOM', 'CUSTOM', 'SYMM_MEM', 'PYNCCL'].
(Worker pid=248) INFO 07-15 05:17:41 [cuda_communicator.py:264] Using ['PYNCCL'] all-reduce backends (in dispatch order) for group 'ep:0' out of potential backends: ['NCCL_SYMM_MEM', 'QUICK_REDUCE', 'FLASHINFER', 'AITER_CUSTOM', 'CUSTOM', 'SYMM_MEM', 'PYNCCL'].
(Worker pid=248) INFO 07-15 05:17:41 [parallel_state.py:1942] rank 0 in world size 2 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, EP rank 0, EPLB rank N/A
(Worker pid=248) INFO 07-15 05:17:41 [gpu_worker.py:378] Using V2 Model Runner
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [model_runner.py:281] Loading model from scratch...
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [quant_config.py:75] DeepSeek V4 expert_dtype resolved to 'fp4'
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [__init__.py:604] Selected DeepGemmFp8BlockScaledMMKernel for Fp8LinearMethod
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [deep_gemm.py:175] deep_gemm not found in site-packages, trying vendored vllm.third_party.deep_gemm
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [deep_gemm.py:202] DeepGEMM PDL enabled on vllm.third_party.deep_gemm.
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [deep_gemm.py:120] DeepGEMM E8M0 enabled on current platform.
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [attention.py:91] Using DeepSeek's fp8_ds_mla KV cache format.
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [mxfp4.py:622] Using 'DEEPGEMM_MXFP4' Mxfp4 MoE backend.
(Worker_TP0 pid=248) INFO 07-15 05:17:42 [attention.py:694] Using FP8 indexer cache for Lightning Indexer.
(Worker_TP0 pid=248) WARNING 07-15 05:17:47 [vllm.py:2323] `torch.compile` is turned on, but the model /models/deepseek-ai/DeepSeek-V4-Flash-DSpark does not support it. Please open an issue on GitHub if you want it to be supported.
(Worker_TP0 pid=248) INFO 07-15 05:17:47 [weight_utils.py:857] Filesystem type for checkpoints: EXT4. Checkpoint size: 155.43 GiB. Available RAM: 31.74 GiB.
(Worker_TP0 pid=248) INFO 07-15 05:17:47 [weight_utils.py:887] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre) and the checkpoint size (155.43 GiB) exceeds 90% of available RAM (31.74 GiB).
Loading safetensors checkpoint shards: 0% Completed | 0/48 [00:00<?, ?it/s]
Loading safetensors checkpoint shards: 2% Completed | 1/48 [00:11<09:09, 11.69s/it]
And recipe to use a local download of the model:
recipe_version: "1"
name: DeepSeek-V4-Flash
description: vLLM serving deepseek-ai/DeepSeek-V4-Flash on a DGX Spark cluster
container: vllm-node
cluster_only: true
mods: []
defaults:
model: /models/deepseek-ai/DeepSeek-V4-Flash-DSpark
port: 8000
host: 0.0.0.0
tensor_parallel: 2
gpu_memory_utilization: 0.8
max_model_len: 262144
block_size: 256
max_num_seqs: 4
max_num_batched_tokens: 8192
num_speculative_tokens: 2
env:
DG_JIT_USE_NVRTC: "0"
VLLM_ALLOW_LONG_MAX_MODEL_LEN: "1"
VLLM_USE_BREAKABLE_CUDAGRAPH: "0"
HF_TOKEN: "ADD_YOUR_TOKEN_HERE"
command: |
vllm serve {model} \
--host {host} --port {port} \
--trust-remote-code \
--tensor-parallel-size {tensor_parallel} \
--kv-cache-dtype fp8 \
--block-size {block_size} \
--max-model-len {max_model_len} \
--max-num-seqs {max_num_seqs} \
--max-num-batched-tokens {max_num_batched_tokens} \
--gpu-memory-utilization {gpu_memory_utilization} \
--enable-prefix-caching \
--speculative-config '{{"method":"dspark","num_speculative_tokens":5}}' \
--hf-overrides '{{"dspark_noise_token_id":128799}}' \
--tokenizer-mode deepseek_v4 \
--distributed-executor-backend ray \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--default-chat-template-kwargs.thinking=true \
--default-chat-template-kwargs.reasoning_effort=high \
--load-format safetensors
Seem to be stuck at 2% after about 15minutes.
Any advice would be appreciated, but in any case, it may not be related to this specifically, I guess?