From 2f5d0edcf7c9dd48a3b533a55caa994e9212d421 Mon Sep 17 00:00:00 2001 From: tzhouam Date: Wed, 23 Sep 2026 16:21:28 +0800 Subject: [PATCH] Qualify scoped MiniCPM-o CPU speech and Windows InternVLA policy paths --- .../edge_harness/probe_internvla_actions.py | 17 +- .../profile_minicpmo_text_speech.py | 187 +++ .../results/e2e_expansion_20260923/README.md | 44 + .../internvla/internvla_cuda_actions.npy | Bin 0 -> 6528 bytes ...internvla_cuda_synthetic_with_actions.json | 27 + .../internvla_cuda_synthetic_with_actions.log | 31 + .../internvla/internvla_pure_cpu_actions.npy | Bin 0 -> 6528 bytes .../internvla_pure_cpu_cuda_parity.json | 14 + .../internvla_pure_cpu_synthetic.json | 27 + .../internvla_pure_cpu_synthetic.log | 42 + .../internvla_windows_cpu_actions.npy | Bin 0 -> 6528 bytes .../internvla_windows_cpu_synthetic.json | 31 + .../internvla_windows_cpu_synthetic.log | 34 + .../internvla_windows_cpu_wsl_cpu_parity.json | 13 + .../internvla_windows_gpu_actions.npy | Bin 0 -> 6528 bytes .../internvla_windows_gpu_synthetic.json | 31 + .../internvla_windows_gpu_synthetic.log | 34 + ...internvla_windows_gpu_wsl_cuda_parity.json | 13 + ...0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.txt | 15 + ...0_9ba10952-b263-4057-a17f-7f09c33fcff8.txt | 15 + .../minicpmo_cpu_artifact_report.json | 14 + .../evidence/minicpmo/minicpmo_cpu_full.log | 433 ++++++ .../minicpmo/minicpmo_cpu_full_compat.log | 456 +++++++ .../minicpmo/minicpmo_cpu_full_compat2.log | 490 +++++++ .../minicpmo/minicpmo_cpu_full_compat3.log | 587 ++++++++ .../minicpmo/minicpmo_cpu_full_compat4.log | 234 ++++ .../minicpmo/minicpmo_cpu_offline.yaml | 127 ++ .../minicpmo/minicpmo_cpu_profile_20.json | 1178 +++++++++++++++++ .../minicpmo/minicpmo_cpu_profile_20.jsonl | 21 + .../minicpmo/minicpmo_cpu_profile_20.log | 271 ++++ .../evidence/minicpmo/minicpmo_cpu_text.log | 106 ++ ...0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.wav | Bin 0 -> 249644 bytes .../evidence/summary/README.md | 16 +- docs/design/omni_edge_e2e_roadmap.md | 13 +- .../minicpmo_4_5/test_mm_processor_compat.py | 53 + .../minicpmo_4_5/minicpmo_4_5_omni_llm.py | 65 +- vllm_omni/patch.py | 6 + 37 files changed, 4618 insertions(+), 27 deletions(-) create mode 100644 benchmarks/edge_harness/profile_minicpmo_text_speech.py create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/README.md create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_cuda_actions.npy create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_cuda_synthetic_with_actions.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_cuda_synthetic_with_actions.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_pure_cpu_actions.npy create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_pure_cpu_cuda_parity.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_pure_cpu_synthetic.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_pure_cpu_synthetic.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_actions.npy create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_synthetic.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_synthetic.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_wsl_cpu_parity.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_gpu_actions.npy create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_gpu_synthetic.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_gpu_synthetic.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_gpu_wsl_cuda_parity.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.txt create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/0_9ba10952-b263-4057-a17f-7f09c33fcff8.txt create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_artifact_report.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat2.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat3.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat4.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_offline.yaml create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_profile_20.json create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_profile_20.jsonl create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_profile_20.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_text.log create mode 100644 benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/output_0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.wav create mode 100644 tests/model_executor/models/minicpmo_4_5/test_mm_processor_compat.py diff --git a/benchmarks/edge_harness/probe_internvla_actions.py b/benchmarks/edge_harness/probe_internvla_actions.py index db8b69863..c381cb6f0 100644 --- a/benchmarks/edge_harness/probe_internvla_actions.py +++ b/benchmarks/edge_harness/probe_internvla_actions.py @@ -21,6 +21,7 @@ def main() -> None: parser.add_argument("--cosmos-dir", type=Path, required=True) parser.add_argument("--processor-dir", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--actions-output", type=Path, help="Optional float32 .npy actions for reference comparison") parser.add_argument("--device", default="cuda") args = parser.parse_args() @@ -58,6 +59,10 @@ def main() -> None: pipeline = initialize_model(config) if pipeline.runtime_mode() != "real_checkpoint_loaded": raise RuntimeError(f"Unexpected InternVLA runtime mode: {pipeline.runtime_mode()}") + policy_devices = sorted({parameter.device.type for parameter in pipeline.policy.parameters()}) + requested_device_type = torch.device(args.device).type + if policy_devices != [requested_device_type]: + raise RuntimeError(f"InternVLA policy ran on {policy_devices}, not {requested_device_type}") startup_s = time.perf_counter() - started batch_inputs = pipeline._build_fake_batch_inputs() @@ -98,13 +103,23 @@ def main() -> None: raise RuntimeError(f"Unexpected action output: {type(actions).__name__}") if not torch.isfinite(actions).all(): raise RuntimeError("InternVLA returned non-finite actions") + if actions.device.type != requested_device_type: + raise RuntimeError(f"InternVLA actions were on {actions.device}, not {requested_device_type}") - action_bytes = actions.detach().float().cpu().contiguous().numpy().tobytes() + action_array = actions.detach().float().cpu().contiguous().numpy() + action_bytes = action_array.tobytes() + if args.actions_output is not None: + import numpy as np + + args.actions_output.parent.mkdir(parents=True, exist_ok=True) + np.save(args.actions_output, action_array) report = { "scope": "real checkpoint, synthetic zero observations and noise; no task-quality claim", "model_dir": str(model_dir), "runtime_mode": pipeline.runtime_mode(), "device": args.device, + "policy_devices": policy_devices, + "actions_device": str(actions.device), "dtype": str(actions.dtype), "action_shape": list(actions.shape), "finite": True, diff --git a/benchmarks/edge_harness/profile_minicpmo_text_speech.py b/benchmarks/edge_harness/profile_minicpmo_text_speech.py new file mode 100644 index 000000000..3a2a54e35 --- /dev/null +++ b/benchmarks/edge_harness/profile_minicpmo_text_speech.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +"""Measure serial real-weight MiniCPM-o text-to-speech requests on one device.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import math +import os +import platform +import threading +import time +from pathlib import Path + +import numpy as np +import psutil +import torch +import vllm + +from examples.offline_inference.minicpmo.end2end import get_text_query +from vllm_omni.entrypoints.omni import Omni + + +class MemorySampler: + def __init__(self, interval_s: float = 0.5): + self.interval_s = interval_s + self.stop = threading.Event() + self.samples: list[dict[str, int | float]] = [] + self.thread = threading.Thread(target=self._run, name="memory-sampler", daemon=True) + + def _run(self) -> None: + parent = psutil.Process() + while not self.stop.is_set(): + memory = psutil.virtual_memory() + swap = psutil.swap_memory() + rss_sum = 0 + for proc in [parent, *parent.children(recursive=True)]: + try: + rss_sum += proc.memory_info().rss + except (psutil.NoSuchProcess, psutil.AccessDenied): + pass + self.samples.append( + { + "monotonic_s": time.perf_counter(), + "wsl_used_bytes": memory.used, + "wsl_available_bytes": memory.available, + "swap_used_bytes": swap.used, + "process_tree_rss_sum_bytes": rss_sum, + } + ) + self.stop.wait(self.interval_s) + + def __enter__(self): + self.thread.start() + return self + + def __exit__(self, *_exc): + self.stop.set() + self.thread.join() + + +def _nearest_rank(values: list[float], percentile: float) -> float: + ordered = sorted(values) + return ordered[max(0, math.ceil(percentile * len(ordered)) - 1)] + + +def _run_request(omni: Omni, prompt: dict, memory_sampler: MemorySampler) -> dict: + started = time.perf_counter() + first_text_s = None + first_audio_s = None + text = None + token_ids = None + audio_samples = None + audio_rms = None + request_ids = set() + + for output in omni.generate([prompt], None): + request_ids.add(output.request_id) + if output.final_output_type == "text": + first_text_s = time.perf_counter() - started + text = output.outputs[0].text.strip() + token_ids = list(output.outputs[0].token_ids) + elif output.final_output_type == "audio": + first_audio_s = time.perf_counter() - started + audio = output.outputs[0].multimodal_output["audio"] + if isinstance(audio, list): + audio = torch.cat( + [ + part.flatten() if isinstance(part, torch.Tensor) else torch.as_tensor(part).flatten() + for part in audio + ] + ) + wave = audio.detach().float().cpu().numpy().reshape(-1) + if not np.isfinite(wave).all(): + raise RuntimeError("MiniCPM-o generated non-finite audio") + audio_samples = int(wave.size) + audio_rms = float(np.sqrt(np.mean(wave.astype(np.float64) ** 2))) + + completed = time.perf_counter() + if not text or not token_ids or not audio_samples or audio_rms == 0: + raise RuntimeError("MiniCPM-o did not produce both nonempty text and nonzero audio") + samples = [sample for sample in memory_sampler.samples if started <= sample["monotonic_s"] <= completed] + return { + "request_ids": sorted(request_ids), + "wall_s": completed - started, + "first_text_s": first_text_s, + "first_audio_s": first_audio_s, + "text": text, + "token_ids": token_ids, + "audio_samples": audio_samples, + "audio_duration_s_at_24khz": audio_samples / 24000, + "audio_rms_float": audio_rms, + "sampled_memory": { + "n": len(samples), + "max_wsl_used_bytes": max((s["wsl_used_bytes"] for s in samples), default=None), + "min_wsl_available_bytes": min((s["wsl_available_bytes"] for s in samples), default=None), + "max_swap_used_bytes": max((s["swap_used_bytes"] for s in samples), default=None), + # Sum of RSS can double-count shared pages; it is not unique RAM. + "max_process_tree_rss_sum_bytes": max((s["process_tree_rss_sum_bytes"] for s in samples), default=None), + }, + } + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--model", type=Path, required=True) + parser.add_argument("--deploy-config", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--warmups", type=int, default=1) + parser.add_argument("--repeats", type=int, default=20) + args = parser.parse_args() + if args.warmups < 0 or args.repeats < 1: + parser.error("warmups must be nonnegative and repeats must be positive") + + args.output.parent.mkdir(parents=True, exist_ok=True) + prompt = {**get_text_query(use_tts=True).inputs, "modalities": ["text", "audio"]} + with MemorySampler() as sampler: + started = time.perf_counter() + omni = Omni( + model=str(args.model.resolve()), + deploy_config=str(args.deploy_config.resolve()), + trust_remote_code=True, + ) + startup_s = time.perf_counter() - started + try: + rows = [] + with args.output.with_suffix(".jsonl").open("w", encoding="utf-8") as raw: + for index in range(args.warmups + args.repeats): + row = _run_request(omni, prompt, sampler) + row["index"] = index + row["warmup"] = index < args.warmups + rows.append(row) + raw.write(json.dumps(row) + "\n") + raw.flush() + print(f"request={index} warmup={row['warmup']} wall_s={row['wall_s']:.3f}", flush=True) + finally: + omni.close() + + measured = [row for row in rows if not row["warmup"]] + times = [row["wall_s"] for row in measured] + output = { + "scope": "serial one-request-at-a-time MiniCPM-o text-to-speech; no speech-quality claim", + "model": str(args.model.resolve()), + "deploy_config": str(args.deploy_config.resolve()), + "deploy_config_sha256": hashlib.sha256(args.deploy_config.read_bytes()).hexdigest(), + "platform": platform.platform(), + "torch": torch.__version__, + "vllm": vllm.__version__, + "torch_cuda_available": torch.cuda.is_available(), + "environment": { + name: os.environ.get(name) + for name in ("VLLM_TARGET_DEVICE", "VLLM_CPU_KVCACHE_SPACE", "OMP_NUM_THREADS", "CUDA_VISIBLE_DEVICES") + }, + "startup_s": startup_s, + "warmups": args.warmups, + "repeats": args.repeats, + "wall_s_p50_nearest_rank": _nearest_rank(times, 0.5), + "wall_s_p95_nearest_rank": _nearest_rank(times, 0.95), + "requests": rows, + } + args.output.write_text(json.dumps(output, indent=2) + "\n", encoding="utf-8") + print(f"Wrote {args.output}", flush=True) + + +if __name__ == "__main__": + main() diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md b/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md new file mode 100644 index 000000000..bb56c8594 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/README.md @@ -0,0 +1,44 @@ +# 2026-09-23 WSL CPU and native Windows expansion + +This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evidence/summary/README.md) with previously unrun WSL CPU and native Windows paths. The September 22 timing tables remain historical. MiniCPM-o now has a separate 20-request serial text-to-speech timing run; each InternVLA timing remains one observation. None is a sustained or full-modality profile. The [checkpoint manifests](../e2e_recovery_20260923/README.md) pin the real weights. No model, precision or context was silently substituted. + +| Device / model | Verified depth | Observed output and time | Remaining gate | +|---|---|---|---| +| 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. | +| 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. | + +Both runs used Ryzen AI 9 HX 370 on Ubuntu 26.04/WSL2 kernel `6.18.33.2-microsoft-standard-WSL2`, with 30.91 GiB WSL RAM and 8 GiB swap. The CPU environment has Python 3.12.13, PyTorch 2.13.0+cpu (`torch.cuda.is_available() == False`), vLLM 0.28.0 and Transformers 5.14.1; Omni source is 0.29.0rc2. MiniCPM-o used BF16, eager execution, serial requests, `OMP_NUM_THREADS=8`, 1 GiB CPU KV cache **per stage**, 2,048-token thinker / 512-token talker limits, text input only, and no CPU weight offload. Its full three-stage run used swap, so the timing applies only to this constrained machine and workload. The output [text](evidence/minicpmo/0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.txt), [WAV](evidence/minicpmo/output_0_28854dbf-b6b7-4f1d-a35a-52f254ab9d9e.wav), [raw log](evidence/minicpmo/minicpmo_cpu_full_compat4.log), [deployment config](evidence/minicpmo/minicpmo_cpu_offline.yaml) and [artifact check](evidence/minicpmo/minicpmo_cpu_artifact_report.json) are retained. The WAV has 124,800 PCM16 frames, 124,147 nonzero samples, peak absolute amplitude 21,850 and RMS 3,319.41; no listening or ASR check was performed. An earlier [one-stage CPU thinker run](evidence/minicpmo/minicpmo_cpu_text.log) also produced coherent text in 8.67 s after 36.02 s startup, but that diagnostic topology is not the speech pipeline. + +The separate [20-request profile](evidence/minicpmo/minicpmo_cpu_profile_20.json) records every measured output and sampled memory; the [JSONL](evidence/minicpmo/minicpmo_cpu_profile_20.jsonl) survives interruption, and the [run log](evidence/minicpmo/minicpmo_cpu_profile_20.log) retains worker details. One warmup was excluded. All 20 measured requests returned the same thinker token sequence, nonzero 124,800-sample audio, and request wall times 20.95–23.33 s; nearest-rank p50/p95 were 21.86/22.97 s (real-time factor 4.20/4.42 for 5.2 s of audio). Sampled WSL available RAM reached a minimum of 3.80 GB and swap use a maximum of 5.75 GB; summed process-tree RSS reached 29.04 GB but double-counts shared pages. These are 0.5 s samples during requests, not load-peak or unique-resident-memory measurements. Audio and text were returned together at request completion, so the profile cannot establish playable-stream latency, and no concurrency or 30-minute thermal run was performed. + +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. + +The MiniCPM-o CPU environment initially failed in the talker because vLLM 0.28 calls the multimodal processor with a prompt and three-value return contract, while 0.29 expects a `BatchFeature`. The 0.28 MiniCPMV processor also lacks `_call_hf_processor_on_prompts`. The local processor now handles both APIs. The next run failed before vocoder inference because `stepaudio2-minicpmo` was absent from the isolated CPU venv; installing version 0.1.1 with its dependencies enabled the final run. [All failed logs](evidence/minicpmo/) remain available; no failure was relabeled as a pass. + +Reproduce from the repository root with the verified local checkpoint paths: + +```bash +export PYTHONPATH="$PWD" OMP_NUM_THREADS=8 MKL_NUM_THREADS=8 TOKENIZERS_PARALLELISM=false +export CUDA_VISIBLE_DEVICES= VLLM_TARGET_DEVICE=cpu VLLM_CPU_KVCACHE_SPACE=1 VLLM_ENABLE_V1_MULTIPROCESSING=0 +/home/zhout/project/edge_infer/.venvs/omni-cpu/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/minicpmo_cpu_offline.yaml \ + --query-type text --modalities text,audio --num-prompts 1 --output-dir /tmp/minicpmo-cpu + +/home/zhout/project/edge_infer/.venvs/omni-cpu/bin/python benchmarks/edge_harness/probe_internvla_actions.py \ + --model-dir /home/zhout/project/edge_infer/models/InternVLA-A1-3B-FT-Place_Markpen \ + --cosmos-dir /home/zhout/project/edge_infer/models/Cosmos-Tokenizer-CI8x8 \ + --processor-dir /home/zhout/project/edge_infer/models/Qwen3-VL-2B-Instruct-processor \ + --device cpu --output /tmp/internvla-cpu.json --actions-output /tmp/internvla-cpu-actions.npy + +/home/zhout/project/edge_infer/.venvs/omni-cpu/bin/python benchmarks/edge_harness/profile_minicpmo_text_speech.py \ + --model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 \ + --deploy-config benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_offline.yaml \ + --warmups 1 --repeats 20 --output /tmp/minicpmo-cpu-profile-20.json +``` + +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/internvla/internvla_cuda_actions.npy b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_cuda_actions.npy new file mode 100644 index 0000000000000000000000000000000000000000..56ad4a841b8338001b216fdb1004e1c4ced06e97 GIT binary patch literal 6528 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
Y`IARfc7+F)67Hhai~n%eUp^B%J3l;d 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 vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +W0923 15:49:34.288000 4169445 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:49:34.327000 4169445 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +INFO 09-23 15:49:36 [importing.py:53] Triton is installed but 0 active driver(s) found (expected 1). Disabling Triton to prevent runtime errors. +WARNING 09-23 15:49:36 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:49:36 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +INFO 09-23 15:49:37 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:49:37 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:49:37 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:49:37 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +INFO 09-23 15:49:38 [pipeline_internvla_a1.py:164] Loading InternVLA-A1 weights from /home/zhout/project/edge_infer/models/InternVLA-A1-3B-FT-Place_Markpen +{ + "scope": "real checkpoint, synthetic zero observations and noise; no task-quality claim", + "model_dir": "/home/zhout/project/edge_infer/models/InternVLA-A1-3B-FT-Place_Markpen", + "runtime_mode": "real_checkpoint_loaded", + "device": "cpu", + "dtype": "torch.float32", + "action_shape": [ + 1, + 50, + 32 + ], + "finite": true, + "action_sha256_float32": "db60d6590e242694948f7dcdf873b2fff44819d31b0b178fdad5ec9608d46140", + "first_action_prefix": [ + 0.021246271207928658, + -0.03424469009041786, + 0.005475320853292942, + 0.03046894632279873, + -0.004715746268630028, + -0.015595180913805962, + 0.017074640840291977, + -0.0920763686299324 + ], + "startup_s": 31.779892041988205, + "forward_s": 3.247856915986631, + "cuda_peak_allocated_bytes": null +} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_actions.npy b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/internvla/internvla_windows_cpu_actions.npy new file mode 100644 index 0000000000000000000000000000000000000000..f47381bc2ee4fc0957384f5a9c3c198465e65bca GIT binary patch literal 6528 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 +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 +Say hello, then introduce vLLM-Omni in one sentence.<|im_end|> +<|im_start|>assistant + + + + +<|tts_bos|> +vllm_text_output: +Hello, I am vLLM-Omni, a large multimodal model capable of understanding and generating text, images, audio, and video. +vllm_token_ids: +[9707, 11, 358, 1079, 348, 4086, 44, 23620, 76, 7751, 11, 264, 3460, 79049, 57597, 1614, 12875, 315, 8660, 323, 23163, 1467, 11, 5335, 11, 7699, 11, 323, 2766, 13, 151704, 151645] diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/0_9ba10952-b263-4057-a17f-7f09c33fcff8.txt b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/0_9ba10952-b263-4057-a17f-7f09c33fcff8.txt new file mode 100644 index 000000000..b44e4e4a4 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/0_9ba10952-b263-4057-a17f-7f09c33fcff8.txt @@ -0,0 +1,15 @@ +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 +Say hello, then introduce vLLM-Omni in one sentence.<|im_end|> +<|im_start|>assistant + + + + + +vllm_text_output: +Hello! vLLM-Omni is a versatile, high-performance large language model designed for efficient and accurate text generation and understanding. +vllm_token_ids: +[9707, 0, 348, 4086, 44, 23620, 76, 7751, 374, 264, 31945, 11, 1550, 57474, 3460, 4128, 1614, 6188, 369, 11050, 323, 13382, 1467, 9471, 323, 8660, 13, 151645] diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_artifact_report.json b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_artifact_report.json new file mode 100644 index 000000000..e9a7ada9c --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_artifact_report.json @@ -0,0 +1,14 @@ +{ + "scope": "one real-weight MiniCPM-o 4.5 three-stage WSL CPU text-to-speech request; speech meaning unverified", + "cpu_text_tokens": 32, + "cpu_cuda_text_token_ids_equal": true, + "wave_frames": 124800, + "wave_sample_rate_hz": 24000, + "wave_channels": 1, + "wave_sample_width_bytes": 2, + "wave_duration_s": 5.2, + "wave_nonzero_samples": 124147, + "wave_peak_abs_pcm16": 21850, + "wave_rms_pcm16": 3319.410484644662, + "wave_sha256": "ded62a7285136fe16f28c7e6eb546048a6deb7e385a7a974031032c55df2de40" +} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full.log new file mode 100644 index 000000000..992ec3606 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full.log @@ -0,0 +1,433 @@ +W0923 15:36:58.480000 4167421 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:36:58.503000 4167421 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:36:59 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:36:59 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:37:00 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:37:00 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:37:00 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:37:01 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:37:01 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:37:01 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:37:01 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:37:01 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:37:01 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:37:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:37:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:37:01 [arg_utils.py:1719] 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 15:37:01 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:37:01 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:37:01 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:37:02 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:37:02 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:37:02 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:37:02 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:37:02 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:37:02 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:37:02 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:37:02 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:37:02 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:37:02 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:37:02 [arg_utils.py:1719] 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 15:37:02 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:37:02 [model.py:1965] Using max model len 512 +WARNING 09-23 15:37:02 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:37:02 [model.py:1965] Using max model len 512 +INFO 09-23 15:37:02 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:37:02 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:37:02 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:37:02 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:37:02 [arg_utils.py:1719] 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 15:37:02 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:37:02 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:37:02 [arg_utils.py:2664] 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 15:37:02 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:37:02 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:37:06.286000 4167451 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:37:06.314000 4167451 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:37:07 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:37:07 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:37:08 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:37:08 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:37:08 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:37:08 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4167451) INFO 09-23 15:37:09 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:37:09.092897341 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4167451) WARNING 09-23 15:37:09 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4167451) WARNING 09-23 15:37:09 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_a31cf537bd4d45dea02606fe108bbbce backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [parallel_state.py:1982] 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=4167451) INFO 09-23 15:37:09 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4167451) WARNING 09-23 15:37:09 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4167451) WARNING 09-23 15:37:09 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:09 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:10 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:13 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.02 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:13 [weight_utils.py:881] 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=4167451) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 18646 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:35 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:35 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:35 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 19661 -> 19661 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:35 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.44 s +(StageEngineCoreProc_stage0_replica0 pid=4167451) WARNING 09-23 15:37:35 [scheduler.py:182] 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=4167451) INFO 09-23 15:37:35 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4167451) INFO 09-23 15:37:46 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:37:46 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:37:46 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:37:46 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:37:46 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:37:46 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 15:37:53.025000 4167571 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:37:53.066000 4167571 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:37:54 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:37:54 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:37:55 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:37:56 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:37:56 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:37:56 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4167571) INFO 09-23 15:37:56 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:37:57.845305821 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4167571) WARNING 09-23 15:37:57 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4167571) WARNING 09-23 15:37:57 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4167571) INFO 09-23 15:37:57 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_ed0f981d16804c67838c632666ad27c7 backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4167571) INFO 09-23 15:37:57 [parallel_state.py:1982] 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=4167571) WARNING 09-23 15:37:57 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4167571) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4167571) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4167571) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4167571) WARNING 09-23 15:38:00 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] StageEngineCoreProc failed to start. +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3419, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) ERROR 09-23 15:38:00 [stage_engine_core_proc.py:242] TypeError: MiniCPMO45OmniLLMMultiModalProcessor._apply_hf_processor_main() got an unexpected keyword argument 'prompt' +(StageEngineCoreProc_stage1_replica0 pid=4167571) Process StageEngineCoreProc_stage1_replica0: +(StageEngineCoreProc_stage1_replica0 pid=4167571) Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 314, in _bootstrap +(StageEngineCoreProc_stage1_replica0 pid=4167571) self.run() +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 108, in run +(StageEngineCoreProc_stage1_replica0 pid=4167571) self._target(*self._args, **self._kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4167571) engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4167571) self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167571) return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167571) self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167571) all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4167571) mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167571) mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3419, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167571) return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167571) ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4167571) ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4167571) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167571) TypeError: MiniCPMO45OmniLLMMultiModalProcessor._apply_hf_processor_main() got an unexpected keyword argument 'prompt' +ERROR 09-23 15:38:03 [stage_runtime.py:265] [StageRuntime] Stage initialization failed; shutting down 1 initialized client(s) +ERROR 09-23 15:38:03 [stage_runtime.py:265] Traceback (most recent call last): +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:38:03 [stage_runtime.py:265] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:38:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:38:03 [stage_runtime.py:265] raise primary_exc +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:38:03 [stage_runtime.py:265] client = self._initialize_replica( +ERROR 09-23 15:38:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:38:03 [stage_runtime.py:265] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:38:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:38:03 [stage_runtime.py:265] launch_stack.close() +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:38:03 [stage_runtime.py:265] self.__exit__(None, None, None) +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:38:03 [stage_runtime.py:265] raise exc_details[1] +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:38:03 [stage_runtime.py:265] if cb(*exc_details): +ERROR 09-23 15:38:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:38:03 [stage_runtime.py:265] next(self.gen) +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:38:03 [stage_runtime.py:265] wait_for_engine_startup( +ERROR 09-23 15:38:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:38:03 [stage_runtime.py:265] raise RuntimeError( +ERROR 09-23 15:38:03 [stage_runtime.py:265] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:38:03 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 15:38:03 [core_client.py:691] [shutdown] MPClient: stopping engine manager +INFO 09-23 15:38:03 [utils.py:615] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage0_replica0 +WARNING 09-23 15:38:08 [utils.py:635] [shutdown] Process manager: force killing remaining processes count=1 +WARNING 09-23 15:38:08 [utils.py:640] [shutdown] Process manager: force killing remaining process StageEngineCoreProc_stage0_replica0 pid 4167451 +INFO 09-23 15:38:08 [core_client.py:693] [shutdown] MPClient: engine manager stopped +INFO 09-23 15:38:08 [core_client.py:694] [shutdown] MPClient: cleaning up background resources +INFO 09-23 15:38:08 [core_client.py:696] [shutdown] MPClient: complete +ERROR 09-23 15:38:08 [async_omni_engine.py:474] [AsyncOmniEngine] Orchestrator thread crashed +ERROR 09-23 15:38:08 [async_omni_engine.py:474] Traceback (most recent call last): +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator +ERROR 09-23 15:38:08 [async_omni_engine.py:474] loop.run_until_complete(_run_orchestrator()) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete +ERROR 09-23 15:38:08 [async_omni_engine.py:474] return future.result() +ERROR 09-23 15:38:08 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator +ERROR 09-23 15:38:08 [async_omni_engine.py:474] self._initialize_stages(stage_init_timeout) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages +ERROR 09-23 15:38:08 [async_omni_engine.py:474] self._initialize_stages_impl(stage_init_timeout) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl +ERROR 09-23 15:38:08 [async_omni_engine.py:474] self._runtime.initialize() +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize +ERROR 09-23 15:38:08 [async_omni_engine.py:474] raise exc +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:38:08 [async_omni_engine.py:474] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:38:08 [async_omni_engine.py:474] raise primary_exc +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:38:08 [async_omni_engine.py:474] client = self._initialize_replica( +ERROR 09-23 15:38:08 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:38:08 [async_omni_engine.py:474] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:38:08 [async_omni_engine.py:474] launch_stack.close() +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:38:08 [async_omni_engine.py:474] self.__exit__(None, None, None) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] raise exc_details[1] +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] if cb(*exc_details): +ERROR 09-23 15:38:08 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:38:08 [async_omni_engine.py:474] next(self.gen) +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:38:08 [async_omni_engine.py:474] wait_for_engine_startup( +ERROR 09-23 15:38:08 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:38:08 [async_omni_engine.py:474] raise RuntimeError( +ERROR 09-23 15:38:08 [async_omni_engine.py:474] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:38:08 [async_omni_engine.py:1807] [AsyncOmniEngine] Shutting down Orchestrator +Exception in thread orchestrator: +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 519, in + main(args) + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 283, in main + omni = Omni(**omni_kwargs) + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/entrypoints/omni_base.py", line 223, in __init__ + self.engine = AsyncOmniEngine( + ^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 305, in __init__ + self._wait_for_orchestrator_init(startup_future, startup_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 539, in _wait_for_orchestrator_init + startup_future.result( + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 456, in result + return self.__get_result() + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result + raise self._exception +RuntimeError: Orchestrator initialization failed: Engine core initialization failed. See root cause above. Failed core proc(s): {} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat.log new file mode 100644 index 000000000..0492db191 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat.log @@ -0,0 +1,456 @@ +W0923 15:39:14.030000 4167733 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:39:14.055000 4167733 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:39:14 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:39:14 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:39:15 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:39:16 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:39:16 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:39:16 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:39:16 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:39:16 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:39:16 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:39:16 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:39:16 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:39:16 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:39:16 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:39:16 [arg_utils.py:1719] 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 15:39:16 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:39:16 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:39:16 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:39:17 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:39:17 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:39:17 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:39:17 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:39:17 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:39:17 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:39:17 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:39:17 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:39:17 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:39:17 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:39:17 [arg_utils.py:1719] 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 15:39:17 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:39:17 [model.py:1965] Using max model len 512 +WARNING 09-23 15:39:17 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:39:17 [model.py:1965] Using max model len 512 +INFO 09-23 15:39:17 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:39:17 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:39:17 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:39:17 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:39:17 [arg_utils.py:1719] 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 15:39:17 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:39:17 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:39:17 [arg_utils.py:2664] 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 15:39:17 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:39:17 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:39:21.181000 4167762 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:39:21.207000 4167762 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:39:22 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:39:22 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:39:23 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:39:23 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:39:23 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:39:23 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:23 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4167762) INFO 09-23 15:39:24 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:39:24.921595339 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4167762) WARNING 09-23 15:39:24 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4167762) WARNING 09-23 15:39:24 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_af47bac558064cc0b15208cedc8aabf6 backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [parallel_state.py:1982] 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=4167762) INFO 09-23 15:39:24 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4167762) WARNING 09-23 15:39:24 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4167762) WARNING 09-23 15:39:24 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:24 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:28 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.03 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:28 [weight_utils.py:881] 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=4167762) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 19293 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:43 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:43 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:43 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 20303 -> 20303 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:43 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.16 s +(StageEngineCoreProc_stage0_replica0 pid=4167762) WARNING 09-23 15:39:43 [scheduler.py:182] 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=4167762) INFO 09-23 15:39:43 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4167762) INFO 09-23 15:39:43 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:39:43 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:39:43 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:39:44 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:39:44 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:39:44 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 15:39:52.020000 4167858 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:39:52.071000 4167858 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:39:53 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:39:53 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:39:55 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:39:55 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:39:55 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:39:56 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4167858) INFO 09-23 15:39:56 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:39:57.775880442 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4167858) WARNING 09-23 15:39:57 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4167858) WARNING 09-23 15:39:57 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4167858) INFO 09-23 15:39:57 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_c4c7bdcb69a6490196643cc73405e482 backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4167858) INFO 09-23 15:39:57 [parallel_state.py:1982] 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=4167858) WARNING 09-23 15:39:57 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4167858) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4167858) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4167858) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4167858) WARNING 09-23 15:40:00 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] StageEngineCoreProc failed to start. +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3419, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3440, in _apply_hf_processor_main +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] mm_inputs = self.process_mm_inputs(mm_data, hf_processor_mm_kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3595, in process_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] **self.process_images(mm_data, mm_kwargs), +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3552, in process_images +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] image_inputs = self._call_hf_processor_on_prompts( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3610, in _call_hf_processor_on_prompts +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] return MiniCPMVMultiModalProcessor._call_hf_processor_on_prompts( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) ERROR 09-23 15:40:00 [stage_engine_core_proc.py:242] AttributeError: type object 'MiniCPMVMultiModalProcessor' has no attribute '_call_hf_processor_on_prompts' +(StageEngineCoreProc_stage1_replica0 pid=4167858) Process StageEngineCoreProc_stage1_replica0: +(StageEngineCoreProc_stage1_replica0 pid=4167858) Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 314, in _bootstrap +(StageEngineCoreProc_stage1_replica0 pid=4167858) self.run() +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 108, in run +(StageEngineCoreProc_stage1_replica0 pid=4167858) self._target(*self._args, **self._kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4167858) engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4167858) self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4167858) return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4167858) self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4167858) all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4167858) mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167858) mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3419, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167858) return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4167858) ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4167858) ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3440, in _apply_hf_processor_main +(StageEngineCoreProc_stage1_replica0 pid=4167858) mm_inputs = self.process_mm_inputs(mm_data, hf_processor_mm_kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3595, in process_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4167858) **self.process_images(mm_data, mm_kwargs), +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3552, in process_images +(StageEngineCoreProc_stage1_replica0 pid=4167858) image_inputs = self._call_hf_processor_on_prompts( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3610, in _call_hf_processor_on_prompts +(StageEngineCoreProc_stage1_replica0 pid=4167858) return MiniCPMVMultiModalProcessor._call_hf_processor_on_prompts( +(StageEngineCoreProc_stage1_replica0 pid=4167858) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4167858) AttributeError: type object 'MiniCPMVMultiModalProcessor' has no attribute '_call_hf_processor_on_prompts' +ERROR 09-23 15:40:03 [stage_runtime.py:265] [StageRuntime] Stage initialization failed; shutting down 1 initialized client(s) +ERROR 09-23 15:40:03 [stage_runtime.py:265] Traceback (most recent call last): +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:40:03 [stage_runtime.py:265] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:40:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:40:03 [stage_runtime.py:265] raise primary_exc +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:40:03 [stage_runtime.py:265] client = self._initialize_replica( +ERROR 09-23 15:40:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:40:03 [stage_runtime.py:265] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:40:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:40:03 [stage_runtime.py:265] launch_stack.close() +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:40:03 [stage_runtime.py:265] self.__exit__(None, None, None) +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:40:03 [stage_runtime.py:265] raise exc_details[1] +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:40:03 [stage_runtime.py:265] if cb(*exc_details): +ERROR 09-23 15:40:03 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:40:03 [stage_runtime.py:265] next(self.gen) +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:40:03 [stage_runtime.py:265] wait_for_engine_startup( +ERROR 09-23 15:40:03 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:40:03 [stage_runtime.py:265] raise RuntimeError( +ERROR 09-23 15:40:03 [stage_runtime.py:265] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:40:03 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 15:40:03 [core_client.py:691] [shutdown] MPClient: stopping engine manager +INFO 09-23 15:40:03 [utils.py:615] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage0_replica0 +INFO 09-23 15:40:07 [core_client.py:693] [shutdown] MPClient: engine manager stopped +INFO 09-23 15:40:07 [core_client.py:694] [shutdown] MPClient: cleaning up background resources +INFO 09-23 15:40:07 [core_client.py:696] [shutdown] MPClient: complete +ERROR 09-23 15:40:07 [async_omni_engine.py:474] [AsyncOmniEngine] Orchestrator thread crashed +ERROR 09-23 15:40:07 [async_omni_engine.py:474] Traceback (most recent call last): +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator +ERROR 09-23 15:40:07 [async_omni_engine.py:474] loop.run_until_complete(_run_orchestrator()) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete +ERROR 09-23 15:40:07 [async_omni_engine.py:474] return future.result() +ERROR 09-23 15:40:07 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator +ERROR 09-23 15:40:07 [async_omni_engine.py:474] self._initialize_stages(stage_init_timeout) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages +ERROR 09-23 15:40:07 [async_omni_engine.py:474] self._initialize_stages_impl(stage_init_timeout) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl +ERROR 09-23 15:40:07 [async_omni_engine.py:474] self._runtime.initialize() +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize +ERROR 09-23 15:40:07 [async_omni_engine.py:474] raise exc +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:40:07 [async_omni_engine.py:474] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:40:07 [async_omni_engine.py:474] raise primary_exc +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:40:07 [async_omni_engine.py:474] client = self._initialize_replica( +ERROR 09-23 15:40:07 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:40:07 [async_omni_engine.py:474] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:40:07 [async_omni_engine.py:474] launch_stack.close() +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:40:07 [async_omni_engine.py:474] self.__exit__(None, None, None) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] raise exc_details[1] +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] if cb(*exc_details): +ERROR 09-23 15:40:07 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:40:07 [async_omni_engine.py:474] next(self.gen) +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:40:07 [async_omni_engine.py:474] wait_for_engine_startup( +ERROR 09-23 15:40:07 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:40:07 [async_omni_engine.py:474] raise RuntimeError( +ERROR 09-23 15:40:07 [async_omni_engine.py:474] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:40:07 [async_omni_engine.py:1807] [AsyncOmniEngine] Shutting down Orchestrator +Exception in thread orchestrator: +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 519, in + main(args) + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 283, in main + omni = Omni(**omni_kwargs) + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/entrypoints/omni_base.py", line 223, in __init__ + self.engine = AsyncOmniEngine( + ^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 305, in __init__ + self._wait_for_orchestrator_init(startup_future, startup_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 539, in _wait_for_orchestrator_init + startup_future.result( + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 456, in result + return self.__get_result() + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result + raise self._exception +RuntimeError: Orchestrator initialization failed: Engine core initialization failed. See root cause above. Failed core proc(s): {} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat2.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat2.log new file mode 100644 index 000000000..1061767d8 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat2.log @@ -0,0 +1,490 @@ +W0923 15:41:18.737000 4168074 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:41:18.764000 4168074 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:41:19 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:41:19 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:41:20 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:41:21 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:41:21 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:41:21 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:41:21 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:41:21 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:41:21 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:41:21 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:41:21 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:41:21 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:41:21 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:41:21 [arg_utils.py:1719] 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 15:41:21 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:41:21 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:41:21 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:41:22 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:41:22 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:41:22 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:41:22 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:41:22 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:41:22 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:41:22 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:41:22 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:41:22 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:41:22 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:41:22 [arg_utils.py:1719] 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 15:41:22 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:41:22 [model.py:1965] Using max model len 512 +WARNING 09-23 15:41:22 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:41:22 [model.py:1965] Using max model len 512 +INFO 09-23 15:41:22 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:41:22 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:41:22 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:41:22 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:41:22 [arg_utils.py:1719] 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 15:41:22 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:41:22 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:41:22 [arg_utils.py:2664] 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 15:41:22 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:41:22 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:41:26.220000 4168102 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:41:26.247000 4168102 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:41:27 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:41:27 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:41:28 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:41:28 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:41:28 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:41:28 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:28 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4168102) INFO 09-23 15:41:29 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:41:29.029555315 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4168102) WARNING 09-23 15:41:29 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4168102) WARNING 09-23 15:41:29 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_aece089fe58d4103be76afbba283ffff backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [parallel_state.py:1982] 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=4168102) INFO 09-23 15:41:29 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4168102) WARNING 09-23 15:41:29 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4168102) WARNING 09-23 15:41:29 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:29 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:33 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.06 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:33 [weight_utils.py:881] 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=4168102) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 19293 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:50 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:50 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:50 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 20303 -> 20303 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:50 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.20 s +(StageEngineCoreProc_stage0_replica0 pid=4168102) WARNING 09-23 15:41:50 [scheduler.py:182] 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=4168102) INFO 09-23 15:41:50 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4168102) INFO 09-23 15:41:51 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:41:51 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:41:51 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:41:51 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:41:51 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:41:51 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 15:41:59.494000 4168210 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:41:59.538000 4168210 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:42:00 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:42:00 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:42:02 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:42:02 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:42:02 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:42:02 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4168210) INFO 09-23 15:42:03 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:42:04.364823574 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4168210) WARNING 09-23 15:42:04 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4168210) WARNING 09-23 15:42:04 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4168210) INFO 09-23 15:42:04 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_8835b78aaeee4981b46f13fffdc72e04 backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4168210) INFO 09-23 15:42:04 [parallel_state.py:1982] 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=4168210) WARNING 09-23 15:42:04 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168210) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4168210) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4168210) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4168210) [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=4168210) WARNING 09-23 15:42:12 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] StageEngineCoreProc failed to start. +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/context.py", line 286, in call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] output = hf_processor(**data, **allowed_kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/transformers_utils/processors/minicpmo.py", line 107, in __call__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] model_inputs = self._convert_omni_to_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/transformers_utils/processors/minicpmo.py", line 397, in _convert_omni_to_inputs +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] assert len(image_tags) == len(image_sizes[index]) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] AssertionError +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] The above exception was the direct cause of the following exception: +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3420, in apply +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3444, in _apply_hf_processor_main +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] prompt_ids = self._apply_hf_processor_text_only(prompt, tokenization_kwargs or {}) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1336, in _apply_hf_processor_text_only +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] prompt_ids, _, _ = self._apply_hf_processor_text_mm( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1301, in _apply_hf_processor_text_mm +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] processed_data = self._call_hf_processor( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1258, in _call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] return self.info.ctx.call_hf_processor( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/context.py", line 293, in call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] raise ValueError(msg) from exc +(StageEngineCoreProc_stage1_replica0 pid=4168210) ERROR 09-23 15:42:12 [stage_engine_core_proc.py:242] ValueError: Failed to apply MiniCPMOProcessor on data={'text': '()(./)()'} with kwargs={'truncation': False, 'return_tensors': 'pt'} +(StageEngineCoreProc_stage1_replica0 pid=4168210) Process StageEngineCoreProc_stage1_replica0: +(StageEngineCoreProc_stage1_replica0 pid=4168210) Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/context.py", line 286, in call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) output = hf_processor(**data, **allowed_kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/transformers_utils/processors/minicpmo.py", line 107, in __call__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) model_inputs = self._convert_omni_to_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/transformers_utils/processors/minicpmo.py", line 397, in _convert_omni_to_inputs +(StageEngineCoreProc_stage1_replica0 pid=4168210) assert len(image_tags) == len(image_sizes[index]) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) AssertionError +(StageEngineCoreProc_stage1_replica0 pid=4168210) +(StageEngineCoreProc_stage1_replica0 pid=4168210) The above exception was the direct cause of the following exception: +(StageEngineCoreProc_stage1_replica0 pid=4168210) +(StageEngineCoreProc_stage1_replica0 pid=4168210) Traceback (most recent call last): +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 314, in _bootstrap +(StageEngineCoreProc_stage1_replica0 pid=4168210) self.run() +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/multiprocessing/process.py", line 108, in run +(StageEngineCoreProc_stage1_replica0 pid=4168210) self._target(*self._args, **self._kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_core_proc.py", line 189, in run_stage_core +(StageEngineCoreProc_stage1_replica0 pid=4168210) engine_core = StageEngineCoreProc( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 1073, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) super().__init__( +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/core.py", line 133, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) self.model_executor = executor_class(vllm_config) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/tracing/otel.py", line 178, in sync_wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) return func(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/abstract.py", line 110, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) self._init_executor() +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/executor/uniproc_executor.py", line 69, in _init_executor +(StageEngineCoreProc_stage1_replica0 pid=4168210) self.driver_worker.init_device() +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/worker_base.py", line 335, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) self.worker.init_device() # type: ignore +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/init_timeline.py", line 343, in wrapper +(StageEngineCoreProc_stage1_replica0 pid=4168210) return fn(*args, **kwargs) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/platforms/cpu/worker/cpu_ar_worker.py", line 30, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) super().init_device() # type: ignore[misc] +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_worker.py", line 190, in init_device +(StageEngineCoreProc_stage1_replica0 pid=4168210) self.model_runner = CPUModelRunner(self.vllm_config, torch.device("cpu")) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/cpu_model_runner.py", line 31, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) super().__init__(vllm_config, device) +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py", line 915, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) MultiModalBudget(self.vllm_config, self.mm_registry) +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 94, in __init__ +(StageEngineCoreProc_stage1_replica0 pid=4168210) all_mm_max_toks_per_item = get_mm_max_toks_per_item( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/encoder_budget.py", line 33, in get_mm_max_toks_per_item +(StageEngineCoreProc_stage1_replica0 pid=4168210) mm_inputs = mm_registry.get_dummy_mm_inputs( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/registry.py", line 263, in get_dummy_mm_inputs +(StageEngineCoreProc_stage1_replica0 pid=4168210) mm_inputs = processor.apply( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3420, in apply +(StageEngineCoreProc_stage1_replica0 pid=4168210) return super().apply(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1849, in apply +(StageEngineCoreProc_stage1_replica0 pid=4168210) ) = self._cached_apply_hf_processor(inputs, timing_ctx) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1628, in _cached_apply_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) ) = self._apply_hf_processor_main( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py", line 3444, in _apply_hf_processor_main +(StageEngineCoreProc_stage1_replica0 pid=4168210) prompt_ids = self._apply_hf_processor_text_only(prompt, tokenization_kwargs or {}) +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1336, in _apply_hf_processor_text_only +(StageEngineCoreProc_stage1_replica0 pid=4168210) prompt_ids, _, _ = self._apply_hf_processor_text_mm( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1301, in _apply_hf_processor_text_mm +(StageEngineCoreProc_stage1_replica0 pid=4168210) processed_data = self._call_hf_processor( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/processor.py", line 1258, in _call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) return self.info.ctx.call_hf_processor( +(StageEngineCoreProc_stage1_replica0 pid=4168210) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(StageEngineCoreProc_stage1_replica0 pid=4168210) File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/multimodal/processing/context.py", line 293, in call_hf_processor +(StageEngineCoreProc_stage1_replica0 pid=4168210) raise ValueError(msg) from exc +(StageEngineCoreProc_stage1_replica0 pid=4168210) ValueError: Failed to apply MiniCPMOProcessor on data={'text': '()(./)()'} with kwargs={'truncation': False, 'return_tensors': 'pt'} +ERROR 09-23 15:42:14 [stage_runtime.py:265] [StageRuntime] Stage initialization failed; shutting down 1 initialized client(s) +ERROR 09-23 15:42:14 [stage_runtime.py:265] Traceback (most recent call last): +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:42:14 [stage_runtime.py:265] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:42:14 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:42:14 [stage_runtime.py:265] raise primary_exc +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:42:14 [stage_runtime.py:265] client = self._initialize_replica( +ERROR 09-23 15:42:14 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:42:14 [stage_runtime.py:265] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:42:14 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:42:14 [stage_runtime.py:265] launch_stack.close() +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:42:14 [stage_runtime.py:265] self.__exit__(None, None, None) +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:42:14 [stage_runtime.py:265] raise exc_details[1] +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:42:14 [stage_runtime.py:265] if cb(*exc_details): +ERROR 09-23 15:42:14 [stage_runtime.py:265] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:42:14 [stage_runtime.py:265] next(self.gen) +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:42:14 [stage_runtime.py:265] wait_for_engine_startup( +ERROR 09-23 15:42:14 [stage_runtime.py:265] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:42:14 [stage_runtime.py:265] raise RuntimeError( +ERROR 09-23 15:42:14 [stage_runtime.py:265] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:42:14 [core_client.py:689] [shutdown] MPClient: start timeout=default +INFO 09-23 15:42:14 [core_client.py:691] [shutdown] MPClient: stopping engine manager +INFO 09-23 15:42:14 [utils.py:615] [shutdown] Process manager: send sigterm to process StageEngineCoreProc_stage0_replica0 +WARNING 09-23 15:42:19 [utils.py:635] [shutdown] Process manager: force killing remaining processes count=1 +WARNING 09-23 15:42:19 [utils.py:640] [shutdown] Process manager: force killing remaining process StageEngineCoreProc_stage0_replica0 pid 4168102 +INFO 09-23 15:42:19 [core_client.py:693] [shutdown] MPClient: engine manager stopped +INFO 09-23 15:42:19 [core_client.py:694] [shutdown] MPClient: cleaning up background resources +INFO 09-23 15:42:19 [core_client.py:696] [shutdown] MPClient: complete +ERROR 09-23 15:42:19 [async_omni_engine.py:474] [AsyncOmniEngine] Orchestrator thread crashed +ERROR 09-23 15:42:19 [async_omni_engine.py:474] Traceback (most recent call last): +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator +ERROR 09-23 15:42:19 [async_omni_engine.py:474] loop.run_until_complete(_run_orchestrator()) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete +ERROR 09-23 15:42:19 [async_omni_engine.py:474] return future.result() +ERROR 09-23 15:42:19 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator +ERROR 09-23 15:42:19 [async_omni_engine.py:474] self._initialize_stages(stage_init_timeout) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages +ERROR 09-23 15:42:19 [async_omni_engine.py:474] self._initialize_stages_impl(stage_init_timeout) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl +ERROR 09-23 15:42:19 [async_omni_engine.py:474] self._runtime.initialize() +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize +ERROR 09-23 15:42:19 [async_omni_engine.py:474] raise exc +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize +ERROR 09-23 15:42:19 [async_omni_engine.py:474] initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas +ERROR 09-23 15:42:19 [async_omni_engine.py:474] raise primary_exc +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group +ERROR 09-23 15:42:19 [async_omni_engine.py:474] client = self._initialize_replica( +ERROR 09-23 15:42:19 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica +ERROR 09-23 15:42:19 [async_omni_engine.py:474] return self._initialize_local_llm_replica(plan, stage_init_timeout) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica +ERROR 09-23 15:42:19 [async_omni_engine.py:474] launch_stack.close() +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close +ERROR 09-23 15:42:19 [async_omni_engine.py:474] self.__exit__(None, None, None) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] raise exc_details[1] +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] if cb(*exc_details): +ERROR 09-23 15:42:19 [async_omni_engine.py:474] ^^^^^^^^^^^^^^^^ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ +ERROR 09-23 15:42:19 [async_omni_engine.py:474] next(self.gen) +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica +ERROR 09-23 15:42:19 [async_omni_engine.py:474] wait_for_engine_startup( +ERROR 09-23 15:42:19 [async_omni_engine.py:474] File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup +ERROR 09-23 15:42:19 [async_omni_engine.py:474] raise RuntimeError( +ERROR 09-23 15:42:19 [async_omni_engine.py:474] RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +INFO 09-23 15:42:19 [async_omni_engine.py:1807] [AsyncOmniEngine] Shutting down Orchestrator +Exception in thread orchestrator: +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} +Traceback (most recent call last): + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1075, in _bootstrap_inner + self.run() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/threading.py", line 1012, in run + self._target(*self._args, **self._kwargs) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 468, in _bootstrap_orchestrator + loop.run_until_complete(_run_orchestrator()) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 424, in _run_orchestrator + self._initialize_stages(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 350, in _initialize_stages + self._initialize_stages_impl(stage_init_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 371, in _initialize_stages_impl + self._runtime.initialize() + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 278, in initialize + raise exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 252, in initialize + initialized_clients = self._initialize_stage_replicas(stage_plans, self._stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 589, in _initialize_stage_replicas + raise primary_exc + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 550, in _init_group + client = self._initialize_replica( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 828, in _initialize_replica + return self._initialize_local_llm_replica(plan, stage_init_timeout) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_runtime.py", line 934, in _initialize_local_llm_replica + launch_stack.close() + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 618, in close + self.__exit__(None, None, None) + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 610, in __exit__ + raise exc_details[1] + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 595, in __exit__ + if cb(*exc_details): + ^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 144, in __exit__ + next(self.gen) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/stage_engine_startup.py", line 1211, in launch_stage_replica + wait_for_engine_startup( + File "/home/zhout/project/edge_infer/.venvs/omni-cpu/lib/python3.12/site-packages/vllm/v1/engine/utils.py", line 1286, in wait_for_engine_startup + raise RuntimeError( +RuntimeError: Engine core initialization failed. See root cause above. Failed core proc(s): {} + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 519, in + main(args) + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 283, in main + omni = Omni(**omni_kwargs) + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/entrypoints/omni_base.py", line 223, in __init__ + self.engine = AsyncOmniEngine( + ^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 305, in __init__ + self._wait_for_orchestrator_init(startup_future, startup_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 539, in _wait_for_orchestrator_init + startup_future.result( + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 456, in result + return self.__get_result() + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result + raise self._exception +RuntimeError: Orchestrator initialization failed: Engine core initialization failed. See root cause above. Failed core proc(s): {} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat3.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat3.log new file mode 100644 index 000000000..a11c09236 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat3.log @@ -0,0 +1,587 @@ +W0923 15:43:20.838000 4168432 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:43:20.864000 4168432 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:43:21 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:43:21 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:43:22 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:43:22 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:43:22 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:43:23 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:43:23 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:43:23 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:43:23 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:43:23 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:43:23 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:43:23 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:43:23 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:43:23 [arg_utils.py:1719] 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 15:43:23 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:43:23 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:43:23 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:43:24 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:43:24 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:43:24 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:43:24 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:43:24 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:43:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:43:24 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:43:24 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:43:24 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:43:24 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:43:24 [arg_utils.py:1719] 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 15:43:24 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:43:24 [model.py:1965] Using max model len 512 +WARNING 09-23 15:43:24 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:43:24 [model.py:1965] Using max model len 512 +INFO 09-23 15:43:24 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:43:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:43:24 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:43:24 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:43:24 [arg_utils.py:1719] 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 15:43:24 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:43:24 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:43:24 [arg_utils.py:2664] 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 15:43:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:43:24 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:43:28.412000 4168462 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:43:28.440000 4168462 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:43:29 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:43:29 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:43:30 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:43:30 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:43:30 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:43:30 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:31 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4168462) INFO 09-23 15:43:32 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:43:32.228349802 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4168462) WARNING 09-23 15:43:32 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4168462) WARNING 09-23 15:43:32 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_f8d63e300ac346b79645aff6c0c6e5a8 backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [parallel_state.py:1982] 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=4168462) INFO 09-23 15:43:32 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4168462) WARNING 09-23 15:43:32 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4168462) WARNING 09-23 15:43:32 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:32 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:35 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.11 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:35 [weight_utils.py:881] 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=4168462) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 18645 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:57 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:57 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:57 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 19662 -> 19662 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:43:57 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.47 s +(StageEngineCoreProc_stage0_replica0 pid=4168462) WARNING 09-23 15:43:57 [scheduler.py:182] 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=4168462) INFO 09-23 15:43:58 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4168462) INFO 09-23 15:44:08 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:44:08 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:44:08 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:44:08 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:44:08 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:44:08 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 15:44:14.751000 4168582 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:44:14.792000 4168582 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:44:16 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:44:16 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:44:18 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:44:18 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:44:18 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:44:18 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:19 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:44:20.299950745 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:20 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:20 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:20 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_c745d19853d047d0b9c64ec8c42c5ccc backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:20 [parallel_state.py:1982] 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=4168582) WARNING 09-23 15:44:20 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4168582) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4168582) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4168582) [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=4168582) WARNING 09-23 15:44:28 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:28 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:28 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:29 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:29 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 8.79 GiB. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:29 [weight_utils.py:888] 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 (8.79 GiB). +(StageEngineCoreProc_stage1_replica0 pid=4168582) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 1447 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:32 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:32 [kv_cache_utils.py:1869] GPU KV cache size: 17,408 tokens, Maximum concurrency for 512 tokens per request: 34.00x +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:33 [memory.py:91] Released -0 MiB after warm-up (anonymous RSS 2469 -> 2469 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:33 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.31 s +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:33 [scheduler.py:182] 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=4168582) WARNING 09-23 15:44:33 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) WARNING 09-23 15:44:33 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:33 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4168582) INFO 09-23 15:44:33 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:44:33 [stage_runtime.py:943] [StageRuntime] Stage 1 engine startup completed +INFO 09-23 15:44:33 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-1 [rep-0] initializing EngineCore +INFO 09-23 15:44:33 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-1 [rep-0] EngineCore running +INFO 09-23 15:44:33 [stage_runtime.py:958] [StageRuntime] Stage 1 initialized +INFO 09-23 15:44:33 [stage_runtime.py:853] [stage_init] Stage-2 set runtime devices: 0 +W0923 15:44:39.263000 4168702 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:44:39.290000 4168702 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:44:40 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:44:40 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:44:41 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:44:42 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:44:42 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:44:42 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [4096], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:44:42.892659826 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage2_replica0 pid=4168702) WARNING 09-23 15:44:42 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage2_replica0 pid=4168702) WARNING 09-23 15:44:42 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_8bf2c7708ac8464e8a951a827bd46d53 backend=gloo +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [parallel_state.py:1982] 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=4168702) INFO 09-23 15:44:42 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 6.82 GiB. +(StageEngineCoreProc_stage2_replica0 pid=4168702) INFO 09-23 15:44:42 [weight_utils.py:888] 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 (6.82 GiB). +(StageEngineCoreProc_stage2_replica0 pid=4168702) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 + main(args) + File "/home/zhout/project/edge_infer/vllm-omni-edge/examples/offline_inference/minicpmo/end2end.py", line 283, in main + omni = Omni(**omni_kwargs) + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/entrypoints/omni_base.py", line 223, in __init__ + self.engine = AsyncOmniEngine( + ^^^^^^^^^^^^^^^^ + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 305, in __init__ + self._wait_for_orchestrator_init(startup_future, startup_timeout) + File "/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/engine/async_omni_engine.py", line 539, in _wait_for_orchestrator_init + startup_future.result( + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 456, in result + return self.__get_result() + ^^^^^^^^^^^^^^^^^^^ + File "/home/zhout/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result + raise self._exception +RuntimeError: Orchestrator initialization failed: Engine core initialization failed. See root cause above. Failed core proc(s): {} diff --git a/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat4.log b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat4.log new file mode 100644 index 000000000..d68e5ee05 --- /dev/null +++ b/benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/minicpmo/minicpmo_cpu_full_compat4.log @@ -0,0 +1,234 @@ +W0923 15:45:57.706000 4168920 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:45:57.732000 4168920 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:45:59 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:45:59 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:46:00 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:46:00 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:46:00 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:46:00 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:46:00 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:46:00 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:46:01 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:46:01 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:46:01 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:46:01 [arg_utils.py:1719] 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 15:46:01 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:46:01 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:46:01 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:46:01 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:46:01 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:46:01 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:46:01 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:46:01 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:46:01 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:46:01 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:46:01 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:46:01 [arg_utils.py:1719] 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 15:46:01 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:46:01 [model.py:1965] Using max model len 512 +WARNING 09-23 15:46:01 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:46:01 [model.py:1965] Using max model len 512 +INFO 09-23 15:46:01 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:46:01 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:46:01 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:46:01 [arg_utils.py:1719] 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 15:46:01 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:46:01 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:46:01 [arg_utils.py:2664] 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 15:46:01 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:46:01 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:46:05.282000 4168948 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:46:05.308000 4168948 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:46:06 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:46:06 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:46:07 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:46:07 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:46:07 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:46:07 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:07 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4168948) INFO 09-23 15:46:08 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:46:08.986759514 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4168948) WARNING 09-23 15:46:08 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4168948) WARNING 09-23 15:46:08 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_a3ba980eb94d4dfcb8fd518afa3242cb backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [parallel_state.py:1982] 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=4168948) INFO 09-23 15:46:08 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4168948) WARNING 09-23 15:46:08 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4168948) WARNING 09-23 15:46:08 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:08 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:12 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.06 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:12 [weight_utils.py:881] 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=4168948) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 19304 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:23 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:23 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:23 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 20314 -> 20314 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:23 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.52 s +(StageEngineCoreProc_stage0_replica0 pid=4168948) WARNING 09-23 15:46:23 [scheduler.py:182] 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=4168948) INFO 09-23 15:46:23 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4168948) INFO 09-23 15:46:24 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:46:24 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:46:24 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:46:24 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:46:24 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:46:24 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 15:46:31.117000 4169043 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:46:31.158000 4169043 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:46:32 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:46:32 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:46:34 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:46:34 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:46:34 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:46:34 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:35 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:46:36.481340156 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:36 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:36 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:36 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_1e217dea20904802b2167eaa6f6f2a31 backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:36 [parallel_state.py:1982] 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=4169043) WARNING 09-23 15:46:36 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4169043) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4169043) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4169043) [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=4169043) WARNING 09-23 15:46:45 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:45 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:45 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:45 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:45 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 8.10 GiB. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:45 [weight_utils.py:888] 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 (8.10 GiB). +(StageEngineCoreProc_stage1_replica0 pid=4169043) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 1462 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:49 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:49 [kv_cache_utils.py:1869] GPU KV cache size: 17,408 tokens, Maximum concurrency for 512 tokens per request: 34.00x +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:49 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 2484 -> 2484 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:49 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.16 s +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:49 [scheduler.py:182] 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=4169043) WARNING 09-23 15:46:49 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) WARNING 09-23 15:46:50 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:50 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4169043) INFO 09-23 15:46:50 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:46:50 [stage_runtime.py:943] [StageRuntime] Stage 1 engine startup completed +INFO 09-23 15:46:50 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-1 [rep-0] initializing EngineCore +INFO 09-23 15:46:50 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-1 [rep-0] EngineCore running +INFO 09-23 15:46:50 [stage_runtime.py:958] [StageRuntime] Stage 1 initialized +INFO 09-23 15:46:50 [stage_runtime.py:853] [stage_init] Stage-2 set runtime devices: 0 +W0923 15:46:55.369000 4169162 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:46:55.399000 4169162 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:46:56 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:46:56 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:46:57 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:46:57 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:46:57 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:46:57 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [4096], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 15:46:58.367332736 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage2_replica0 pid=4169162) WARNING 09-23 15:46:58 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage2_replica0 pid=4169162) WARNING 09-23 15:46:58 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_47ba1048249e4d048745ce4f237328fc backend=gloo +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [parallel_state.py:1982] 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=4169162) INFO 09-23 15:46:58 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 6.17 GiB. +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:46:58 [weight_utils.py:888] 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 (6.17 GiB). +(StageEngineCoreProc_stage2_replica0 pid=4169162) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 3969 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:47:08 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 3969 -> 3969 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:47:08 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.00 s +(StageEngineCoreProc_stage2_replica0 pid=4169162) WARNING 09-23 15:47:09 [scheduler.py:182] 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=4169162) INFO 09-23 15:47:09 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=4169162) WARNING 09-23 15:47:10 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage2_replica0 pid=4169162) WARNING 09-23 15:47:10 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:47:10 [stage_runtime.py:943] [StageRuntime] Stage 2 engine startup completed +INFO 09-23 15:47:10 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-2 [rep-0] initializing EngineCore +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:47:10 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage2_replica0 pid=4169162) INFO 09-23 15:47:10 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +INFO 09-23 15:47:10 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-2 [rep-0] EngineCore running +INFO 09-23 15:47:10 [stage_runtime.py:958] [StageRuntime] Stage 2 initialized +INFO 09-23 15:47:14 [orchestrator.py:604] [Orchestrator] Starting event loop +INFO 09-23 15:47:14 [async_omni_engine.py:323] [AsyncOmniEngine] Orchestrator ready with 3 stages +INFO 09-23 15:47:14 [omni_base.py:235] [Omni] AsyncOmniEngine initialized in 73.65 seconds +INFO 09-23 15:47:14 [omni_base.py:255] [Omni] Initialized with 3 stages for model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +WARNING 09-23 15:47:14 [input_processor.py:296] Passing raw prompts to InputProcessor is deprecated and will be removed in v0.18. You should instead pass the outputs of Renderer.render_cmpl() or Renderer.render_chat(). + Processed prompts: 0%| | 0/1 [00:00 is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:59:43.041000 4170603 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:59:44 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:59:44 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:59:46 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:59:46 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:59:46 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:59:46 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +INFO 09-23 15:59:47 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:59:47 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:59:47 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 3 stages +INFO 09-23 15:59:47 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:59:47 [initialization.py:356] Loaded OmniTransferConfig with 1 connector configurations +WARNING 09-23 15:59:47 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:59:47 [arg_utils.py:1719] 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 15:59:47 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:59:47 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:59:47 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:59:48 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:59:48 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:59:48 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:59:48 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:59:48 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:59:48 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:59:48 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:59:48 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +WARNING 09-23 15:59:48 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:59:48 [arg_utils.py:1719] 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 15:59:48 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:59:48 [model.py:1965] Using max model len 512 +WARNING 09-23 15:59:48 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:59:48 [model.py:1965] Using max model len 512 +INFO 09-23 15:59:48 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=512. +INFO 09-23 15:59:48 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:59:48 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:59:48 [arg_utils.py:1719] 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 15:59:48 [model.py:672] Resolved architecture: MiniCPMO45Code2Wav +INFO 09-23 15:59:48 [model.py:1965] Using max model len 4096 +WARNING 09-23 15:59:48 [arg_utils.py:2664] 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 15:59:48 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:59:48 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +W0923 15:59:51.983000 4170635 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:59:52.010000 4170635 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:59:53 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:59:53 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 15:59:54 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:59:54 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:59:54 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:59:54 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:54 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4170635) INFO 09-23 15:59:55 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:59:55.874166122 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4170635) WARNING 09-23 15:59:55 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4170635) WARNING 09-23 15:59:55 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_36a1b45f19114691ab18107ff3f31f93 backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [parallel_state.py:1982] 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=4170635) INFO 09-23 15:59:55 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4170635) WARNING 09-23 15:59:55 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4170635) WARNING 09-23 15:59:55 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:55 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:59 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.11 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 15:59:59 [weight_utils.py:881] 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=4170635) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 19304 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 16:00:14 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 16:00:14 [kv_cache_utils.py:1869] GPU KV cache size: 7,168 tokens, Maximum concurrency for 2,048 tokens per request: 3.50x +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 16:00:14 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 20314 -> 20314 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 16:00:14 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.17 s +(StageEngineCoreProc_stage0_replica0 pid=4170635) WARNING 09-23 16:00:14 [scheduler.py:182] 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=4170635) INFO 09-23 16:00:14 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage0_replica0 pid=4170635) INFO 09-23 16:00:15 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 16:00:15 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 16:00:15 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 16:00:15 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 16:00:15 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 16:00:15 [stage_runtime.py:853] [stage_init] Stage-1 set runtime devices: 0 +W0923 16:00:20.857000 4170732 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 16:00:20.889000 4170732 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 16:00:22 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 16:00:22 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 16:00:23 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 16:00:24 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 16:00:24 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 16:00:24 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:24 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [512], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 16:00:25.714479784 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:25 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:25 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:25 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_7f40d35b6b1a418eb13eb3038a5e4d8e backend=gloo +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:25 [parallel_state.py:1982] 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=4170732) WARNING 09-23 16:00:25 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) [transformers] `MiniCPMOProcessor` defines `image_processor_class = 'AutoImageProcessor'`, which is deprecated. Register the correct mapping in `AutoImageProcessor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4170732) [transformers] Requested torchvision backend is not available. Falling back to pil backend. +(StageEngineCoreProc_stage1_replica0 pid=4170732) [transformers] `MiniCPMOProcessor` defines `feature_extractor_class = 'WhisperFeatureExtractor'`, which is deprecated. Register the correct mapping in `AutoFeatureExtractor` instead. +(StageEngineCoreProc_stage1_replica0 pid=4170732) [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=4170732) WARNING 09-23 16:00:34 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:34 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:34 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:34 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:34 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:34 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:35 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 8.14 GiB. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:35 [weight_utils.py:888] 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 (8.14 GiB). +(StageEngineCoreProc_stage1_replica0 pid=4170732) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 1461 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:37 [cpu_worker.py:255] Explicitly set (1.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:37 [kv_cache_utils.py:1869] GPU KV cache size: 17,408 tokens, Maximum concurrency for 512 tokens per request: 34.00x +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:39 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 2483 -> 2483 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:39 [core.py:354] init engine (profile, create kv cache, warmup model) took 1.50 s +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:39 [scheduler.py:182] 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=4170732) WARNING 09-23 16:00:39 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) WARNING 09-23 16:00:39 [cpu_worker.py:153] CPU backend doesn't allow to use `torch.set_num_threads` after the thread binding, skip it. +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:39 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage1_replica0 pid=4170732) INFO 09-23 16:00:39 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 16:00:39 [stage_runtime.py:943] [StageRuntime] Stage 1 engine startup completed +INFO 09-23 16:00:39 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-1 [rep-0] initializing EngineCore +INFO 09-23 16:00:40 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-1 [rep-0] EngineCore running +INFO 09-23 16:00:40 [stage_runtime.py:958] [StageRuntime] Stage 1 initialized +INFO 09-23 16:00:40 [stage_runtime.py:853] [stage_init] Stage-2 set runtime devices: 0 +W0923 16:00:44.331000 4170848 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 16:00:44.358000 4170848 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 16:00:45 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 16:00:45 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +INFO 09-23 16:00:46 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 16:00:46 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 16:00:46 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 16:00:46 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [4096], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, enable_cutedsl_warmup=True, enable_jit_warmup=True, enable_bf16x3_router_gemm=False, moe_backend='auto', linear_backend='auto') +[W923 16:00:47.844157663 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage2_replica0 pid=4170848) WARNING 09-23 16:00:47 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage2_replica0 pid=4170848) WARNING 09-23 16:00:47 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_d02d9dab0eb747c2a451e899387fbf98 backend=gloo +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [parallel_state.py:1982] 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=4170848) INFO 09-23 16:00:47 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 6.67 GiB. +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:47 [weight_utils.py:888] 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 (6.67 GiB). +(StageEngineCoreProc_stage2_replica0 pid=4170848) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 3964 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:55 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 3964 -> 3964 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:55 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.00 s +(StageEngineCoreProc_stage2_replica0 pid=4170848) WARNING 09-23 16:00:56 [scheduler.py:182] 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=4170848) INFO 09-23 16:00:56 [factory.py:46] Created connector: SharedMemoryConnector +(StageEngineCoreProc_stage2_replica0 pid=4170848) WARNING 09-23 16:00:56 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage2_replica0 pid=4170848) WARNING 09-23 16:00:56 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:56 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage2_replica0 pid=4170848) INFO 09-23 16:00:56 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +INFO 09-23 16:00:56 [stage_runtime.py:943] [StageRuntime] Stage 2 engine startup completed +INFO 09-23 16:00:56 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-2 [rep-0] initializing EngineCore +INFO 09-23 16:00:56 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-2 [rep-0] EngineCore running +INFO 09-23 16:00:56 [stage_runtime.py:958] [StageRuntime] Stage 2 initialized +INFO 09-23 16:01:00 [orchestrator.py:604] [Orchestrator] Starting event loop +INFO 09-23 16:01:00 [async_omni_engine.py:323] [AsyncOmniEngine] Orchestrator ready with 3 stages +INFO 09-23 16:01:00 [omni_base.py:235] [Omni] AsyncOmniEngine initialized in 73.88 seconds +INFO 09-23 16:01:00 [omni_base.py:255] [Omni] Initialized with 3 stages for model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +WARNING 09-23 16:01:01 [input_processor.py:296] Passing raw prompts to InputProcessor is deprecated and will be removed in v0.18. You should instead pass the outputs of Renderer.render_cmpl() or Renderer.render_chat(). + Processed prompts: 0%| | 0/1 [00:00 vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +W0923 15:34:52.858000 4167184 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:34:52.905000 4167184 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:34:54 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:34:54 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +INFO 09-23 15:34:56 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:34:56 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:34:56 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:34:56 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +==================== + vllm version: 0.28.0 + ==================== +INFO 09-23 15:34:56 [omni_base.py:216] [Omni] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:34:56 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +INFO 09-23 15:34:57 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 1 stages +INFO 09-23 15:34:57 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn +INFO 09-23 15:34:57 [initialization.py:356] Loaded OmniTransferConfig with 0 connector configurations +WARNING 09-23 15:34:57 [utils.py:501] Dropping unknown OmniEngineArgs field 'inline_diffusion' (not declared on the dataclass) +WARNING 09-23 15:34:57 [utils.py:501] Dropping unknown OmniEngineArgs field 'shm_threshold_bytes' (not declared on the dataclass) +WARNING 09-23 15:34:57 [arg_utils.py:1719] 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 15:34:57 [model.py:672] Resolved architecture: MiniCPMO45OmniForConditionalGeneration +INFO 09-23 15:34:57 [model.py:1965] Using max model len 2048 +WARNING 09-23 15:34:57 [model.py:963] Model does not support mm_device_do_normalize, forcing mm_device_do_normalize = False. +INFO 09-23 15:34:58 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +INFO 09-23 15:34:58 [model.py:875] Disabled mm_prefix attention mode because multimodal inputs are configuration-disabled. Attention backends without mm_prefix support may now be selected. +INFO 09-23 15:34:58 [scheduler.py:242] Chunked prefill is enabled with max_num_batched_tokens=2048. +WARNING 09-23 15:34:58 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +WARNING 09-23 15:34:58 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +INFO 09-23 15:34:58 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +WARNING 09-23 15:34:58 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +INFO 09-23 15:34:58 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +INFO 09-23 15:34:58 [stage_runtime.py:853] [stage_init] Stage-0 set runtime devices: 0 +/home/zhout/project/edge_infer/vllm-omni-edge/vllm_omni/version.py:55: RuntimeWarning: vLLM and vLLM-Omni appear to have mismatched major/minor versions: + --> vLLM-Omni version 0.29.0rc2.dev71+g00510ce38.d20260922 + --> vLLM version 0.28.0 +This will likely cause compatibility issues. + warn_if_misaligned_vllm_version() +W0923 15:35:01.933000 4167214 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +W0923 15:35:01.959000 4167214 torch/utils/_pytree.py:630] is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release. +WARNING 09-23 15:35:02 [importing.py:65] Triton is installed, but doesn't include CPU backend. Disabling Triton. +INFO 09-23 15:35:02 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available. +INFO 09-23 15:35:04 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed. +INFO 09-23 15:35:04 [patch.py:510] inductor factorable-divisibility patch: installed. +INFO 09-23 15:35:04 [patch.py:640] CPU AOT compile-cache load shim installed: compiled models are reused across engine starts instead of being recompiled. +INFO 09-23 15:35:04 [patch.py:750] CPU weight-load memory release installed (set VLLM_OMNI_CPU_RELEASE_MEMORY=0 to disable). +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:04 [core.py:122] Initializing a V1 LLM engine (v0.28.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=True, quantization=None, quantization_config=None, enforce_eager=True, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cpu, 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, 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': None, 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False}, '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': None, '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=['native'], fused_add_rms_norm=['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=4167214) INFO 09-23 15:35:05 [registry.py:141] All limits of multimodal modalities supported by the model are set to 0, running in text-only mode. +[W923 15:35:05.941299642 utils.cpp:68] Warning: NUMA binding: Using MEMBIND policy for memory allocation on the NUMA nodes (0). Memory allocations will be strictly bound to these NUMA nodes. (function init_cpu_memory_env) +(StageEngineCoreProc_stage0_replica0 pid=4167214) WARNING 09-23 15:35:05 [vllm.py:652] Model Runner V2 requires Triton; using the V1 model runner instead. +(StageEngineCoreProc_stage0_replica0 pid=4167214) WARNING 09-23 15:35:05 [cpu_worker.py:127] libiomp is not found in LD_PRELOAD. For best performance, please follow the section `set LD_PRELOAD` in https://docs.vllm.ai/en/latest/getting_started/installation/cpu/ to setup required pre-loaded libraries. +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [parallel_state.py:1638] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_5a5a70874ca14e3ab8e90cde5a3e0034 backend=gloo +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [parallel_state.py:1982] 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=4167214) INFO 09-23 15:35:05 [cpu_model_runner.py:131] Starting to load model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5... +(StageEngineCoreProc_stage0_replica0 pid=4167214) WARNING 09-23 15:35:05 [vllm.py:1285] Enforce eager set, disabling torch.compile and CUDAGraphs. This is equivalent to setting -cc.mode=none -cc.cudagraph_mode=none +(StageEngineCoreProc_stage0_replica0 pid=4167214) WARNING 09-23 15:35:05 [vllm.py:1354] Inductor compilation was disabled by user settings, optimizations settings that are only active during inductor compilation will be ignored. +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [compilation.py:329] Enabled custom fusions: norm_quant, act_quant +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:05 [selector.py:217] Using HND KV cache layout for CPU_ATTN backend. +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:09 [weight_utils.py:858] Filesystem type for checkpoints: EXT4. Checkpoint size: 17.46 GiB. Available RAM: 27.01 GiB. +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:09 [weight_utils.py:881] 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=4167214) Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00 19278 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:29 [cpu_worker.py:255] Explicitly set (2.0/30.91) GiB for KV cache on node 0. +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:29 [kv_cache_utils.py:1869] GPU KV cache size: 14,464 tokens, Maximum concurrency for 2,048 tokens per request: 7.06x +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:29 [memory.py:91] Released 0 MiB after warm-up (anonymous RSS 21316 -> 21316 MiB) via ['libc.so.6:malloc_trim', 'libtcmalloc_minimal.so.4:MallocExtension_ReleaseFreeMemory'] +(StageEngineCoreProc_stage0_replica0 pid=4167214) INFO 09-23 15:35:29 [core.py:354] init engine (profile, create kv cache, warmup model) took 0.27 s +(StageEngineCoreProc_stage0_replica0 pid=4167214) WARNING 09-23 15:35:29 [scheduler.py:182] 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=4167214) INFO 09-23 15:35:29 [kernel.py:308] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']) +INFO 09-23 15:35:29 [stage_runtime.py:943] [StageRuntime] Stage 0 engine startup completed +INFO 09-23 15:35:30 [stage_engine_core_client.py:159] [StageEngineCoreClient] stage-0 [rep-0] initializing EngineCore +INFO 09-23 15:35:30 [stage_engine_core_client.py:215] [StageEngineCoreClient] stage-0 [rep-0] EngineCore running +INFO 09-23 15:35:30 [stage_runtime.py:958] [StageRuntime] Stage 0 initialized +INFO 09-23 15:35:32 [orchestrator.py:604] [Orchestrator] Starting event loop +INFO 09-23 15:35:32 [async_omni_engine.py:323] [AsyncOmniEngine] Orchestrator ready with 1 stages +INFO 09-23 15:35:32 [omni_base.py:235] [Omni] AsyncOmniEngine initialized in 36.02 seconds +INFO 09-23 15:35:32 [omni_base.py:255] [Omni] Initialized with 1 stages for model /home/zhout/project/edge_infer/models/MiniCPM-o-4_5 +WARNING 09-23 15:35:33 [input_processor.py:296] Passing raw prompts to InputProcessor is deprecated and will be removed in v0.18. You should instead pass the outputs of Renderer.render_cmpl() or Renderer.render_chat(). + Processed prompts: 0%| | 0/1 [00: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�RWshh^M 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 SvV$LMh3#gZMDl|B=>G$qC|?5r literal 0 HcmV?d00001 diff --git a/benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/summary/README.md b/benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/summary/README.md index 5b69fb569..9a9c187be 100644 --- a/benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/summary/README.md +++ b/benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/summary/README.md @@ -1,6 +1,6 @@ # E2E check and profiling -All 60 pairings have a disposition. The timing tables below remain the 2026-09-22 measurements. The configuration matrix and affected per-cell reasons incorporate the [2026-09-23 scoped recovery runs](../../../e2e_recovery_20260923/README.md); those single-request or short-stream runs are not additional completed profiling protocols. Profiling completion does not imply full release qualification. +All 60 pairings have a disposition. The timing tables below remain the 2026-09-22 measurements. The configuration matrix and affected per-cell reasons incorporate the [2026-09-23 scoped recovery runs](../../../e2e_recovery_20260923/README.md) and [CPU expansion](../../../e2e_expansion_20260923/README.md). The CPU expansion adds a separate 20-request serial MiniCPM-o text-to-speech profile; other new paths are single-request or short-stream runs. Profiling completion does not imply full release qualification. ## Configuration × model @@ -8,10 +8,10 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i | Device | Spark-X2.5 | Qwen3-TTS 0.6B CustomVoice | Qwen3.8-27B | MiniCPM-o 4.5 | InternVLA-A1 | |---|---|---|---|---|---| -| PC HX370: CPU / WSL | profile completed | scoped E2E: short stream | NOT E2E | NOT E2E | NOT E2E | -| PC HX370: CPU / native Windows | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E | +| PC HX370: CPU / WSL | profile completed | scoped E2E: short stream | NOT E2E | scoped E2E: text → speech | synthetic policy pass | +| PC HX370: CPU / native Windows | NOT E2E | NOT E2E | NOT E2E | NOT E2E | synthetic policy pass | | PC HX370 + RTX 5090 Laptop / WSL | profile completed | profile completed | scoped E2E: text + image | scoped E2E: text → speech | synthetic policy pass | -| PC HX370 + RTX 5090 Laptop / Windows | profile completed | profile completed | NOT E2E | NOT E2E | NOT E2E | +| PC HX370 + RTX 5090 Laptop / Windows | profile completed | profile completed | NOT E2E | NOT E2E | synthetic policy pass | | PC HX370 + Radeon 890M / Windows worker | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E | | PC HX370 + AMD NPU / Windows worker | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E | | PC CPU+iGPU+NPU +/- discrete GPU, joint model execution | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E | @@ -28,13 +28,13 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i | PC HX370: CPU / WSL | Spark-X2.5 | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Qualify a matching vLLM 0.29 CPU build and token parity separately. | | PC HX370: CPU / WSL | Qwen3-TTS 0.6B CustomVoice | SCOPED_E2E | The 2026-09-23 compatibility fix enabled real-weight two-frame PCM and four short-stream requests, including cancellation recovery. One measured request generated 3.04 s of audio in 17.02 s (RTF 5.60) with four simulated playback underruns. The CPU wheel remains vLLM 0.28 versus Omni 0.29. | Qualify a matching CPU runtime, speech quality, uninterrupted playback and sustained load; [recovery evidence](../../../e2e_recovery_20260923/README.md). | | PC HX370: CPU / WSL | Qwen3.8-27B | NOT_E2E_PROFILEABLE | No compatible CPU artifact/deployment for this model was found in the checked model roots. Available Qwen 27B FP8/NVFP4 CUDA artifacts do not establish a CPU route. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | -| PC HX370: CPU / WSL | MiniCPM-o 4.5 | NOT_E2E_PROFILEABLE | The exact MiniCPM-o 4.5 checkpoint is now downloaded and SHA-256 verified, but no CPU memory admission or complete CPU pipeline has been run. The RTX result does not establish CPU support. | Validate a CPU execution plan and complete text/speech path under its actual memory budget; [weight evidence](../../../e2e_recovery_20260923/evidence/weights/minicpmo.json). | -| PC HX370: CPU / WSL | InternVLA-A1 | NOT_E2E_PROFILEABLE | Base and Place_Markpen checkpoints are now SHA-256 verified, but the policy has only run on CUDA with synthetic inputs. No CPU policy forward or task-quality result exists. | Admit the full CPU model and run the policy on real observations with reference actions; [recovery evidence](../../../e2e_recovery_20260923/README.md). | +| PC HX370: CPU / WSL | MiniCPM-o 4.5 | SCOPED_E2E | The verified checkpoint completed real three-stage text-to-text+speech requests on the vLLM 0.28 CPU backend: coherent text and nonzero 5.2 s WAVs. A separate 1-warmup/20-measured serial run had request wall p50 21.86 s/p95 22.97 s, with one consistent thinker token sequence. WSL swap reached 5.75 GB; speech meaning was not checked. | Validate speech intelligibility, other input modalities, concurrency, interruption, admission/loading peak and sustained thermal behavior before broader CPU qualification; [CPU evidence](../../../e2e_expansion_20260923/README.md). | +| PC HX370: CPU / WSL | InternVLA-A1 | SYNTHETIC_POLICY_PASS | The Place_Markpen checkpoint strict-loaded in CPU-only PyTorch and produced finite `[1, 50, 32]` actions from zero observations/noise in one 3.25 s forward. Compared with the same CUDA checkpoint/input, relative L2 error was 1.30% and cosine similarity 0.999917; no task-quality tolerance is established. | Validate real observations against reference actions, units/timestamps, repeated latency and memory before robot-task qualification; [CPU evidence](../../../e2e_expansion_20260923/README.md). | | PC HX370: CPU / native Windows | Spark-X2.5 | NOT_E2E_PROFILEABLE | The installed native Windows vLLM extension lacks cpu_attn_reshape_and_cache and cpu_attn_get_scheduler_metadata. The separate ORT CPU graph worker is not a whole-model text/TTS adapter; a qualified CPU build/binding is missing. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | | PC HX370: CPU / native Windows | Qwen3-TTS 0.6B CustomVoice | NOT_E2E_PROFILEABLE | The installed native Windows vLLM extension lacks cpu_attn_reshape_and_cache and cpu_attn_get_scheduler_metadata. The separate ORT CPU graph worker is not a whole-model text/TTS adapter; a qualified CPU build/binding is missing. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | | PC HX370: CPU / native Windows | Qwen3.8-27B | NOT_E2E_PROFILEABLE | The installed native Windows vLLM extension lacks cpu_attn_reshape_and_cache and cpu_attn_get_scheduler_metadata. The separate ORT CPU graph worker is not a whole-model text/TTS adapter; a qualified CPU build/binding is missing. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | | PC HX370: CPU / native Windows | MiniCPM-o 4.5 | NOT_E2E_PROFILEABLE | The exact checkpoint is verified in the local Linux model store, but the installed native Windows vLLM extension lacks required CPU attention operators; no native full-model run or memory admission exists. | Establish a native Windows CPU backend and model access, then run the full requested path; [weight evidence](../../../e2e_recovery_20260923/evidence/weights/minicpmo.json). | -| PC HX370: CPU / native Windows | InternVLA-A1 | NOT_E2E_PROFILEABLE | Base and fine-tuned checkpoints are verified in the local Linux model store. No native Windows policy run, model access or qualified CPU backend exists; the installed vLLM CPU attention operators are incomplete. | Validate a native policy backend, real observations and reference actions; [recovery evidence](../../../e2e_recovery_20260923/README.md). | +| PC HX370: CPU / native Windows | InternVLA-A1 | SYNTHETIC_POLICY_PASS | The Place_Markpen checkpoint strict-loaded from a UNC path and the direct CPU policy produced finite `[1, 50, 32]` actions on synthetic zero observations/noise. Policy/output CPU placement was checked; one forward took 3.36 s. Relative L2 difference from WSL CPU was 1.08% (no task tolerance). This direct policy route does not require native vLLM CPU attention operators. | Validate real observations/reference actions, units/timestamps, memory and repeated latency before task qualification; [native evidence](../../../e2e_expansion_20260923/README.md). | | PC HX370 + RTX 5090 Laptop / WSL | Spark-X2.5 | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Broaden only with a named workload/device/precision qualification. | | PC HX370 + RTX 5090 Laptop / WSL | Qwen3-TTS 0.6B CustomVoice | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Resolve and measure playback stalls; run quality, interruption and thermal tests. | | PC HX370 + RTX 5090 Laptop / WSL | Qwen3.8-27B | SCOPED_E2E | A new one-stage Omni binding ran the real NVFP4 checkpoint: one 16-token text request and one synthetic red-image request (answer `Red`) at an explicit 512-token context with host offload. This is not the full multimodal, long-context or quality workload. | Qualify image/video suites, longer contexts, latency distributions and sustained power; [recovery evidence](../../../e2e_recovery_20260923/README.md). | @@ -44,7 +44,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i | PC HX370 + RTX 5090 Laptop / Windows | Qwen3-TTS 0.6B CustomVoice | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Resolve and measure playback stalls; run quality, interruption and thermal tests. | | PC HX370 + RTX 5090 Laptop / Windows | Qwen3.8-27B | NOT_E2E_PROFILEABLE | The Omni pipeline binding now exists and passed scoped text/image cases in WSL, but no native Windows Omni run has verified the NVFP4 checkpoint, memory admission or modality behavior. | Run the same checkpoint and explicit context on native Windows, then broaden quality and profiling; [WSL-only evidence](../../../e2e_recovery_20260923/README.md). | | PC HX370 + RTX 5090 Laptop / Windows | MiniCPM-o 4.5 | NOT_E2E_PROFILEABLE | The exact checkpoint is verified and one constrained three-stage text/speech request passed in WSL; no native Windows execution, memory admission or speech-quality check exists. | Repeat the real three-stage pipeline on native Windows and verify speech and sustained behavior; [WSL-only evidence](../../../e2e_recovery_20260923/README.md). | -| PC HX370 + RTX 5090 Laptop / Windows | InternVLA-A1 | NOT_E2E_PROFILEABLE | Base and fine-tuned checkpoints are verified, but the only policy forward used synthetic observations under WSL/CUDA; no native Windows run or real-task qualification exists. | Run a native Windows policy forward, then compare real observations against reference actions; [WSL-only evidence](../../../e2e_recovery_20260923/README.md). | +| PC HX370 + RTX 5090 Laptop / Windows | InternVLA-A1 | SYNTHETIC_POLICY_PASS | The Place_Markpen checkpoint strict-loaded from a UNC path and produced finite `[1, 50, 32]` actions on synthetic zero observations/noise. Policy/output CUDA placement was checked; one native forward took 1.12 s, with 6.68 GB peak allocated. Relative L2 difference from WSL CUDA was 0.83% (no task tolerance). | Validate real observations/reference actions, units/timestamps, memory and repeated latency before task qualification; [native evidence](../../../e2e_expansion_20260923/README.md). | | PC HX370 + Radeon 890M / Windows worker | Spark-X2.5 | NOT_E2E_PROFILEABLE | No placement- and quality-verified whole-model graph bundle/stateful adapter for this model on this AMD route. Small backend graphs do not establish model support. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | | PC HX370 + Radeon 890M / Windows worker | Qwen3-TTS 0.6B CustomVoice | NOT_E2E_PROFILEABLE | No placement- and quality-verified whole-model graph bundle/stateful adapter for this model on this AMD route. Small backend graphs do not establish model support. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. | | PC HX370 + Radeon 890M / Windows worker | Qwen3.8-27B | NOT_E2E_PROFILEABLE | FP32 448x448 vision tower: DirectML 85/113 nodes; normalized max error 9.095e-06 versus torch CPU. Historical component path, not full 27B or current graph-stage image-to-text integration. | Recover the hashed tower bundle and qualify its current Omni graph handoff with the language stage. | diff --git a/docs/design/omni_edge_e2e_roadmap.md b/docs/design/omni_edge_e2e_roadmap.md index 49126ed42..b2a36c288 100644 --- a/docs/design/omni_edge_e2e_roadmap.md +++ b/docs/design/omni_edge_e2e_roadmap.md @@ -13,6 +13,15 @@ three-stage text-to-speech functional pass after correcting request embeddings, and an InternVLA real-weight synthetic action forward. Model-quality and device gates remain open; the 2026-09-22 audit remains the historical baseline. +The [WSL CPU expansion](../../benchmarks/edge_harness/results/e2e_expansion_20260923/README.md) +adds constrained three-stage MiniCPM-o text-to-speech requests and a CPU-only +InternVLA synthetic policy forward. A subsequent 20-request serial MiniCPM-o +profile measured p50 21.86 s/p95 22.97 s request wall time after one warmup, with +swap use under the 30.91 GiB WSL limit. It does not qualify speech quality, +concurrency, streaming, loading peak or sustained behavior. Native Windows +InternVLA direct-policy runs separately passed on CPU and RTX 5090 Laptop with +synthetic inputs; AMD and mobile cells do not inherit these passes. + ## Architecture and prerequisites Keep Omni's PipelineConfig, StageRuntime, StageClient, orchestration and admission @@ -68,8 +77,8 @@ capability and lifecycle implementation; a state-handle type alone is insufficie | M1 | S25 Spark | Device-local Omni-compatible controller; embedding, prefill, continuous decode, ring/full KV, head and sampler; resident state | Reference checks, at least 128 output tokens, 512-window/1024-bucket transitions, cancellation, resident memory and sustained profile | | M2 | Qwen3-TTS | Resolve desktop playback and shutdown findings and CPU compatibility; then mobile talker/predictor plus GPU vocoder | Complete PCM and tail, history/chunk correctness, interruption/recovery, quality checks, no post-startup underruns and RTF below 1 in the declared workload | | M3 | AMD stages | Connect compatible real encoders or other useful coarse stages through current Omni workers; start from the existing 890M vision evidence | Actual node/device placement, numerical and task quality, complete downstream output, shared-memory and handoff costs; reject unhelpful splits | -| M4a | MiniCPM-o 4.5 | Three-stage desktop text+WAV path produced coherent text and nonzero WAV under a constrained 24 GiB profile after fixing uninitialized request embeddings; add encoder and persistent-state reference before mobile artifacts | Speech intelligibility/alignment, separate text, image and audio-understanding suites, then combined streaming and interruption | -| M4b | InternVLA-A1 | Real weights, observation preprocessing, shared prefix state, iterative action head and versioned action metadata; one strict-load synthetic action forward now passes on RTX 5090 Laptop | Reference action agreement on real observations, units/order/timestamps, observation age, stale-input handling and application-specific deadline reporting | +| M4a | MiniCPM-o 4.5 | Three-stage desktop text+WAV produced coherent text and nonzero WAV on RTX 5090 Laptop and WSL CPU under separate constrained plans. The CPU plan needed vLLM 0.28/0.29 processor compatibility and used swap; 20 serial CPU requests measured p50 21.86 s/p95 22.97 s. Add encoder and persistent-state reference before mobile artifacts | Speech intelligibility/alignment, CPU loading-peak admission, concurrency, separate text, image and audio-understanding suites, then combined streaming and interruption | +| M4b | InternVLA-A1 | Real weights, observation preprocessing, shared prefix state, iterative action head and versioned action metadata; strict-load synthetic policy forwards now pass on WSL and native Windows, each on CPU and RTX 5090 Laptop | Reference action agreement on real observations, units/order/timestamps, observation age, stale-input handling and application-specific deadline reporting | | Independent | Qwen3.8-27B | Public Omni pipeline binding; text, then image/video and longer contexts; same-model CPU/iGPU artifact and explicit offload evaluation | Modality-specific quality, actual loading/runtime memory and measured performance; each precision/context receives its own qualification | The initial M0 desktop text acceptance remains scoped to its tested checkpoint, diff --git a/tests/model_executor/models/minicpmo_4_5/test_mm_processor_compat.py b/tests/model_executor/models/minicpmo_4_5/test_mm_processor_compat.py new file mode 100644 index 000000000..44e82df01 --- /dev/null +++ b/tests/model_executor/models/minicpmo_4_5/test_mm_processor_compat.py @@ -0,0 +1,53 @@ +"""MiniCPM-o processor contract across vLLM 0.28 CPU and 0.29 CUDA.""" + +from types import SimpleNamespace + +import torch +from transformers.feature_extraction_utils import BatchFeature + +from vllm_omni.model_executor.models.minicpmo_4_5.minicpmo_4_5_omni_llm import ( + MiniCPMO45OmniLLMMultiModalProcessor, +) + + +class _EmptyItems: + def get_all_counts(self): + return {} + + def select(self, _keys): + return self + + +def _processor(): + tokenizer = SimpleNamespace(encode=lambda prompt: [len(prompt)]) + return SimpleNamespace( + _get_hf_mm_data=lambda _items: ({}, {}), + process_mm_inputs=lambda _data, _kwargs: {}, + info=SimpleNamespace(get_tokenizer=lambda: tokenizer), + dummy_inputs=SimpleNamespace(get_dummy_text=lambda _counts: "dummy"), + ) + + +def test_vllm_028_contract_tokenizes_prompt_without_hf_multimodal_call(): + result = MiniCPMO45OmniLLMMultiModalProcessor._apply_hf_processor_main( + _processor(), + _EmptyItems(), + {}, + prompt="()", + tokenization_kwargs={}, + enable_hf_prompt_update=False, + ) + + prompt_ids, mm_data, updated = result + assert prompt_ids == [len("()")] + assert isinstance(mm_data, BatchFeature) and not mm_data + assert updated is False + + +def test_vllm_029_contract_returns_batch_feature(): + result = MiniCPMO45OmniLLMMultiModalProcessor._apply_hf_processor_main( + _processor(), _EmptyItems(), {} + ) + + assert isinstance(result, BatchFeature) + torch.testing.assert_close(result["input_ids"], torch.tensor([[5]])) diff --git a/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py b/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py index 315ae159d..f0397618b 100644 --- a/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py +++ b/vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_omni_llm.py @@ -21,6 +21,7 @@ import inspect import math import os import warnings +from collections import defaultdict from collections.abc import Callable, Iterable, Mapping, Sequence from dataclasses import dataclass, replace from functools import partial @@ -3422,24 +3423,37 @@ class MiniCPMO45OmniLLMMultiModalProcessor(BaseMultiModalProcessor[MiniCPMO45Omn self, mm_items: MultiModalDataItems, hf_processor_mm_kwargs: Mapping[str, object], - ) -> BatchFeature: + prompt: str | list[int] | None = None, + tokenization_kwargs: Mapping[str, object] | None = None, + *, + enable_hf_prompt_update: bool | None = None, + ) -> BatchFeature | tuple[list[int], BatchFeature, bool]: """ Process each modality independently because the MiniCPM processor asserts that image tags and image sizes have matching lengths. + + vLLM 0.28 passes the prompt here and expects a three-tuple; 0.29 + tokenizes the prompt separately and expects only the BatchFeature. """ valid_mm_items = mm_items.select({key for key, count in mm_items.get_all_counts().items() if count > 0}) mm_data, passthrough_data = self._get_hf_mm_data(valid_mm_items) + mm_inputs = self.process_mm_inputs(mm_data, hf_processor_mm_kwargs) + if prompt is not None: + if isinstance(prompt, str): + # vLLM 0.28's generic text-only path invokes the HF + # multimodal processor without media, which rejects MiniCPM + # modality placeholders in dummy prompts. + prompt_ids = self.info.get_tokenizer().encode(prompt) + else: + prompt_ids = self._apply_hf_processor_tokens_only(prompt) + processed_data = BatchFeature(dict(mm_inputs)) + processed_data.update(passthrough_data) + return prompt_ids, processed_data, False + tokenizer = self.info.get_tokenizer() prompt_text = self.dummy_inputs.get_dummy_text(mm_items.get_all_counts()) - input_ids = torch.tensor([tokenizer.encode(prompt_text)]) - mm_inputs = self.process_mm_inputs(mm_data, hf_processor_mm_kwargs) - processed_data = BatchFeature( - { - "input_ids": input_ids, - **mm_inputs, - } - ) + processed_data = BatchFeature({"input_ids": torch.tensor([tokenizer.encode(prompt_text)]), **mm_inputs}) processed_data.update(passthrough_data) return processed_data @@ -3597,13 +3611,32 @@ class MiniCPMO45OmniLLMMultiModalProcessor(BaseMultiModalProcessor[MiniCPMO45Omn ) -> dict[str, NestedTensors]: from vllm.model_executor.models.minicpmv import MiniCPMVMultiModalProcessor - return MiniCPMVMultiModalProcessor._call_hf_processor_on_prompts( - self, - prompts, - mm_data, - {key: value for key, value in mm_kwargs.items() if key != "use_tts"}, - out_keys=out_keys, - ) + mm_kwargs = {key: value for key, value in mm_kwargs.items() if key != "use_tts"} + call_prompts = getattr(MiniCPMVMultiModalProcessor, "_call_hf_processor_on_prompts", None) + if call_prompts is not None: + return call_prompts(self, prompts, mm_data, mm_kwargs, out_keys=out_keys) + + # vLLM 0.28 predates this MiniCPMV helper. Keep the same per-modality + # processing contract while using its available HF processor context. + if self.info.get_model_version() in {(2, 6), (4, 0), (4, 5), (4, 6)}: + inputs = self.info.ctx.call_hf_processor( + self.info.get_hf_processor(**mm_kwargs), + dict(text=prompts, **mm_data), + mm_kwargs, + ) + else: + inputs = defaultdict(list) + for i, prompt in enumerate(prompts): + inputs_one = self.info.ctx.call_hf_processor( + self.info.get_hf_processor(**mm_kwargs), + dict(text=prompt, **{key: value[i] for key, value in mm_data.items()}), + mm_kwargs, + ) + for key, value in inputs_one.items(): + if len(value) != 1: + raise ValueError(f"Expected one {key} item per MiniCPM-o prompt, got {len(value)}") + inputs[key].append(value[0]) + return {key: inputs[key] for key in out_keys} def _get_prompt_updates( self, diff --git a/vllm_omni/patch.py b/vllm_omni/patch.py index 9c8da61f2..0a863c027 100644 --- a/vllm_omni/patch.py +++ b/vllm_omni/patch.py @@ -536,6 +536,12 @@ _patch_inductor_factorable_divisibility() # (not a slot or C extension). If CuMemAllocator is rewritten in C/Cython, # this monkey-patch will silently become a no-op. def _patch_cumem_free_callback_cuda() -> None: + if sys.platform == "win32": + # The native Windows vLLM build may not load libcudart before this + # module is imported. This Linux CUDA atexit workaround is not needed + # to import Omni on that platform. + _PATCH_LOGGER.debug("[cumem-cuda] native Windows; skipping patch") + return try: import torch