From a8fdb1babfbb7ddb58f7cb27ae70c6f99295b110 Mon Sep 17 00:00:00 2001 From: tzhouam Date: Wed, 23 Sep 2026 17:09:37 +0800 Subject: [PATCH] Validate MiniCPM-o audio input to speech on WSL GPU --- .../results/e2e_expansion_20260923/README.md | 12 + ...0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt | 16 + .../minicpmo_24gb_audio_offline.yaml | 127 ++++++++ .../minicpmo_audio_artifact_report.json | 14 + .../minicpmo_audio_success.log | 298 ++++++++++++++++++ ...0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav | Bin 0 -> 103724 bytes .../tone_440hz_2s_16khz.wav | Bin 0 -> 64044 bytes .../evidence/summary/README.md | 4 +- docs/design/omni_edge_e2e_roadmap.md | 7 +- 9 files changed, 474 insertions(+), 4 deletions(-) create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_artifact_report.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_success.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/output_0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/tone_440hz_2s_16khz.wav diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md b/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md index 1b63d6710..46309a32f 100644 --- a/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md @@ -7,6 +7,7 @@ This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evid | WSL CPU / MiniCPM-o 4.5, revision `503e754207c94da6bb26850b4469f367c9ea3582` | Scoped complete three-stage text-to-text+speech path (P for this input only) | Coherent text and a 5.2 s mono 24 kHz WAV. First request 27.09 s after 73.65 s startup; separate 1-warmup/20-measured serial run: startup 73.89 s, request wall p50 21.86 s/p95 22.97 s. | Speech intelligibility/alignment, image/audio/video inputs, concurrency, interruption, power and thermal behavior. | | Native Windows RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped complete three-stage text-to-text+speech path (P for this input only) | Coherent text with the same 32 thinker token IDs as WSL CUDA, and a nonzero 5.2 s mono 24 kHz WAV. First engine startup 297.20 s and request 78.75 s, including first-use graph/JIT work; separate 1-warmup/20-measured serial run: startup 239.05 s, request wall p50 18.38 s/p95 18.73 s. | Speech intelligibility/alignment, image/audio/video inputs, concurrency, interruption, loading peak and sustained behavior. | | WSL RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped three-stage **image**-to-text+speech path (P for one synthetic image) | For a 448×448 red square on white, returned the correct visual description and a nonzero 5.2 s WAV. Engine startup 101.96 s; one request 17.49 s. | Broader visual quality, real images, audio/video inputs, speech intelligibility, repeated latency and cleanup reliability. | +| WSL RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped three-stage **audio**-to-text+speech path (P for one synthetic clip) | For a 2 s, 440 Hz tone at 16 kHz, answered “A loud whistling sound” and produced a nonzero 2.16 s WAV. Engine startup 105.94 s; one request 7.78 s. | Speech transcription/real audio quality, video input, speech intelligibility, repeated latency and shared-memory cleanup. | | WSL CPU / InternVLA-A1-3B Place_Markpen, revision `0a557c6a503e6545b369bff2f34c76a410bbd190` | Strict real-weight load and full policy forward on **synthetic zero** observations/noise | Finite float32 actions `[1, 50, 32]`; CPU-only PyTorch startup 31.78 s and synchronized forward 3.25 s. Compared with a same-checkpoint CUDA run, relative L2 difference 1.3025% and cosine similarity 0.999917. | Real Place_Markpen observations and reference actions, task tolerance, units/timestamps, repeated latency, memory and deadlines. | | Native Windows CPU / InternVLA-A1-3B Place_Markpen, same revision | Strict real-weight load and full policy forward on **synthetic zero** observations/noise; policy and actions checked on CPU | Finite float32 actions `[1, 50, 32]`; placement-checked startup 61.66 s and forward 3.36 s. Relative L2 difference from WSL CPU 1.0824%; cosine 0.999942. | Real observations/reference actions and quality tolerance; repeated latency, memory, units/timestamps and deadlines. This is the direct policy CPU path, not native vLLM CPU attention. | | Native Windows RTX 5090 Laptop / InternVLA-A1-3B Place_Markpen, same revision | Strict real-weight load and full policy forward on **synthetic zero** observations/noise; policy and actions checked on CUDA | Finite float32 actions `[1, 50, 32]`; placement-checked startup 75.54 s and synchronized forward 1.12 s. Relative L2 difference from WSL CUDA 0.8315%; cosine 0.999966. | Real observations/reference actions and quality tolerance; repeated latency, memory, units/timestamps and deadlines. | @@ -21,6 +22,8 @@ The separate native Windows [20-request profile](evidence/minicpmo_windows/minic The WSL RTX image path used the same real checkpoint and BF16 three-stage pipeline with a declared one-image limit, 2,048-token thinker context, 512-token talker context and 5 GiB thinker host offload. The [synthetic 448×448 RGB fixture](evidence/minicpmo_wsl_image/red_square.png) contains a solid red square centered on white. The first [0.58 thinker-memory plan](evidence/minicpmo_wsl_image/minicpmo_24gb_image_failed_kv.yaml) failed before requests because its 0.10 GiB available KV was below the 0.28 GiB required for the declared context; the [raw failure](evidence/minicpmo_wsl_image/minicpmo_image_failed_kv.log) is retained. Raising only the thinker's `gpu_memory_utilization` to 0.61 in the [successful plan](evidence/minicpmo_wsl_image/minicpmo_24gb_image_offline.yaml) admitted the same context, image and model. The [raw successful log](evidence/minicpmo_wsl_image/minicpmo_image_061_success.log), [text/token IDs](evidence/minicpmo_wsl_image/0_effea4b3-d0b9-448a-8a48-4b43ed3d6556.txt), [WAV](evidence/minicpmo_wsl_image/output_0_effea4b3-d0b9-448a-8a48-4b43ed3d6556.wav), and [artifact check](evidence/minicpmo_wsl_image/minicpmo_image_artifact_report.json) establish one complete image-to-text+speech request. The answer describes the visible red square and white background; this does not qualify general image reasoning or speech meaning. Shutdown force-killed stage 0 and reported one shared-memory cleanup warning, which remains a reliability gate. +The separate WSL RTX audio path used the same checkpoint, BF16 three-stage pipeline, 2,048/512-token limits and 5 GiB thinker offload, with [one audio item admitted](evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml) at a 0.61 thinker GPU budget. Its [input fixture](evidence/minicpmo_wsl_audio/tone_440hz_2s_16khz.wav) is a 2 s, 16 kHz mono sine tone at 440 Hz. The [raw log](evidence/minicpmo_wsl_audio/minicpmo_audio_success.log), [text/token IDs](evidence/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt), [output WAV](evidence/minicpmo_wsl_audio/output_0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav), and [artifact check](evidence/minicpmo_wsl_audio/minicpmo_audio_artifact_report.json) establish one audio-input to text+speech request. The output was “A loud whistling sound” and 51,840 mono samples at 24 kHz with nonzero RMS. This response is plausible for the tone but is not a transcription or general audio-quality pass. Shutdown again reported one shared-memory cleanup warning. + The CPU-only InternVLA run used the same BF16 policy checkpoint, synthetic six-camera history/state input and zero diffusion noise as the CUDA reference. The raw [CPU JSON](evidence/internvla/internvla_pure_cpu_synthetic.json), [CPU log](evidence/internvla/internvla_pure_cpu_synthetic.log), [CPU actions](evidence/internvla/internvla_pure_cpu_actions.npy), [CUDA JSON](evidence/internvla/internvla_cuda_synthetic_with_actions.json), [CUDA actions](evidence/internvla/internvla_cuda_actions.npy) and [numerical comparison](evidence/internvla/internvla_pure_cpu_cuda_parity.json) are retained. The CUDA reference used the WSL RTX 5090 Laptop and PyTorch 2.13.0+cu130; its one forward took 1.33 s. The action difference has maximum absolute error 0.00993 and mean absolute error 0.00117. No reference-task tolerance is available, so this comparison is evidence of numerical proximity, not an accuracy pass. The native Windows runs used Windows 11 build 26200, NVIDIA driver 610.71 for the GPU path, Python 3.12.10, PyTorch 2.13.0+cu130, vLLM 0.29.0, Transformers 5.14.1, and the current Omni source. The CPU run explicitly selected the CPU policy despite the CUDA-capable wheel. The placement-checked reruns assert that all policy parameters and the output action tensor remain on the requested device. Both loaded the same checkpoint from the local WSL filesystem through a UNC path; Windows CPU and GPU runs used the same synthetic input and zero diffusion noise as the WSL reference. The native [CPU JSON](evidence/internvla/internvla_windows_cpu_synthetic.json), [GPU JSON](evidence/internvla/internvla_windows_gpu_synthetic.json), [CPU log](evidence/internvla/internvla_windows_cpu_synthetic.log), [GPU log](evidence/internvla/internvla_windows_gpu_synthetic.log), [CPU actions](evidence/internvla/internvla_windows_cpu_actions.npy), [GPU actions](evidence/internvla/internvla_windows_gpu_actions.npy), [CPU/WSL comparison](evidence/internvla/internvla_windows_cpu_wsl_cpu_parity.json), and [GPU/WSL comparison](evidence/internvla/internvla_windows_gpu_wsl_cuda_parity.json) are retained. Native vLLM import initially failed on a Linux-specific CuMem allocator patch; the added Windows guard resolved the import. Native default GBK source decoding also required `PYTHONUTF8=1`. Both platform differences are setup requirements, not model-quality evidence. Power mode and thermal state were not captured. @@ -56,6 +59,15 @@ CUDA_VISIBLE_DEVICES=0 VLLM_TARGET_DEVICE=cuda VLLM_USE_FLASHINFER_SAMPLER=0 \ --image-path benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_image/red_square.png \ --modalities text,audio --num-prompts 1 --init-timeout 900 --stage-init-timeout 600 \ --output-dir /tmp/minicpmo-wsl-image + +CUDA_VISIBLE_DEVICES=0 VLLM_TARGET_DEVICE=cuda VLLM_USE_FLASHINFER_SAMPLER=0 \ + /home/zhout/project/edge_infer/.venvs/omni-cuda-029/bin/python examples/offline_inference/minicpmo/end2end.py \ + --model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 \ + --deploy-config benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml \ + --query-type use_audio \ + --audio-path benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/tone_440hz_2s_16khz.wav \ + --modalities text,audio --num-prompts 1 --init-timeout 900 --stage-init-timeout 600 \ + --output-dir /tmp/minicpmo-wsl-audio ``` For native Windows InternVLA, set `PYTHONUTF8=1`, put this checkout on `PYTHONPATH`, and run `benchmarks/edge_harness/probe_internvla_actions.py` with the same model/processor paths as above but Windows-accessible UNC paths; use `--device cpu` or `--device cuda` and separate output paths. diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt new file mode 100644 index 000000000..27050cf60 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt @@ -0,0 +1,16 @@ +Prompt: +<|im_start|>system +You are MiniCPM-o, a helpful multimodal assistant that can understand images, audio and video, and respond in text and speech.<|im_end|> +<|im_start|>user +() +What is the content of this audio?<|im_end|> +<|im_start|>assistant + + + + +<|tts_bos|> +vllm_text_output: +A loud whistling sound. +vllm_token_ids: +[32, 17361, 420, 380, 2718, 5112, 13, 151704, 151645] diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml new file mode 100644 index 000000000..dace24a94 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_24gb_audio_offline.yaml @@ -0,0 +1,127 @@ +# MiniCPM-o 4.5 offline audio-to-text+speech probe on WSL RTX 5090 Laptop. +# This admits one short audio clip, limits context/concurrency, and offloads 5 GiB. +# Duplex session controls are omitted for ordinary offline requests. +pipeline: minicpmo_4_5 +async_chunk: true + +trust_remote_code: true +enable_prefix_caching: false + +connectors: + connector_of_shared_memory: + name: SharedMemoryConnector + extra: + connector_get_sleep_s: 0.01 + connector_get_max_wait_first_chunk: 3000 + connector_get_max_wait: 300 + codec_chunk_frames: 25 + codec_left_context_frames: 3 + # HiFT capture buckets are derived from codec_chunk_frames and + # codec_left_context_frames. (#5869) + # A future initial_codec_chunk_frames shape will use lazy capture unless + # HiFTGraphWrapper.derive_capture_bucket_size explicitly includes it. + enable_hift_graph: true + enable_cfm_graph: true + cfm_max_graphs: 32 + +stages: + - stage_id: 0 + max_num_seqs: 1 + # Bound the thinker budget and offload weights for GPU co-residency. + # Leave space for one audio encoder item while retaining 2048-token KV. + gpu_memory_utilization: 0.61 + cpu_offload_gb: 5 + enforce_eager: true + tensor_parallel_size: 1 + max_num_batched_tokens: 2048 + max_model_len: 2048 + devices: "0" + # The audio probe submits one synthetic 16 kHz tone. + interleave_mm_strings: true + media_io_kwargs: + video: + fps: 1 + num_frames: 128 + limit_mm_per_prompt: + # One audio clip; no image or video inputs. + image: 0 + audio: 1 + video: 0 + default_sampling_params: + temperature: 0.0 + top_p: 1.0 + top_k: -1 + max_tokens: 64 + seed: 42 + detokenize: true + # 1.0 for MCQ accuracy; 1.1 can bias short A–D answers. + repetition_penalty: 1.0 + + - stage_id: 1 + max_num_seqs: 1 + # One short utterance; this does not qualify the full 4096-token Talker. + gpu_memory_utilization: 0.10 + enforce_eager: true + max_num_batched_tokens: 512 + # The checkpoint supports 4096, but this probe explicitly admits 512. + max_model_len: 512 + devices: "0" + output_connectors: + to_stage_2: connector_of_shared_memory + # Talker is a single-vocab codec LM. These knobs go to vLLM's Sampler + # (head_code logits). EOS is tts_config.eos_token_id (num_audio_tokens-1). + # Values track upstream utils.TTSSamplingParams (min_p/win_size/tau_r are + # declared there but never read, so they stay out). repetition_penalty is + # consumed by the Talker, which rescores it over upstream's 16-frame window + # instead of the Sampler's whole-stream presence penalty. + # min_tokens is upstream's min_new_token. + default_sampling_params: + temperature: 0.8 + top_p: 0.85 + top_k: 25 + repetition_penalty: 1.05 + min_tokens: 50 + max_tokens: 128 + seed: 42 + detokenize: false + + - stage_id: 2 + max_num_seqs: 1 + gpu_memory_utilization: 0.10 + enforce_eager: true + enable_chunked_prefill: false + max_num_batched_tokens: 4096 + max_model_len: 4096 + devices: "0" + input_connectors: + from_stage_1: connector_of_shared_memory + default_sampling_params: + temperature: 0.0 + top_p: 1.0 + top_k: -1 + max_tokens: 4096 + detokenize: true + +platforms: + cuda: + stages: + - stage_id: 1 + # The cap must still admit the single 512-token Talker session. + kv_cache_memory_bytes: 268435456 # 256 MiB for the 512-token probe + + npu: + stages: + - stage_id: 0 + max_num_batched_tokens: 8192 + compilation_config: + cudagraph_mode: PIECEWISE + - stage_id: 1 + max_num_batched_tokens: 8192 + compilation_config: + cudagraph_mode: PIECEWISE + - stage_id: 2 + # Stage 2 stays outer-eager and captures only exact-shape CFM DiT + # estimator kernels through the NPU platform patch. + additional_config: + code2wav_enable_npu_graph: true + code2wav_max_npu_graphs: 32 diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_artifact_report.json b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_artifact_report.json new file mode 100644 index 000000000..1dd9fafdb --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_artifact_report.json @@ -0,0 +1,14 @@ +{ + "scope": "synthetic 440 Hz, 2 s, 16 kHz mono sine tone to text+speech, one request, WSL RTX 5090 Laptop", + "model_response": "A loud whistling sound.", + "token_count": 9, + "wav": { + "sample_rate_hz": 24000, + "frames": 51840, + "duration_s": 2.16, + "nonzero_samples": 51150, + "rms_float": 0.03495909656809984, + "sha256": "c8b999c0b340feff3c0a4618a74a54780b98ed6f354ddaa192079ec45742a87e" + }, + "shutdown_note": "Python resource_tracker reported one shared_memory object" +} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_success.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_success.log new file mode 100644 index 000000000..aa61d7e4f --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/minicpmo_audio_success.log @@ -0,0 +1,298 @@ +INFO 09-23 17:04:45 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 17:04:45 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 17:04:45 [patch.py:589] [cumem-cuda] CuMemAllocator._python_free_callback patched: asleep guard extended to all platforms. +==================== + vllm version: 0.29.0 + ==================== +INFO 09-23 17:04:46 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 17:04:46 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 17:04:46 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 17:04:46 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 17:04:46 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 17:04:46 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 17:04:46 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 17:04:46 [arg_utils.py:1801] The global random seed is set to 0. Since VLLM_ENABLE_V1_MULTIPROCESSING is set to False, this may affect the random state of the Python process that launched vLLM. +INFO 09-23 17:04:46 [model.py:684] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 17:04:46 [model.py:2021] Using max model len 2048 +WARNING 09-23 17:04:46 [model.py:981] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 17:04:47 [scheduler.py:277] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 17:04:47 [vllm.py:1371] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 17:04:47 [vllm.py:1406] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 17:04:47 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +INFO 09-23 17:04:47 [vllm.py:1585] Cudagraph is disabled under eager mode +INFO 09-23 17:04:47 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 17:04:47 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 17:04:47 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 17:04:47 [arg_utils.py:1801] The global random seed is set to 0. Since VLLM_ENABLE_V1_MULTIPROCESSING is set to False, this may affect the random state of the Python process that launched vLLM. +INFO 09-23 17:04:47 [model.py:684] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 17:04:47 [model.py:2021] Using max model len 512 +WARNING 09-23 17:04:47 [model.py:981] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 17:04:47 [model.py:2021] Using max model len 512 +INFO 09-23 17:04:47 [scheduler.py:277] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 17:04:47 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +WARNING 09-23 17:04:47 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 17:04:47 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 17:04:47 [arg_utils.py:1801] The global random seed is set to 0. Since VLLM_ENABLE_V1_MULTIPROCESSING is set to False, this may affect the random state of the Python process that launched vLLM. +INFO 09-23 17:04:47 [model.py:684] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 17:04:47 [model.py:2021] Using max model len 4096 +WARNING 09-23 17:04:47 [arg_utils.py:2780] This model does not officially support disabling chunked prefill. Disabling this manually may cause the engine to crash or produce incorrect outputs. +INFO 09-23 17:04:47 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +INFO 09-23 17:04:47 [stage_utils.py:174] Stage 0 logical-to-physical device mapping: 0->0 +INFO 09-23 17:04:47 [stage_utils.py:174] Stage 1 logical-to-physical device mapping: 0->0 +INFO 09-23 17:04:47 [stage_utils.py:174] Stage 2 logical-to-physical device mapping: 0->0 +INFO 09-23 17:04:47 [stage_utils.py:174] Stage 0 logical-to-physical device mapping: 0->0 +INFO 09-23 17:04:47 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +INFO 09-23 17:04:54 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 17:04:54 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 17:04:54 [patch.py:589] [cumem-cuda] CuMemAllocator._python_free_callback patched: asleep guard extended to all platforms. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:04:55 [core.py:123] Initializing a V1 LLM engine (v0.29.0) with config: model='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', speculative_config=None, tokenizer='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=2048, download_dir=None, load_format=auto, tensor_parallel_size=1, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=False, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, per_request_spec_decode_metrics='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=/home/zhout/project/edge_infer/models/MiniCPM-o-4_5, enable_prefix_caching=False, enable_chunked_prefill=True, pooler_config=None, compilation_config={'mode': , 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['all'], 'ir_enable_torch_wrap': False, 'splitting_ops': [], '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': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': , 'cudagraph_num_of_warmups': 0, 'cudagraph_capture_sizes': [], '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, 'enable_qk_norm_rope_fusion': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False, 'fuse_qk_norm_rope_kvcache': False}, 'max_cudagraph_capture_size': 0, 'dynamic_shapes_config': {'type': , '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=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:04:56 [parallel_state.py:1775] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_47d825d6251e4ef3821b10896a8ddd0e backend=nccl +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:04:56 [parallel_state.py:2119] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, EP rank N/A, EPLB rank N/A +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:04:56 [gpu_ar_worker.py:120] OMNI GPUARWorker forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:04:56 [topk_topp_sampler.py:46] FlashInfer top-p/top-k sampling disabled via VLLM_USE_FLASHINFER_SAMPLER=0. +(StageEngineCoreProc_stage0_replica0 pid=1625179) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage0_replica0 pid=1625179) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage0_replica0 pid=1625179) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [base.py:138] Offloader set to UVAOffloader +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:03 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:03 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [gpu_model_runner.py:5379] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:03 [vllm.py:1371] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:03 [vllm.py:1406] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [vllm.py:1585] Cudagraph is disabled under eager mode +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:03 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:04 [cuda.py:492] Using FLASH_ATTN attention backend out of potential backends: ['FLASH_ATTN', 'FLASHINFER', 'TRITON_ATTN', 'FLEX_ATTENTION']. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:04 [flash_attn.py:897] Using FlashAttention version 2 +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:08 [uva.py:65] Total CPU offloaded parameters: 5.03 +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:09 [weight_utils.py:863] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 22.44 GiB. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:09 [weight_utils.py:886] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre). If you want to force prefetching, start vLLM with --safetensors-load-strategy=prefetch. +(StageEngineCoreProc_stage0_replica0 pid=1625179) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00", line 1387, in _gcd_import +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "", line 1360, in _find_and_load +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "", line 1331, in _find_and_load_unlocked +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "", line 935, in _load_unlocked +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "", line 999, in exec_module +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "", line 488, in _call_with_frames_removed +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 126, in +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] _find_cuda_home() # CUDA home +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] ^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 120, in _find_cuda_home +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] assert cuda_home is not None +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:28 [import_utils.py:408] AssertionError +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:28 [gpu_worker.py:860] Free memory on device (22.58/23.89 GiB) on startup. Desired GPU memory utilization is (0.61, 14.57 GiB). Actual usage is 11.01 GiB for consumed memory (weights + non-torch), 0.58 GiB for peak activation, and 0.0 GiB for CUDAGraph memory. Replace gpu_memory_utilization config with `--kv-cache-memory=3048555049` (2.84 GiB) to fit into requested memory, or `--kv-cache-memory=11643561472` (10.84 GiB) to fully utilize gpu memory. Current kv cache memory in use is 3.07 GiB. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:29 [jit_monitor.py:85] Kernel JIT monitor activated; monitored JIT compilations during inference will use mode=warn. +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:30 [torch_utils.py:265] OMP_NUM_THREADS=8 is set; leaving Torch threads at 8 for serving. Multi-threaded torch CPU ops during serving can degrade performance through spin-wait contention and cgroup CPU-quota throttling. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:30 [core.py:368] init engine (profile, create kv cache, warmup model) took 6.23 s +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:30 [scheduler.py:213] Using custom scheduler class vllm_omni.core.sched.omni_ar_scheduler.OmniARAsyncScheduler. This scheduler interface is not public and compatibility may not be maintained. If you have subclassed Scheduler instead of AsyncScheduler, you will see degraded performance due to async scheduling being disabled. +(StageEngineCoreProc_stage0_replica0 pid=1625179) WARNING 09-23 17:05:30 [omni_scheduler_mixin.py:118] OMNI scheduler forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:30 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=1625179) INFO 09-23 17:05:30 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +INFO 09-23 17:05:30 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 17:05:30 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 17:05:30 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 17:05:30 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 17:05:30 [stage_utils.py:174] Stage 1 logical-to-physical device mapping: 0->0 +INFO 09-23 17:05:30 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +INFO 09-23 17:05:37 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 17:05:37 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 17:05:37 [patch.py:589] [cumem-cuda] CuMemAllocator._python_free_callback patched: asleep guard extended to all platforms. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:38 [core.py:123] Initializing a V1 LLM engine (v0.29.0) with config: model='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', speculative_config=None, tokenizer='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=512, download_dir=None, load_format=auto, tensor_parallel_size=1, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=False, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, per_request_spec_decode_metrics='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=/home/zhout/project/edge_infer/models/MiniCPM-o-4_5, enable_prefix_caching=False, enable_chunked_prefill=True, pooler_config=None, compilation_config={'mode': , 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['all'], 'ir_enable_torch_wrap': False, 'splitting_ops': [], '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': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': , 'cudagraph_num_of_warmups': 0, 'cudagraph_capture_sizes': [], '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, 'enable_qk_norm_rope_fusion': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False, 'fuse_qk_norm_rope_kvcache': False}, 'max_cudagraph_capture_size': 0, 'dynamic_shapes_config': {'type': , '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=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:39 [parallel_state.py:1775] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_8a4e2612dcb0411caee1b53827c12456 backend=nccl +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:39 [parallel_state.py:2119] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, EP rank N/A, EPLB rank N/A +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:40 [gpu_ar_worker.py:120] OMNI GPUARWorker forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:40 [topk_topp_sampler.py:46] FlashInfer top-p/top-k sampling disabled via VLLM_USE_FLASHINFER_SAMPLER=0. +(StageEngineCoreProc_stage1_replica0 pid=1625323) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=1625323) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=1625323) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=1625323) [transformers] Image processor MiniCPMVImageProcessor: kwargs ['max_slice_nums'] were applied for backward compatibility. To avoid this warning, add them to valid_kwargs: create a custom TypedDict extending ImagesKwargs with these keys and set it as the `valid_kwargs` class attribute. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:50 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:50 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [gpu_model_runner.py:5379] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:50 [vllm.py:1371] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:50 [vllm.py:1406] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [vllm.py:1585] Cudagraph is disabled under eager mode +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:50 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:51 [cuda.py:492] Using FLASH_ATTN attention backend out of potential backends: ['FLASH_ATTN', 'FLASHINFER', 'TRITON_ATTN', 'FLEX_ATTENTION']. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:51 [flash_attn.py:897] Using FlashAttention version 2 +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:51 [weight_utils.py:863] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 20.62 GiB. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:51 [weight_utils.py:886] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre). If you want to force prefetching, start vLLM with --safetensors-load-strategy=prefetch. +(StageEngineCoreProc_stage1_replica0 pid=1625323) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00", line 1387, in _gcd_import +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "", line 1360, in _find_and_load +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "", line 1331, in _find_and_load_unlocked +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "", line 935, in _load_unlocked +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "", line 999, in exec_module +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "", line 488, in _call_with_frames_removed +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 126, in +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] _find_cuda_home() # CUDA home +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] ^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 120, in _find_cuda_home +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] assert cuda_home is not None +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:56 [import_utils.py:408] AssertionError +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:57 [jit_monitor.py:85] Kernel JIT monitor activated; monitored JIT compilations during inference will use mode=warn. +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:57 [torch_utils.py:265] OMP_NUM_THREADS=8 is set; leaving Torch threads at 8 for serving. Multi-threaded torch CPU ops during serving can degrade performance through spin-wait contention and cgroup CPU-quota throttling. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:57 [core.py:368] init engine (profile, create kv cache, warmup model) took 4.09 s +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:57 [scheduler.py:213] Using custom scheduler class vllm_omni.core.sched.omni_ar_scheduler.OmniARAsyncScheduler. This scheduler interface is not public and compatibility may not be maintained. If you have subclassed Scheduler instead of AsyncScheduler, you will see degraded performance due to async scheduling being disabled. +(StageEngineCoreProc_stage1_replica0 pid=1625323) WARNING 09-23 17:05:57 [omni_scheduler_mixin.py:118] OMNI scheduler forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:58 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=1625323) INFO 09-23 17:05:58 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +INFO 09-23 17:05:58 [stage_runtime.py:943] [StageRuntime] Stage 1 engine startup completed +INFO 09-23 17:05:58 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-1 [rep-0] initializing EngineCore +INFO 09-23 17:05:58 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-1 [rep-0] EngineCore running +INFO 09-23 17:05:58 [stage_runtime.py:958] [StageRuntime] Stage 1 initialized +INFO 09-23 17:05:58 [stage_utils.py:174] Stage 2 logical-to-physical device mapping: 0->0 +INFO 09-23 17:05:58 [stage_runtime.py:853] [stage_init] Stage-2 set runtime devices: 0 +INFO 09-23 17:06:07 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 17:06:07 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 17:06:07 [patch.py:589] [cumem-cuda] CuMemAllocator._python_free_callback patched: asleep guard extended to all platforms. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:08 [core.py:123] Initializing a V1 LLM engine (v0.29.0) with config: model='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', speculative_config=None, tokenizer='/home/zhout/project/edge_infer/models/MiniCPM-o-4_5', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=4096, download_dir=None, load_format=auto, tensor_parallel_size=1, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=False, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, per_request_spec_decode_metrics='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=/home/zhout/project/edge_infer/models/MiniCPM-o-4_5, enable_prefix_caching=False, enable_chunked_prefill=False, pooler_config=None, compilation_config={'mode': , 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['all'], 'ir_enable_torch_wrap': False, 'splitting_ops': [], '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': [4096], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': , 'cudagraph_num_of_warmups': 0, 'cudagraph_capture_sizes': [], '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, 'enable_qk_norm_rope_fusion': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False, 'fuse_qk_norm_rope_kvcache': False}, 'max_cudagraph_capture_size': 0, 'dynamic_shapes_config': {'type': , '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=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:08 [parallel_state.py:1775] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_fc039cd8b4f542f68ed735f4731e742b backend=nccl +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:08 [parallel_state.py:2119] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, EP rank N/A, EPLB rank N/A +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:09 [gpu_generation_worker.py:103] OMNI GPUGenerationWorker forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:09 [topk_topp_sampler.py:46] FlashInfer top-p/top-k sampling disabled via VLLM_USE_FLASHINFER_SAMPLER=0. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:09 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:09 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:09 [base.py:173] [LLM Worker 0] Sleep Mode DISABLED. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:09 [gpu_model_runner.py:5379] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:09 [weight_utils.py:863] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 19.00 GiB. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:09 [weight_utils.py:893] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre) and the checkpoint size (17.46 GiB) exceeds 90% of available RAM (19.00 GiB). +(StageEngineCoreProc_stage2_replica0 pid=1625467) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00", line 1387, in _gcd_import +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "", line 1360, in _find_and_load +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "", line 1331, in _find_and_load_unlocked +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "", line 935, in _load_unlocked +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "", line 999, in exec_module +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "", line 488, in _call_with_frames_removed +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 126, in +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] _find_cuda_home() # CUDA home +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] ^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] File "/home/zhout/project/edge_infer/.venvs/omni-cuda-029/lib/python3.12/site-packages/vllm/third_party/deep_gemm/__init__.py", line 120, in _find_cuda_home +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] assert cuda_home is not None +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [import_utils.py:408] AssertionError +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:21 [gpu_generation_model_runner.py:558] Dummy sampler run is not implemented for generation model +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:22 [jit_monitor.py:85] Kernel JIT monitor activated; monitored JIT compilations during inference will use mode=warn. +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:23 [torch_utils.py:265] OMP_NUM_THREADS=8 is set; leaving Torch threads at 8 for serving. Multi-threaded torch CPU ops during serving can degrade performance through spin-wait contention and cgroup CPU-quota throttling. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:23 [core.py:368] init engine (profile, create kv cache, warmup model) took 2.52 s +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:23 [scheduler.py:213] Using custom scheduler class vllm_omni.core.sched.omni_generation_scheduler.OmniGenerationScheduler. This scheduler interface is not public and compatibility may not be maintained. If you have subclassed Scheduler instead of AsyncScheduler, you will see degraded performance due to async scheduling being disabled. +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:23 [omni_scheduler_mixin.py:118] OMNI scheduler forces v1 model runner for omni hooks. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:23 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:23 [vllm.py:1371] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage2_replica0 pid=1625467) WARNING 09-23 17:06:23 [vllm.py:1406] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:23 [kernel.py:369] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native']) +INFO 09-23 17:06:23 [stage_runtime.py:943] [StageRuntime] Stage 2 engine startup completed +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:23 [vllm.py:1585] Cudagraph is disabled under eager mode +INFO 09-23 17:06:23 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-2 [rep-0] initializing EngineCore +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:23 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +INFO 09-23 17:06:24 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-2 [rep-0] EngineCore running +INFO 09-23 17:06:24 [stage_runtime.py:958] [StageRuntime] Stage 2 initialized +[transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +[transformers] Requested torchvision backend is not available. Falling back to pil backend. +[transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +INFO 09-23 17:06:32 [orchestrator.py:604] [Orchestrator] Starting event loop +INFO 09-23 17:06:32 [async_omni_engine.py:323] [AsyncOmniEngine] Orchestrator ready with 3 stages +INFO 09-23 17:06:32 [omni_base.py:235] [Omni] AsyncOmniEngine initialized in 105.94 seconds +INFO 09-23 17:06:32 [omni_base.py:255] [Omni] Initialized with 3 stages for model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +WARNING 09-23 17:06:32 [input_processor.py:315] Passing raw prompts to InputProcessor is deprecated and will be removed in the future. You should instead pass the outputs of Renderer.render_cmpl() or Renderer.render_chat(). + Processed prompts: 0%| | 0/1 [00:00._kernel. This causes a latency spike; consider extending warmup to cover this shape/config. +(StageEngineCoreProc_stage2_replica0 pid=1625467) INFO 09-23 17:06:59 [cuda_graph_wrapper.py:98] Captured HiFT CUDA Graph for shape (1, 16, 3840) + Processed prompts: 100%|██████████| 1/1 [00:07<00:00, 7.78s/it] Processed prompts: 100%|██████████| 1/1 [00:07<00:00, 7.78s/it] +query type: use_audio +use_tts (tts_bos): True +Request ID: 0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad, Text saved to /home/zhout/project/edge_infer/analysis/experiments/e2e_expansion_20260923/minicpmo_wsl_audio/0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.txt +Request ID: 0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad, Saved audio to /home/zhout/project/edge_infer/analysis/experiments/e2e_expansion_20260923/minicpmo_wsl_audio/output_0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav +INFO 09-23 17:06:59 [omni_base.py:781] [Omni] Shutting down +INFO 09-23 17:06:59 [async_omni_engine.py:1807] [AsyncOmniEngine] Shutting down Orchestrator +INFO 09-23 17:06:59 [orchestrator.py:705] [Orchestrator] Received shutdown signal +INFO 09-23 17:06:59 [orchestrator.py:3092] [Orchestrator] Shutting down all 3 client(s) +INFO 09-23 17:06:59 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 17:06:59 [core_client.py:691] [shutdown] MPClient: stopping engine manager +INFO 09-23 17:06:59 [utils.py:620] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage0_replica0 +INFO 09-23 17:07:04 [core_client.py:693] [shutdown] MPClient: engine manager stopped +INFO 09-23 17:07:04 [core_client.py:694] [shutdown] MPClient: cleaning up background resources +INFO 09-23 17:07:04 [core_client.py:696] [shutdown] MPClient: complete +INFO 09-23 17:07:04 [stage_pool.py:1354] [StagePool] Stage 0 replica 0 shut down +INFO 09-23 17:07:04 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 17:07:04 [utils.py:620] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage1_replica0 +INFO 09-23 17:07:08 [stage_pool.py:1354] [StagePool] Stage 1 replica 0 shut down +INFO 09-23 17:07:08 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 17:07:08 [utils.py:620] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage2_replica0 +INFO 09-23 17:07:13 [stage_pool.py:1354] [StagePool] Stage 2 replica 0 shut down +/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/resource_tracker.py:279: UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown + warnings.warn('resource_tracker: There appear to be %d ' diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/output_0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/output_0_38cd53c3-5185-43ec-aeeb-6a40091cf9ad.wav new file mode 100644 index 0000000000000000000000000000000000000000..601e0ab2057f2a38836d76e479bf7854265541f5 GIT binary patch literal 103724 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 literal 0 HcmV?d00001 diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/tone_440hz_2s_16khz.wav b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo_wsl_audio/tone_440hz_2s_16khz.wav new file mode 100644 index 0000000000000000000000000000000000000000..76b27ff0b1ae42a12400e9f6e9381c7568dc96e7 GIT binary patch literal 64044 zcmeI*%}*0~9LMo#X`zL-^l>_)mp$M?Lm~l82r(oZv&eGrVFN54R77B1A|BKPG_F}= z6b^b&!?J(`^&n9a9}Wafyck1BETkqx4|>(#boxkJpwQB?{Xg~{EXP5oFwZ^iybXaY^jfZiFVn9kIu&U28*|AGhlbqvn8h-rneH^iIp2N~ijd>Qa~eE5169!P#zW zwHQp}J9WAAMkaMS(H#At>)N8|6N^IEKIqNS(}_$fy-}AN-!Yh4E$udgv(B^PTlTw( z-_xmfD${bKx6w6k4_HUd^@fkzLz`V|k5@Zl6X6@7-P$E_SM+N}y*08w{xCVX{$wkk zKWBVjD$3tDcDa+@z5dtAHT9MnP}=;}zHYaz@=!%pSJB?&M_0{j@@CKWvQ%R}Z|$ccl;0u`dX76^+GZ_%CP^C4 zwPlW_UnEAN8QmWGD*h1jVo|%No1^Z;bn3xIFk8DbS)!L^D_&J5+*7`%{+x1O?NtYr zpgiQg?Q%Hwm2a6R4K?|1oA1`rt5dO+@NB4FyDDyqBifgcBl075IH|5TZH?uP#*?KZ z;7KfGxw>=>5Ad910{h%f3|+3CAAP=h;->Q+Kl*9#6@kW zI=mDuB%Y_|GKE~9v}CebE%rywx1NKttTd?OYJ(~(2j#b(M^1~~W?eG%Nrl{8=6Sl1 zSc+DMYeVtk_sobHtxI2sEW}$<^&9=!K;b~iaM^Ulsmf>WUf*^9cjb#Sp>{A8)oIF@hPQr8bBf5aS-FQFsaO>tG!YqO!1@Kh|l`flypW=($5uw~v??r_|8 z4S9p|pwg?}S98i!|CBG`epQ*R(90%EYIlO!2OHBVcfuUKr!Q*r#ozj?u!l1GNc2VG zSh_7Up5yx9`r!KD`r!V-{e$}l&sRKO@qESkgYyUH56_@Rb$o?SvgY4I`U(0?i`{(SRvwzP1Ir$9aGmy_fehK*{PfdP1`R(Ml zliyCi0sRK_8_@qj{|Ega^yAQvLq87vQS?XAA4R_!{c7~9(LYH4ApL{%bJEXAKPUaQ z^w-i~OTRPy&h$Iee@_27{pa+b2dwxxevY5x=lD5(j-TV__&I)#pX2BFIew0x