From 8699786587f1d1328e11f6cc9047869790b6bf9d Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Thu, 30 Apr 2026 02:19:05 +0000 Subject: [PATCH 01/21] docs(pymllm): document qwen3 projection alignment --- docs/pymllm_runtime/models_and_quantization.rst | 17 +++++++++++++++++ docs/pymllm_runtime/setup_and_usage.rst | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/pymllm_runtime/models_and_quantization.rst b/docs/pymllm_runtime/models_and_quantization.rst index e7d92dd1e..6bbb63706 100644 --- a/docs/pymllm_runtime/models_and_quantization.rst +++ b/docs/pymllm_runtime/models_and_quantization.rst @@ -75,6 +75,23 @@ Qwen3-VL 图文模型 当前 W8A8 量化主要覆盖语言 decoder 的线性层;视觉 encoder、embedding、LayerNorm 和 ``lm_head`` 保持全精度。 +Fused projection 与 shard-aware loading +---------------------------------------- + +Qwen3 / Qwen3-VL 的 text decoder 使用 fused QKV projection 和 fused gate/up +projection。对未量化模型,这减少了 projection 层的 module 边界;对 W8A8 和 W4A16 +路径,它还避免把同一层拆成多次 activation quant、GEMM 或 Marlin 调用。 + +checkpoint 中的权重仍可能以 HuggingFace 常见的分离形式保存,例如 ``q_proj``、 +``k_proj``、``v_proj``、``gate_proj`` 和 ``up_proj``。``MergedLinear`` 通过 +shard-aware ``weight_loader`` 将这些分离 tensor 写入 fused 参数,运行时布局保持为 +``[Q, K, V]`` 或 ``[gate, up]``。权重加载完成后,``process_weights_after_loading`` +再负责 W8A8 layout 转换或 W4A16 Marlin repack。 + +Qwen3 / Qwen3-VL decoder 还使用 residual-carry 形式组织 RMSNorm 的 fused add 路径。 +在 Qwen3-VL 中,如果 deepstack embedding 需要注入,运行时会先物化当前 residual sum, +再执行注入并重置 carry,避免改变图文 prefill 语义。 + 量化配置解析 ---------------------------------------- diff --git a/docs/pymllm_runtime/setup_and_usage.rst b/docs/pymllm_runtime/setup_and_usage.rst index 3097bbbbf..2cb83ca51 100644 --- a/docs/pymllm_runtime/setup_and_usage.rst +++ b/docs/pymllm_runtime/setup_and_usage.rst @@ -260,7 +260,8 @@ OpenAI-compatible 请求 ``pymllm.executor.model_runner.ModelRunner``,绕过 HTTP server、tokenizer 进程、 scheduler 进程和 detokenizer 进程,用 synthetic text-only token ids 测一次静态 prefill,再测逐 token decode。该工具适合分析模型 forward、KV cache、attention、 -CUDA Graph 与量化 kernel 的模型级开销,不代表在线服务的 TTFT / ITL / E2E 指标。 +CUDA Graph 与量化 kernel 的模型级开销,也适合验证 fused projection、residual carry +等模型图优化。不代表在线服务的 TTFT / ITL / E2E 指标。 典型用法: From ec95dddcab6a904266ec024d279cc6b059e1ce64 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sat, 23 May 2026 08:18:34 +0000 Subject: [PATCH 02/21] perf(qwen3-vl): fuse M-RoPE and reuse RoPE cache --- pymllm/layers/__init__.py | 2 + pymllm/layers/rope.py | 207 ++++++++++++++++++++++++++++++ pymllm/models/qwen3_vl.py | 22 +++- pymllm/tests/test_mrope_triton.py | 70 ++++++++++ 4 files changed, 298 insertions(+), 3 deletions(-) create mode 100644 pymllm/tests/test_mrope_triton.py diff --git a/pymllm/layers/__init__.py b/pymllm/layers/__init__.py index d328ca7ef..18e5a1dcf 100644 --- a/pymllm/layers/__init__.py +++ b/pymllm/layers/__init__.py @@ -17,6 +17,7 @@ apply_llama31_rope, apply_llama31_rope_pos_ids, apply_mrope, + apply_mrope_fused_, apply_rope, apply_rope_pos_ids, apply_rope_with_cos_sin_cache, @@ -51,6 +52,7 @@ "RMSNorm", "GemmaRMSNorm", "apply_mrope", + "apply_mrope_fused_", "apply_rope", "apply_llama31_rope", "apply_rope_pos_ids", diff --git a/pymllm/layers/rope.py b/pymllm/layers/rope.py index 94f89b20d..17fdb39ee 100644 --- a/pymllm/layers/rope.py +++ b/pymllm/layers/rope.py @@ -5,6 +5,13 @@ import torch import flashinfer +try: + import triton + import triton.language as tl +except Exception: # pragma: no cover - Triton is optional outside CUDA builds. + triton = None + tl = None + def apply_rope( q: torch.Tensor, @@ -399,3 +406,203 @@ def apply_mrope( else k_rot ) return q_out, k_out + + +if triton is not None: + + @triton.jit + def _triton_mrope_forward_fused( + q_ptr, + k_ptr, + cos_sin_cache_ptr, + positions_ptr, + q_stride, + k_stride, + positions_stride, + n_qh: tl.constexpr, + n_kh: tl.constexpr, + hd: tl.constexpr, + rd: tl.constexpr, + pad_n_qh: tl.constexpr, + pad_n_kh: tl.constexpr, + pad_hd: tl.constexpr, + mrope_section_t: tl.constexpr, + mrope_section_h: tl.constexpr, + mrope_section_w: tl.constexpr, + is_interleaved: tl.constexpr, + is_neox_style: tl.constexpr, + ): + pid = tl.program_id(0) + q_ptr = q_ptr + pid * q_stride + k_ptr = k_ptr + pid * k_stride + half_rd = rd // 2 + + t = tl.load(positions_ptr + pid) + h = tl.load(positions_ptr + positions_stride + pid) + w = tl.load(positions_ptr + 2 * positions_stride + pid) + + t_cos = cos_sin_cache_ptr + t * rd + h_cos = cos_sin_cache_ptr + h * rd + w_cos = cos_sin_cache_ptr + w * rd + t_sin = t_cos + half_rd + h_sin = h_cos + half_rd + w_sin = w_cos + half_rd + + cos_offsets = tl.arange(0, pad_hd // 2) + if is_interleaved: + h_mask = ((cos_offsets % 3) == 1) & ( + cos_offsets <= 3 * mrope_section_h + ) + w_mask = ((cos_offsets % 3) == 2) & ( + cos_offsets <= 3 * mrope_section_w + ) + t_mask = ~(h_mask | w_mask) + else: + t_end = mrope_section_t + h_end = t_end + mrope_section_h + t_mask = cos_offsets < mrope_section_t + h_mask = (t_end <= cos_offsets) & (cos_offsets < h_end) + w_mask = (h_end <= cos_offsets) & (cos_offsets < half_rd) + + t_cos_row = tl.load(t_cos + cos_offsets, mask=t_mask, other=0.0) + t_sin_row = tl.load(t_sin + cos_offsets, mask=t_mask, other=0.0) + h_cos_row = tl.load(h_cos + cos_offsets, mask=h_mask, other=0.0) + h_sin_row = tl.load(h_sin + cos_offsets, mask=h_mask, other=0.0) + w_cos_row = tl.load(w_cos + cos_offsets, mask=w_mask, other=0.0) + w_sin_row = tl.load(w_sin + cos_offsets, mask=w_mask, other=0.0) + cos_row = t_cos_row + h_cos_row + w_cos_row + sin_row = t_sin_row + h_sin_row + w_sin_row + + if is_neox_style: + qh = tl.arange(0, pad_n_qh)[:, None] + kh = tl.arange(0, pad_n_kh)[:, None] + dim = tl.arange(0, pad_hd // 2)[None, :] + q_mask = (qh < n_qh) & (dim < half_rd) + k_mask = (kh < n_kh) & (dim < half_rd) + q_first = qh * hd + dim + k_first = kh * hd + dim + q_second = q_first + half_rd + k_second = k_first + half_rd + + q1 = tl.load(q_ptr + q_first, mask=q_mask, other=0.0).to(cos_row.dtype) + q2 = tl.load(q_ptr + q_second, mask=q_mask, other=0.0).to(cos_row.dtype) + k1 = tl.load(k_ptr + k_first, mask=k_mask, other=0.0).to(cos_row.dtype) + k2 = tl.load(k_ptr + k_second, mask=k_mask, other=0.0).to(cos_row.dtype) + + tl.store(q_ptr + q_first, q1 * cos_row - q2 * sin_row, mask=q_mask) + tl.store(q_ptr + q_second, q2 * cos_row + q1 * sin_row, mask=q_mask) + tl.store(k_ptr + k_first, k1 * cos_row - k2 * sin_row, mask=k_mask) + tl.store(k_ptr + k_second, k2 * cos_row + k1 * sin_row, mask=k_mask) + else: + qh = tl.arange(0, pad_n_qh)[:, None] + kh = tl.arange(0, pad_n_kh)[:, None] + pair = tl.arange(0, pad_hd // 2)[None, :] + q_mask = (qh < n_qh) & (pair < half_rd) + k_mask = (kh < n_kh) & (pair < half_rd) + even = 2 * pair + odd = even + 1 + + q_even = tl.load(q_ptr + qh * hd + even, mask=q_mask, other=0.0).to( + cos_row.dtype + ) + q_odd = tl.load(q_ptr + qh * hd + odd, mask=q_mask, other=0.0).to( + cos_row.dtype + ) + k_even = tl.load(k_ptr + kh * hd + even, mask=k_mask, other=0.0).to( + cos_row.dtype + ) + k_odd = tl.load(k_ptr + kh * hd + odd, mask=k_mask, other=0.0).to( + cos_row.dtype + ) + + tl.store(q_ptr + qh * hd + even, q_even * cos_row - q_odd * sin_row, mask=q_mask) + tl.store(q_ptr + qh * hd + odd, q_odd * cos_row + q_even * sin_row, mask=q_mask) + tl.store(k_ptr + kh * hd + even, k_even * cos_row - k_odd * sin_row, mask=k_mask) + tl.store(k_ptr + kh * hd + odd, k_odd * cos_row + k_even * sin_row, mask=k_mask) + +else: + _triton_mrope_forward_fused = None + + +def _can_use_mrope_fused( + q: torch.Tensor, + k: torch.Tensor, + positions: torch.Tensor, + cos_sin_cache: torch.Tensor, +) -> bool: + return ( + triton is not None + and q.is_cuda + and k.is_cuda + and positions.is_cuda + and cos_sin_cache.is_cuda + and q.dim() == 3 + and k.dim() == 3 + and positions.dim() == 2 + and q.is_contiguous() + and k.is_contiguous() + and q.shape[-1] == k.shape[-1] + and cos_sin_cache.shape[-1] <= q.shape[-1] + ) + + +def apply_mrope_fused_( + q: torch.Tensor, + k: torch.Tensor, + positions: torch.Tensor, + cos_sin_cache: torch.Tensor, + mrope_section: List[int], + mrope_interleaved: bool = True, +) -> Tuple[torch.Tensor, torch.Tensor]: + """Apply M-RoPE in place with a Triton fused kernel when available. + + The fallback returns the reference PyTorch outputs, preserving functional + correctness on CPU or non-contiguous inputs. + """ + if positions.ndim == 1: + positions = positions.unsqueeze(0).expand(3, -1) + if positions.stride(-1) != 1: + positions = positions.contiguous() + + if not _can_use_mrope_fused(q, k, positions, cos_sin_cache): + return apply_mrope( + q, + k, + positions, + cos_sin_cache, + mrope_section, + mrope_interleaved, + ) + + num_tokens, num_q_heads, head_size = q.shape + num_kv_heads = k.shape[1] + rotary_dim = cos_sin_cache.shape[-1] + q_2d = q.reshape(num_tokens, num_q_heads * head_size) + k_2d = k.reshape(num_tokens, num_kv_heads * head_size) + + pad_n_qh = triton.next_power_of_2(num_q_heads) + pad_n_kh = triton.next_power_of_2(num_kv_heads) + pad_hd = triton.next_power_of_2(head_size) + + _triton_mrope_forward_fused[(num_tokens,)]( + q_2d, + k_2d, + cos_sin_cache, + positions, + q_2d.stride(0), + k_2d.stride(0), + positions.stride(0), + num_q_heads, + num_kv_heads, + head_size, + rotary_dim, + pad_n_qh, + pad_n_kh, + pad_hd, + int(mrope_section[0]), + int(mrope_section[1]), + int(mrope_section[2]), + bool(mrope_interleaved), + True, + ) + return q, k diff --git a/pymllm/models/qwen3_vl.py b/pymllm/models/qwen3_vl.py index 2b945fc18..2ce6c6ce3 100644 --- a/pymllm/models/qwen3_vl.py +++ b/pymllm/models/qwen3_vl.py @@ -35,7 +35,7 @@ import torch.nn as nn import torch.nn.functional as F -from pymllm.layers import RMSNorm, apply_mrope +from pymllm.layers import RMSNorm, apply_mrope_fused_ from pymllm.layers.attention.radix_attention import RadixAttention from pymllm.layers.linear import Linear, MergedLinear from pymllm.layers.mlp import MLP @@ -776,6 +776,21 @@ def _get_qm(suffix): layer_id=layer_id, ) + def _match_cos_sin_cache_dtype(self, query: torch.Tensor) -> None: + """Keep the RoPE cache on the same device/dtype as the query. + + The cache is built in FP32 for stability, but repeated ``to()`` + conversions inside the hot path are expensive. Match SGLang by + materialising the converted cache once and reusing it afterwards. + """ + if ( + self.cos_sin_cache.device != query.device + or self.cos_sin_cache.dtype != query.dtype + ): + self.cos_sin_cache = self.cos_sin_cache.to( + device=query.device, dtype=query.dtype + ) + def forward( self, positions: torch.Tensor, @@ -798,11 +813,12 @@ def forward( # as [T] for purely text-only batches; expand to [3, T] in that case. if positions.ndim == 1: positions = positions.unsqueeze(0).expand(3, -1) - q, k = apply_mrope( + self._match_cos_sin_cache_dtype(q) + q, k = apply_mrope_fused_( q, k, positions, - self.cos_sin_cache.to(q.dtype), + self.cos_sin_cache, self.mrope_section, self.mrope_interleaved, ) diff --git a/pymllm/tests/test_mrope_triton.py b/pymllm/tests/test_mrope_triton.py new file mode 100644 index 000000000..93f5e25c4 --- /dev/null +++ b/pymllm/tests/test_mrope_triton.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import pytest +import torch + +from pymllm.layers.rope import apply_mrope, apply_mrope_fused_ + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA is required") +def test_apply_mrope_fused_matches_reference_and_keeps_inputs_in_place(): + torch.manual_seed(0) + num_tokens = 17 + num_q_heads = 4 + num_kv_heads = 2 + head_dim = 8 + mrope_section = [2, 1, 1] + + q = torch.randn( + (num_tokens, num_q_heads, head_dim), + device="cuda", + dtype=torch.float16, + ) + k = torch.randn( + (num_tokens, num_kv_heads, head_dim), + device="cuda", + dtype=torch.float16, + ) + positions = torch.randint( + 0, + 32, + (3, num_tokens), + device="cuda", + dtype=torch.long, + ) + cos_sin_cache = torch.randn( + (32, head_dim), + device="cuda", + dtype=torch.float16, + ) + + expected_q, expected_k = apply_mrope( + q, + k, + positions, + cos_sin_cache, + mrope_section, + mrope_interleaved=True, + ) + + q_actual = q.clone() + k_actual = k.clone() + q_ptr = q_actual.data_ptr() + k_ptr = k_actual.data_ptr() + + out_q, out_k = apply_mrope_fused_( + q_actual, + k_actual, + positions, + cos_sin_cache, + mrope_section, + mrope_interleaved=True, + ) + torch.cuda.synchronize() + + assert out_q.data_ptr() == q_ptr + assert out_k.data_ptr() == k_ptr + assert q_actual.data_ptr() == q_ptr + assert k_actual.data_ptr() == k_ptr + torch.testing.assert_close(q_actual, expected_q, atol=1e-2, rtol=1e-2) + torch.testing.assert_close(k_actual, expected_k, atol=1e-2, rtol=1e-2) From d83725206352b9372d63c83853e4313eb6c8e217 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sat, 23 May 2026 08:23:46 +0000 Subject: [PATCH 03/21] feat(bench): add multimodal VIT timing benchmark mode --- bench_assets/two_cats.jpg | Bin 0 -> 8580 bytes bench_assets/two_cats_480p.jpg | Bin 0 -> 77615 bytes pymllm/bench_one_batch.py | 291 ++++++++++++++++++++++-- pymllm/models/qwen3_vl.py | 32 ++- pymllm/tests/test_bench_one_batch.py | 124 ++++++++++ pymllm/tests/test_qwen3_vl_deepstack.py | 110 +++++++++ 6 files changed, 539 insertions(+), 18 deletions(-) create mode 100644 bench_assets/two_cats.jpg create mode 100644 bench_assets/two_cats_480p.jpg diff --git a/bench_assets/two_cats.jpg b/bench_assets/two_cats.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2af1b8317dc34dfd84260723fd32178f7c9ce0f9 GIT binary patch literal 8580 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

UkQFj;wHte{F|-fWj5~l8NMh0Vfz+}p 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

{RND}% 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 literal 0 HcmV?d00001 diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index a62be2bb2..d97864086 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -51,6 +51,8 @@ class BenchArgs: profile_start_step: Optional[int] = None profile_steps: int = 1 skip_warmup: bool = False + image_path: Optional[Path] = None + prompt: str = "Describe this image." @dataclass @@ -60,6 +62,28 @@ class DecodeState: mrope_position_deltas: Optional[torch.Tensor] = None +@dataclass +class ExtendResult: + next_token_ids: torch.Tensor + state: DecodeState + vit_prefill_ms: Optional[float] = None + vit_prefill_tokens: Optional[int] = None + vit_prefill_tps: Optional[float] = None + + def __iter__(self) -> Iterator[Any]: + # Preserve the old ``next_token_ids, state = extend(...)`` call pattern. + yield self.next_token_ids + yield self.state + + +@dataclass +class MultimodalBenchInput: + input_ids: torch.Tensor + pixel_values: torch.Tensor + image_grid_thw: torch.Tensor + vit_prefill_tokens: int + + def _positive_int(value: str) -> int: parsed = int(value) if parsed <= 0: @@ -150,6 +174,22 @@ def add_bench_args(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: action="store_true", help="Skip the initial non-recorded warmup run.", ) + group.add_argument( + "--image", + "--image-path", + dest="image_path", + type=Path, + default=None, + help=( + "Optional image path for multimodal benchmark mode. When set, " + "--input-len is replaced by the processed prompt length." + ), + ) + group.add_argument( + "--prompt", + default=BenchArgs.prompt, + help="Prompt text used with --image in multimodal benchmark mode.", + ) return parser @@ -180,6 +220,8 @@ def _bench_args_from_namespace(namespace: argparse.Namespace) -> BenchArgs: profile_start_step=namespace.profile_start_step, profile_steps=namespace.profile_steps, skip_warmup=namespace.skip_warmup, + image_path=namespace.image_path, + prompt=namespace.prompt, ) @@ -193,10 +235,11 @@ def parse_args( def generate_settings(args: BenchArgs) -> list[BenchSetting]: + input_lens = [0] if args.image_path is not None else args.input_len return [ BenchSetting(batch_size=batch_size, input_len=input_len, output_len=output_len) for batch_size in args.batch_size - for input_len in args.input_len + for input_len in input_lens for output_len in args.output_len ] @@ -267,6 +310,79 @@ def summarize_latencies( return result +def make_vit_prefill_metrics( + *, + vit_prefill_ms: float, + vit_prefill_tokens: int, +) -> dict[str, Any]: + latency = float(vit_prefill_ms) / 1000.0 + throughput = _safe_div(float(vit_prefill_tokens), latency) + return { + "vit_prefill_latency": latency, + "vit_prefill_ms": float(vit_prefill_ms), + "vit_prefill_tokens": int(vit_prefill_tokens), + "vit_prefill_throughput": throughput, + "vit_prefill_tps": throughput, + } + + +def _get_processor_value(processor_output: Any, key: str) -> Any: + if hasattr(processor_output, "get"): + return processor_output.get(key) + return getattr(processor_output, key, None) + + +def make_multimodal_bench_input_from_processor_output( + processor_output: Any, + *, + batch_size: int, + image_token_id: int, + device: str | torch.device, +) -> MultimodalBenchInput: + input_ids = _get_processor_value(processor_output, "input_ids") + pixel_values = _get_processor_value(processor_output, "pixel_values") + image_grid_thw = _get_processor_value(processor_output, "image_grid_thw") + + if input_ids is None: + raise ValueError("Multimodal processor output does not contain input_ids") + if pixel_values is None: + raise ValueError("Multimodal processor output does not contain pixel_values") + if image_grid_thw is None: + raise ValueError( + "Multimodal processor output does not contain image_grid_thw" + ) + + input_ids_t = torch.as_tensor(input_ids) + if input_ids_t.dim() == 1: + input_ids_t = input_ids_t.unsqueeze(0) + if input_ids_t.shape[0] != 1: + raise ValueError( + "bench_one_batch multimodal mode expects one processed prompt before " + f"batch repetition, got batch dimension {input_ids_t.shape[0]}" + ) + + input_ids_t = input_ids_t.repeat(batch_size, 1).to( + device=device, dtype=torch.int32 + ) + pixel_values_t = torch.as_tensor(pixel_values) + pixel_values_t = pixel_values_t.repeat( + (batch_size,) + (1,) * (pixel_values_t.dim() - 1) + ) + image_grid_thw_t = torch.as_tensor(image_grid_thw) + if image_grid_thw_t.dim() == 1: + image_grid_thw_t = image_grid_thw_t.unsqueeze(0) + image_grid_thw_t = image_grid_thw_t.repeat(batch_size, 1).to( + device=device, dtype=torch.int64 + ) + + return MultimodalBenchInput( + input_ids=input_ids_t, + pixel_values=pixel_values_t.to(device=device), + image_grid_thw=image_grid_thw_t, + vit_prefill_tokens=int((input_ids_t == image_token_id).sum().item()), + ) + + def make_profile_trace_path( *, output_dir: Path, @@ -330,6 +446,74 @@ def _load_hf_config(cfg: GlobalConfig) -> None: logger.info("Loaded model config: %s", cfg.model.hf_config.__class__.__name__) +def _extract_image_token_id(hf_config: Any) -> int: + image_token_id = getattr(hf_config, "image_token_id", None) + if image_token_id is None: + raise ValueError("Model config does not define image_token_id") + return int(image_token_id) + + +def _render_multimodal_prompt( + processor: Any, + *, + prompt: str, + image_path: Path, +) -> str: + if not hasattr(processor, "apply_chat_template"): + return prompt + + messages = [ + { + "role": "user", + "content": [ + {"type": "image", "image": str(image_path)}, + {"type": "text", "text": prompt}, + ], + } + ] + try: + rendered = processor.apply_chat_template( + messages, + tokenize=False, + add_generation_prompt=True, + ) + except Exception as exc: + logger.warning("Processor chat template failed, using raw prompt: %s", exc) + return prompt + if isinstance(rendered, list): + if not rendered: + return prompt + return str(rendered[0]) + return str(rendered) + + +def _make_multimodal_processor_output( + *, + cfg: GlobalConfig, + prompt: str, + image_path: Path, +) -> Any: + if cfg.server.tokenizer_path is None: + raise ValueError("--server.tokenizer_path or --server.model_path is required") + if not image_path.exists(): + raise FileNotFoundError(f"Image path does not exist: {image_path}") + + from PIL import Image + from transformers import AutoProcessor + + processor = AutoProcessor.from_pretrained( + str(cfg.server.tokenizer_path), + trust_remote_code=cfg.server.trust_remote_code, + ) + image = Image.open(image_path).convert("RGB") + text = _render_multimodal_prompt( + processor, + prompt=prompt, + image_path=image_path, + ) + return processor(images=[image], text=[text], return_tensors="pt") + + def _append_jsonl(path: Path, row: dict[str, Any]) -> None: path.parent.mkdir(parents=True, exist_ok=True) with path.open("a", encoding="utf-8") as fp: @@ -420,7 +604,14 @@ def clear(self) -> None: self.runner.req_to_token_pool.clear() self.runner.token_to_kv_pool_allocator.clear() - def extend(self, input_ids: torch.Tensor) -> tuple[torch.Tensor, DecodeState]: + def extend( + self, + input_ids: torch.Tensor, + *, + pixel_values: Optional[torch.Tensor] = None, + image_grid_thw: Optional[torch.Tensor] = None, + benchmark_vision_timing: bool = False, + ) -> ExtendResult: if input_ids.dim() != 2: raise ValueError("input_ids must have shape [batch_size, input_len]") @@ -468,6 +659,12 @@ def extend(self, input_ids: torch.Tensor) -> tuple[torch.Tensor, DecodeState]: extend_prefix_lens=extend_prefix_lens, out_cache_loc=out_cache_loc.to(torch.int64), ) + if pixel_values is not None: + forward_batch.pixel_values = pixel_values.to(device=self.device) + if image_grid_thw is not None: + forward_batch.image_grid_thw = image_grid_thw.to(device=self.device) + forward_batch.benchmark_vision_timing = benchmark_vision_timing + logits_output = self.runner.forward(forward_batch) next_token_ids = self._sample_greedy(logits_output, forward_batch) state = DecodeState( @@ -477,7 +674,22 @@ def extend(self, input_ids: torch.Tensor) -> tuple[torch.Tensor, DecodeState]: forward_batch, "mrope_position_deltas", None ), ) - return next_token_ids, state + vit_prefill_ms = getattr(forward_batch, "vit_prefill_ms", None) + vit_prefill_tokens = getattr(forward_batch, "vit_prefill_tokens", None) + vit_prefill_tps = getattr(forward_batch, "vit_prefill_tps", None) + return ExtendResult( + next_token_ids=next_token_ids, + state=state, + vit_prefill_ms=( + float(vit_prefill_ms) if vit_prefill_ms is not None else None + ), + vit_prefill_tokens=( + int(vit_prefill_tokens) if vit_prefill_tokens is not None else None + ), + vit_prefill_tps=( + float(vit_prefill_tps) if vit_prefill_tps is not None else None + ), + ) def decode( self, @@ -561,21 +773,47 @@ def run_single_setting( setting: BenchSetting, seed: int, record_result: bool, + multimodal_processor_output: Any = None, ) -> Optional[dict[str, Any]]: bench_runner.clear() vocab_size = getattr(bench_runner.runner, "vocab_size", 10000) - input_ids = make_synthetic_input_ids( - batch_size=setting.batch_size, - input_len=setting.input_len, - vocab_size=vocab_size, - seed=seed, - device=bench_runner.device, - ) + mm_input = None + effective_setting = setting + if multimodal_processor_output is None: + input_ids = make_synthetic_input_ids( + batch_size=setting.batch_size, + input_len=setting.input_len, + vocab_size=vocab_size, + seed=seed, + device=bench_runner.device, + ) + else: + hf_config = bench_runner.runner.model_config.hf_config + image_token_id = _extract_image_token_id(hf_config) + mm_input = make_multimodal_bench_input_from_processor_output( + multimodal_processor_output, + batch_size=setting.batch_size, + image_token_id=image_token_id, + device=bench_runner.device, + ) + input_ids = mm_input.input_ids + effective_setting = BenchSetting( + batch_size=setting.batch_size, + input_len=int(input_ids.shape[1]), + output_len=setting.output_len, + ) - with _maybe_profile(args=args, setting=setting, stage="prefill"): + with _maybe_profile(args=args, setting=effective_setting, stage="prefill"): prefill_latency, extend_result = _timed_call( bench_runner.device, - lambda: bench_runner.extend(input_ids), + lambda: bench_runner.extend( + input_ids, + pixel_values=mm_input.pixel_values if mm_input is not None else None, + image_grid_thw=( + mm_input.image_grid_thw if mm_input is not None else None + ), + benchmark_vision_timing=mm_input is not None, + ), ) next_token_ids, state = extend_result @@ -592,7 +830,12 @@ def run_single_setting( and profile_start_step <= step < profile_stop_step ) profile_context = ( - _maybe_profile(args=args, setting=setting, stage="decode", step=step) + _maybe_profile( + args=args, + setting=effective_setting, + stage="decode", + step=step, + ) if should_profile_decode else nullcontext() ) @@ -616,13 +859,24 @@ def run_single_setting( return None return summarize_latencies( - setting=setting, + setting=effective_setting, prefill_latency=prefill_latency, decode_latencies=decode_latencies, run_name=args.run_name, device=bench_runner.device, dtype=str(bench_runner.runner.dtype), cuda_graph=bench_runner.runner.graph_runner is not None, + extra=( + make_vit_prefill_metrics( + vit_prefill_ms=extend_result.vit_prefill_ms, + vit_prefill_tokens=extend_result.vit_prefill_tokens, + ) + if ( + extend_result.vit_prefill_ms is not None + and extend_result.vit_prefill_tokens is not None + ) + else None + ), ) @@ -636,6 +890,13 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: bench_runner = PymllmBenchRunner.create(cfg) try: settings = generate_settings(args) + multimodal_processor_output = None + if args.image_path is not None: + multimodal_processor_output = _make_multimodal_processor_output( + cfg=cfg, + prompt=args.prompt, + image_path=args.image_path, + ) if not args.skip_warmup and settings: first = settings[0] warmup_setting = BenchSetting( @@ -655,6 +916,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: setting=warmup_setting, seed=args.seed, record_result=False, + multimodal_processor_output=multimodal_processor_output, ) results: list[dict[str, Any]] = [] @@ -671,6 +933,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: setting=setting, seed=args.seed + index, record_result=True, + multimodal_processor_output=multimodal_processor_output, ) assert result is not None _append_jsonl(args.result_filename, result) diff --git a/pymllm/models/qwen3_vl.py b/pymllm/models/qwen3_vl.py index 2ce6c6ce3..273a291a4 100644 --- a/pymllm/models/qwen3_vl.py +++ b/pymllm/models/qwen3_vl.py @@ -577,6 +577,21 @@ def _build_cos_sin_cache( return torch.cat([torch.cos(freqs), torch.sin(freqs)], dim=-1).to(dtype) +def _run_with_synchronized_wall_timing( + fn, + *, + device: torch.device, + enabled: bool, +) -> Tuple[torch.Tensor, float]: + if enabled and device.type == "cuda": + torch.cuda.synchronize(device) + tic = time.perf_counter() + result = fn() + if enabled and device.type == "cuda": + torch.cuda.synchronize(device) + return result, (time.perf_counter() - tic) * 1000.0 + + def get_rope_index( input_ids: torch.Tensor, image_grid_thw: Optional[torch.Tensor], @@ -1199,6 +1214,7 @@ def forward( input_deepstack_embeds = None vit_prefill_ms = None vit_prefill_tokens = None + vit_prefill_tps = None llm_prefill_ms = None llm_decode_ms = None @@ -1209,11 +1225,14 @@ def forward( and not forward_batch.forward_mode.is_decode() ): # Run vision encoder - _vit_t0 = time.perf_counter() - vision_features = ( - self.visual(pixel_values, grid_thw=image_grid_thw) + benchmark_vision_timing = bool( + getattr(forward_batch, "benchmark_vision_timing", False) + ) + vision_features, vit_prefill_ms = _run_with_synchronized_wall_timing( + lambda: self.visual(pixel_values, grid_thw=image_grid_thw), + device=pixel_values.device, + enabled=benchmark_vision_timing, ) - vit_prefill_ms = (time.perf_counter() - _vit_t0) * 1000.0 # Separate main embeddings and deepstack embeddings if self.num_deepstack_embeddings > 0: @@ -1227,6 +1246,10 @@ def forward( input_embeds = self.model.embed_tokens(input_ids) image_mask = input_ids == self.image_token_id vit_prefill_tokens = int(image_mask.sum().item()) + if vit_prefill_ms > 0: + vit_prefill_tps = vit_prefill_tokens / (vit_prefill_ms / 1000.0) + else: + vit_prefill_tps = 0.0 if vit_prefill_tokens != int(vision_embeds.shape[0]): raise ValueError( "Image features and image tokens do not match, " @@ -1265,6 +1288,7 @@ def forward( llm_prefill_ms = _llm_ms forward_batch.vit_prefill_ms = vit_prefill_ms forward_batch.vit_prefill_tokens = vit_prefill_tokens + forward_batch.vit_prefill_tps = vit_prefill_tps forward_batch.llm_prefill_ms = llm_prefill_ms forward_batch.llm_decode_ms = None else: diff --git a/pymllm/tests/test_bench_one_batch.py b/pymllm/tests/test_bench_one_batch.py index cc2a87ae7..13a87fb72 100644 --- a/pymllm/tests/test_bench_one_batch.py +++ b/pymllm/tests/test_bench_one_batch.py @@ -2,14 +2,18 @@ import pytest import torch +from types import SimpleNamespace from pymllm.configs.global_config import GlobalConfig from pymllm.bench_one_batch import ( BenchArgs, BenchSetting, + PymllmBenchRunner, generate_settings, + make_multimodal_bench_input_from_processor_output, make_profile_trace_path, make_synthetic_input_ids, + make_vit_prefill_metrics, parse_args, summarize_latencies, ) @@ -53,6 +57,10 @@ def test_parse_args_accepts_server_config_and_list_bench_args(tmp_path): "--profile-activities", "CPU", "GPU", + "--image", + str(tmp_path / "image.jpg"), + "--prompt", + "What is in this image?", ] ) @@ -67,6 +75,8 @@ def test_parse_args_accepts_server_config_and_list_bench_args(tmp_path): assert bench_args.result_filename == result_file assert bench_args.profile_stage == "decode" assert bench_args.profile_activities == ["CPU", "GPU"] + assert bench_args.image_path == tmp_path / "image.jpg" + assert bench_args.prompt == "What is in this image?" def test_generate_settings_has_stable_batch_input_output_order(tmp_path): @@ -85,6 +95,21 @@ def test_generate_settings_has_stable_batch_input_output_order(tmp_path): ] +def test_generate_settings_uses_processed_prompt_length_for_image_mode(tmp_path): + args = BenchArgs( + batch_size=[1, 2], + input_len=[256, 512], + output_len=[8], + result_filename=tmp_path / "out.jsonl", + image_path=tmp_path / "image.jpg", + ) + + assert generate_settings(args) == [ + BenchSetting(batch_size=1, input_len=0, output_len=8), + BenchSetting(batch_size=2, input_len=0, output_len=8), + ] + + def test_make_synthetic_input_ids_is_seeded_int32_and_vocab_capped(): first = make_synthetic_input_ids( batch_size=2, @@ -136,6 +161,105 @@ def test_summarize_latencies_matches_sglang_style_metrics(): assert result["cuda_graph"] is True +def test_make_vit_prefill_metrics_reports_seconds_and_tps(): + result = make_vit_prefill_metrics(vit_prefill_ms=12.5, vit_prefill_tokens=25) + + assert result == { + "vit_prefill_latency": pytest.approx(0.0125), + "vit_prefill_ms": pytest.approx(12.5), + "vit_prefill_tokens": 25, + "vit_prefill_throughput": pytest.approx(2000.0), + "vit_prefill_tps": pytest.approx(2000.0), + } + + +def test_make_multimodal_bench_input_repeats_processor_output_per_batch(): + bench_input = make_multimodal_bench_input_from_processor_output( + { + "input_ids": torch.tensor([[1, 5, 5, 2]], dtype=torch.int64), + "pixel_values": torch.arange(6, dtype=torch.float32).reshape(2, 3), + "image_grid_thw": torch.tensor([[1, 2, 2]], dtype=torch.int64), + }, + batch_size=3, + image_token_id=5, + device="cpu", + ) + + assert bench_input.input_ids.shape == (3, 4) + assert bench_input.input_ids.dtype == torch.int32 + assert bench_input.vit_prefill_tokens == 6 + torch.testing.assert_close( + bench_input.pixel_values, + torch.arange(6, dtype=torch.float32).reshape(2, 3).repeat(3, 1), + ) + torch.testing.assert_close( + bench_input.image_grid_thw, + torch.tensor([[1, 2, 2], [1, 2, 2], [1, 2, 2]], dtype=torch.int64), + ) + + +def test_extend_attaches_multimodal_inputs_and_returns_vit_metrics(): + class _ReqPool: + def alloc(self, batch_size): + return list(range(batch_size)) + + def write(self, index, value): + del index, value + + def clear(self): + pass + + class _KvPool: + def alloc(self, count): + return torch.arange(count, dtype=torch.int64) + + def clear(self): + pass + + class _Runner: + def __init__(self): + self.device = "cpu" + self.dtype = torch.float32 + self.req_to_token_pool = _ReqPool() + self.token_to_kv_pool_allocator = _KvPool() + self.gdn_pool = None + self.last_forward_batch = None + + def prepare_forward_batch_extend(self, **kwargs): + return SimpleNamespace(batch_size=kwargs["req_pool_indices"].shape[0]) + + def forward(self, forward_batch): + self.last_forward_batch = forward_batch + forward_batch.vit_prefill_ms = 4.0 + forward_batch.vit_prefill_tokens = 8 + return object() + + def sample(self, logits_output, forward_batch, **kwargs): + del logits_output, forward_batch, kwargs + return torch.tensor([7], dtype=torch.int32) + + fake_runner = _Runner() + bench_runner = PymllmBenchRunner(fake_runner) + pixel_values = torch.ones((2, 3), dtype=torch.float32) + image_grid_thw = torch.tensor([[1, 2, 2]], dtype=torch.int64) + + result = bench_runner.extend( + torch.tensor([[1, 5, 5, 2]], dtype=torch.int32), + pixel_values=pixel_values, + image_grid_thw=image_grid_thw, + benchmark_vision_timing=True, + ) + + assert result.vit_prefill_ms == pytest.approx(4.0) + assert result.vit_prefill_tokens == 8 + torch.testing.assert_close(fake_runner.last_forward_batch.pixel_values, pixel_values) + torch.testing.assert_close( + fake_runner.last_forward_batch.image_grid_thw, + image_grid_thw, + ) + assert fake_runner.last_forward_batch.benchmark_vision_timing is True + + def test_make_profile_trace_path_is_deterministic_and_sanitized(tmp_path): path = make_profile_trace_path( output_dir=tmp_path, diff --git a/pymllm/tests/test_qwen3_vl_deepstack.py b/pymllm/tests/test_qwen3_vl_deepstack.py index c36bacf39..694bd37c8 100644 --- a/pymllm/tests/test_qwen3_vl_deepstack.py +++ b/pymllm/tests/test_qwen3_vl_deepstack.py @@ -1,6 +1,7 @@ from __future__ import annotations from types import SimpleNamespace +import time import numpy as np import pytest @@ -12,6 +13,7 @@ Qwen3VLTextModel, Qwen3VLVisionModel, _compute_cu_seqlens_from_grid, + _run_with_synchronized_wall_timing, ) @@ -63,6 +65,25 @@ def forward(self, pixel_values, grid_thw): return torch.ones((1, 2), dtype=torch.float32) +class _FakeTextModel(nn.Module): + def __init__(self): + super().__init__() + self.embed_tokens = nn.Embedding(8, 2) + + def forward( + self, + input_ids, + positions, + forward_batch, + input_embeds=None, + input_deepstack_embeds=None, + ): + del positions, forward_batch, input_deepstack_embeds + if input_embeds is not None: + return input_embeds + return self.embed_tokens(input_ids) + + def _make_vl_config() -> SimpleNamespace: text_config = SimpleNamespace( hidden_size=2, @@ -229,6 +250,95 @@ def test_forward_rejects_mismatched_image_token_and_feature_counts(): ) +def test_forward_records_vit_prefill_tps_when_benchmark_timing_enabled(): + model = Qwen3VLForConditionalGeneration(_make_vl_config()) + model.visual = _FakeVisual() + model.model = _FakeTextModel() + + forward_batch = SimpleNamespace( + forward_mode=_Mode(), + batch_size=1, + extend_start_loc=torch.tensor([0], dtype=torch.int64), + extend_seq_lens=torch.tensor([4], dtype=torch.int64), + pixel_values=torch.zeros((1, 3), dtype=torch.float32), + image_grid_thw=torch.tensor([[1, 1, 1]], dtype=torch.int64), + benchmark_vision_timing=True, + ) + + model( + input_ids=torch.tensor([1, 4, 5, 2], dtype=torch.int64), + positions=torch.arange(4, dtype=torch.int64), + forward_batch=forward_batch, + ) + + assert forward_batch.vit_prefill_ms is not None + assert forward_batch.vit_prefill_ms >= 0.0 + assert forward_batch.vit_prefill_tokens == 1 + assert forward_batch.vit_prefill_tps >= 0.0 + + +def test_vision_timing_includes_host_side_work_when_benchmark_enabled(): + def host_heavy_fn(): + time.sleep(0.02) + return torch.tensor([1.0]) + + result, elapsed_ms = _run_with_synchronized_wall_timing( + host_heavy_fn, + device=torch.device("cpu"), + enabled=True, + ) + + torch.testing.assert_close(result, torch.tensor([1.0])) + assert elapsed_ms >= 15.0 + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA is not available") +def test_cuda_vision_timing_includes_host_side_work_when_benchmark_enabled(): + device = torch.device("cuda") + + def host_heavy_cuda_fn(): + time.sleep(0.02) + return torch.ones((1,), device=device) + + result, elapsed_ms = _run_with_synchronized_wall_timing( + host_heavy_cuda_fn, + device=device, + enabled=True, + ) + + assert result.device.type == "cuda" + assert elapsed_ms >= 15.0 + + +def test_cuda_vision_timing_uses_wall_clock_not_event_elapsed(monkeypatch): + class _FakeCudaEvent: + def __init__(self, *args, **kwargs): + del args, kwargs + + def record(self): + pass + + def elapsed_time(self, other): + del other + return 0.0 + + monkeypatch.setattr(torch.cuda, "Event", _FakeCudaEvent) + monkeypatch.setattr(torch.cuda, "synchronize", lambda *args, **kwargs: None) + + def host_heavy_fn(): + time.sleep(0.02) + return torch.tensor([1.0]) + + result, elapsed_ms = _run_with_synchronized_wall_timing( + host_heavy_fn, + device=torch.device("cuda"), + enabled=True, + ) + + torch.testing.assert_close(result, torch.tensor([1.0])) + assert elapsed_ms >= 15.0 + + def test_vision_interpolation_indices_match_sglang_hf(): model = Qwen3VLVisionModel( depth=0, From f9be384d5c80450067d6db3c0422e33964e4be9b Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sat, 23 May 2026 08:24:11 +0000 Subject: [PATCH 04/21] perf(rmsnorm): patch Jetson FlashInfer device properties --- pymllm/layers/rms_norm.py | 55 +++++++++++++++++++++++++++++++++++ pymllm/tests/test_rms_norm.py | 20 +++++++++++++ 2 files changed, 75 insertions(+) diff --git a/pymllm/layers/rms_norm.py b/pymllm/layers/rms_norm.py index e9a4c6ed0..21163b4c2 100644 --- a/pymllm/layers/rms_norm.py +++ b/pymllm/layers/rms_norm.py @@ -10,6 +10,57 @@ from pymllm.layers.utils import set_weight_attrs +_PATCHED_CUDA_DEVICE_PROPERTIES = False + + +class _CudaDevicePropertiesProxy: + def __init__(self, props): + self._props = props + + def __getattr__(self, name: str): + if name == "shared_memory_per_block_optin": + return _infer_shared_memory_per_block_optin(self._props) + return getattr(self._props, name) + + +def _infer_shared_memory_per_block_optin(props) -> int: + """Infer opt-in shared memory for older PyTorch device properties.""" + if hasattr(props, "shared_memory_per_block_optin"): + return int(props.shared_memory_per_block_optin) + if hasattr(props, "shared_memory_per_multiprocessor"): + return int(props.shared_memory_per_multiprocessor) + return int(getattr(props, "shared_memory_per_block", 0)) + + +def _patch_cuda_device_properties_for_flashinfer_norm() -> None: + """Provide a missing PyTorch device property required by FlashInfer norm. + + Some Jetson PyTorch builds expose neither ``shared_memory_per_block_optin`` + nor ``shared_memory_per_multiprocessor`` on ``torch.cuda.DeviceProperties``. + FlashInfer norm kernels query that attribute while choosing their CUTE + kernel config. Wrap the properties object so FlashInfer can still choose + a valid shared-memory limit instead of falling back to slow PyTorch RMSNorm. + """ + global _PATCHED_CUDA_DEVICE_PROPERTIES + if _PATCHED_CUDA_DEVICE_PROPERTIES or not torch.cuda.is_available(): + return + + original_get_device_properties = torch.cuda.get_device_properties + props = original_get_device_properties(0) + if hasattr(props, "shared_memory_per_block_optin"): + _PATCHED_CUDA_DEVICE_PROPERTIES = True + return + + def patched_get_device_properties(*args, **kwargs): + props = original_get_device_properties(*args, **kwargs) + if hasattr(props, "shared_memory_per_block_optin"): + return props + return _CudaDevicePropertiesProxy(props) + + torch.cuda.get_device_properties = patched_get_device_properties + _PATCHED_CUDA_DEVICE_PROPERTIES = True + + def _torch_rmsnorm( x: torch.Tensor, weight: torch.Tensor, @@ -45,6 +96,7 @@ def forward( if residual is not None: try: + _patch_cuda_device_properties_for_flashinfer_norm() flashinfer.norm.fused_add_rmsnorm( x, residual, self.weight.data, self.eps ) @@ -54,6 +106,7 @@ def forward( return _torch_rmsnorm(residual, self.weight, self.eps), residual try: + _patch_cuda_device_properties_for_flashinfer_norm() # FlashInfer rmsnorm accepts 2D/3D input; flatten higher-rank tensors to 2D. if x.dim() in (2, 3): return flashinfer.norm.rmsnorm(x, self.weight, self.eps) @@ -83,6 +136,7 @@ def forward( residual: Optional[torch.Tensor] = None, ) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]: if residual is not None: + _patch_cuda_device_properties_for_flashinfer_norm() flashinfer.norm.gemma_fused_add_rmsnorm( x, residual, self.weight.data, self.eps ) @@ -95,6 +149,7 @@ def forward( ) # gemma_rmsnorm is defined on 2D input; flatten other ranks to 2D. + _patch_cuda_device_properties_for_flashinfer_norm() if x.dim() == 2: return flashinfer.norm.gemma_rmsnorm(x, self.weight, self.eps) diff --git a/pymllm/tests/test_rms_norm.py b/pymllm/tests/test_rms_norm.py index 9663f5444..16756a8aa 100644 --- a/pymllm/tests/test_rms_norm.py +++ b/pymllm/tests/test_rms_norm.py @@ -25,3 +25,23 @@ def fail_fused_add_rmsnorm(*args, **kwargs): _, residual_out = norm(x, residual) torch.testing.assert_close(residual_out, x + residual) + + +def test_flashinfer_norm_device_properties_patch_adds_optin(monkeypatch): + class FakeProps: + shared_memory_per_block = 49152 + shared_memory_per_multiprocessor = 167936 + + monkeypatch.setattr(rms_norm_module, "_PATCHED_CUDA_DEVICE_PROPERTIES", False) + monkeypatch.setattr(rms_norm_module.torch.cuda, "is_available", lambda: True) + monkeypatch.setattr( + rms_norm_module.torch.cuda, + "get_device_properties", + lambda device=0: FakeProps(), + ) + + rms_norm_module._patch_cuda_device_properties_for_flashinfer_norm() + + props = rms_norm_module.torch.cuda.get_device_properties(0) + assert props.shared_memory_per_block_optin == 167936 + assert props.shared_memory_per_block == 49152 From 0e93e6d50dd7122dcd66d740cfd5c918457d2e68 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sat, 23 May 2026 08:24:22 +0000 Subject: [PATCH 05/21] perf(sampling): avoid GPU sync for greedy decode --- pymllm/bench_one_batch.py | 1 + pymllm/executor/model_runner.py | 17 +++++++---- pymllm/orchestrator/model_runner_process.py | 2 ++ pymllm/tests/test_model_runner_sampling.py | 31 +++++++++++++++++++++ 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 pymllm/tests/test_model_runner_sampling.py diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index d97864086..55603bc8b 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -744,6 +744,7 @@ def _sample_greedy(self, logits_output: Any, forward_batch: Any) -> torch.Tensor logits_output, forward_batch, temperatures=temperatures, + is_all_greedy=True, ).to(torch.int32) def _require_initialized(self) -> None: diff --git a/pymllm/executor/model_runner.py b/pymllm/executor/model_runner.py index a50baa13e..4851c8a73 100644 --- a/pymllm/executor/model_runner.py +++ b/pymllm/executor/model_runner.py @@ -1287,6 +1287,7 @@ def sample( top_ps: Optional[torch.Tensor] = None, top_ks: Optional[torch.Tensor] = None, penalty_params: Optional[Dict[str, Any]] = None, + is_all_greedy: Optional[bool] = None, ) -> torch.Tensor: """Sample next-token IDs from logits. @@ -1310,6 +1311,10 @@ def sample( ``frequency_penalties``, ``presence_penalties`` (tensors of shape ``[batch_size]``), and ``token_histories`` (list of list of int). + is_all_greedy + CPU-side metadata indicating that every request should use greedy + sampling. Supplying this avoids a CUDA tensor reduction and + synchronization in the decode hot path. Returns ------- @@ -1338,12 +1343,14 @@ def sample( ) # Greedy path: temperature=0 (or all zeros) → argmax, no sampling. - if temperatures is not None: - all_greedy = bool((temperatures < 1e-6).all()) - else: - all_greedy = False + if is_all_greedy is None: + is_all_greedy = ( + bool((temperatures < 1e-6).all()) + if temperatures is not None + else False + ) - if all_greedy: + if is_all_greedy: return logits.argmax(dim=-1).to(torch.int32) # Stochastic path: apply temperature then sample. diff --git a/pymllm/orchestrator/model_runner_process.py b/pymllm/orchestrator/model_runner_process.py index 383fa2da5..9a0e5cf92 100644 --- a/pymllm/orchestrator/model_runner_process.py +++ b/pymllm/orchestrator/model_runner_process.py @@ -272,6 +272,7 @@ def _forward_batch(self, batch: Dict[str, Any]) -> Dict[str, Any]: temps_tensor = torch.tensor(temperatures, dtype=torch.float32, device=device) top_ps_tensor = torch.tensor(top_ps, dtype=torch.float32, device=device) top_ks_tensor = torch.tensor(top_ks, dtype=torch.int32, device=device) + is_all_greedy = all(t < 1e-6 for t in temperatures) # Collect token histories for penalty computation. # Each entry is (input_ids + output_ids_so_far) for the request. @@ -408,6 +409,7 @@ def _forward_batch(self, batch: Dict[str, Any]) -> Dict[str, Any]: top_ps=top_ps_tensor, top_ks=top_ks_tensor, penalty_params=penalty_params, + is_all_greedy=is_all_greedy, ) # ============================================================== diff --git a/pymllm/tests/test_model_runner_sampling.py b/pymllm/tests/test_model_runner_sampling.py new file mode 100644 index 000000000..09d74cbe0 --- /dev/null +++ b/pymllm/tests/test_model_runner_sampling.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +from types import SimpleNamespace + +import torch + +from pymllm.executor.model_runner import LogitsProcessorOutput, ModelRunner + + +def test_sample_uses_cpu_greedy_flag_without_tensor_reduction(monkeypatch): + runner = SimpleNamespace(device="cpu") + logits_output = LogitsProcessorOutput( + next_token_logits=torch.tensor([[1.0, 3.0], [5.0, 2.0]]) + ) + forward_batch = SimpleNamespace(batch_size=2) + + def fail_count_nonzero(*args, **kwargs): + raise AssertionError("greedy sampling should not reduce temperature tensors") + + monkeypatch.setattr(torch, "count_nonzero", fail_count_nonzero) + + next_token_ids = ModelRunner.sample( + runner, + logits_output, + forward_batch, + temperatures=torch.zeros((2,), dtype=torch.float32), + is_all_greedy=True, + ) + + assert next_token_ids.tolist() == [1, 0] + assert next_token_ids.dtype == torch.int32 From 7494bc4210471f92dadaeb531a7ee0fc8420b59e Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 04:53:36 +0000 Subject: [PATCH 06/21] perf(bench): align CUDA graph capture batch size with sweep (#1) Lift cfg.server.max_running_requests to max(batch_size) before creating the ModelRunner, mirroring SGLang main() which sets server_args.cuda_graph_max_bs = max(bench_args.batch_size). In pymllm the CUDA graph capture set and req_to_token_pool size both derive from ModelRunner.max_running_requests. Without this, sweeping a batch size larger than the default capture set makes decode silently fall off the graph path and run eager, biasing decode latency vs SGLang. No effect on batch_size=1 runs. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 55603bc8b..e8ee05c6e 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -881,6 +881,32 @@ def run_single_setting( ) +def _align_runner_capacity_with_batch_sizes( + cfg: GlobalConfig, batch_sizes: Sequence[int] +) -> None: + """Ensure the runner can hold and CUDA-graph-capture the largest batch. + + Mirrors SGLang ``main()`` which sets + ``server_args.cuda_graph_max_bs = max(bench_args.batch_size)``. In pymllm + the CUDA graph capture batch sizes are derived from + ``ModelRunner.max_running_requests`` (see ``CudaGraphRunner``), which also + sizes ``req_to_token_pool``. Without this, sweeping a batch size larger + than the configured capture set makes decode silently fall off the graph + path and run eager, biasing decode latency versus SGLang. + """ + if not batch_sizes: + return + requested = max(batch_sizes) + configured = cfg.server.max_running_requests + if configured is None or configured < requested: + cfg.server.max_running_requests = requested + logger.info( + "Raised max_running_requests to %d to cover bench batch sizes " + "(SGLang cuda_graph_max_bs alignment).", + requested, + ) + + def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: _load_hf_config(cfg) logger.info( @@ -888,6 +914,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: "do not chunk this benchmark." ) + _align_runner_capacity_with_batch_sizes(cfg, args.batch_size) bench_runner = PymllmBenchRunner.create(cfg) try: settings = generate_settings(args) From fdec95c5f1be348de7f6431539a1471b87fb31d4 Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 04:54:12 +0000 Subject: [PATCH 07/21] perf(bench): tensorize decode KV-mapping write, drop per-request .item() The decode loop read req_pool_indices[i].item() and seq_lens[i].item() per request, each a CUDA->CPU sync inside the timed decode region. SGLang and pymllm's own production decode path (orchestrator/model_runner_process) write the KV mapping without any per-request sync. Replace the loop with a single vectorized scatter req_to_token[req_pool_indices, seq_lens - 1] = out_cache_loc, removing 2*batch_size syncs per decode step. Negligible at batch_size=1; removes a linearly growing, SGLang-absent bias for batch_size > 1. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index e8ee05c6e..022110998 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -708,13 +708,18 @@ def decode( raise RuntimeError(f"Failed to allocate {batch_size} decode KV slots") seq_lens = state.seq_lens + 1 - for i in range(batch_size): - slot = int(state.req_pool_indices[i].item()) - write_pos = int(seq_lens[i].item()) - 1 - self.runner.req_to_token_pool.write( - (slot, slice(write_pos, write_pos + 1)), - out_cache_loc[i : i + 1], - ) + # Tensorized KV-mapping write. The production decode path + # (orchestrator/model_runner_process.py) keeps slot/write_pos as plain + # CPU bookkeeping and never does a per-request CUDA ``.item()`` sync. + # Doing per-request ``.item()`` here would add 2*batch_size CPU-GPU + # syncs inside the timed decode region that SGLang does not have, + # biasing decode latency once batch_size > 1. Write all rows at once: + # req_to_token[req_pool_indices, seq_lens - 1] = out_cache_loc. + write_positions = (seq_lens - 1).to(torch.int64) + self.runner.req_to_token_pool.write( + (state.req_pool_indices, write_positions), + out_cache_loc.to(torch.int32), + ) forward_batch = self.runner.prepare_forward_batch_decode( input_ids=input_ids.to(device=self.device, dtype=torch.int32), From 87cf2a3abc3e58af7cb93c2866f69de6501f4149 Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 04:55:07 +0000 Subject: [PATCH 08/21] feat(bench): skip settings exceeding KV pool capacity (#3) Add a SGLang-style capacity guard: when batch_size exceeds max_total_num_tokens // (input_len + output_len), log a skip and return without running, instead of hard-failing mid-sweep on KV slot allocation. run_benchmark now treats a None result as a skip and continues. Mirrors ModelRunner.max_batch_size / latency_test_run_once in SGLang's bench_one_batch. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 022110998..ea6037134 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -414,6 +414,20 @@ def _safe_div(numerator: float, denominator: float) -> float: return float(numerator / denominator) +def _max_batch_size_for(runner: Any, input_len: int, output_len: int) -> int: + """SGLang-style capacity bound on the static batch. + + Mirrors ``ModelRunner.max_batch_size`` in SGLang's bench_one_batch: + ``max_total_num_tokens // (input_len + output_len)``. Used to skip + settings the KV pool cannot hold instead of failing mid-run on alloc. + """ + total = int(getattr(runner, "max_total_num_tokens", 0) or 0) + denom = int(input_len) + int(output_len) + if denom <= 0: + return 0 + return total // denom + + def _sync_device(device: str | torch.device) -> None: torch_device = torch.device(device) if torch_device.type == "cuda": @@ -809,6 +823,23 @@ def run_single_setting( output_len=setting.output_len, ) + max_bs = _max_batch_size_for( + bench_runner.runner, + effective_setting.input_len, + effective_setting.output_len, + ) + if effective_setting.batch_size > max_bs: + logger.info( + "skipping (batch_size=%d, input_len=%d, output_len=%d): exceeds max " + "batch size %d (max_total_num_tokens=%d). SGLang-style skip.", + effective_setting.batch_size, + effective_setting.input_len, + effective_setting.output_len, + max_bs, + int(getattr(bench_runner.runner, "max_total_num_tokens", 0) or 0), + ) + return None + with _maybe_profile(args=args, setting=effective_setting, stage="prefill"): prefill_latency, extend_result = _timed_call( bench_runner.device, @@ -968,7 +999,9 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: record_result=True, multimodal_processor_output=multimodal_processor_output, ) - assert result is not None + if result is None: + # Setting skipped (e.g. exceeds KV pool capacity); do not record. + continue _append_jsonl(args.result_filename, result) logger.info("Result: %s", json.dumps(result, sort_keys=True)) results.append(result) From 75589034b70a011b4a07162046357dc416df53d9 Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 04:58:03 +0000 Subject: [PATCH 09/21] feat(bench): align profiling methodology with SGLang (#4) Rework profiling to match SGLang's bench_one_batch: - decode uses a single continuous profiler spanning [profile_start_step, profile_stop_step) -> one decode trace, instead of wrapping each step in its own profiler context (one file per step); - default profile start step is output_len // 2 (was (output_len-1)//2); - torch profiler runs with with_stack=True so kernels map to Python source; - traces are written as .trace.json.gz; - print the key_averages table on stop; - support --profile-activities CUDA_PROFILER to drive nsys via cudaProfilerStart/Stop. Replace the _maybe_profile context manager with start/stop helpers mirroring SGLang's start_profile/stop_profile. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 183 +++++++++++++++++++++++++------------- 1 file changed, 122 insertions(+), 61 deletions(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index ea6037134..6237a8a6e 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -14,7 +14,6 @@ import re import statistics import time -from contextlib import contextmanager, nullcontext from dataclasses import dataclass, field from pathlib import Path from typing import Any, Iterator, Optional, Sequence @@ -145,8 +144,12 @@ def add_bench_args(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: group.add_argument( "--profile-activities", nargs="+", - choices=["CPU", "GPU"], + choices=["CPU", "GPU", "CUDA_PROFILER"], default=["CPU", "GPU"], + help=( + "CPU/GPU use the torch profiler; CUDA_PROFILER drives nsys via " + "cudaProfilerStart/Stop (use with nsys --capture-range=cudaProfilerApi)." + ), ) group.add_argument( "--profile-stage", @@ -398,7 +401,7 @@ def make_profile_trace_path( filename = ( f"{safe_prefix}_{safe_run_name}_bs{setting.batch_size}" f"_in{setting.input_len}_out{setting.output_len}_{stage}" - f"{step_part}.trace.json" + f"{step_part}.trace.json.gz" ) return output_dir / filename @@ -552,45 +555,79 @@ def _profiler_activities(args: BenchArgs) -> list[Any]: return activities -@contextmanager -def _maybe_profile( - *, - args: BenchArgs, - setting: BenchSetting, - stage: str, - step: Optional[int] = None, -) -> Iterator[None]: - if not _profile_stage_enabled(args, stage): - with nullcontext(): - yield - return +def _resolve_profile_output_dir() -> Path: + output_dir = Path(os.environ.get("PYMLLM_TORCH_PROFILER_DIR", "/tmp")) + output_dir.mkdir(parents=True, exist_ok=True) + return output_dir + + +def _start_profile(args: BenchArgs, trace_path: Path) -> Any: + """Start profiling and return a handle. + + Mirrors SGLang's ``start_profile``: ``CUDA_PROFILER`` drives nsys via + ``cudaProfilerStart``; otherwise a torch profiler with ``with_stack=True`` + is started so kernels can be mapped back to Python source. Returns + ``"cuda"`` for the nsys path, the profiler object for the torch path, or + ``None`` when no activity is available. ``trace_path`` is accepted for + symmetry with ``_stop_profile`` (the torch path saves it on stop). + """ + if "CUDA_PROFILER" in args.profile_activities: + try: + torch.cuda.cudart().cudaProfilerStart() + logger.info("CUDA profiler started (nsys will begin capturing).") + except Exception as exc: # pragma: no cover - depends on nsys runtime + logger.warning("Failed to start CUDA profiler: %s", exc) + return "cuda" activities = _profiler_activities(args) if not activities: - with nullcontext(): - yield - return + return None from torch.profiler import profile - output_dir = Path(os.environ.get("PYMLLM_TORCH_PROFILER_DIR", "/tmp")) - output_dir.mkdir(parents=True, exist_ok=True) - trace_path = make_profile_trace_path( - output_dir=output_dir, - prefix=args.profile_filename_prefix, - run_name=args.run_name, - setting=setting, - stage=stage, - step=step, - ) - with profile( + profiler = profile( activities=activities, + with_stack=True, record_shapes=args.profile_record_shapes, - ) as profiler: - yield - profiler.step() - profiler.export_chrome_trace(str(trace_path)) - logger.info("Wrote torch profiler trace: %s", trace_path) + ) + profiler.start() + return profiler + + +def _stop_profile(handle: Any, args: BenchArgs, trace_path: Path, stage: str) -> None: + """Stop profiling and, for the torch path, save the chrome trace. + + Mirrors SGLang's ``stop_profile``, including printing the key_averages + table. The trace is written as ``.trace.json.gz`` (torch gzips when the + filename ends with ``.gz``). + """ + if handle is None: + return + if handle == "cuda": + try: + torch.cuda.cudart().cudaProfilerStop() + logger.info("CUDA profiler stopped for %s (nsys dumps traces).", stage) + except Exception as exc: # pragma: no cover - depends on nsys runtime + logger.warning("Failed to stop CUDA profiler: %s", exc) + return + + handle.stop() + trace_path.parent.mkdir(parents=True, exist_ok=True) + handle.export_chrome_trace(str(trace_path)) + try: + sort_key = ( + "self_cuda_time_total" + if torch.cuda.is_available() + else "self_cpu_time_total" + ) + print( + handle.key_averages( + group_by_input_shape=args.profile_record_shapes + ).table(sort_by=sort_key) + ) + except Exception as exc: + logger.warning("Failed to print profiler key_averages: %s", exc) + logger.info("Wrote torch profiler trace for %s: %s", stage, trace_path) class PymllmBenchRunner: @@ -840,47 +877,66 @@ def run_single_setting( ) return None - with _maybe_profile(args=args, setting=effective_setting, stage="prefill"): - prefill_latency, extend_result = _timed_call( - bench_runner.device, - lambda: bench_runner.extend( - input_ids, - pixel_values=mm_input.pixel_values if mm_input is not None else None, - image_grid_thw=( - mm_input.image_grid_thw if mm_input is not None else None - ), - benchmark_vision_timing=mm_input is not None, - ), + prefill_profile = _profile_stage_enabled(args, "prefill") + prefill_trace: Optional[Path] = None + prefill_handle: Any = None + if prefill_profile: + prefill_trace = make_profile_trace_path( + output_dir=_resolve_profile_output_dir(), + prefix=args.profile_filename_prefix, + run_name=args.run_name, + setting=effective_setting, + stage="prefill", ) + prefill_handle = _start_profile(args, prefill_trace) + prefill_latency, extend_result = _timed_call( + bench_runner.device, + lambda: bench_runner.extend( + input_ids, + pixel_values=mm_input.pixel_values if mm_input is not None else None, + image_grid_thw=( + mm_input.image_grid_thw if mm_input is not None else None + ), + benchmark_vision_timing=mm_input is not None, + ), + ) + if prefill_profile: + _stop_profile(prefill_handle, args, prefill_trace, "prefill") next_token_ids, state = extend_result decode_latencies: list[float] = [] decode_steps = max(0, setting.output_len - 1) + decode_profile = _profile_stage_enabled(args, "decode") profile_start_step = args.profile_start_step if profile_start_step is None: - profile_start_step = decode_steps // 2 if decode_steps else 0 + # Align SGLang: default to output_len // 2. + profile_start_step = effective_setting.output_len // 2 profile_stop_step = profile_start_step + args.profile_steps + decode_trace: Optional[Path] = None + decode_handle: Any = None + # One continuous profiler spans [profile_start_step, profile_stop_step), + # producing a single decode trace, matching SGLang (not one file per step). for step in range(decode_steps): - should_profile_decode = ( - _profile_stage_enabled(args, "decode") - and profile_start_step <= step < profile_stop_step - ) - profile_context = ( - _maybe_profile( - args=args, + if decode_profile and step == profile_start_step: + decode_trace = make_profile_trace_path( + output_dir=_resolve_profile_output_dir(), + prefix=args.profile_filename_prefix, + run_name=args.run_name, setting=effective_setting, stage="decode", - step=step, ) - if should_profile_decode - else nullcontext() + decode_handle = _start_profile(args, decode_trace) + + decode_latency, decode_result = _timed_call( + bench_runner.device, + lambda: bench_runner.decode(next_token_ids, state), ) - with profile_context: - decode_latency, decode_result = _timed_call( - bench_runner.device, - lambda: bench_runner.decode(next_token_ids, state), - ) + + if decode_handle is not None and step >= profile_stop_step - 1: + _stop_profile(decode_handle, args, decode_trace, "decode") + decode_handle = None + next_token_ids, state = decode_result decode_latencies.append(decode_latency) @@ -892,6 +948,11 @@ def run_single_setting( decode_latency, ) + # Save if the requested profile window ran past the final decode step. + if decode_handle is not None: + _stop_profile(decode_handle, args, decode_trace, "decode") + decode_handle = None + if not record_result: return None From ac95cd6d7f749a5e0c4063b6ce60144acaae021b Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 05:00:51 +0000 Subject: [PATCH 10/21] fix(bench): do not profile the warmup run (#2) run_single_setting wrapped both stages in profiling unconditionally, so --profile would also profile the non-recorded warmup run, wasting time and emitting extra traces. Add an allow_profile flag (default True) and pass allow_profile=False for the warmup call, matching SGLang which hardcodes profile=False during warmup. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 6237a8a6e..8dd5ea89f 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -831,6 +831,7 @@ def run_single_setting( seed: int, record_result: bool, multimodal_processor_output: Any = None, + allow_profile: bool = True, ) -> Optional[dict[str, Any]]: bench_runner.clear() vocab_size = getattr(bench_runner.runner, "vocab_size", 10000) @@ -877,7 +878,7 @@ def run_single_setting( ) return None - prefill_profile = _profile_stage_enabled(args, "prefill") + prefill_profile = allow_profile and _profile_stage_enabled(args, "prefill") prefill_trace: Optional[Path] = None prefill_handle: Any = None if prefill_profile: @@ -906,7 +907,7 @@ def run_single_setting( decode_latencies: list[float] = [] decode_steps = max(0, setting.output_len - 1) - decode_profile = _profile_stage_enabled(args, "decode") + decode_profile = allow_profile and _profile_stage_enabled(args, "decode") profile_start_step = args.profile_start_step if profile_start_step is None: # Align SGLang: default to output_len // 2. @@ -1042,6 +1043,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: seed=args.seed, record_result=False, multimodal_processor_output=multimodal_processor_output, + allow_profile=False, ) results: list[dict[str, Any]] = [] From 78c906dfef5ded1131110254194016b5e0ebea5e Mon Sep 17 00:00:00 2001 From: Dev Date: Thu, 4 Jun 2026 05:02:29 +0000 Subject: [PATCH 11/21] feat(bench): add single-stage correctness mode (#5) Add --correct (--correctness-test): load the tokenizer, encode real prompts, run one full prefill at batch_size=1, greedy-decode output_len tokens, and print the decoded text. main() branches to run_correctness when the flag is set. This is the single-stage variant. SGLang's --correct additionally does a cut_len two-stage prefill to exercise prefix-KV reuse; with greedy decoding the printed per-prompt text is identical either way. The two-stage variant can be layered on later (prepare_forward_batch_extend already accepts extend_prefix_lens > 0). Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/bench_one_batch.py | 85 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 8dd5ea89f..8b7026afe 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -52,6 +52,7 @@ class BenchArgs: skip_warmup: bool = False image_path: Optional[Path] = None prompt: str = "Describe this image." + correctness_test: bool = False @dataclass @@ -193,6 +194,16 @@ def add_bench_args(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: default=BenchArgs.prompt, help="Prompt text used with --image in multimodal benchmark mode.", ) + group.add_argument( + "--correct", + "--correctness-test", + dest="correctness_test", + action="store_true", + help=( + "Run a single-stage correctness check (encode real prompts, prefill, " + "greedy decode, print decoded text) instead of the latency benchmark." + ), + ) return parser @@ -225,6 +236,7 @@ def _bench_args_from_namespace(namespace: argparse.Namespace) -> BenchArgs: skip_warmup=namespace.skip_warmup, image_path=namespace.image_path, prompt=namespace.prompt, + correctness_test=namespace.correctness_test, ) @@ -1073,10 +1085,81 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: bench_runner.shutdown() +DEFAULT_CORRECTNESS_PROMPTS = ( + "The capital of France is", + "The capital of the United Kindom is", + "Today is a sunny day and I like", +) + + +def _load_tokenizer(cfg: GlobalConfig) -> Any: + if cfg.server.tokenizer_path is None: + raise ValueError("--server.tokenizer_path or --server.model_path is required") + + from transformers import AutoTokenizer + + return AutoTokenizer.from_pretrained( + str(cfg.server.tokenizer_path), + trust_remote_code=cfg.server.trust_remote_code, + ) + + +def correctness_test( + bench_runner: PymllmBenchRunner, + cfg: GlobalConfig, + args: BenchArgs, +) -> None: + """Single-stage correctness check. + + Encode a real prompt, run one full prefill at batch_size=1, greedy-decode + ``output_len`` tokens, and print the decoded text. Unlike SGLang's + ``--correct`` (which exercises a cut_len two-stage prefill to test prefix-KV + reuse), this runs each prompt as a single full prefill. Greedy decoding + makes the per-prompt output identical to SGLang's batched path. The cut_len + two-stage variant can be layered on later: ``prepare_forward_batch_extend`` + already accepts ``extend_prefix_lens > 0`` and ``req_to_token_pool.write`` + can pre-populate prefix KV indices. + """ + tokenizer = _load_tokenizer(cfg) + output_len = args.output_len[0] + prompts = list(DEFAULT_CORRECTNESS_PROMPTS) + + for idx, prompt in enumerate(prompts): + token_ids = list(tokenizer.encode(prompt)) + if not token_ids: + logger.warning("Prompt %d encoded to an empty token list, skipping.", idx) + continue + input_ids = torch.tensor( + [token_ids], dtype=torch.int32, device=bench_runner.device + ) + + bench_runner.clear() + next_token_ids, state = bench_runner.extend(input_ids) + output_ids = token_ids + [int(next_token_ids[0].item())] + for _ in range(max(0, output_len - 1)): + next_token_ids, state = bench_runner.decode(next_token_ids, state) + output_ids.append(int(next_token_ids[0].item())) + + print(f"========== Prompt {idx} ==========") + print(tokenizer.decode(output_ids), "\n") + + +def run_correctness(cfg: GlobalConfig, args: BenchArgs) -> None: + _load_hf_config(cfg) + bench_runner = PymllmBenchRunner.create(cfg) + try: + correctness_test(bench_runner, cfg, args) + finally: + bench_runner.shutdown() + + def main(argv: Optional[Sequence[str]] = None) -> None: cfg, args = parse_args(argv) _configure_logging(cfg.server.log_level) - run_benchmark(cfg, args) + if args.correctness_test: + run_correctness(cfg, args) + else: + run_benchmark(cfg, args) if __name__ == "__main__": From e33a5ef11f351a667d6c85d358f2d9c39c93486e Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Thu, 4 Jun 2026 09:47:38 +0000 Subject: [PATCH 12/21] test(bench): expect gzipped profiler traces --- pymllm/tests/test_bench_one_batch.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pymllm/tests/test_bench_one_batch.py b/pymllm/tests/test_bench_one_batch.py index 13a87fb72..e1ff2bc93 100644 --- a/pymllm/tests/test_bench_one_batch.py +++ b/pymllm/tests/test_bench_one_batch.py @@ -270,4 +270,7 @@ def test_make_profile_trace_path_is_deterministic_and_sanitized(tmp_path): ) assert path.parent == tmp_path - assert path.name == "pymllm_profile_qwen3_vl_w8a8_bs1_in256_out8_decode.trace.json" + assert ( + path.name + == "pymllm_profile_qwen3_vl_w8a8_bs1_in256_out8_decode.trace.json.gz" + ) From 8dcb2a1484ed508c36516b25870874198711044a Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Thu, 4 Jun 2026 09:48:14 +0000 Subject: [PATCH 13/21] test(bench): cover batched decode kv mapping --- pymllm/tests/test_bench_one_batch.py | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/pymllm/tests/test_bench_one_batch.py b/pymllm/tests/test_bench_one_batch.py index e1ff2bc93..8c6dd13ef 100644 --- a/pymllm/tests/test_bench_one_batch.py +++ b/pymllm/tests/test_bench_one_batch.py @@ -8,6 +8,7 @@ from pymllm.bench_one_batch import ( BenchArgs, BenchSetting, + DecodeState, PymllmBenchRunner, generate_settings, make_multimodal_bench_input_from_processor_output, @@ -274,3 +275,66 @@ def test_make_profile_trace_path_is_deterministic_and_sanitized(tmp_path): path.name == "pymllm_profile_qwen3_vl_w8a8_bs1_in256_out8_decode.trace.json.gz" ) + + +def test_decode_writes_batch_kv_mapping_with_tensor_indices(): + from pymllm.mem_cache.memory_pool import ReqToTokenPool, TokenToKVPoolAllocator + + class _Runner: + def __init__(self): + self.device = "cpu" + self.dtype = torch.float32 + self.req_to_token_pool = ReqToTokenPool( + max_reqs=6, + max_context_len=8, + device="cpu", + ) + self.token_to_kv_pool_allocator = TokenToKVPoolAllocator( + size=32, + device="cpu", + ) + self.last_decode_kwargs = None + + def prepare_forward_batch_decode(self, **kwargs): + self.last_decode_kwargs = kwargs + return SimpleNamespace(batch_size=kwargs["req_pool_indices"].shape[0]) + + def forward(self, forward_batch): + del forward_batch + return object() + + def sample(self, logits_output, forward_batch, **kwargs): + del logits_output, forward_batch, kwargs + return torch.tensor([11, 12, 13], dtype=torch.int32) + + fake_runner = _Runner() + bench_runner = PymllmBenchRunner(fake_runner) + state = DecodeState( + req_pool_indices=torch.tensor([2, 0, 4], dtype=torch.int64), + seq_lens=torch.tensor([4, 2, 6], dtype=torch.int32), + ) + + next_token_ids, next_state = bench_runner.decode( + torch.tensor([1, 2, 3], dtype=torch.int32), + state, + ) + + torch.testing.assert_close( + fake_runner.req_to_token_pool.req_to_token[ + torch.tensor([2, 0, 4], dtype=torch.int64), + torch.tensor([4, 2, 6], dtype=torch.int64), + ], + torch.tensor([1, 2, 3], dtype=torch.int32), + ) + torch.testing.assert_close( + next_state.seq_lens, + torch.tensor([5, 3, 7], dtype=torch.int32), + ) + torch.testing.assert_close( + fake_runner.last_decode_kwargs["out_cache_loc"], + torch.tensor([1, 2, 3], dtype=torch.int64), + ) + torch.testing.assert_close( + next_token_ids, + torch.tensor([11, 12, 13], dtype=torch.int32), + ) From e7ed9490a9b7370c1139fa82327a0b9b19716a60 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Thu, 4 Jun 2026 09:48:44 +0000 Subject: [PATCH 14/21] docs(bench): label correct mode as smoke check --- pymllm/bench_one_batch.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 8b7026afe..a40cc4c50 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -200,8 +200,9 @@ def add_bench_args(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: dest="correctness_test", action="store_true", help=( - "Run a single-stage correctness check (encode real prompts, prefill, " - "greedy decode, print decoded text) instead of the latency benchmark." + "Run a single-stage smoke correctness check (encode real prompts, " + "prefill, greedy decode, print decoded text) instead of the " + "latency benchmark." ), ) return parser @@ -1109,7 +1110,7 @@ def correctness_test( cfg: GlobalConfig, args: BenchArgs, ) -> None: - """Single-stage correctness check. + """Single-stage smoke correctness check. Encode a real prompt, run one full prefill at batch_size=1, greedy-decode ``output_len`` tokens, and print the decoded text. Unlike SGLang's From 75a67e50af483234d67086860f9c1ca3ac731f8b Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sun, 7 Jun 2026 06:05:31 +0000 Subject: [PATCH 15/21] feat(bench): sweep multimodal prefill input length --- pymllm/bench_one_batch.py | 181 +++++++++++++++++++++++---- pymllm/tests/test_bench_one_batch.py | 133 ++++++++++++++++++++ 2 files changed, 288 insertions(+), 26 deletions(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index a40cc4c50..6512310a6 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -13,6 +13,7 @@ import os import re import statistics +import sys import time from dataclasses import dataclass, field from pathlib import Path @@ -52,6 +53,7 @@ class BenchArgs: skip_warmup: bool = False image_path: Optional[Path] = None prompt: str = "Describe this image." + input_len_was_provided: bool = False correctness_test: bool = False @@ -84,6 +86,12 @@ class MultimodalBenchInput: vit_prefill_tokens: int +@dataclass +class MultimodalProcessorBundle: + processor_output: Any + pad_token_id: int + + def _positive_int(value: str) -> int: parsed = int(value) if parsed <= 0: @@ -186,7 +194,9 @@ def add_bench_args(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: default=None, help=( "Optional image path for multimodal benchmark mode. When set, " - "--input-len is replaced by the processed prompt length." + "omitted --input-len uses the processed prompt length; explicit " + "--input-len sweeps target total multimodal prefill length " + "(image placeholder tokens + text tokens)." ), ) group.add_argument( @@ -218,7 +228,15 @@ def make_parser() -> argparse.ArgumentParser: return parser -def _bench_args_from_namespace(namespace: argparse.Namespace) -> BenchArgs: +def _argv_has_option(argv: Sequence[str], option: str) -> bool: + return any(arg == option or arg.startswith(f"{option}=") for arg in argv) + + +def _bench_args_from_namespace( + namespace: argparse.Namespace, + *, + input_len_was_provided: bool = False, +) -> BenchArgs: return BenchArgs( run_name=namespace.run_name, batch_size=list(namespace.batch_size), @@ -237,6 +255,7 @@ def _bench_args_from_namespace(namespace: argparse.Namespace) -> BenchArgs: skip_warmup=namespace.skip_warmup, image_path=namespace.image_path, prompt=namespace.prompt, + input_len_was_provided=input_len_was_provided, correctness_test=namespace.correctness_test, ) @@ -245,13 +264,21 @@ def parse_args( argv: Optional[Sequence[str]] = None, ) -> tuple[GlobalConfig, BenchArgs]: parser = make_parser() - cfg = read_args(argv=argv, parser=parser) - namespace = parser.parse_args(argv) - return cfg, _bench_args_from_namespace(namespace) + cli_argv = list(sys.argv[1:] if argv is None else argv) + cfg = read_args(argv=cli_argv, parser=parser) + namespace = parser.parse_args(cli_argv) + return cfg, _bench_args_from_namespace( + namespace, + input_len_was_provided=_argv_has_option(cli_argv, "--input-len"), + ) def generate_settings(args: BenchArgs) -> list[BenchSetting]: - input_lens = [0] if args.image_path is not None else args.input_len + input_lens = ( + [0] + if args.image_path is not None and not args.input_len_was_provided + else args.input_len + ) return [ BenchSetting(batch_size=batch_size, input_len=input_len, output_len=output_len) for batch_size in args.batch_size @@ -342,18 +369,90 @@ def make_vit_prefill_metrics( } +def make_multimodal_prefill_metrics( + *, + prefill_latency: float, + batch_size: int, + input_len: int, +) -> dict[str, Any]: + tokens = int(batch_size) * int(input_len) + throughput = _safe_div(float(tokens), float(prefill_latency)) + return { + "multimodal_prefill_latency": float(prefill_latency), + "multimodal_prefill_ms": float(prefill_latency) * 1000.0, + "multimodal_prefill_tokens": tokens, + "multimodal_prefill_throughput": throughput, + "multimodal_prefill_tps": throughput, + } + + def _get_processor_value(processor_output: Any, key: str) -> Any: if hasattr(processor_output, "get"): return processor_output.get(key) return getattr(processor_output, key, None) +def _resize_multimodal_input_ids( + input_ids: torch.Tensor, + *, + target_input_len: int, + image_token_id: int, + pad_token_id: int, +) -> torch.Tensor: + if int(pad_token_id) == int(image_token_id): + pad_token_id = 0 if int(image_token_id) != 0 else 1 + if target_input_len <= 0: + raise ValueError( + f"target_input_len must be positive, got {target_input_len}" + ) + if input_ids.dim() != 2 or input_ids.shape[0] != 1: + raise ValueError( + "bench_one_batch multimodal resize expects input_ids shape [1, seq_len], " + f"got {tuple(input_ids.shape)}" + ) + + seq = input_ids[0] + image_mask = seq == image_token_id + image_token_count = int(image_mask.sum().item()) + if target_input_len < image_token_count: + raise ValueError( + "target_input_len must be at least the number of image tokens " + f"({image_token_count}), got {target_input_len}" + ) + if int(seq.numel()) == target_input_len: + return input_ids + + text_budget = target_input_len - image_token_count + resized_tokens: list[int] = [] + kept_text = 0 + for token in seq.tolist(): + token_id = int(token) + if token_id == image_token_id: + resized_tokens.append(token_id) + elif kept_text < text_budget: + resized_tokens.append(token_id) + kept_text += 1 + if len(resized_tokens) == target_input_len: + break + + if len(resized_tokens) < target_input_len: + resized_tokens.extend([int(pad_token_id)] * (target_input_len - len(resized_tokens))) + + return torch.tensor( + [resized_tokens], + dtype=input_ids.dtype, + device=input_ids.device, + ) + + def make_multimodal_bench_input_from_processor_output( processor_output: Any, *, batch_size: int, image_token_id: int, device: str | torch.device, + target_input_len: Optional[int] = None, + pad_token_id: int = 0, ) -> MultimodalBenchInput: input_ids = _get_processor_value(processor_output, "input_ids") pixel_values = _get_processor_value(processor_output, "pixel_values") @@ -376,6 +475,13 @@ def make_multimodal_bench_input_from_processor_output( "bench_one_batch multimodal mode expects one processed prompt before " f"batch repetition, got batch dimension {input_ids_t.shape[0]}" ) + if target_input_len is not None: + input_ids_t = _resize_multimodal_input_ids( + input_ids_t, + target_input_len=target_input_len, + image_token_id=image_token_id, + pad_token_id=pad_token_id, + ) input_ids_t = input_ids_t.repeat(batch_size, 1).to( device=device, dtype=torch.int32 @@ -522,7 +628,7 @@ def _make_multimodal_processor_output( cfg: GlobalConfig, prompt: str, image_path: Path, -) -> Any: +) -> MultimodalProcessorBundle: if cfg.server.tokenizer_path is None: raise ValueError("--server.tokenizer_path or --server.model_path is required") if not image_path.exists(): @@ -535,13 +641,22 @@ def _make_multimodal_processor_output( str(cfg.server.tokenizer_path), trust_remote_code=cfg.server.trust_remote_code, ) + tokenizer = getattr(processor, "tokenizer", None) + pad_token_id = getattr(tokenizer, "pad_token_id", None) + if pad_token_id is None: + pad_token_id = getattr(tokenizer, "eos_token_id", None) + if pad_token_id is None: + pad_token_id = 0 image = Image.open(image_path).convert("RGB") text = _render_multimodal_prompt( processor, prompt=prompt, image_path=image_path, ) - return processor(images=[image], text=[text], return_tensors="pt") + return MultimodalProcessorBundle( + processor_output=processor(images=[image], text=[text], return_tensors="pt"), + pad_token_id=int(pad_token_id), + ) def _append_jsonl(path: Path, row: dict[str, Any]) -> None: @@ -843,14 +958,14 @@ def run_single_setting( setting: BenchSetting, seed: int, record_result: bool, - multimodal_processor_output: Any = None, + multimodal_processor_bundle: Optional[MultimodalProcessorBundle] = None, allow_profile: bool = True, ) -> Optional[dict[str, Any]]: bench_runner.clear() vocab_size = getattr(bench_runner.runner, "vocab_size", 10000) mm_input = None effective_setting = setting - if multimodal_processor_output is None: + if multimodal_processor_bundle is None: input_ids = make_synthetic_input_ids( batch_size=setting.batch_size, input_len=setting.input_len, @@ -862,10 +977,16 @@ def run_single_setting( hf_config = bench_runner.runner.model_config.hf_config image_token_id = _extract_image_token_id(hf_config) mm_input = make_multimodal_bench_input_from_processor_output( - multimodal_processor_output, + multimodal_processor_bundle.processor_output, batch_size=setting.batch_size, image_token_id=image_token_id, device=bench_runner.device, + target_input_len=( + setting.input_len + if args.input_len_was_provided + else None + ), + pad_token_id=multimodal_processor_bundle.pad_token_id, ) input_ids = mm_input.input_ids effective_setting = BenchSetting( @@ -970,6 +1091,24 @@ def run_single_setting( if not record_result: return None + extra_metrics = None + if mm_input is not None: + extra_metrics = make_multimodal_prefill_metrics( + prefill_latency=prefill_latency, + batch_size=effective_setting.batch_size, + input_len=effective_setting.input_len, + ) + if ( + extend_result.vit_prefill_ms is not None + and extend_result.vit_prefill_tokens is not None + ): + extra_metrics.update( + make_vit_prefill_metrics( + vit_prefill_ms=extend_result.vit_prefill_ms, + vit_prefill_tokens=extend_result.vit_prefill_tokens, + ) + ) + return summarize_latencies( setting=effective_setting, prefill_latency=prefill_latency, @@ -978,17 +1117,7 @@ def run_single_setting( device=bench_runner.device, dtype=str(bench_runner.runner.dtype), cuda_graph=bench_runner.runner.graph_runner is not None, - extra=( - make_vit_prefill_metrics( - vit_prefill_ms=extend_result.vit_prefill_ms, - vit_prefill_tokens=extend_result.vit_prefill_tokens, - ) - if ( - extend_result.vit_prefill_ms is not None - and extend_result.vit_prefill_tokens is not None - ) - else None - ), + extra=extra_metrics, ) @@ -1029,9 +1158,9 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: bench_runner = PymllmBenchRunner.create(cfg) try: settings = generate_settings(args) - multimodal_processor_output = None + multimodal_processor_bundle = None if args.image_path is not None: - multimodal_processor_output = _make_multimodal_processor_output( + multimodal_processor_bundle = _make_multimodal_processor_output( cfg=cfg, prompt=args.prompt, image_path=args.image_path, @@ -1055,7 +1184,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: setting=warmup_setting, seed=args.seed, record_result=False, - multimodal_processor_output=multimodal_processor_output, + multimodal_processor_bundle=multimodal_processor_bundle, allow_profile=False, ) @@ -1073,7 +1202,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: setting=setting, seed=args.seed + index, record_result=True, - multimodal_processor_output=multimodal_processor_output, + multimodal_processor_bundle=multimodal_processor_bundle, ) if result is None: # Setting skipped (e.g. exceeds KV pool capacity); do not record. diff --git a/pymllm/tests/test_bench_one_batch.py b/pymllm/tests/test_bench_one_batch.py index 8c6dd13ef..36e9afd71 100644 --- a/pymllm/tests/test_bench_one_batch.py +++ b/pymllm/tests/test_bench_one_batch.py @@ -78,6 +78,24 @@ def test_parse_args_accepts_server_config_and_list_bench_args(tmp_path): assert bench_args.profile_activities == ["CPU", "GPU"] assert bench_args.image_path == tmp_path / "image.jpg" assert bench_args.prompt == "What is in this image?" + assert bench_args.input_len_was_provided is True + + +def test_parse_args_detects_default_input_len_when_omitted_in_image_mode(tmp_path): + model_dir = tmp_path / "model" + model_dir.mkdir() + + _, bench_args = parse_args( + [ + "--server.model_path", + str(model_dir), + "--image", + str(tmp_path / "image.jpg"), + ] + ) + + assert bench_args.input_len == [256, 512, 1024] + assert bench_args.input_len_was_provided is False def test_generate_settings_has_stable_batch_input_output_order(tmp_path): @@ -111,6 +129,24 @@ def test_generate_settings_uses_processed_prompt_length_for_image_mode(tmp_path) ] +def test_generate_settings_sweeps_input_len_when_explicit_in_image_mode(tmp_path): + args = BenchArgs( + batch_size=[1, 2], + input_len=[512, 1024], + output_len=[8], + result_filename=tmp_path / "out.jsonl", + image_path=tmp_path / "image.jpg", + input_len_was_provided=True, + ) + + assert generate_settings(args) == [ + BenchSetting(batch_size=1, input_len=512, output_len=8), + BenchSetting(batch_size=1, input_len=1024, output_len=8), + BenchSetting(batch_size=2, input_len=512, output_len=8), + BenchSetting(batch_size=2, input_len=1024, output_len=8), + ] + + def test_make_synthetic_input_ids_is_seeded_int32_and_vocab_capped(): first = make_synthetic_input_ids( batch_size=2, @@ -174,6 +210,24 @@ def test_make_vit_prefill_metrics_reports_seconds_and_tps(): } +def test_make_multimodal_prefill_metrics_aliases_full_prefill_latency(): + from pymllm.bench_one_batch import make_multimodal_prefill_metrics + + result = make_multimodal_prefill_metrics( + prefill_latency=0.25, + batch_size=2, + input_len=128, + ) + + assert result == { + "multimodal_prefill_latency": pytest.approx(0.25), + "multimodal_prefill_ms": pytest.approx(250.0), + "multimodal_prefill_tokens": 256, + "multimodal_prefill_throughput": pytest.approx(1024.0), + "multimodal_prefill_tps": pytest.approx(1024.0), + } + + def test_make_multimodal_bench_input_repeats_processor_output_per_batch(): bench_input = make_multimodal_bench_input_from_processor_output( { @@ -199,6 +253,85 @@ def test_make_multimodal_bench_input_repeats_processor_output_per_batch(): ) +def test_make_multimodal_bench_input_pads_text_tokens_to_target_len(): + bench_input = make_multimodal_bench_input_from_processor_output( + { + "input_ids": torch.tensor([[101, 5, 5, 102]], dtype=torch.int64), + "pixel_values": torch.arange(6, dtype=torch.float32).reshape(2, 3), + "image_grid_thw": torch.tensor([[1, 2, 2]], dtype=torch.int64), + }, + batch_size=1, + image_token_id=5, + device="cpu", + target_input_len=7, + pad_token_id=0, + ) + + torch.testing.assert_close( + bench_input.input_ids, + torch.tensor([[101, 5, 5, 102, 0, 0, 0]], dtype=torch.int32), + ) + assert bench_input.vit_prefill_tokens == 2 + + +def test_make_multimodal_bench_input_does_not_pad_with_image_token_id(): + bench_input = make_multimodal_bench_input_from_processor_output( + { + "input_ids": torch.tensor([[101, 5, 5, 102]], dtype=torch.int64), + "pixel_values": torch.arange(6, dtype=torch.float32).reshape(2, 3), + "image_grid_thw": torch.tensor([[1, 2, 2]], dtype=torch.int64), + }, + batch_size=1, + image_token_id=5, + device="cpu", + target_input_len=6, + pad_token_id=5, + ) + + torch.testing.assert_close( + bench_input.input_ids, + torch.tensor([[101, 5, 5, 102, 0, 0]], dtype=torch.int32), + ) + assert bench_input.vit_prefill_tokens == 2 + + +def test_make_multimodal_bench_input_truncates_text_tokens_not_image_tokens(): + bench_input = make_multimodal_bench_input_from_processor_output( + { + "input_ids": torch.tensor([[101, 7, 5, 5, 102, 103]], dtype=torch.int64), + "pixel_values": torch.arange(6, dtype=torch.float32).reshape(2, 3), + "image_grid_thw": torch.tensor([[1, 2, 2]], dtype=torch.int64), + }, + batch_size=1, + image_token_id=5, + device="cpu", + target_input_len=4, + pad_token_id=0, + ) + + torch.testing.assert_close( + bench_input.input_ids, + torch.tensor([[101, 7, 5, 5]], dtype=torch.int32), + ) + assert bench_input.vit_prefill_tokens == 2 + + +def test_make_multimodal_bench_input_rejects_target_shorter_than_image_tokens(): + with pytest.raises(ValueError, match="target_input_len"): + make_multimodal_bench_input_from_processor_output( + { + "input_ids": torch.tensor([[5, 5, 5, 102]], dtype=torch.int64), + "pixel_values": torch.arange(9, dtype=torch.float32).reshape(3, 3), + "image_grid_thw": torch.tensor([[1, 3, 1]], dtype=torch.int64), + }, + batch_size=1, + image_token_id=5, + device="cpu", + target_input_len=2, + pad_token_id=0, + ) + + def test_extend_attaches_multimodal_inputs_and_returns_vit_metrics(): class _ReqPool: def alloc(self, batch_size): From 2dae7cee4eadfdba3af679f2cb9fb16528938ce4 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sun, 7 Jun 2026 06:59:41 +0000 Subject: [PATCH 16/21] perf(memory): refine static KV pool profiling --- pymllm/executor/model_runner.py | 79 +++++++++--- pymllm/tests/test_model_runner_memory_pool.py | 114 ++++++++++++++++++ 2 files changed, 179 insertions(+), 14 deletions(-) create mode 100644 pymllm/tests/test_model_runner_memory_pool.py diff --git a/pymllm/executor/model_runner.py b/pymllm/executor/model_runner.py index 4851c8a73..081788cf8 100644 --- a/pymllm/executor/model_runner.py +++ b/pymllm/executor/model_runner.py @@ -37,6 +37,7 @@ import gc import logging +import os import time from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union @@ -79,6 +80,9 @@ def get_available_gpu_memory(device: str = "cuda", gpu_id: int = 0) -> float: if device != "cuda" or not torch.cuda.is_available(): return 0.0 torch.cuda.set_device(gpu_id) + props = torch.cuda.get_device_properties(gpu_id) + if getattr(props, "is_integrated", False): + return _get_system_available_memory_gb() free, _ = torch.cuda.mem_get_info(gpu_id) return free / (1 << 30) @@ -92,6 +96,26 @@ def get_total_gpu_memory(device: str = "cuda", gpu_id: int = 0) -> float: return total / (1 << 30) +def _get_system_available_memory_gb() -> float: + try: + import psutil + + return psutil.virtual_memory().available / (1 << 30) + except Exception: + pass + + if hasattr(os, "sysconf"): + try: + page_size = os.sysconf("SC_PAGE_SIZE") + avail_pages = os.sysconf("SC_AVPHYS_PAGES") + return (page_size * avail_pages) / (1 << 30) + except (OSError, ValueError): + pass + + free, _ = torch.cuda.mem_get_info() + return free / (1 << 30) + + # --------------------------------------------------------------------------- # LogitsProcessorOutput # --------------------------------------------------------------------------- @@ -274,6 +298,11 @@ def __init__( # Forward pass counter (monotonically increasing). self.forward_pass_id: int = 0 + # GPU memory available before model weights are loaded. This is used to + # match SGLang's mem_fraction_static semantics: static memory includes + # both model weights and the KV cache pool. + self._pre_model_load_available_gb: float = 0.0 + # ------------------------------------------------------------------ # Initialisation # ------------------------------------------------------------------ @@ -301,6 +330,11 @@ def initialize(self) -> None: torch.set_default_dtype(self.dtype) # Load the model + if self.device == "cuda": + self._pre_model_load_available_gb = get_available_gpu_memory( + self.device, + self.gpu_id, + ) self.load_model() # Extract model metadata from hf_config @@ -705,7 +739,8 @@ def init_memory_pool(self) -> None: if self.max_total_num_tokens <= 0: raise RuntimeError( "Not enough memory for KV cache. " - "Try reducing context_length or using a smaller model." + "Try increasing mem_fraction_static, reducing context_length, " + "or using a smaller model." ) # Create ReqToTokenPool @@ -774,24 +809,26 @@ def init_memory_pool(self) -> None: def _profile_max_num_tokens(self) -> int: """Profile available memory to determine maximum KV-cache tokens. - If ``server_config.max_total_tokens`` is explicitly set that value - is used directly. Otherwise a memory-fraction-based heuristic - similar to sglang's ``profile_max_num_token`` is applied. + ``mem_fraction_static`` follows SGLang's semantics: it is the fraction + of total static memory budget used by model weights plus KV cache pool. + ``server_config.max_total_tokens`` is an upper bound on the profiled + capacity, not a replacement for profiling. """ - # If user explicitly set max_total_tokens, use that. - if self.server_config.max_total_tokens is not None: - return self.server_config.max_total_tokens - if self.device != "cuda": # For CPU, use a conservative default. + if self.server_config.max_total_tokens is not None: + return self.server_config.max_total_tokens return 4096 available_gb = get_available_gpu_memory(self.device, self.gpu_id) + pre_model_available_gb = getattr(self, "_pre_model_load_available_gb", 0.0) + if pre_model_available_gb <= 0: + pre_model_available_gb = available_gb - # Determine memory fraction for static allocation (KV cache). + # Determine memory fraction for static allocation (model weights + KV cache). mem_fraction = self.server_config.mem_fraction_static if mem_fraction is None: - mem_fraction = 0.85 # default: use 85% of remaining memory + mem_fraction = 0.85 # Calculate per-token KV cache size in bytes. kv_element_size = torch.tensor([], dtype=self.kv_cache_dtype).element_size() @@ -809,7 +846,8 @@ def _profile_max_num_tokens(self) -> int: ) return 4096 - rest_memory_bytes = int(available_gb * mem_fraction * (1 << 30)) + rest_memory_gb = available_gb - pre_model_available_gb * (1 - mem_fraction) + rest_memory_bytes = int(rest_memory_gb * (1 << 30)) # Reserve memory for GDN pool if hybrid model if self.num_gdn_layers > 0: @@ -863,16 +901,29 @@ def _profile_max_num_tokens(self) -> int: max_num_tokens = rest_memory_bytes // cell_size + if self.server_config.max_total_tokens is not None: + if self.server_config.max_total_tokens > max_num_tokens: + logger.warning( + "max_total_tokens=%d is larger than the profiled value %d. " + "Use the profiled value instead.", + self.server_config.max_total_tokens, + max_num_tokens, + ) + max_num_tokens = min(max_num_tokens, self.server_config.max_total_tokens) + logger.info( - "Memory profiling: avail=%.2f GB, fraction=%.2f, " - "cell_size=%d bytes, max_tokens=%d", + "Memory profiling: pre_model_avail=%.2f GB, avail=%.2f GB, " + "fraction=%.2f, static_kv_budget=%.2f GB, cell_size=%d bytes, " + "max_tokens=%d", + pre_model_available_gb, available_gb, mem_fraction, + rest_memory_gb, cell_size, max_num_tokens, ) - return max(max_num_tokens, 1) # at least 1 + return max_num_tokens # ------------------------------------------------------------------ # Attention backend diff --git a/pymllm/tests/test_model_runner_memory_pool.py b/pymllm/tests/test_model_runner_memory_pool.py new file mode 100644 index 000000000..db4a816ef --- /dev/null +++ b/pymllm/tests/test_model_runner_memory_pool.py @@ -0,0 +1,114 @@ +from __future__ import annotations + +from types import SimpleNamespace + +import pytest +import torch + +from pymllm.executor import model_runner +from pymllm.executor.model_runner import ModelRunner + + +def _make_runner( + *, + mem_fraction_static: float, + max_total_tokens: int | None = None, + free_gb: float = 5.0, + total_gb: float = 10.0, +) -> SimpleNamespace: + return SimpleNamespace( + server_config=SimpleNamespace( + mem_fraction_static=mem_fraction_static, + max_total_tokens=max_total_tokens, + ), + device="cuda", + gpu_id=0, + kv_cache_dtype=torch.float16, + num_kv_heads=1, + head_dim=1, + v_head_dim=1, + num_hidden_layers=1, + num_gdn_layers=0, + _pre_model_load_available_gb=total_gb, + _current_available_gb=free_gb, + ) + + +@pytest.fixture +def _cuda_available(monkeypatch): + monkeypatch.setattr(model_runner.torch.cuda, "is_available", lambda: True) + + +def test_profile_max_num_tokens_treats_mem_fraction_static_as_static_pool_fraction( + _cuda_available, + monkeypatch, +): + runner = _make_runner(mem_fraction_static=0.4, free_gb=5.0, total_gb=10.0) + monkeypatch.setattr( + model_runner, + "get_available_gpu_memory", + lambda *args, **kwargs: runner._current_available_gb, + ) + + # SGLang-compatible formula: + # free_after_model - pre_model_free * (1 - mem_fraction_static) + # = 5 GiB - 10 GiB * 0.6 = -1 GiB, so the pool is not allocatable. + assert ModelRunner._profile_max_num_tokens(runner) <= 0 + + +def test_profile_max_num_tokens_caps_user_max_total_tokens_to_profiled_capacity( + _cuda_available, + monkeypatch, +): + runner = _make_runner( + mem_fraction_static=0.8, + max_total_tokens=8_000_000_000, + free_gb=5.0, + total_gb=10.0, + ) + monkeypatch.setattr( + model_runner, + "get_available_gpu_memory", + lambda *args, **kwargs: runner._current_available_gb, + ) + + # Profiled capacity is 3 GiB / 4 bytes per token. A larger user limit should + # not bypass profiling or force an oversized KV pool allocation. + assert ModelRunner._profile_max_num_tokens(runner) == 805_306_368 + + +def test_profile_max_num_tokens_uses_user_limit_when_below_profiled_capacity( + _cuda_available, + monkeypatch, +): + runner = _make_runner( + mem_fraction_static=0.8, + max_total_tokens=4096, + free_gb=5.0, + total_gb=10.0, + ) + monkeypatch.setattr( + model_runner, + "get_available_gpu_memory", + lambda *args, **kwargs: runner._current_available_gb, + ) + + assert ModelRunner._profile_max_num_tokens(runner) == 4096 + + +def test_available_gpu_memory_uses_system_memory_for_integrated_gpu(monkeypatch): + monkeypatch.setattr(model_runner.torch.cuda, "is_available", lambda: True) + monkeypatch.setattr(model_runner.torch.cuda, "set_device", lambda gpu_id: None) + monkeypatch.setattr( + model_runner.torch.cuda, + "get_device_properties", + lambda gpu_id: SimpleNamespace(is_integrated=True), + ) + monkeypatch.setattr(model_runner, "_get_system_available_memory_gb", lambda: 7.5) + + def fail_mem_get_info(*args, **kwargs): + raise AssertionError("integrated GPU memory should use system available memory") + + monkeypatch.setattr(model_runner.torch.cuda, "mem_get_info", fail_mem_get_info) + + assert model_runner.get_available_gpu_memory("cuda", 0) == 7.5 From 7eb9502920ee36c9695d731936fc29e2396d709a Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Sun, 7 Jun 2026 14:37:25 +0000 Subject: [PATCH 17/21] perf(memory): improve KV cache budget diagnostics --- pymllm/executor/model_runner.py | 95 +++++++++++++++++-- pymllm/tests/test_model_runner_memory_pool.py | 53 +++++++++++ 2 files changed, 141 insertions(+), 7 deletions(-) diff --git a/pymllm/executor/model_runner.py b/pymllm/executor/model_runner.py index 081788cf8..7e10bf818 100644 --- a/pymllm/executor/model_runner.py +++ b/pymllm/executor/model_runner.py @@ -139,6 +139,19 @@ class LogitsProcessorOutput: hidden_states: Optional[torch.Tensor] = None +@dataclass +class MemoryProfileResult: + pre_model_available_gb: float + available_gb: float + mem_fraction: float + static_kv_budget_gb: float + cell_size_bytes: int + profiled_max_tokens: int + requested_max_total_tokens: Optional[int] + effective_max_tokens: int + gdn_pool_gb: float = 0.0 + + # --------------------------------------------------------------------------- # Penalty helpers # --------------------------------------------------------------------------- @@ -302,6 +315,7 @@ def __init__( # match SGLang's mem_fraction_static semantics: static memory includes # both model weights and the KV cache pool. self._pre_model_load_available_gb: float = 0.0 + self._last_memory_profile: Optional[MemoryProfileResult] = None # ------------------------------------------------------------------ # Initialisation @@ -737,11 +751,7 @@ def init_memory_pool(self) -> None: self.max_running_requests = max_reqs if self.max_total_num_tokens <= 0: - raise RuntimeError( - "Not enough memory for KV cache. " - "Try increasing mem_fraction_static, reducing context_length, " - "or using a smaller model." - ) + raise RuntimeError(self._format_kv_cache_memory_error()) # Create ReqToTokenPool self.req_to_token_pool = make_req_to_token_pool( @@ -848,6 +858,7 @@ def _profile_max_num_tokens(self) -> int: rest_memory_gb = available_gb - pre_model_available_gb * (1 - mem_fraction) rest_memory_bytes = int(rest_memory_gb * (1 << 30)) + gdn_pool_gb = 0.0 # Reserve memory for GDN pool if hybrid model if self.num_gdn_layers > 0: @@ -894,12 +905,14 @@ def _profile_max_num_tokens(self) -> int: ) gdn_pool_bytes = recurrent_bytes + conv_bytes rest_memory_bytes -= gdn_pool_bytes + gdn_pool_gb = gdn_pool_bytes / (1 << 30) logger.info( "GDN pool memory reservation: %.2f GB", - gdn_pool_bytes / (1 << 30), + gdn_pool_gb, ) - max_num_tokens = rest_memory_bytes // cell_size + profiled_max_tokens = max(rest_memory_bytes // cell_size, 0) + max_num_tokens = profiled_max_tokens if self.server_config.max_total_tokens is not None: if self.server_config.max_total_tokens > max_num_tokens: @@ -911,6 +924,18 @@ def _profile_max_num_tokens(self) -> int: ) max_num_tokens = min(max_num_tokens, self.server_config.max_total_tokens) + self._last_memory_profile = MemoryProfileResult( + pre_model_available_gb=pre_model_available_gb, + available_gb=available_gb, + mem_fraction=mem_fraction, + static_kv_budget_gb=rest_memory_gb, + cell_size_bytes=cell_size, + profiled_max_tokens=profiled_max_tokens, + requested_max_total_tokens=self.server_config.max_total_tokens, + effective_max_tokens=max_num_tokens, + gdn_pool_gb=gdn_pool_gb, + ) + logger.info( "Memory profiling: pre_model_avail=%.2f GB, avail=%.2f GB, " "fraction=%.2f, static_kv_budget=%.2f GB, cell_size=%d bytes, " @@ -925,6 +950,62 @@ def _profile_max_num_tokens(self) -> int: return max_num_tokens + def _format_kv_cache_memory_error(self) -> str: + profile = getattr(self, "_last_memory_profile", None) + if profile is None: + return ( + "Not enough memory for KV cache. Try increasing " + "--server.mem_fraction_static, reducing --server.max_total_tokens, " + "lowering --server.max_running_requests, or using a " + "smaller/quantized model." + ) + + requested = ( + "unset" + if profile.requested_max_total_tokens is None + else str(profile.requested_max_total_tokens) + ) + message = [ + "Not enough memory for KV cache.", + ( + "Memory profile: " + f"pre_model_avail={profile.pre_model_available_gb:.2f} GB, " + f"avail_after_model={profile.available_gb:.2f} GB, " + f"mem_fraction_static={profile.mem_fraction:.2f}, " + f"static_kv_budget={profile.static_kv_budget_gb:.2f} GB, " + f"cell_size={profile.cell_size_bytes} bytes, " + f"profiled max_tokens={profile.profiled_max_tokens}, " + f"requested max_total_tokens={requested}." + ), + ] + if profile.static_kv_budget_gb <= 0: + message.append( + "The static KV budget is non-positive, so model weights and " + "other static allocations already exceed the requested static " + "memory fraction." + ) + if profile.gdn_pool_gb > 0: + message.append(f"GDN pool reservation={profile.gdn_pool_gb:.2f} GB.") + if ( + profile.requested_max_total_tokens is not None + and profile.profiled_max_tokens < profile.requested_max_total_tokens + ): + message.append( + "The requested max_total_tokens is above the profiled KV " + "capacity for this launch." + ) + message.append( + "Try increasing --server.mem_fraction_static, reducing " + "--server.max_total_tokens, lowering --server.max_running_requests, " + "or using a smaller/quantized model." + ) + message.append( + "Note: server mode may need a higher mem_fraction_static than " + "bench_one_batch because tokenizer/scheduler/detokenizer/HTTP " + "processes and IPC buffers consume additional Jetson unified memory." + ) + return " ".join(message) + # ------------------------------------------------------------------ # Attention backend # ------------------------------------------------------------------ diff --git a/pymllm/tests/test_model_runner_memory_pool.py b/pymllm/tests/test_model_runner_memory_pool.py index db4a816ef..72c36c1a1 100644 --- a/pymllm/tests/test_model_runner_memory_pool.py +++ b/pymllm/tests/test_model_runner_memory_pool.py @@ -56,6 +56,59 @@ def test_profile_max_num_tokens_treats_mem_fraction_static_as_static_pool_fracti assert ModelRunner._profile_max_num_tokens(runner) <= 0 +def test_profile_max_num_tokens_clamps_negative_capacity_and_records_diagnostics( + _cuda_available, + monkeypatch, +): + runner = _make_runner( + mem_fraction_static=0.4, + max_total_tokens=4096, + free_gb=5.0, + total_gb=10.0, + ) + monkeypatch.setattr( + model_runner, + "get_available_gpu_memory", + lambda *args, **kwargs: runner._current_available_gb, + ) + + assert ModelRunner._profile_max_num_tokens(runner) == 0 + profile = runner._last_memory_profile + assert profile.static_kv_budget_gb == pytest.approx(-1.0) + assert profile.profiled_max_tokens == 0 + assert profile.requested_max_total_tokens == 4096 + + +def test_kv_cache_memory_error_includes_profile_details_and_server_hint(): + runner = _make_runner( + mem_fraction_static=0.75, + max_total_tokens=4096, + free_gb=1.99, + total_gb=8.42, + ) + runner._last_memory_profile = model_runner.MemoryProfileResult( + pre_model_available_gb=8.42, + available_gb=1.99, + mem_fraction=0.75, + static_kv_budget_gb=-0.11, + cell_size_bytes=114688, + profiled_max_tokens=0, + requested_max_total_tokens=4096, + effective_max_tokens=0, + gdn_pool_gb=0.0, + ) + + message = ModelRunner._format_kv_cache_memory_error(runner) + + assert "profiled max_tokens=0" in message + assert "requested max_total_tokens=4096" in message + assert "static_kv_budget=-0.11 GB" in message + assert "mem_fraction_static=0.75" in message + assert "server mode may need a higher mem_fraction_static than bench_one_batch" in message + assert "--server.mem_fraction_static" in message + assert "--server.max_total_tokens" in message + + def test_profile_max_num_tokens_caps_user_max_total_tokens_to_profiled_capacity( _cuda_available, monkeypatch, From b56d811dc95d6c77d58209bb0ffb1d2dda8dc209 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Mon, 8 Jun 2026 10:31:14 +0000 Subject: [PATCH 18/21] docs(pymllm_runtime): rewrite and humanize runtime docs Rewrite the pymllm_runtime web docs for accuracy and readability. - setup_and_usage: condense overview, drop docker-only assumption, fix launch args (mem_fraction_static/max_total_tokens/dtype defaults), refresh bench_one_batch (text/vit/multimodal modes) and profile (torch.profiler supported, nsys experimental); align mem_fraction_static semantics with the model-weights+KV-pool static budget - runtime_design / models_and_quantization / kernels_and_acceleration / developer_guide: humanize prose, trim AI-style scaffolding, keep content Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/pymllm_runtime/developer_guide.rst | 143 ++++----- .../kernels_and_acceleration.rst | 141 ++++----- .../models_and_quantization.rst | 134 ++++----- docs/pymllm_runtime/runtime_design.rst | 151 +++++----- docs/pymllm_runtime/setup_and_usage.rst | 284 +++++++----------- 5 files changed, 382 insertions(+), 471 deletions(-) diff --git a/docs/pymllm_runtime/developer_guide.rst b/docs/pymllm_runtime/developer_guide.rst index 47b528659..47dbe0742 100644 --- a/docs/pymllm_runtime/developer_guide.rst +++ b/docs/pymllm_runtime/developer_guide.rst @@ -4,13 +4,13 @@ pymllm Developer Guide 总览 ---------------------------------------- -本文档面向希望为 ``pymllm`` 增加模型、量化格式、kernel 或性能优化的开发者。当前代码处在 -快速演进阶段,推荐遵循“小步验证、边界清晰、先单测后服务级验证”的工作方式。 +这份文档写给想给 ``pymllm`` 加模型、加量化格式、加 kernel 或做性能优化的开发者。代码还在快速 +演进,建议的工作方式是“小步验证、边界清晰、先单测再服务级验证”。 开发环境建议 ---------------------------------------- -推荐使用 editable install,便于修改 Python 代码后直接验证: +推荐用 editable install,改完 Python 代码能直接验证: .. code-block:: bash @@ -28,9 +28,9 @@ pymllm Developer Guide print("ok") PY -``mllm-kernel`` 的 JIT 编译产物会写入 ``~/.cache/mllm_kernel``。正常修改后重新运行 -会触发相应 kernel 的加载或编译;只有在验证首次编译行为、排查失败缓存、或更换 CUTLASS -等外部头文件来源时,才需要清理对应缓存: +``mllm-kernel`` 的 JIT 编译产物写在 ``~/.cache/mllm_kernel``。正常改完代码重新跑,会按需触发 +对应 kernel 的加载或编译;只有在验证首次编译行为、排查失败缓存、或者换了 CUTLASS 之类外部头 +文件来源时,才需要手动清对应缓存: .. code-block:: bash @@ -39,17 +39,17 @@ pymllm Developer Guide 新增模型 ---------------------------------------- -新增模型时,优先复用现有 ``pymllm.layers`` 和 ``pymllm.executor`` 约定,而不是把 -HuggingFace 模型直接包进服务。 +加模型时,优先复用现有的 ``pymllm.layers`` 和 ``pymllm.executor`` 约定,别把 HuggingFace 模型 +整个塞进服务。 推荐步骤: 1. 新增 ``pymllm/models/.py``。 2. 在 ``pymllm/models/__init__.py`` 注册 architecture 字符串。 -3. 实现模型类,保持 ``forward(input_ids, positions, forward_batch)`` 风格。 +3. 实现模型类,保持 ``forward(input_ids, positions, forward_batch)`` 的风格。 4. 所有 linear layer 都接受 ``quant_method``。 -5. 实现 ``load_weights``,处理 checkpoint key、stacked projection 和 tied embedding。 -6. 增加最小单测。 +5. 实现 ``load_weights``,处理好 checkpoint key、stacked projection 和 tied embedding。 +6. 补最小单测。 7. 最后做服务级 smoke test。 最小测试建议: @@ -63,38 +63,38 @@ HuggingFace 模型直接包进服务。 新增量化 scheme ---------------------------------------- -新增量化路径时,不建议在模型文件里写格式判断。推荐保持以下分层: +加量化路径时,别在模型文件里写格式判断。保持这三层: .. code-block:: text QuantizationConfig - parses checkpoint config - decides whether a layer is quantized + 解析 checkpoint config + 决定某个 layer 是否量化 LinearMethod - owns linear layer lifecycle + 承接 linear layer 生命周期 Scheme - owns checkpoint-facing params - owns post-load layout conversion - owns kernel apply path + 管 checkpoint-facing 参数 + 管 post-load layout 转换 + 管 kernel apply 路径 -``create_weights`` 应注册 checkpoint-facing 参数名。``process_weights_after_loading`` 应作为 -checkpoint layout 到 runtime kernel layout 的唯一转换边界。``apply`` 中只做 forward 必需的 -runtime 计算,不应重复做权重 repack。 +``create_weights`` 注册 checkpoint-facing 的参数名。``process_weights_after_loading`` 是 +checkpoint layout 转 runtime kernel layout 的唯一边界。``apply`` 里只做 forward 必需的 runtime +计算,不要重复做权重 repack。 -新增量化路径至少需要覆盖: +新增量化路径至少要覆盖: - config 解析测试。 - ``ignore`` / prefix 匹配测试。 -- 参数注册 shape/dtype 测试。 +- 参数注册的 shape / dtype 测试。 - post-load layout 转换测试。 - forward correctness 或 smoke test。 新增 CUDA JIT kernel ---------------------------------------- -若 kernel 适合走 ``mllm-kernel`` 的 TVM-FFI JIT 路径,推荐结构如下: +如果 kernel 适合走 ``mllm-kernel`` 的 TVM-FFI JIT 路径,推荐这个结构: .. code-block:: text @@ -103,28 +103,29 @@ runtime 计算,不应重复做权重 repack。 mllm-kernel/tests/test_.py mllm-kernel/benchmarks/bench_.py -Python wrapper 应负责: +Python wrapper 负责: -- 校验输入 shape、dtype、device。 +- 校验输入的 shape、dtype、device。 - 分配输出 tensor。 -- 调用 ``@jit`` 包装后的 compiled module。 -- 暴露稳定、简洁的 Python API。 +- 调 ``@jit`` 包好的 compiled module。 +- 对外暴露一个稳定、干净的 Python API。 -CUDA/C++ source 应尽量只表达 kernel 语义,不混入 checkpoint 配置解析或模型层逻辑。 +CUDA / C++ source 尽量只表达 kernel 语义,别混进 checkpoint 配置解析或模型层逻辑。 -如果 kernel 依赖 CUTLASS 等重模板库,可以先做编译 spike。确认 Jetson 目标设备上的编译时间、 -缓存路径、include 来源和内存占用后,再决定使用 TVM-FFI JIT、torch extension JIT 或 AOT 构建。 +如果 kernel 依赖 CUTLASS 这种重模板库,建议先做一次编译 spike:把 Jetson 目标设备上的编译 +时间、缓存路径、include 来源和内存占用摸清楚,再决定用 TVM-FFI JIT、torch extension JIT 还是 +AOT 构建。 服务级验证 ---------------------------------------- -服务级 smoke test 应覆盖: +服务级 smoke test 至少要覆盖: -- ``/v1/models`` 可返回。 -- 文本 ``/v1/chat/completions`` 可完成。 -- 图文模型能处理容器内图片绝对路径。 -- streaming 与 non-streaming 至少各测一次。 -- 中止请求或客户端断连不会泄漏 running request。 +- ``/v1/models`` 能返回。 +- 文本 ``/v1/chat/completions`` 能跑完。 +- 图文模型能处理容器内的图片绝对路径。 +- streaming 和 non-streaming 各测一次。 +- 中止请求或客户端断连时不会泄漏 running request。 示例: @@ -145,7 +146,7 @@ CUDA/C++ source 应尽量只表达 kernel 语义,不混入 checkpoint 配置 性能验证 ---------------------------------------- -性能数据需要固定口径,否则不同记录之间很难比较。建议记录: +性能数据一定要固定口径,否则不同记录之间根本没法比。建议每次都记下: - commit hash。 - JetPack / L4T 版本。 @@ -154,11 +155,11 @@ CUDA/C++ source 应尽量只表达 kernel 语义,不混入 checkpoint 配置 - 模型路径和量化格式。 - 启动命令。 - prompt token 数、max tokens、temperature。 -- 是否启用 radix cache、CUDA Graph、shared queue。 +- 有没有开 radix cache、CUDA Graph、shared queue。 - 是否包含首次 JIT 编译。 -对服务级请求,建议丢弃第一次 warmup 结果,记录第 2/3 次请求的 prefill/decode 统计。 -对 kernel microbench,建议单独记录 warmup、重复次数、输入 shape 和 dtype。 +服务级请求建议丢掉第一次 warmup 的结果,记第 2 / 3 次请求的 prefill / decode 统计。kernel +microbench 则要单独记 warmup、重复次数、输入 shape 和 dtype。 常见问题定位 ---------------------------------------- @@ -166,55 +167,55 @@ CUDA/C++ source 应尽量只表达 kernel 语义,不混入 checkpoint 配置 启动失败 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -优先确认: +先看: -- ``pymllm`` 和 ``mllm_kernel`` 是否来自预期源码目录或安装版本。 -- ``model_path`` 和 ``tokenizer_path`` 是否在容器内可见。 -- ``transformers`` 是否能读取目标 ``config.json``。 -- CUDA 是否可用,``torch.cuda.get_device_capability()`` 是否符合量化 kernel 要求。 +- ``pymllm`` 和 ``mllm_kernel`` 是不是来自预期的源码目录或安装版本。 +- ``model_path`` 和 ``tokenizer_path`` 在容器内能不能看到。 +- ``transformers`` 能不能读目标 ``config.json``。 +- CUDA 可不可用,``torch.cuda.get_device_capability()`` 满不满足量化 kernel 的要求。 W8A8 编译失败 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -优先确认: +先看: -- ``CUTLASS_HOME`` 是否设置正确。 -- ``flashinfer`` 是否包含 bundled CUTLASS。 -- ``~/.cache/mllm_kernel/cutlass_int8_scaled_mm/`` 是否存在旧的失败缓存。 -- 当前 GPU 是否为 SM80-SM89。 +- ``CUTLASS_HOME`` 设没设对。 +- ``flashinfer`` 里有没有 bundled CUTLASS。 +- ``~/.cache/mllm_kernel/cutlass_int8_scaled_mm/`` 是不是有旧的失败缓存。 +- 当前 GPU 是不是 SM80–SM89。 请求卡住或 CPU 占用高 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -优先确认: +先看: -- scheduler 是否启用了 idle sleep。 -- tokenizer / scheduler / detokenizer 子进程是否全部存活。 -- 是否有请求已经断连但未 abort。 -- ``max_total_tokens`` 是否过小导致 KV allocation 反复失败和 eviction。 +- scheduler 有没有启用 idle sleep。 +- tokenizer / scheduler / detokenizer 子进程是不是都还活着。 +- 是不是有请求已经断连但没 abort。 +- ``max_total_tokens`` 是不是太小,导致 KV allocation 反复失败和 eviction。 输出异常 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -优先确认: +先看: -- tokenizer chat template 是否符合目标模型。 -- EOS token 是否从 config、generation_config 或 tokenizer 中正确解析。 -- 量化模型的 ``ignore`` 是否覆盖视觉分支、embedding、norm 和 lm_head 等不应量化模块。 -- ``process_weights_after_loading`` 是否已执行。 +- tokenizer 的 chat template 对不对得上目标模型。 +- EOS token 有没有从 config、generation_config 或 tokenizer 里正确解析出来。 +- 量化模型的 ``ignore`` 有没有覆盖视觉分支、embedding、norm、lm_head 这些不该量化的模块。 +- ``process_weights_after_loading`` 跑没跑。 贡献建议 ---------------------------------------- -开发时尽量保持以下边界: +开发时尽量守住这些边界: -- 服务协议变化放在 ``pymllm/server``。 -- 请求/响应结构放在 ``pymllm/engine/io_struct.py``。 -- 调度策略放在 ``pymllm/orchestrator/scheduler_process.py``。 -- GPU 资源和 forward 逻辑放在 ``pymllm/executor``。 -- 模型结构放在 ``pymllm/models``。 -- 基础层放在 ``pymllm/layers``。 -- 量化格式放在 ``pymllm/quantization``。 -- 自定义 kernel 放在 ``mllm-kernel``。 +- 服务协议变化放 ``pymllm/server``。 +- 请求 / 响应结构放 ``pymllm/engine/io_struct.py``。 +- 调度策略放 ``pymllm/orchestrator/scheduler_process.py``。 +- GPU 资源和 forward 逻辑放 ``pymllm/executor``。 +- 模型结构放 ``pymllm/models``。 +- 基础层放 ``pymllm/layers``。 +- 量化格式放 ``pymllm/quantization``。 +- 自定义 kernel 放 ``mllm-kernel``。 -这样可以避免把一次模型适配写成跨层补丁,也方便后续把同一能力复用到更多模型和设备。 +守住这些边界,一次模型适配就不会写成跨层补丁,后面把同一份能力复用到更多模型和设备也更省事。 diff --git a/docs/pymllm_runtime/kernels_and_acceleration.rst b/docs/pymllm_runtime/kernels_and_acceleration.rst index d5d09c30c..849c5a5e2 100644 --- a/docs/pymllm_runtime/kernels_and_acceleration.rst +++ b/docs/pymllm_runtime/kernels_and_acceleration.rst @@ -4,28 +4,28 @@ pymllm Kernels and Acceleration 总览 ---------------------------------------- -``pymllm`` 的性能路径由多类加速组件共同组成: +``pymllm`` 的性能由几类加速组件分工撑起来,它们解决的不是同一个问题: -- FlashInfer:paged KV cache attention。 -- CUDA Graph:decode 阶段减少 CPU launch overhead。 -- Triton:W8A8 per-token activation quantization。 -- CUTLASS:W8A8 INT8 Tensor Core GEMM。 -- ``mllm-kernel``:基于 TVM-FFI / torch extension 的 JIT kernel 工具包。 +- **FlashInfer**:paged KV cache attention。 +- **CUDA Graph**:减少 decode 阶段的 CPU launch overhead。 +- **Triton**:W8A8 的 per-token activation quantization。 +- **CUTLASS**:W8A8 的 INT8 Tensor Core GEMM。 +- **mllm-kernel**:基于 TVM-FFI / torch extension 的 JIT kernel 工具包。 -这些组件不是彼此替代关系,而是在不同层次承担职责。attention backend 解决 KV cache -attention;CUDA Graph 解决重复 decode step 的 launch overhead;Triton 和 CUTLASS 解决量化 -linear 的核心计算;``mllm-kernel`` 为项目内自定义 CUDA/C++ kernel 提供封装、缓存和工具。 +简单说:attention backend 管 KV cache attention,CUDA Graph 管重复 decode step 的 launch +开销,Triton 和 CUTLASS 管量化 linear 的核心计算,``mllm-kernel`` 则为项目内自定义的 +CUDA / C++ kernel 提供封装、缓存和工具。 mllm-kernel ---------------------------------------- -``mllm-kernel`` 是 mllm 项目中的高性能 kernel 包。当前 Python 侧主要包含: +``mllm-kernel`` 是 mllm 里的高性能 kernel 包,Python 侧目前主要是: - ``mllm_kernel.cuda.jit``:CUDA JIT kernel wrapper。 - ``mllm_kernel.cpu.jit``:CPU JIT kernel wrapper。 - ``mllm_kernel.jit_utils``:JIT 编译、缓存、注册表和工具函数。 -CUDA JIT kernel 的典型结构是: +一个 CUDA JIT kernel 的典型结构: .. code-block:: text @@ -33,54 +33,54 @@ CUDA JIT kernel 的典型结构是: -> @jit(...) -> include CUDA/C++ source -> export TVM-FFI typed function - -> compile on first use - -> reuse cached shared library + -> 首次使用时编译 + -> 之后复用缓存的 shared library -默认 JIT 缓存目录为: +默认 JIT 缓存目录: .. code-block:: text ~/.cache/mllm_kernel/ -``mllm-kernel`` 的 JIT 路径与 SGLang 的 ``jit_kernel`` 设计关系更直接:二者都强调轻量 -JIT、运行时选择模板实例、避免大型 AOT torch extension 带来的长编译周期。与此同时,SGLang -的 ``sgl-kernel`` AOT kernel 仍然是重要参考,尤其适合对照量化 GEMM 的语义和性能。 +``mllm-kernel`` 的 JIT 思路和 SGLang 的 ``jit_kernel`` 关系更近:都强调轻量 JIT、运行时选模板 +实例、避开大型 AOT torch extension 那种动辄几分钟的编译。同时 SGLang 的 ``sgl-kernel`` AOT +kernel 仍是重要参考,对照量化 GEMM 的语义和性能时尤其有用。 TVM-FFI JIT 路径 ---------------------------------------- -``mllm_kernel.jit_utils.jit`` decorator 会将 Python 函数包装成一个按需编译的 kernel 调用。 -它负责: +``mllm_kernel.jit_utils.jit`` 这个 decorator 把一个 Python 函数包成按需编译的 kernel 调用, +负责: -- 根据 tensor device 推断 CPU/CUDA 目标。 -- 将 Python 参数转换为 C++ template 参数。 -- 拼接 C++/CUDA source 和 export wrapper。 -- 调用 TVM-FFI 编译并加载 shared library。 -- 将编译结果缓存到 ``~/.cache/mllm_kernel``。 +- 根据 tensor device 推断 CPU / CUDA 目标。 +- 把 Python 参数转成 C++ template 参数。 +- 拼 C++/CUDA source 和 export wrapper。 +- 调 TVM-FFI 编译并加载 shared library。 +- 把编译结果缓存到 ``~/.cache/mllm_kernel``。 -这种方式适合小而明确的自定义 kernel,例如: +这种方式适合小而明确的自定义 kernel,比如: -- ``create_kv_indices``:构造 FlashInfer KV index metadata。 -- ``store_cache``:将 K/V 写入 KVPool。 -- ``gptq_marlin_repack``:Marlin weight layout 转换。 +- ``create_kv_indices``:构造 FlashInfer 的 KV index metadata。 +- ``store_cache``:把 K/V 写进 KVPool。 +- ``gptq_marlin_repack``:Marlin 权重 layout 转换。 - ``gptq_marlin_gemm``:W4A16 Marlin GEMM。 -W8A8 CUTLASS kernel 当前使用 ``torch.utils.cpp_extension.load`` 编译。这是因为 CUTLASS -模板和 include 体系较重,当前以稳定通过 Jetson SM87 编译为优先。 +W8A8 的 CUTLASS kernel 目前是个例外,用 ``torch.utils.cpp_extension.load`` 编译——CUTLASS 的 +模板和 include 体系太重,现阶段优先保证它能在 Jetson SM87 上稳定编过。 FlashInfer Attention ---------------------------------------- -``pymllm.layers.attention.flashinfer_backend.FlashInferAttnBackend`` 封装 FlashInfer 的 paged -KV cache attention。它负责: +``pymllm.layers.attention.flashinfer_backend.FlashInferAttnBackend`` 封装了 FlashInfer 的 +paged KV cache attention,负责: - 为 prefill 和 decode 准备 ``kv_indptr``、``kv_indices``、``kv_last_page_len`` 等 metadata。 - 管理全局 workspace buffer。 -- 根据是否存在 sliding window 选择 wrapper dispatch。 -- 在 decode 中根据 GQA group size 和 KV dtype 决定是否使用 tensor core 路径。 -- 为 CUDA Graph capture / replay 提供专用 metadata 初始化接口。 +- 根据有没有 sliding window 选 wrapper dispatch。 +- decode 时按 GQA group size 和 KV dtype 决定走不走 tensor core 路径。 +- 给 CUDA Graph capture / replay 提供专用的 metadata 初始化接口。 -prefill 和 decode 使用不同 wrapper: +prefill 和 decode 用不同 wrapper: .. code-block:: text @@ -91,22 +91,22 @@ prefill 和 decode 使用不同 wrapper: decode BatchDecodeWithPagedKVCacheWrapper -attention backend 只负责 attention 计算和 metadata,不负责请求调度和 KV slot 生命周期。KV slot -的分配、释放和 prefix cache 命中由 scheduler / model runner 侧完成。 +attention backend 只管 attention 计算和 metadata,不碰请求调度和 KV slot 生命周期。KV slot +的分配、释放、prefix cache 命中是 scheduler / model runner 那边的事。 CUDA Graph ---------------------------------------- -``pymllm.executor.cuda_graph_runner.CudaGraphRunner`` 用于 decode step 的 CUDA Graph capture -和 replay。它的目标是减少小 batch decode 中 CPU launch overhead。 +``pymllm.executor.cuda_graph_runner.CudaGraphRunner`` 负责 decode step 的 CUDA Graph capture +和 replay,目的就是把小 batch decode 里的 CPU launch overhead 压下去。 -初始化阶段会按一组离散 batch size 捕获 graph: +初始化时按一组离散 batch size 捕获 graph: .. code-block:: text [1, 2, 4, 8, 12, 16, 24, 32, ...] -每个 captured graph 复用预分配输入 buffer: +每个 captured graph 复用预分配好的输入 buffer: - ``input_ids`` - ``req_pool_indices`` @@ -115,36 +115,36 @@ CUDA Graph - ``positions`` - ``mrope_position_deltas`` -replay 时,真实 batch 会被 padding 到最近的 captured batch size。attention backend 会走专用 -``init_forward_metadata_replay_cuda_graph`` 路径,避免使用普通动态 metadata 初始化。 +replay 时真实 batch 会 padding 到最近的 captured batch size,attention backend 走专用的 +``init_forward_metadata_replay_cuda_graph`` 路径,而不是普通的动态 metadata 初始化。 -CUDA Graph 只覆盖 decode 主路径。调试模型、调试 attention metadata 或定位 shape 问题时,可以 -使用 ``--server.disable_cuda_graph`` 暂时关闭。 +CUDA Graph 只覆盖 decode 主路径。调试模型、查 attention metadata 或定位 shape 问题时,可以 +用 ``--server.disable_cuda_graph`` 临时关掉。 W4A16 Marlin ---------------------------------------- -W4A16 路径复用 Marlin kernel。checkpoint 权重先以 ``weight_packed`` 和 ``weight_scale`` -加载,然后在 post-load 阶段转换为 Marlin runtime layout。 +W4A16 复用 Marlin kernel。checkpoint 权重先以 ``weight_packed`` 和 ``weight_scale`` 加载, +再在 post-load 阶段转成 Marlin 的 runtime layout。 关键 kernel: - ``mllm_kernel.cuda.jit.gptq_marlin_repack`` - ``mllm_kernel.cuda.jit.gptq_marlin`` -执行约束包括: +执行约束: - SM80+ -- output partition 可被 64 整除 -- input partition 可被 128 整除 -- group size 当前主路径为 32 +- output partition 能被 64 整除 +- input partition 能被 128 整除 +- group size 主路径目前是 32 -这种路径适合 AWQ / W4A16 类权重量化模型,activation 保持 FP16/BF16。 +这条路径适合 AWQ / W4A16 这类权重量化模型,activation 保持 FP16/BF16。 W8A8 Triton + CUTLASS ---------------------------------------- -W8A8 路径包含两个核心 kernel: +W8A8 有两个核心 kernel: 1. ``pymllm.quantization.kernels.int8_activation_triton.per_token_quant_int8`` 2. ``mllm_kernel.cuda.jit.int8_scaled_mm_cutlass.int8_scaled_mm`` @@ -156,37 +156,32 @@ W8A8 路径包含两个核心 kernel: [M, K] fp16/bf16 activation -> Triton per-token absmax + round + int8 cast -> [M, K] int8 + [M, 1] fp32 scale - -> CUTLASS int8 GEMM with per-row/per-col scales + -> CUTLASS int8 GEMM(per-row / per-col scale) -> [M, N] fp16/bf16 output -CUTLASS kernel 要求 ``mat_b`` 为 ``[K, N]`` column-major,因此 W8A8 scheme 会在 -``process_weights_after_loading`` 中把 checkpoint 的 ``[N, K]`` INT8 weight 转成对应布局。 +CUTLASS kernel 要求 ``mat_b`` 是 ``[K, N]`` column-major,所以 W8A8 scheme 会在 +``process_weights_after_loading`` 里把 checkpoint 的 ``[N, K]`` INT8 weight 转成对应布局。 -当前 CUTLASS include 查找顺序为: - -1. ``CUTLASS_HOME/include`` -2. ``flashinfer`` bundled CUTLASS -3. 系统 include 目录 - -如果找不到 CUTLASS 头文件,W8A8 初始化会失败。生产环境建议在镜像中固定 CUTLASS 来源,避免 -不同节点使用不同版本头文件。 +CUTLASS 头文件默认用 ``flashinfer`` bundled 的那份;要换版本就设 ``CUTLASS_HOME``。如果头文件 +找不到,W8A8 初始化会直接失败。生产环境建议在镜像里把 CUTLASS 来源固定下来,免得不同节点用上 +不同版本的头文件。 GDN decode kernel ---------------------------------------- -Qwen3.5 等 hybrid 模型可能包含 GDN / linear attention 层。``pymllm`` 为这类模型保留了: +Qwen3.5 这类 hybrid 模型可能带 GDN / linear attention 层。``pymllm`` 给它们预留了: - ``pymllm.layers.attention.gdn_backend`` - ``pymllm.layers.attention.hybrid_backend`` - ``mllm_kernel.cuda.jit.gdn_decode`` - ``MambaRadixCache`` / GDN state cache 相关结构 -当前文档重点覆盖 Qwen3 / Qwen3-VL 主路径。GDN 相关路径仍应以具体模型和测试结果为准。 +本文档重点还是 Qwen3 / Qwen3-VL 主路径,GDN 相关路径以具体模型和测试结果为准。 调试与观测 ---------------------------------------- -常用检查命令: +几条常用检查命令: .. code-block:: bash @@ -194,10 +189,6 @@ Qwen3.5 等 hybrid 模型可能包含 GDN / linear attention 层。``pymllm`` python3 -m mllm_kernel show-config python3 -m pymllm show-config -当首次运行时间异常长时,应区分: - -- 模型权重加载时间。 -- FlashInfer / CUDA context 初始化时间。 -- CUTLASS JIT 编译时间。 -- CUDA Graph capture 时间。 -- 实际 prefill/decode 时间。 +首次运行特别慢的时候,要分清楚时间花在哪:模型权重加载、FlashInfer / CUDA context 初始化、 +CUTLASS JIT 编译、CUDA Graph capture,还是真正的 prefill / decode。别把首次 JIT 或 kernel +初始化的开销当成稳态瓶颈。 diff --git a/docs/pymllm_runtime/models_and_quantization.rst b/docs/pymllm_runtime/models_and_quantization.rst index 6bbb63706..cb1c885d6 100644 --- a/docs/pymllm_runtime/models_and_quantization.rst +++ b/docs/pymllm_runtime/models_and_quantization.rst @@ -4,15 +4,16 @@ pymllm Models and Quantization 总览 ---------------------------------------- -``pymllm`` 的模型实现遵循 PyTorch ``nn.Module`` 风格,并通过 HuggingFace -``config.architectures`` 字段选择模型类。当前重点支持 Qwen3 family: +``pymllm`` 的模型实现就是标准的 PyTorch ``nn.Module`` 写法,运行时按 HuggingFace config +里的 ``architectures`` 字段挑模型类。当前重点是 Qwen3 family: - ``Qwen3ForCausalLM``:文本模型,例如 Qwen3-0.6B。 - ``Qwen3VLForConditionalGeneration``:图文模型,例如 Qwen3-VL-2B-Instruct。 -- ``Qwen3_5ForCausalLM`` 和 ``Qwen3_5ForConditionalGeneration``:hybrid attention / GDN - 相关模型骨架。 +- ``Qwen3_5ForCausalLM`` / ``Qwen3_5ForConditionalGeneration``:hybrid attention / GDN + 方向的模型骨架。 -量化系统以 linear layer 为核心,使用插件式 ``LinearMethodBase`` 生命周期: +量化系统围绕 linear layer 展开,用一套插件式的 ``LinearMethodBase`` 生命周期把格式细节 +和模型主逻辑隔开: .. code-block:: text @@ -26,8 +27,8 @@ pymllm Models and Quantization 模型注册 ---------------------------------------- -模型注册表位于 ``pymllm/models/__init__.py``。运行时会根据 HuggingFace config 中的 -architecture 字符串懒加载模型类: +模型注册表在 ``pymllm/models/__init__.py``。运行时按 HuggingFace config 里的 architecture +字符串懒加载对应模型类: .. code-block:: text @@ -40,37 +41,28 @@ architecture 字符串懒加载模型类: "Qwen3_5ForCausalLM" -> pymllm.models.qwen3_5.Qwen3_5ForCausalLM -这种注册方式让服务启动阶段只导入目标模型所需的代码,避免在命令行工具或轻量检查中提前加载 -大量 PyTorch/CUDA 依赖。 +懒加载的好处是:服务启动时只导入目标模型用到的代码,命令行工具或轻量检查不会被迫提前拉起 +一大堆 PyTorch / CUDA 依赖。 Qwen3 文本模型 ---------------------------------------- -``Qwen3ForCausalLM`` 使用标准 decoder-only 结构: - -- token embedding -- 多层 decoder block -- Q/K Norm -- 1D RoPE -- MLP -- final norm -- lm head - -它复用 ``RadixAttention``、``RMSNorm``、``MLP``、``ColumnParallelLinear`` 和 -``RowParallelLinear`` 等基础层。与 Qwen3-VL 文本分支相比,Qwen3 文本模型使用 1D RoPE, -不需要多模态 M-RoPE 的三维 position 逻辑。 +``Qwen3ForCausalLM`` 是标准的 decoder-only 结构:token embedding、多层 decoder block、 +Q/K Norm、1D RoPE、MLP、final norm、lm head。它复用 ``RadixAttention``、``RMSNorm``、 +``MLP``、``ColumnParallelLinear``、``RowParallelLinear`` 这些基础层。和 Qwen3-VL 的文本分支 +比,区别在于这里用的是 1D RoPE,不需要多模态 M-RoPE 那套三维 position 逻辑。 Qwen3-VL 图文模型 ---------------------------------------- -``Qwen3VLForConditionalGeneration`` 在文本 decoder 外增加视觉输入处理和 M-RoPE 位置编码。 -在一次图文请求中: +``Qwen3VLForConditionalGeneration`` 在文本 decoder 之外多了视觉输入处理和 M-RoPE 位置编码。 +一次图文请求大致是这样走的: 1. tokenizer / processor 处理 messages 和图片路径。 -2. ``TokenizerProcess`` 生成 token ids 和多模态输入 tensor。 +2. ``TokenizerProcess`` 产出 token ids 和多模态输入 tensor。 3. 多模态 tensor 通过 ZMQ 或 shared queue 送到 scheduler。 -4. 模型 forward 中先处理视觉侧输入,再进入语言模型 prefill/decode。 -5. decode 阶段使用每个请求保存的 ``mrope_position_delta`` 修正位置。 +4. 模型 forward 里先过视觉侧输入,再进语言模型的 prefill / decode。 +5. decode 阶段用每个请求保存的 ``mrope_position_delta`` 修正位置。 当前 W8A8 量化主要覆盖语言 decoder 的线性层;视觉 encoder、embedding、LayerNorm 和 ``lm_head`` 保持全精度。 @@ -78,31 +70,30 @@ Qwen3-VL 图文模型 Fused projection 与 shard-aware loading ---------------------------------------- -Qwen3 / Qwen3-VL 的 text decoder 使用 fused QKV projection 和 fused gate/up -projection。对未量化模型,这减少了 projection 层的 module 边界;对 W8A8 和 W4A16 -路径,它还避免把同一层拆成多次 activation quant、GEMM 或 Marlin 调用。 +Qwen3 / Qwen3-VL 的 text decoder 用了 fused QKV projection 和 fused gate/up projection。 +对非量化模型,这减少了 projection 层的 module 边界;对 W8A8 和 W4A16 路径,它还顺手省掉了 +把同一层拆成多次 activation quant、GEMM 或 Marlin 调用的开销。 -checkpoint 中的权重仍可能以 HuggingFace 常见的分离形式保存,例如 ``q_proj``、 -``k_proj``、``v_proj``、``gate_proj`` 和 ``up_proj``。``MergedLinear`` 通过 -shard-aware ``weight_loader`` 将这些分离 tensor 写入 fused 参数,运行时布局保持为 -``[Q, K, V]`` 或 ``[gate, up]``。权重加载完成后,``process_weights_after_loading`` -再负责 W8A8 layout 转换或 W4A16 Marlin repack。 +checkpoint 里的权重往往还是 HuggingFace 常见的分离形式,比如 ``q_proj``、``k_proj``、 +``v_proj`` 和 ``gate_proj``、``up_proj``。``MergedLinear`` 用 shard-aware 的 ``weight_loader`` +把这些分离 tensor 写进 fused 参数,运行时布局保持 ``[Q, K, V]`` 或 ``[gate, up]``。权重加载 +完之后,``process_weights_after_loading`` 再去做 W8A8 layout 转换或 W4A16 Marlin repack。 -Qwen3 / Qwen3-VL decoder 还使用 residual-carry 形式组织 RMSNorm 的 fused add 路径。 -在 Qwen3-VL 中,如果 deepstack embedding 需要注入,运行时会先物化当前 residual sum, -再执行注入并重置 carry,避免改变图文 prefill 语义。 +Qwen3 / Qwen3-VL decoder 还用 residual-carry 的形式组织 RMSNorm 的 fused add 路径。在 +Qwen3-VL 里,如果需要注入 deepstack embedding,运行时会先把当前 residual sum 物化出来,再 +执行注入并重置 carry,避免破坏图文 prefill 的语义。 量化配置解析 ---------------------------------------- -服务启动时,``ModelRunner`` 会解析量化配置。优先级为: +服务启动时 ``ModelRunner`` 解析量化配置,优先级是: 1. 命令行 ``--quantization.method``。 -2. checkpoint 目录中的量化配置文件。 -3. ``config.json`` 中的 ``quantization_config`` 字段。 +2. checkpoint 目录里的量化配置文件。 +3. ``config.json`` 里的 ``quantization_config`` 字段。 -``compressed-tensors`` 路径使用 ``pymllm.quantization.methods.compressed_tensors``, -当前支持两类签名: +``compressed-tensors`` 路径走 ``pymllm.quantization.methods.compressed_tensors``,目前支持 +两类签名: .. list-table:: :header-rows: 1 @@ -123,13 +114,12 @@ Qwen3 / Qwen3-VL decoder 还使用 residual-carry 形式组织 RMSNorm 的 fused - INT8 dynamic per-token activation - Triton quant + CUTLASS INT8 GEMM -``ignore`` 字段会让匹配前缀的模块跳过量化。例如 Qwen3-VL 的视觉分支通常保留为全精度。 +``ignore`` 字段会让前缀匹配上的模块跳过量化,比如 Qwen3-VL 的视觉分支通常整体保留全精度。 W4A16 / AWQ Marlin 路径 ---------------------------------------- -W4A16 路径面向 ``compressed-tensors`` 的 ``pack-quantized`` checkpoint。当前支持的 -约束是: +W4A16 面向 ``compressed-tensors`` 的 ``pack-quantized`` checkpoint。当前的约束是: - ``format == "pack-quantized"`` - ``weights.num_bits == 4`` @@ -138,7 +128,7 @@ W4A16 路径面向 ``compressed-tensors`` 的 ``pack-quantized`` checkpoint。 - ``actorder == null`` - GPU capability 不低于 SM80 -权重加载和执行分为三个阶段: +权重加载和执行分三步: .. code-block:: text @@ -149,20 +139,20 @@ W4A16 路径面向 ``compressed-tensors`` 的 ``pack-quantized`` checkpoint。 process_weights_after_loading() gptq_marlin_repack() marlin_permute_scales() - create runtime-only zero/g_idx placeholders + 建好 runtime-only 的 zero / g_idx 占位 │ ▼ apply() gptq_marlin_gemm() -``create_weights`` 注册与 checkpoint 对齐的参数名,保证 safetensors 加载逻辑可以按名称写入。 -``process_weights_after_loading`` 是 checkpoint layout 到 runtime kernel layout 的边界,repack -不应放在通用权重加载器或每次 forward 中。 +``create_weights`` 注册和 checkpoint 对齐的参数名,让 safetensors 加载逻辑能按名字写进去。 +``process_weights_after_loading`` 是 checkpoint layout 转 runtime kernel layout 的那条边界, +repack 只该放在这里,不该塞进通用权重加载器,更不该每次 forward 都做。 W8A8 INT8 路径 ---------------------------------------- -W8A8 路径面向 ``compressed-tensors`` 的 ``int-quantized`` checkpoint。当前支持的约束是: +W8A8 面向 ``compressed-tensors`` 的 ``int-quantized`` checkpoint。当前的约束是: - ``format == "int-quantized"`` - ``weights.num_bits == 8`` @@ -175,10 +165,10 @@ W8A8 路径面向 ``compressed-tensors`` 的 ``int-quantized`` checkpoint。当 - ``input_activations.strategy == "token"`` - ``input_activations.dynamic == true`` - ``input_activations.symmetric == true`` -- W8A8 CUTLASS 路径当前支持 Ampere / SM8x GPU(SM80-SM89)。已验证目标为 - Jetson Orin SM87;Hopper / SM90 暂不包含在当前支持范围内。 +- W8A8 CUTLASS 路径当前支持 Ampere / SM8x(SM80–SM89)。已验证目标是 Jetson Orin SM87; + Hopper / SM90 暂不在支持范围内。 -执行链路如下: +执行链路: .. code-block:: text @@ -195,49 +185,47 @@ W8A8 路径面向 ``compressed-tensors`` 的 ``int-quantized`` checkpoint。当 │ └── output(fp16/bf16) -checkpoint 中的 INT8 权重通常是 ``[N, K]`` row-major。``process_weights_after_loading`` -会将其转换为 ``[K, N]`` column-major 视图并整理 ``weight_scale``,以满足 CUTLASS kernel -接口约定。 +checkpoint 里的 INT8 权重通常是 ``[N, K]`` row-major。``process_weights_after_loading`` 会把它 +转成 ``[K, N]`` column-major 视图并整理 ``weight_scale``,以满足 CUTLASS kernel 的接口约定。 LinearMethod 生命周期 ---------------------------------------- -所有 linear layer 都持有一个 ``quant_method``: +每个 linear layer 都持有一个 ``quant_method``: -- 未量化时使用 ``UnquantizedLinearMethod``,注册普通 ``weight`` 并调用 ``F.linear``。 +- 不量化时用 ``UnquantizedLinearMethod``,注册普通 ``weight`` 并调 ``F.linear``。 - 量化时由 ``QuantizationConfig.get_quant_method(layer, prefix)`` 返回具体方法。 典型生命周期: -1. 模型构造时,linear layer 调用 ``quant_method.create_weights`` 注册参数。 -2. ``model.load_weights`` 根据参数名和 ``weight_loader`` 写入 checkpoint tensor。 -3. 所有权重加载完成后,``ModelRunner`` 遍历模块并调用 - ``process_weights_after_loading``。 -4. forward 时,linear layer 委托 ``quant_method.apply`` 执行。 +1. 模型构造时,linear layer 调 ``quant_method.create_weights`` 注册参数。 +2. ``model.load_weights`` 按参数名和 ``weight_loader`` 写进 checkpoint tensor。 +3. 权重全部加载完,``ModelRunner`` 遍历模块调 ``process_weights_after_loading``。 +4. forward 时 linear layer 委托 ``quant_method.apply`` 执行。 -这个边界使新增量化方法时不需要改动模型主逻辑,只需要实现新的 config 和 scheme。 +有了这条边界,新增量化方法时基本不用碰模型主逻辑,只要实现新的 config 和 scheme。 新增模型的建议流程 ---------------------------------------- -新增模型时建议遵循以下顺序: +新增模型时建议按这个顺序来: -1. 在 ``pymllm/models/`` 中新增模型文件。 +1. 在 ``pymllm/models/`` 加模型文件。 2. 在 ``pymllm/models/__init__.py`` 注册 HuggingFace architecture 字符串。 3. 实现最小 forward 接口:``forward(input_ids, positions, forward_batch)``。 4. 复用现有基础层,并确保 linear layer 接受 ``quant_method``。 -5. 实现 ``load_weights``,处理 checkpoint 前缀、stacked projection 和 tied embedding。 -6. 增加 registry、weight loading、forward timing 的单元测试。 +5. 实现 ``load_weights``,处理好 checkpoint 前缀、stacked projection 和 tied embedding。 +6. 补 registry、weight loading、forward timing 的单元测试。 7. 最后再做服务级 smoke test。 新增量化方法的建议流程 ---------------------------------------- -新增量化方法时建议保持三层结构: +新增量化方法时保持三层结构: 1. ``QuantizationConfig``:解析 checkpoint 配置,决定某个 layer 是否量化。 2. ``LinearMethod``:承接 layer 生命周期。 3. ``Scheme``:处理具体格式的参数注册、post-load 转换和 kernel apply。 -不要把 checkpoint 格式判断写入模型类,也不要把 runtime repack 隐藏在通用 -``weight_loader`` 中。这样可以保证模型结构、权重格式和 kernel layout 三者的边界清晰。 +不要把 checkpoint 格式判断写进模型类,也不要把 runtime repack 藏在通用 ``weight_loader`` +里。守住这条,模型结构、权重格式、kernel layout 三者的边界才不会糊在一起。 diff --git a/docs/pymllm_runtime/runtime_design.rst b/docs/pymllm_runtime/runtime_design.rst index 309ea7a21..7f1c31f66 100644 --- a/docs/pymllm_runtime/runtime_design.rst +++ b/docs/pymllm_runtime/runtime_design.rst @@ -4,13 +4,12 @@ pymllm Runtime Design 总览 ---------------------------------------- -``pymllm`` 是 mllm 的 Python serving runtime。它不是传统意义上的 mllm C++ -Backend,而是一套围绕 PyTorch/CUDA 生态构建的在线推理服务运行时。当前实现面向 -Jetson Orin 等边缘 GPU 设备,重点支持 Qwen3、Qwen3-VL 和 Qwen3.5 系列模型。 +``pymllm`` 是 mllm 的 Python serving runtime。它不是 mllm 的 C++ Backend,而是一套 +围绕 PyTorch / CUDA 生态搭起来的在线推理服务运行时,目标设备是 Jetson Orin 这类边缘 +GPU,重点支持 Qwen3、Qwen3-VL、Qwen3.5 系列。 -它的设计参考了 SGLang serving runtime 的核心分层,但进行了明显收缩:当前主路径以 -单机单 GPU 为目标,优先保证在 Jetson 上可运行、可调试、可扩展,而不是覆盖大规模 -分布式 serving 的全部复杂度。 +它的分层借鉴了 SGLang serving runtime,但做了明显收缩:主路径只盯单机单 GPU,优先保证 +在 Jetson 上跑得起来、调得动、改得动,而不是去覆盖大规模分布式 serving 的全部复杂度。 .. figure:: ../_static/img/pymllm-arch.png :width: 100% @@ -22,23 +21,23 @@ Jetson Orin 等边缘 GPU 设备,重点支持 Qwen3、Qwen3-VL 和 Qwen3.5 系 整体分层 ---------------------------------------- -从开发者视角看,``pymllm`` 可以分为五层: +从开发者视角看,``pymllm`` 大致分五层: 1. **服务入口层**:FastAPI HTTP server,提供 OpenAI-compatible API 和原生 ``/generate`` API。 -2. **配置层**:``ServerConfig``、``ModelConfig``、``QuantizationConfig`` 统一解析 - 模型路径、dtype、调度参数、缓存参数、量化参数和加速开关。 -3. **控制面**:``Engine`` 启动 tokenizer、scheduler、detokenizer 子进程,并在主进程中 - 维护 request/response 状态。 -4. **数据面**:scheduler 持有 GPU-owning ``ModelRunnerProcess``,负责 batch 构造、 - KV cache 分配、prefix cache 命中、forward 和 sampling。 +2. **配置层**:``ServerConfig``、``ModelConfig``、``QuantizationConfig`` 统一解析模型 + 路径、dtype、调度参数、缓存参数、量化参数和各类加速开关。 +3. **控制面**:``Engine`` 拉起 tokenizer、scheduler、detokenizer 子进程,主进程里维护 + request/response 状态。 +4. **数据面**:scheduler 持有 GPU 的 ``ModelRunnerProcess``,负责 batch 构造、KV cache + 分配、prefix cache 命中、forward 和 sampling。 5. **加速层**:FlashInfer、CUDA Graph、Triton、CUTLASS 和 ``mllm-kernel`` 提供 attention、 - quantization、GEMM 和缓存写入等高频算子。 + 量化、GEMM、缓存写入这些高频算子。 进程拓扑 ---------------------------------------- -``Engine`` 在启动时创建三个子进程,并在主进程中保留 request/response 管理逻辑: +``Engine`` 启动时创建三个子进程,request/response 的管理逻辑留在主进程: .. code-block:: text @@ -64,34 +63,33 @@ Jetson Orin 等边缘 GPU 设备,重点支持 Qwen3、Qwen3-VL 和 Qwen3.5 系 ▼ RequestResponseProcess -这个拓扑的核心取舍是:GPU 资源由 scheduler 进程内的 ``ModelRunnerProcess`` 直接持有。 -这样 scheduler 可以在同一进程中完成调度、KV cache 资源释放、prefix cache 更新和模型 -forward,避免再引入 model worker 进程之间的 GPU 资源同步。 +这里最关键的一个取舍是:GPU 资源由 scheduler 进程内的 ``ModelRunnerProcess`` 直接持有。 +这样调度、KV cache 释放、prefix cache 更新和模型 forward 都在同一个进程里完成,省掉了 +model worker 进程之间同步 GPU 资源的那套复杂度。 请求生命周期 ---------------------------------------- -一次 chat completion 请求的典型路径如下: - -1. HTTP server 接收请求并转换为 ``GenerateReqInput``。 -2. ``RequestResponseProcess`` 为请求分配 request id,并把请求送入 tokenizer。 -3. ``TokenizerProcess`` 调用 tokenizer / processor,生成 ``TokenizedGenerateReqInput``。 -4. ``SchedulerProcess`` 接收 tokenized request,创建 ``Req``,放入等待队列。 -5. scheduler 根据 token budget、running request 数量和 prefill/decode 状态构造 - ``ScheduleBatch``。 -6. ``ModelRunnerProcess`` 为 batch 分配 request slot 和 KV slot,执行 prefix matching。 -7. ``ModelRunner`` 构造 ``ForwardBatch``,初始化 attention backend metadata,调用模型 - ``forward``,并对 logits 做 sampling。 +一次 chat completion 请求的典型路径: + +1. HTTP server 收到请求,转成 ``GenerateReqInput``。 +2. ``RequestResponseProcess`` 分配 request id,把请求送进 tokenizer。 +3. ``TokenizerProcess`` 调 tokenizer / processor,产出 ``TokenizedGenerateReqInput``。 +4. ``SchedulerProcess`` 接到 tokenized request,创建 ``Req``,放进等待队列。 +5. scheduler 按 token budget、running request 数和 prefill/decode 状态构造 ``ScheduleBatch``。 +6. ``ModelRunnerProcess`` 为 batch 分配 request slot 和 KV slot,做 prefix matching。 +7. ``ModelRunner`` 构造 ``ForwardBatch``,初始化 attention backend metadata,调模型 + ``forward``,再对 logits 做 sampling。 8. scheduler 更新每个 ``Req`` 的输出 token、finished reason 和 timing 字段。 -9. ``DetokenizerProcess`` 将 token id 转回文本。 -10. HTTP server 以普通 JSON 或 SSE streaming 形式返回结果。 +9. ``DetokenizerProcess`` 把 token id 转回文本。 +10. HTTP server 以普通 JSON 或 SSE streaming 返回。 控制面:Engine 与配置 ---------------------------------------- -``pymllm.configs.server_config.ServerConfig`` 是服务运行时的主配置对象。它覆盖: +``pymllm.configs.server_config.ServerConfig`` 是服务运行时的主配置对象,覆盖几类参数: -- 模型和 tokenizer:``model_path``、``tokenizer_path``、``load_format``、``dtype``。 +- 模型与 tokenizer:``model_path``、``tokenizer_path``、``load_format``、``dtype``。 - HTTP server:``host``、``port``、``api_key``、``served_model_name``。 - 调度与内存:``max_running_requests``、``max_total_tokens``、``max_prefill_tokens``、 ``mem_fraction_static``。 @@ -101,80 +99,79 @@ forward,避免再引入 model worker 进程之间的 GPU 资源同步。 ``cuda_ipc_pool_size_mb``。 - 观测与调试:``log_level``、``decode_log_interval``。 -``Engine`` 启动前会加载 HuggingFace config,解析 EOS token、默认输出长度和 dtype,并确保 -model/tokenizer 路径可用。启动后,``Engine`` 会监控子进程健康状态;任一核心子进程异常退出, -服务会被标记为 unhealthy。 +``Engine`` 启动前会先加载 HuggingFace config,解析 EOS token、默认输出长度和 dtype,并 +确认 model / tokenizer 路径可用。启动之后它会盯着子进程的健康状态,任何一个核心子进程异常 +退出,整个服务都会被标记为 unhealthy。 调度器 ---------------------------------------- -``SchedulerProcess`` 是 pymllm 的中心调度组件。它负责: +``SchedulerProcess`` 是 pymllm 的中心调度组件,干这几件事: -- 接收 tokenized requests。 -- 将输入请求转换为内部 ``Req`` 状态。 -- 根据 prefill/decode 状态构造 ``ScheduleBatch``。 -- 控制 ``max_running_requests``、``max_total_tokens``、``max_prefill_tokens`` 等资源约束。 -- 在请求结束或中止时释放 request slot 和 KV slot。 -- 将 decode token 发送给 detokenizer。 +- 接收 tokenized request。 +- 把输入请求转成内部 ``Req`` 状态。 +- 按 prefill / decode 状态构造 ``ScheduleBatch``。 +- 守住 ``max_running_requests``、``max_total_tokens``、``max_prefill_tokens`` 这些资源约束。 +- 请求结束或中止时释放 request slot 和 KV slot。 +- 把 decode token 发给 detokenizer。 -当前调度策略以 FCFS 和单 GPU 资源约束为主。``max_prefill_tokens`` 用于限制一轮调度 -可接纳的 prefill token 数;长 prompt 的运行时 chunked prefill 切分仍待后续接入。 +当前调度策略以 FCFS 加单 GPU 资源约束为主。``max_prefill_tokens`` 用来限制一轮调度能接纳的 +prefill token 数;长 prompt 的运行时 chunked prefill 切分还没接进来,是后续的事。 ModelRunner ---------------------------------------- -``ModelRunner`` 是真正执行模型 forward 的组件。它在初始化阶段完成: +``ModelRunner`` 是真正跑模型 forward 的组件。初始化阶段它会: 1. 设置 CUDA device 和默认 dtype。 2. 加载模型类和 safetensors 权重。 -3. 解析模型 metadata,例如 layer 数、head 数、head dim、context length。 +3. 解析模型 metadata,比如 layer 数、head 数、head dim、context length。 4. 初始化 request-to-token pool、token-to-KV pool 和 KV allocator。 5. 初始化 attention backend。 6. 预热 cuBLAS。 -7. 按配置捕获 decode CUDA Graph。 +7. 按配置 capture decode CUDA Graph。 -forward 阶段分为 extend 和 decode 两类: +forward 分 extend 和 decode 两类: -- **extend / prefill**:处理 prompt token,写入 KV cache,并返回每个请求最后一个 token 的 - logits。 +- **extend / prefill**:处理 prompt token,写 KV cache,返回每个请求最后一个 token 的 logits。 - **decode**:每个请求生成一个新 token,复用已有 KV cache 和 attention metadata。 KV cache 与 prefix cache ---------------------------------------- -``pymllm.mem_cache.memory_pool`` 中的 KV 管理采用三层结构: +``pymllm.mem_cache.memory_pool`` 里的 KV 管理是三层结构: .. code-block:: text ReqToTokenPool - maps (request slot, position) -> kv index + (request slot, position) -> kv index TokenToKVPoolAllocator - manages free integer KV slots + 管理空闲的整数 KV slot KVPool - stores per-layer K/V tensors on GPU + 在 GPU 上存每层的 K/V tensor -``TokenToKVPoolAllocator`` 使用 free-list 管理 KV slot,并通过批量释放接口降低大量请求结束或 -prefix cache eviction 时的开销。``KVPool`` 在条件满足时会调用 ``mllm-kernel`` 的 -``store_cache`` JIT kernel 写入 K/V;否则回退到 PyTorch indexing。 +``TokenToKVPoolAllocator`` 用 free-list 管理 KV slot,并提供批量释放接口,在大量请求结束或 +prefix cache eviction 时降低开销。``KVPool`` 在条件满足时调用 ``mllm-kernel`` 的 +``store_cache`` JIT kernel 写 K/V,否则回退到 PyTorch indexing。 -Prefix cache 当前有三种实现: +prefix cache 目前有三种实现: -- ``RadixCache``:标准 radix-tree prefix cache。 -- ``ChunkCache``:关闭 radix cache 时使用的简单缓存路径。 -- ``MambaRadixCache``:为包含 GDN / Mamba-like 状态的 hybrid 模型预留的状态缓存路径。 +- ``RadixCache``:标准的 radix-tree prefix cache。 +- ``ChunkCache``:关掉 radix cache 时用的简单缓存路径。 +- ``MambaRadixCache``:给带 GDN / Mamba-like 状态的 hybrid 模型预留的状态缓存路径。 -当启用 ``RadixCache`` 时,extend batch 会先执行 prefix matching。命中的 prefix token 不再 -重复计算,但对应 radix tree 节点会被 lock,直到请求结束或资源释放时再 unlock。 +开 ``RadixCache`` 时,extend batch 会先做 prefix matching:命中的 prefix token 不再重复计算, +但对应的 radix tree 节点会被 lock 住,直到请求结束或资源释放才 unlock。 IPC 与多模态数据传输 ---------------------------------------- -普通控制消息通过 ZMQ 传输。多模态请求中的大 tensor 可以走 shared queue fast path, -由 ``enable_shared_queue`` 和 ``tensor_transport_mode`` 控制。 +普通控制消息走 ZMQ。多模态请求里的大 tensor 可以走 shared queue 这条 fast path,由 +``enable_shared_queue`` 和 ``tensor_transport_mode`` 控制。 -``tensor_transport_mode`` 支持三种模式: +``tensor_transport_mode`` 有三种模式: .. list-table:: :header-rows: 1 @@ -183,22 +180,22 @@ IPC 与多模态数据传输 - 行为 - 适用场景 * - ``default`` - - GPU tensor 先拷到 CPU,再放入 POSIX shared memory。 + - GPU tensor 先拷回 CPU,再放进 POSIX shared memory。 - 最稳妥,调试优先。 * - ``cuda_ipc`` - GPU tensor 通过 CUDA IPC handle 跨进程共享。 - - 避免 GPU->CPU 拷贝,但长服务中可能有 PyTorch IPC 生命周期问题。 + - 省掉 GPU→CPU 拷贝,但长时间服务里可能踩到 PyTorch IPC 的生命周期问题。 * - ``cuda_ipc_pool`` - - 使用预分配 GPU workspace,发送方回收 chunk。 - - 面向生产服务的推荐 GPU tensor 传输方式。 + - 用预分配的 GPU workspace,发送方回收 chunk。 + - 面向生产服务推荐的 GPU tensor 传输方式。 与 mllm C++ Backend 的关系 ---------------------------------------- -``pymllm`` 和 ``cpu_backend``、``qnn_backend``、``ascend_backend`` 的层级不同: +``pymllm`` 和 ``cpu_backend``、``qnn_backend``、``ascend_backend`` 不在同一个层级: -- C++ Backend 接入的是 mllm C++ 的 Tensor、Op、Module、Dispatcher 和设备 allocator。 -- ``pymllm`` 接入的是 Python/PyTorch serving pipeline,主要服务于在线推理、模型加载、 - KV cache、调度和 CUDA kernel 集成。 -- ``mllm-kernel`` 是两者可以共享思想的低层 kernel 工具包,但当前 ``pymllm`` 更直接依赖 - 其中的 Python JIT CUDA kernel。 +- C++ Backend 接的是 mllm C++ 那套 Tensor、Op、Module、Dispatcher 和设备 allocator。 +- ``pymllm`` 接的是 Python / PyTorch serving pipeline,服务在线推理、模型加载、KV cache、 + 调度和 CUDA kernel 集成。 +- ``mllm-kernel`` 是两边都可以借鉴的低层 kernel 工具包,不过目前 ``pymllm`` 更直接依赖其中 + 的 Python JIT CUDA kernel。 diff --git a/docs/pymllm_runtime/setup_and_usage.rst b/docs/pymllm_runtime/setup_and_usage.rst index 2cb83ca51..b42a75e11 100644 --- a/docs/pymllm_runtime/setup_and_usage.rst +++ b/docs/pymllm_runtime/setup_and_usage.rst @@ -4,19 +4,16 @@ pymllm Setup and Usage 总览 ---------------------------------------- -``pymllm`` 是 mllm 面向 Python 生态的推理服务运行时,主要面向 NVIDIA Jetson -Orin 系列边缘 GPU 设备,例如 Jetson Orin NX 与 Jetson AGX Orin。它覆盖 -Qwen3 / Qwen3-VL 的 BF16、W4A16 和 W8A8 推理路径,并提供 OpenAI-compatible -HTTP API。 +``pymllm`` 是 mllm 面向 Python / CUDA 生态的推理服务运行时,主要跑在 NVIDIA Jetson +Orin 系列边缘 GPU(Orin NX / AGX Orin)上。它针对 Orin Ampere Tensor Core 的 INT8 +算力做了系统级适配,支持 BF16 原生推理以及 W4A16、W8A8_INT8 两种量化方案,兼顾推理 +速度与模型精度,目前已完成对 Qwen3、Qwen3-VL、Qwen3.5 的支持,并对外提供一套 +OpenAI-compatible 的 HTTP API。 环境要求 ---------------------------------------- -当前推荐基于 `jetson-containers `_ -提供的 Jetson PyTorch/CUDA 基础镜像进行开发。这样可以避免在 Jetson 上手工处理 -PyTorch、CUDA、cuDNN、Python ABI 等基础依赖。 - -已验证环境如下: +下面是当前已经跑通的一组版本: .. list-table:: :header-rows: 1 @@ -47,7 +44,7 @@ PyTorch、CUDA、cuDNN、Python ABI 等基础依赖。 安装依赖 ---------------------------------------- -在 Jetson 容器中克隆仓库后,进入仓库根目录安装 ``pymllm`` 和 ``mllm-kernel``: +克隆仓库后,进入根目录安装 ``pymllm`` 和 ``mllm-kernel``: .. code-block:: bash @@ -55,67 +52,47 @@ PyTorch、CUDA、cuDNN、Python ABI 等基础依赖。 SKBUILD_WHEEL_CMAKE=false python3 -m pip install -e . python3 -m pip install -e /mllm-kernel --no-deps --no-build-isolation -``transformers`` 可按项目需要自行安装。``triton`` 和 ``flashinfer`` 可以从 -Jetson AI Lab 的 wheel 源安装,也可以从官方 PyPI 或对应上游项目安装: +``triton`` 和 ``flashinfer`` 有两个来源,任选其一: .. code-block:: bash - # 方式一:从 Jetson AI Lab 安装 Jetson wheel。 + # 方式一:从 Jetson AI Lab 装 Jetson wheel。 python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ triton flashinfer - # 方式二:从官方 PyPI 固定 Triton,再单独安装 FlashInfer。 + # 方式二:从官方 PyPI 固定 Triton 版本,FlashInfer 仍从 Jetson AI Lab 装。 python3 -m pip install --index-url https://pypi.org/simple triton==3.6.0 python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ flashinfer -在 Jetson / aarch64 上,Triton wheel 的可用性会受到 wheel 来源、CUDA 路径和 -``ptxas`` / ``cuda.h`` 查找路径影响。Jetson AI Lab 源提供面向 JetPack 6 / -CUDA 12.6 的 Triton wheel;在已验证环境中,官方 PyPI 的 ``triton==3.6.0`` -manylinux aarch64 wheel 更接近开箱即用。若使用 Jetson AI Lab wheel 遇到 -``ptxas`` 或 CUDA 头文件查找问题,可显式设置 ``TRITON_PTXAS_PATH`` 和 -``CPATH`` 后重试。无论选择哪个来源,都建议用最小 Triton kernel 或 -``per_token_quant_int8`` 做 smoke test。 - -最小导入检查: - -.. code-block:: bash +在 aarch64 上,Triton wheel 能不能开箱即用,主要取决于 wheel 来源以及 +``ptxas`` / ``cuda.h`` 的查找路径。在上面这组已验证环境里,官方 PyPI 的 +``triton==3.6.0`` manylinux aarch64 wheel 更接近开箱即用;如果用 Jetson AI Lab +的 wheel 碰到 ``ptxas`` 或 CUDA 头文件找不到的问题,显式设置 ``TRITON_PTXAS_PATH`` +和 ``CPATH`` 再重试通常能解决。装完后建议用 ``per_token_quant_int8`` 之类的最小 +kernel 跑一次 smoke test,确认 Triton 真的能编译。 - python3 - <<'PY' - import pymllm - import mllm_kernel - - print("pymllm import ok") - print("mllm_kernel import ok") - PY - -CUTLASS 头文件 +W8A8 首次运行的 JIT 编译 ---------------------------------------- -W8A8 的高性能 GEMM 路径依赖 CUTLASS 头文件。当前查找顺序为: - -1. ``CUTLASS_HOME/include`` -2. ``flashinfer`` 内置的 ``data/cutlass/include`` -3. ``/usr/local/include``、``/usr/include``、``/usr/local/cuda/include`` +W8A8 的 INT8 GEMM 走 CUTLASS,依赖 CUTLASS 头文件。默认情况下不需要额外配置—— +``flashinfer`` 自带了一份 bundled CUTLASS,可以直接用;如果想换成自己的版本,设置 +``CUTLASS_HOME`` 即可。 -首次调用 CUTLASS W8A8 kernel 会触发 JIT 编译,编译产物会复用: +第一次调用 W8A8 kernel 会触发一次 JIT 编译,编译产物缓存在: .. code-block:: text ~/.cache/mllm_kernel/cutlass_int8_scaled_mm/ -如果需要重新验证首次编译行为,可以删除该目录后再次运行。 +之后复用缓存,不会再编译。想重新验证首次编译行为时,删掉这个目录再跑一次就行。 启动服务 ---------------------------------------- -``pymllm`` 的服务入口是 ``pymllm.server.launch``。服务启动后会提供 -``/health``、``/v1/models``、``/v1/completions``、``/v1/chat/completions``、 -``/generate`` 等接口。 +服务入口是 ``pymllm.server.launch``,启动后提供 ``/health``、``/v1/models``、 +``/v1/completions``、``/v1/chat/completions``、``/generate`` 等接口。 -W4A16 / W8A8 量化模型 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``compressed-tensors`` 量化模型使用同一个启动入口。运行时会根据模型 -``config.json`` 中的量化配置识别 W4A16 或 W8A8 路径。 +W4A16 / W8A8 量化模型和 BF16 原生模型共用同一个入口,运行时会读 ``config.json`` +里的量化配置,自动走 W4A16 或 W8A8 路径。一条典型的量化模型启动命令: .. code-block:: bash @@ -123,45 +100,17 @@ W4A16 / W8A8 量化模型 python3 -m pymllm.server.launch \ --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ --server.dtype float16 \ --quantization.method compressed-tensors \ --server.host 0.0.0.0 \ --server.port 30000 \ - --server.attention_backend auto \ - --server.gdn_decode_backend pytorch \ - --server.mem_fraction_static 0.05 \ + --server.mem_fraction_static 0.8 \ --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ + --server.max_total_tokens 4096 \ --server.disable_radix_cache \ - --server.disable_cuda_graph \ --server.log_level debug -BF16 原生模型 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -BF16 或 FP16 原生模型不需要设置 ``--quantization.method``: - -.. code-block:: bash - - cd - - python3 -m pymllm.server.launch \ - --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ - --server.dtype bfloat16 \ - --server.host 0.0.0.0 \ - --server.port 30000 \ - --server.attention_backend auto \ - --server.mem_fraction_static 0.05 \ - --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ - --server.disable_radix_cache \ - --server.log_level info +BF16 / FP16 原生模型用同一条命令,去掉 ``--quantization.method`` 即可。 常用参数 ---------------------------------------- @@ -174,21 +123,22 @@ BF16 或 FP16 原生模型不需要设置 ``--quantization.method``: * - ``--server.model_path`` - 模型权重目录,通常是 HuggingFace 或 ModelScope 格式。 * - ``--server.tokenizer_path`` - - tokenizer 目录;不设置时默认等于 ``model_path``。 + - tokenizer 目录;不设置时默认等于 ``model_path``,一般不用单独传。 * - ``--server.dtype`` - - 模型运行 dtype,可选 ``auto``、``float16``、``bfloat16``、``float32``。 + - 模型运行 dtype,可选 ``auto``、``float16``、``bfloat16``。 * - ``--quantization.method compressed-tensors`` - - 启用 ``compressed-tensors`` 权重加载与线性层执行路径。 + - 启用 ``compressed-tensors`` 权重加载和量化线性层执行路径。 + * - ``--server.mem_fraction_static`` + - ``模型权重 + KV cache pool`` 占 GPU 总显存的静态预算比例。设太小,KV pool 预算 + 不足会导致启动报错;设太大,留给 activation 和 CUDA Graph 的动态空间不够。 + Jetson 上 Qwen3-VL-2B 量化模型一般在 ``0.5``–``0.8`` 之间起调。 * - ``--server.max_running_requests`` - - 同时运行的请求数。Jetson 小显存环境下通常从 ``1`` 开始调试。 + - 同时运行的请求数。Jetson 小显存环境一般从 ``1`` 开始调。 * - ``--server.max_total_tokens`` - - KV cache token pool 的总容量上限。 - * - ``--server.max_prefill_tokens`` - - 单轮 prefill 可处理的 token 上限。 + - KV cache token pool 的容量上限,是整个 worker 全局共享的池子(不是单请求上限)。 + 实际容量取 ``min(profile 可承载 token 数, max_total_tokens)``,不会绕过显存 profile。 * - ``--server.disable_radix_cache`` - 关闭 Radix Cache,改用 ``ChunkCache``。 - * - ``--server.disable_cuda_graph`` - - 关闭 decode CUDA Graph,便于调试动态路径。 OpenAI-compatible 请求 ---------------------------------------- @@ -213,7 +163,7 @@ OpenAI-compatible 请求 "stream": false }' ; echo -图文请求中,图片路径需要是容器内可访问的绝对路径,不要带 ``file://`` 前缀: +图文请求里的图片路径要用服务进程可访问的绝对路径,不要带 ``file://`` 前缀: .. code-block:: bash @@ -239,122 +189,106 @@ OpenAI-compatible 请求 -H "Content-Type: application/json" \ --data @/tmp/mm_req_path.json ; echo -开发与测试 +Benchmark ---------------------------------------- -常用单元测试: - -.. code-block:: bash - - pytest pymllm/tests/test_compressed_tensors_config.py -q - pytest pymllm/tests/test_compressed_tensors_runtime.py -q - pytest pymllm/tests/test_qwen3_model_registry.py -q - pytest pymllm/tests/test_qwen3_weight_loading.py -q - pytest pymllm/tests/test_qwen3_forward_timing.py -q - pytest mllm-kernel/tests/test_int8_scaled_mm_cutlass.py -q +``bench_one_batch`` 是一个低层离线 benchmark。它直接初始化 +``pymllm.executor.model_runner.ModelRunner``,绕过 HTTP server、tokenizer、scheduler、 +detokenizer 这些进程,只测模型本身一次静态 prefill 加逐 token decode 的开销,因此适合 +分析模型 forward、KV cache、attention、CUDA Graph 和量化 kernel 的模型级表现,也方便 +验证 fused projection、residual-carry 这类模型图优化。它测不到在线服务的 TTFT / ITL / +E2E,这两个口径不要混用。 -模型级 benchmark: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +目前 ``bench_one_batch`` 支持三种测速口径: -``bench_one_batch`` 是对齐 SGLang 口径的低层离线 benchmark。它直接初始化 -``pymllm.executor.model_runner.ModelRunner``,绕过 HTTP server、tokenizer 进程、 -scheduler 进程和 detokenizer 进程,用 synthetic text-only token ids 测一次静态 -prefill,再测逐 token decode。该工具适合分析模型 forward、KV cache、attention、 -CUDA Graph 与量化 kernel 的模型级开销,也适合验证 fused projection、residual carry -等模型图优化。不代表在线服务的 TTFT / ITL / E2E 指标。 +- **纯文本**:用 synthetic token ids 测纯文本的 prefill / decode; +- **视觉编码(vit_prefill)**:同步墙钟只包住视觉 encoder(``self.visual(...)``), + 反映纯视觉编码速度; +- **多模态 prefill(multimodal_prefill)**:覆盖“视觉编码 + 图像/文本 token 的 LLM + prefill”,反映完整多模态 prefill 速度。 -典型用法: +纯文本用法: .. code-block:: bash PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ --server.dtype float16 \ --quantization.method compressed-tensors \ - --server.mem_fraction_static 0.1 \ + --server.mem_fraction_static 0.8 \ --server.max_running_requests 1 \ --server.max_total_tokens 2048 \ - --server.disable_radix_cache \ --server.log_level info \ --run-name qwen3vl_w8a8_bench_one_batch \ --batch-size 1 \ --input-len 256 512 1024 \ --output-len 128 \ - --result-filename /tmp/pymllm_bench_one_batch.jsonl + --result-filename + +``--batch-size``、``--input-len``、``--output-len`` 都支持多个值,脚本会遍历所有组合 +并把结果追加到 JSONL 文件。``output_len`` 用的是总输出 token 语义:prefill 之后已经 +拿到第一个 next token,后续 decode loop 再跑 ``output_len - 1`` 步。 + +多模态 prefill 用法。给 ``--image`` 传一张真实图片,再显式传 ``--input-len`` 时,长度 +口径是 ``image placeholder tokens + text prompt tokens`` 的目标总长——脚本只在文本 +token 上做补齐或截断,绝不动 image token,因此可以用同一张图 sweep +``314/512/1024/2048`` 等不同总长,测包含视觉编码的完整多模态 prefill 速度: + +.. code-block:: bash + + PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ + --server.model_path \ + --server.trust_remote_code true \ + --server.dtype float16 \ + --quantization.method compressed-tensors \ + --server.mem_fraction_static 0.8 \ + --server.max_running_requests 1 \ + --server.disable_cuda_graph \ + --batch-size 1 \ + --input-len 314 512 1024 2048 \ + --output-len 1 \ + --image \ + --prompt "Describe this image." \ + --run-name qwen3vl_w8a8_multimodal_prefill \ + --result-filename -其中 ``--batch-size``、``--input-len`` 和 ``--output-len`` 都支持多个值,脚本会遍历 -所有组合并向 JSONL 文件追加结果。``output_len`` 采用 SGLang 的总输出 token 语义: -prefill 后已得到第一个 next token,后续 decode loop 执行 ``output_len - 1`` 步。 +JSONL 里 ``vit_prefill_ms`` 只包住 ``self.visual(...)``,``multimodal_prefill_*`` +则是完整 VIT + LLM prefill 的别名字段,两者口径不同。在 AGX Orin 32GB 上的实测中, +W8A8 在长 prefill 上明显领先 FP16 / W4A16。 -执行结构: +脚本的整体执行流程大致是: .. code-block:: text pymllm.bench_one_batch CLI | - |-- parse GlobalConfig args and BenchArgs - |-- load HuggingFace AutoConfig into cfg.model.hf_config + |-- 解析 GlobalConfig 参数和 BenchArgs + |-- 加载 HuggingFace AutoConfig 到 cfg.model.hf_config | |-- ModelRunner.initialize() - | |-- load model and quantization config - | |-- initialize KV pools and attention backend - | |-- optionally capture decode CUDA Graph + | |-- 加载模型和量化配置 + | |-- 初始化 KV pool 和 attention backend + | |-- 按需 capture decode CUDA Graph | - |-- warmup once + |-- warmup 一次 | - |-- for each (batch_size, input_len, output_len): - | - |-- clear req_to_token_pool and token_to_kv_pool_allocator - |-- build synthetic input_ids - |-- prefill: - | allocate request slots and KV slots - | write prompt KV mapping - | prepare ForwardBatch(EXTEND) - | synchronize, run forward + sampling, synchronize - | - |-- decode loop: - allocate one KV slot per request - write current token mapping - prepare ForwardBatch(DECODE) - synchronize, run forward + sampling, synchronize - update seq_lens and next token ids + |-- 遍历每个 (batch_size, input_len, output_len): + | |-- 清空 req_to_token_pool 和 token_to_kv_pool_allocator + | |-- 构造 synthetic input_ids + | |-- prefill:分配 request/KV slot,写 KV 映射,跑 forward + sampling + | |-- decode loop:逐步分配 KV slot,跑 forward + sampling,更新 seq_lens | - |-- append JSONL result rows + |-- 追加 JSONL 结果行 -Profile 辅助入口: -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``bench_one_batch`` 保留了基于 ``torch.profiler`` 的 profile 参数,主要用于本地 -kernel timeline 分析。当前公开 benchmark 记录没有使用 profile 结果,因此它不作为标准 -性能数据口径的一部分。使用前建议先用较小的 ``input_len`` / ``output_len`` 做一次 -trace 生成验证,再扩大到正式 case。 - -.. code-block:: bash - - PYMLLM_TORCH_PROFILER_DIR=/tmp \ - PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ - --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ - --server.dtype bfloat16 \ - --server.mem_fraction_static 0.1 \ - --server.max_running_requests 1 \ - --server.max_total_tokens 2048 \ - --server.log_level info \ - --batch-size 1 \ - --input-len 256 \ - --output-len 128 \ - --profile \ - --profile-stage decode \ - --profile-steps 1 +Profile +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -已知限制 ----------------------------------------- +``bench_one_batch`` 内置了 profile 入口,方便在本地看 kernel timeline。目前有两条路径: -- W8A8 CUTLASS 当前通过 JIT 编译,首次启动有明显编译开销。 -- W8A8 激活量化使用 Triton kernel;decode 小 batch 下固定量化开销仍是后续优化点。 -- Qwen3-VL 的 ViT、``lm_head``、embedding 和 LayerNorm 不在当前 W8A8 量化范围内。 -- 当前文档中的 Jetson 性能与稳定性结论主要来自 Orin NX / SM87,需要在其他 GPU 上重新验证。 -- OpenAI-compatible API 的服务级指标和 ``bench_one_batch`` 的模型级指标口径不同,不应直接混用。 +- **torch.profiler(已支持)**:``--profile-activities CPU GPU``(默认),输出 + ``.trace.json.gz`` timeline,可以直接在 Perfetto / chrome://tracing 里看。输出目录 + 由 ``PYMLLM_TORCH_PROFILER_DIR`` 指定,默认 ``/tmp``。 +- **Nsight Systems / nsys(实验性)**:``--profile-activities CUDA_PROFILER`` 通过 + ``cudaProfilerStart/Stop`` 驱动 nsys,需要外层用 + ``nsys --capture-range=cudaProfilerApi`` 包住命令。这条路径还在打磨中,部分场景下 + 可能不够顺手,仅作为可选的深入分析手段。 From d442aae220b45988245daf0f8e03b5e00537bb5b Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Mon, 8 Jun 2026 11:26:32 +0000 Subject: [PATCH 19/21] docs(pymllm): rewrite README to mirror runtime setup doc Slim down README.md and README-ZH.md to match the pymllm_runtime setup_and_usage doc: fix launch args (drop stale flags, mem_fraction_static 0.8 / max_total_tokens 4096), align mem_fraction_static semantics, refresh bench_one_batch (text / vit / multimodal modes) and profile guidance, and drop redundant status / forward-path / microbench / known-limitations sections. Co-Authored-By: Claude Opus 4.8 (1M context) --- pymllm/README-ZH.md | 315 +++++++++++++++++++--------------------- pymllm/README.md | 343 +++++++++++++++++++++----------------------- 2 files changed, 306 insertions(+), 352 deletions(-) diff --git a/pymllm/README-ZH.md b/pymllm/README-ZH.md index a32c6580c..fcb77fd2e 100644 --- a/pymllm/README-ZH.md +++ b/pymllm/README-ZH.md @@ -2,179 +2,127 @@ ![pymllm-arch](../assets/pymllm-arch.png) -`pymllm` 是 `mllm` 的 Python 推理服务入口。本目录当前重点覆盖 -Jetson Orin 上的 Qwen3 / Qwen3-VL 推理、OpenAI-compatible server、 -`compressed-tensors` 量化加载,以及 W8A8 INT8 kernel 路径。 +## 总览 -本文档按 2026-04-27 的开发状态整理,适用于当前集成分支: +`pymllm` 是 mllm 面向 Python / CUDA 生态的推理服务运行时,主要跑在 NVIDIA Jetson +Orin 系列边缘 GPU(Orin NX / AGX Orin)上。它针对 Orin Ampere Tensor Core 的 INT8 +算力做了系统级适配,支持 BF16 原生推理以及 W4A16、W8A8_INT8 两种量化方案,兼顾推理 +速度与模型精度,目前已完成对 Qwen3、Qwen3-VL、Qwen3.5 的支持,并对外提供一套 +OpenAI-compatible 的 HTTP API。 -```text -feature/jetson-qwen3-family-bf16-w4a16-w8a8 -``` - -## 当前状态 - -已验证路径: +## 环境要求 -- `Qwen3-VL-2B-Instruct`:BF16 原生模型服务可用。 -- `Qwen3-VL-2B-Instruct-AWQ-4bit`:`compressed-tensors` - W4A16 / AWQ Marlin 路径可用。 -- `Qwen3-VL-2B-Instruct-quantized.w8a8`:`compressed-tensors` - W8A8 `int-quantized` 路径端到端可用。 +下面是当前已经跑通的一组版本: -已实现并纳入单元测试的模型/组件: +| 组件 | 版本或说明 | +| --- | --- | +| JetPack / Jetson Linux | JetPack `6.2.1` / Jetson Linux `36.4.4` (L4T `R36.4.4`) | +| Python | `3.10.12` | +| PyTorch | `2.4.0` | +| torchvision | `0.19.0a0+48b1edf` | +| transformers | `5.3.0` | +| safetensors | `0.7.0` | +| flashinfer | `0.6.7` | +| Triton Language | `triton==3.6.0` aarch64 wheel | +| CUDA | `12.6` | +| GPU | Jetson Orin NX,SM87 | -- `Qwen3VLForConditionalGeneration`:图文模型服务主路径。 -- `Qwen3ForCausalLM`:文本模型骨架、权重加载与 timing 字段测试。 -- `compressed-tensors`: - - `pack-quantized` 4-bit 权重路径,使用 GPTQ Marlin。 - - `int-quantized` W8A8 路径,使用 Triton 激活量化 + CUTLASS - `int8_scaled_mm`。 +## 安装依赖 -W8A8 当前前向链路: +克隆仓库后,进入根目录安装 `pymllm` 和 `mllm-kernel`: -```text -x(fp16/bf16) - -> per_token_quant_int8 [Triton, dynamic per-token activation quant] - -> int8_scaled_mm [CUTLASS, INT8 Tensor Core, fused scales] - -> output(fp16/bf16) +```bash +cd +SKBUILD_WHEEL_CMAKE=false python3 -m pip install -e . +python3 -m pip install -e /mllm-kernel --no-deps --no-build-isolation ``` -## 已验证环境 +`triton` 和 `flashinfer` 有两个来源,任选其一: -以下命令基于 Jetson Orin 环境整理: +```bash +# 方式一:从 Jetson AI Lab 装 Jetson wheel。 +python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ triton flashinfer -- JetPack / L4T:`R36.4.4`(来自 `/etc/nv_tegra_release`) -- Python:`3.10.12` -- PyTorch:`2.4.0` -- torchvision:`0.19.0a0+48b1edf` -- transformers:`5.3.0` -- safetensors:`0.7.0` -- flashinfer:`0.6.7` -- Triton Language:官方 PyPI `triton==3.6.0` manylinux aarch64 wheel -- CUDA:`12.6` -- GPU:Jetson Orin NX,SM87 +# 方式二:从官方 PyPI 固定 Triton 版本,FlashInfer 仍从 Jetson AI Lab 装。 +python3 -m pip install --index-url https://pypi.org/simple triton==3.6.0 +python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ flashinfer +``` -这里的 Triton 指 GPU kernel DSL,不是 Triton Inference Server。Jetson-AI-Lab -源也提供 `3.4.0`、`3.5.1`、`3.6.0`,但实测中可能需要额外设置 -`TRITON_PTXAS_PATH` 和 `CPATH`。当前建议优先使用官方 PyPI 的 -`triton==3.6.0`,并用最小 CUDA kernel 或 `per_token_quant_int8` 做 smoke test。 +在 aarch64 上,Triton wheel 能不能开箱即用,主要取决于 wheel 来源以及 +`ptxas` / `cuda.h` 的查找路径。在上面这组已验证环境里,官方 PyPI 的 +`triton==3.6.0` manylinux aarch64 wheel 更接近开箱即用;如果用 Jetson AI Lab +的 wheel 碰到 `ptxas` 或 CUDA 头文件找不到的问题,显式设置 `TRITON_PTXAS_PATH` +和 `CPATH` 再重试通常能解决。装完后建议用 `per_token_quant_int8` 之类的最小 +kernel 跑一次 smoke test,确认 Triton 真的能编译。 -W8A8 CUTLASS JIT 需要能找到 CUTLASS 头文件。当前查找顺序为: +## W8A8 首次运行的 JIT 编译 -1. `CUTLASS_HOME/include` -2. `flashinfer` 内置的 `data/cutlass/include` -3. `/usr/local/include`、`/usr/include`、`/usr/local/cuda/include` +W8A8 的 INT8 GEMM 走 CUTLASS,依赖 CUTLASS 头文件。默认情况下不需要额外配置—— +`flashinfer` 自带了一份 bundled CUTLASS,可以直接用;如果想换成自己的版本,设置 +`CUTLASS_HOME` 即可。 -首次调用 CUTLASS kernel 会触发 JIT 编译,耗时约 100 秒;后续会复用: +第一次调用 W8A8 kernel 会触发一次 JIT 编译,编译产物缓存在: ```text ~/.cache/mllm_kernel/cutlass_int8_scaled_mm/ ``` -## 安装开发环境 - -在仓库根目录执行: - -```bash -cd -SKBUILD_WHEEL_CMAKE=false python3 -m pip install -e . -python3 -m pip install -e /mllm-kernel --no-deps --no-build-isolation -``` - -最小导入检查: - -```bash -python3 - <<'PY' -import pymllm -import mllm_kernel - -print("pymllm import ok") -print("mllm_kernel import ok") -PY -``` +之后复用缓存,不会再编译。想重新验证首次编译行为时,删掉这个目录再跑一次就行。 ## 启动服务 -### 量化模型(W4A16 / W8A8) +服务入口是 `pymllm.server.launch`,启动后提供 `/health`、`/v1/models`、 +`/v1/completions`、`/v1/chat/completions`、`/generate` 等接口。 + +W4A16 / W8A8 量化模型和 BF16 原生模型共用同一个入口,运行时会读 `config.json` +里的量化配置,自动走 W4A16 或 W8A8 路径。一条典型的量化模型启动命令: ```bash cd python3 -m pymllm.server.launch \ --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ --server.dtype float16 \ --quantization.method compressed-tensors \ --server.host 0.0.0.0 \ --server.port 30000 \ - --server.attention_backend auto \ - --server.gdn_decode_backend pytorch \ - --server.mem_fraction_static 0.05 \ + --server.mem_fraction_static 0.8 \ --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ - --server.chunked_prefill_size 128 \ + --server.max_total_tokens 4096 \ --server.disable_radix_cache \ - --server.disable_cuda_graph \ --server.log_level debug ``` -说明: +BF16 / FP16 原生模型用同一条命令,去掉 `--quantization.method` 即可。 -- `--quantization.method compressed-tensors` 会按模型 `config.json` - 自动识别 W4A16 或 W8A8 签名。 -- W8A8 路径要求 GPU capability 不低于 SM80。 -- `--server.disable_radix_cache` 会使用 `ChunkCache`,当前已修复该模式下的 - KV slot 泄漏问题。 -- 若 `30000` 已被占用,可改成其他空闲端口。 +## 常用参数 -### BF16 原生模型 +| 参数 | 说明 | +| --- | --- | +| `--server.model_path` | 模型权重目录,通常是 HuggingFace 或 ModelScope 格式。 | +| `--server.tokenizer_path` | tokenizer 目录;不设置时默认等于 `model_path`,一般不用单独传。 | +| `--server.dtype` | 模型运行 dtype,可选 `auto`、`float16`、`bfloat16`。 | +| `--quantization.method compressed-tensors` | 启用 `compressed-tensors` 权重加载和量化线性层执行路径。 | +| `--server.mem_fraction_static` | `模型权重 + KV cache pool` 占 GPU 总显存的静态预算比例。设太小,KV pool 预算不足会导致启动报错;设太大,留给 activation 和 CUDA Graph 的动态空间不够。Jetson 上 Qwen3-VL-2B 量化模型一般在 `0.5`–`0.8` 之间起调。 | +| `--server.max_running_requests` | 同时运行的请求数。Jetson 小显存环境一般从 `1` 开始调。 | +| `--server.max_total_tokens` | KV cache token pool 的容量上限,是整个 worker 全局共享的池子(不是单请求上限)。实际容量取 `min(profile 可承载 token 数, max_total_tokens)`,不会绕过显存 profile。 | +| `--server.disable_radix_cache` | 关闭 Radix Cache,改用 `ChunkCache`。 | -```bash -cd +## OpenAI-compatible 请求 -python3 -m pymllm.server.launch \ - --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ - --server.dtype float16 \ - --server.host 0.0.0.0 \ - --server.port 30000 \ - --server.attention_backend auto \ - --server.gdn_decode_backend pytorch \ - --server.mem_fraction_static 0.05 \ - --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ - --server.chunked_prefill_size 128 \ - --server.disable_radix_cache \ - --server.disable_cuda_graph \ - --server.log_level debug -``` - -## 调用示例 - -### 健康检查 +健康检查: ```bash curl -s --noproxy '*' http://127.0.0.1:30000/v1/models ; echo ``` -期望返回中包含: - -```text -"owned_by":"pymllm" -``` - -### 文本请求 +文本请求: ```bash curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ - "model": "None", + "model": "default", "messages": [{"role": "user", "content": "你好,只回复:ok"}], "max_tokens": 8, "temperature": 0.0, @@ -182,73 +130,100 @@ curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ }' ; echo ``` -### 图文请求 - -图片路径请使用容器内可访问的绝对路径,不要使用 `file://...` 前缀。 +图文请求里的图片路径要用服务进程可访问的绝对路径,不要带 `file://` 前缀: ```bash -python3 - <<'PY' -import json - -payload = { - "model": "None", - "messages": [ - { - "role": "user", - "content": [ - {"type": "text", "text": "请详细描述这张图片。"}, - {"type": "image_url", "image_url": {"url": "/workspace/xcd_mllm/test.png"}}, - ], - } - ], - "max_tokens": 128, - "temperature": 0.0, - "stream": False, +cat > /tmp/mm_req_path.json <<'JSON' +{ + "model": "default", + "messages": [ + { + "role": "user", + "content": [ + {"type": "text", "text": "请描述这张图片。"}, + {"type": "image_url", "image_url": {"url": "/workspace/test.png"}} + ] + } + ], + "max_tokens": 128, + "temperature": 0.0, + "stream": false } - -with open("/tmp/mm_req_path.json", "w", encoding="utf-8") as f: - json.dump(payload, f, ensure_ascii=False) - -print("saved /tmp/mm_req_path.json") -PY +JSON curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ -H "Content-Type: application/json" \ --data @/tmp/mm_req_path.json ; echo ``` -## 开发与测试 +## Benchmark -常用单元测试: +`bench_one_batch` 是一个低层离线 benchmark。它直接初始化 +`pymllm.executor.model_runner.ModelRunner`,绕过 HTTP server、tokenizer、scheduler、 +detokenizer 这些进程,只测模型本身一次静态 prefill 加逐 token decode 的开销,因此适合 +分析模型 forward、KV cache、attention、CUDA Graph 和量化 kernel 的模型级表现,也方便 +验证 fused projection、residual-carry 这类模型图优化。它测不到在线服务的 TTFT / ITL / +E2E,这两个口径不要混用。 -```bash -pytest pymllm/tests/test_compressed_tensors_config.py -q -pytest pymllm/tests/test_compressed_tensors_runtime.py -q -pytest pymllm/tests/test_qwen3_model_registry.py -q -pytest pymllm/tests/test_qwen3_weight_loading.py -q -pytest pymllm/tests/test_qwen3_forward_timing.py -q -pytest mllm-kernel/tests/test_int8_scaled_mm_cutlass.py -q -``` +目前 `bench_one_batch` 支持三种测速口径: + +- **纯文本**:用 synthetic token ids 测纯文本的 prefill / decode; +- **视觉编码(vit_prefill)**:同步墙钟只包住视觉 encoder(`self.visual(...)`),反映纯视觉编码速度; +- **多模态 prefill(multimodal_prefill)**:覆盖“视觉编码 + 图像/文本 token 的 LLM prefill”,反映完整多模态 prefill 速度。 -常用 microbench: +纯文本用法: ```bash -python3 pymllm/tests/bench_w8a8_activation_quant.py -python3 mllm-kernel/benchmarks/bench_int8_scaled_mm.py -python3 mllm-kernel/benchmarks/bench_w4a16_vs_w8a8.py +PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ + --server.model_path \ + --server.dtype float16 \ + --quantization.method compressed-tensors \ + --server.mem_fraction_static 0.8 \ + --server.max_running_requests 1 \ + --server.max_total_tokens 2048 \ + --batch-size 1 \ + --input-len 256 512 1024 \ + --output-len 128 \ + --result-filename ``` -如果需要重新测 CUTLASS 首次编译,可先清理 JIT 缓存: +`--batch-size`、`--input-len`、`--output-len` 都支持多个值,脚本会遍历所有组合并把结果 +追加到 JSONL 文件。`output_len` 用的是总输出 token 语义:prefill 之后已经拿到第一个 +next token,后续 decode loop 再跑 `output_len - 1` 步。 + +多模态 prefill 用法。给 `--image` 传一张真实图片,再显式传 `--input-len` 时,长度口径是 +`image placeholder tokens + text prompt tokens` 的目标总长——脚本只在文本 token 上做补齐 +或截断,绝不动 image token,因此可以用同一张图 sweep `314/512/1024/2048` 等不同总长,测 +包含视觉编码的完整多模态 prefill 速度: ```bash -rm -rf ~/.cache/mllm_kernel/cutlass_int8_scaled_mm/ +PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ + --server.model_path \ + --server.trust_remote_code true \ + --server.dtype float16 \ + --quantization.method compressed-tensors \ + --server.mem_fraction_static 0.8 \ + --server.max_running_requests 1 \ + --server.disable_cuda_graph \ + --batch-size 1 \ + --input-len 314 512 1024 2048 \ + --output-len 1 \ + --image \ + --prompt "Describe this image." \ + --result-filename ``` -## 已知限制 +JSONL 里 `vit_prefill_ms` 只包住 `self.visual(...)`,`multimodal_prefill_*` 则是完整 +VIT + LLM prefill 的别名字段,两者口径不同。在 AGX Orin 32GB 上的实测中,W8A8 在长 +prefill 上明显领先 FP16 / W4A16。 + +### Profile + +`bench_one_batch` 内置了 profile 入口,方便在本地看 kernel timeline。目前有两条路径: -- W8A8 CUTLASS 当前通过 JIT 编译,首次启动存在约 100 秒编译开销。 -- W8A8 激活量化使用 Triton kernel;decode 下固定量化开销仍是后续优化点。 -- Qwen3-VL 的 ViT、`lm_head`、embedding 和 LayerNorm 不在当前 W8A8 量化范围内。 -- 其他 GPU 需要重新验证 tile dispatch、JIT 编译和性能。 -- 为对齐 SGLang/OpenAI 兼容响应,OpenAI API 默认不返回 debug timing。 - 仅在本地诊断时使用 `--server.enable_debug_timing`;严格模型级计时应使用专用 benchmark。 +- **torch.profiler(已支持)**:`--profile-activities CPU GPU`(默认),输出 + `.trace.json.gz` timeline,可以直接在 Perfetto / chrome://tracing 里看。输出目录由 + `PYMLLM_TORCH_PROFILER_DIR` 指定,默认 `/tmp`。 +- **Nsight Systems / nsys(实验性)**:`--profile-activities CUDA_PROFILER` 通过 + `cudaProfilerStart/Stop` 驱动 nsys,需要外层用 `nsys --capture-range=cudaProfilerApi` + 包住命令。这条路径还在打磨中,部分场景下可能不够顺手,仅作为可选的深入分析手段。 diff --git a/pymllm/README.md b/pymllm/README.md index 439f74bc7..0aed552eb 100644 --- a/pymllm/README.md +++ b/pymllm/README.md @@ -2,184 +2,131 @@ ![pymllm-arch](../assets/pymllm-arch.png) -`pymllm` is the Python inference and serving entry point for `mllm`. This -directory currently focuses on Qwen3 / Qwen3-VL serving on Jetson Orin, -OpenAI-compatible APIs, `compressed-tensors` quantized loading, and the W8A8 -INT8 kernel path. +## Overview -This README reflects the development state as of 2026-04-27 for the integration -branch: +`pymllm` is mllm's Python / CUDA inference and serving runtime, running mainly +on NVIDIA Jetson Orin edge GPUs (Orin NX / AGX Orin). It is adapted for the INT8 +throughput of the Orin Ampere Tensor Cores, supports BF16 native inference plus +two quantization schemes (W4A16 and W8A8_INT8), and currently covers Qwen3, +Qwen3-VL, and Qwen3.5, exposing an OpenAI-compatible HTTP API. -```text -feature/jetson-qwen3-family-bf16-w4a16-w8a8 -``` - -## Current status - -Validated paths: +## Environment -- `Qwen3-VL-2B-Instruct`: BF16 base-model serving. -- `Qwen3-VL-2B-Instruct-AWQ-4bit`: `compressed-tensors` W4A16 / AWQ Marlin - serving. -- `Qwen3-VL-2B-Instruct-quantized.w8a8`: `compressed-tensors` W8A8 - `int-quantized` end-to-end serving. +A known-good set of versions: -Implemented and unit-tested models/components: +| Component | Version / notes | +| --- | --- | +| JetPack / Jetson Linux | JetPack `6.2.1` / Jetson Linux `36.4.4` (L4T `R36.4.4`) | +| Python | `3.10.12` | +| PyTorch | `2.4.0` | +| torchvision | `0.19.0a0+48b1edf` | +| transformers | `5.3.0` | +| safetensors | `0.7.0` | +| flashinfer | `0.6.7` | +| Triton Language | `triton==3.6.0` aarch64 wheel | +| CUDA | `12.6` | +| GPU | Jetson Orin NX, SM87 | -- `Qwen3VLForConditionalGeneration`: the main multimodal serving path. -- `Qwen3ForCausalLM`: text-only model skeleton, weight loading, and timing - tests. -- `compressed-tensors`: - - `pack-quantized` 4-bit weight path via GPTQ Marlin. - - `int-quantized` W8A8 path via Triton activation quantization and CUTLASS - `int8_scaled_mm`. +## Install -The current W8A8 forward path is: +Clone the repo, then install `pymllm` and `mllm-kernel` from the repo root: -```text -x(fp16/bf16) - -> per_token_quant_int8 [Triton, dynamic per-token activation quant] - -> int8_scaled_mm [CUTLASS, INT8 Tensor Core, fused scales] - -> output(fp16/bf16) +```bash +cd +SKBUILD_WHEEL_CMAKE=false python3 -m pip install -e . +python3 -m pip install -e /mllm-kernel --no-deps --no-build-isolation ``` -## Validated environment +`triton` and `flashinfer` have two sources; pick either one: -The commands below were validated on Jetson Orin with: +```bash +# Option 1: Jetson wheels from Jetson AI Lab. +python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ triton flashinfer -- JetPack / L4T: `R36.4.4` (`/etc/nv_tegra_release`) -- Python: `3.10.12` -- PyTorch: `2.4.0` -- torchvision: `0.19.0a0+48b1edf` -- transformers: `5.3.0` -- safetensors: `0.7.0` -- flashinfer: `0.6.7` -- Triton Language: official PyPI `triton==3.6.0` manylinux aarch64 wheel -- CUDA: `12.6` -- GPU: Jetson Orin NX, SM87 +# Option 2: pin Triton from official PyPI, still get FlashInfer from Jetson AI Lab. +python3 -m pip install --index-url https://pypi.org/simple triton==3.6.0 +python3 -m pip install --extra-index-url https://pypi.jetson-ai-lab.io/ flashinfer +``` -Triton here means the GPU kernel DSL, not Triton Inference Server. The -Jetson-AI-Lab index also provides `3.4.0`, `3.5.1`, and `3.6.0`, but the tested -environment may require extra `TRITON_PTXAS_PATH` and `CPATH` settings with -those wheels. For this project, prefer the official PyPI `triton==3.6.0` wheel -and verify it with a minimal CUDA kernel or `per_token_quant_int8` smoke test. +On aarch64, whether the Triton wheel works out of the box mostly depends on the +wheel source and the `ptxas` / `cuda.h` lookup paths. In the validated +environment above, the official PyPI `triton==3.6.0` manylinux aarch64 wheel is +closest to working out of the box; if a Jetson AI Lab wheel hits `ptxas` or CUDA +header lookup issues, setting `TRITON_PTXAS_PATH` and `CPATH` explicitly usually +fixes it. After installing, run a smoke test with a minimal kernel such as +`per_token_quant_int8` to confirm Triton actually compiles. -The W8A8 CUTLASS JIT path requires CUTLASS headers. The lookup order is: +## W8A8 first-run JIT compilation -1. `CUTLASS_HOME/include` -2. `flashinfer` bundled `data/cutlass/include` -3. `/usr/local/include`, `/usr/include`, `/usr/local/cuda/include` +The W8A8 INT8 GEMM goes through CUTLASS and needs CUTLASS headers. No extra +setup is required by default — `flashinfer` ships a bundled CUTLASS; set +`CUTLASS_HOME` if you want to point at your own copy. -The first CUTLASS kernel call triggers JIT compilation and may take about -100 seconds. Later runs reuse: +The first W8A8 kernel call triggers a one-time JIT compile, cached at: ```text ~/.cache/mllm_kernel/cutlass_int8_scaled_mm/ ``` -## Install the development environment - -Run from the repository root: - -```bash -cd -SKBUILD_WHEEL_CMAKE=false python3 -m pip install -e . -python3 -m pip install -e /mllm-kernel --no-deps --no-build-isolation -``` - -Run a minimal import check: - -```bash -python3 - <<'PY' -import pymllm -import mllm_kernel - -print("pymllm import ok") -print("mllm_kernel import ok") -PY -``` +Later runs reuse the cache. To re-check the first-compile behavior, delete this +directory and run again. ## Launch the server -### Quantized models (W4A16 / W8A8) +The entry point is `pymllm.server.launch`. Once up, it serves `/health`, +`/v1/models`, `/v1/completions`, `/v1/chat/completions`, and `/generate`. + +W4A16 / W8A8 quantized models and BF16 base models share the same entry point; +the runtime reads the quantization config in `config.json` and picks the W4A16 +or W8A8 path automatically. A typical quantized-model launch: ```bash cd python3 -m pymllm.server.launch \ --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ --server.dtype float16 \ --quantization.method compressed-tensors \ --server.host 0.0.0.0 \ --server.port 30000 \ - --server.attention_backend auto \ - --server.gdn_decode_backend pytorch \ - --server.mem_fraction_static 0.05 \ + --server.mem_fraction_static 0.8 \ --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ - --server.chunked_prefill_size 128 \ + --server.max_total_tokens 4096 \ --server.disable_radix_cache \ - --server.disable_cuda_graph \ --server.log_level debug ``` -Notes: +For BF16 / FP16 base models, use the same command and drop +`--quantization.method`. -- `--quantization.method compressed-tensors` reads the model `config.json` and - selects the W4A16 or W8A8 signature automatically. -- W8A8 requires SM80 or newer GPUs. -- `--server.disable_radix_cache` uses `ChunkCache`; the KV slot leak in this - mode has been fixed. -- If port `30000` is already in use, switch to another free port. +## Common parameters -### BF16 base models - -```bash -cd - -python3 -m pymllm.server.launch \ - --server.model_path \ - --server.tokenizer_path \ - --server.load_format safetensors \ - --server.dtype float16 \ - --server.host 0.0.0.0 \ - --server.port 30000 \ - --server.attention_backend auto \ - --server.gdn_decode_backend pytorch \ - --server.mem_fraction_static 0.05 \ - --server.max_running_requests 1 \ - --server.max_total_tokens 256 \ - --server.max_prefill_tokens 128 \ - --server.chunked_prefill_size 128 \ - --server.disable_radix_cache \ - --server.disable_cuda_graph \ - --server.log_level debug -``` +| Parameter | Description | +| --- | --- | +| `--server.model_path` | Model weight directory, usually HuggingFace or ModelScope format. | +| `--server.tokenizer_path` | Tokenizer directory; defaults to `model_path` when unset, so you rarely pass it. | +| `--server.dtype` | Runtime dtype: `auto`, `float16`, or `bfloat16`. | +| `--quantization.method compressed-tensors` | Enables `compressed-tensors` weight loading and the quantized linear path. | +| `--server.mem_fraction_static` | Static budget for `model weights + KV cache pool` as a fraction of total GPU memory. Too small fails to allocate the KV pool at startup; too large leaves no room for activations and CUDA Graph. On Jetson, Qwen3-VL-2B usually starts around `0.5`–`0.8`. | +| `--server.max_running_requests` | Concurrent requests. On small-VRAM Jetson, start from `1`. | +| `--server.max_total_tokens` | Upper bound on the KV cache token pool, shared globally across the worker (not a per-request limit). Actual capacity is `min(profiled tokens, max_total_tokens)` and does not bypass the memory profile. | +| `--server.disable_radix_cache` | Disables Radix Cache, uses `ChunkCache` instead. | -## Request examples +## OpenAI-compatible requests -### Health check +Health check: ```bash curl -s --noproxy '*' http://127.0.0.1:30000/v1/models ; echo ``` -Expected response contains: - -```text -"owned_by":"pymllm" -``` - -### Text request +Text request: ```bash curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ - "model": "None", + "model": "default", "messages": [{"role": "user", "content": "Reply with: ok"}], "max_tokens": 8, "temperature": 0.0, @@ -187,79 +134,111 @@ curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ }' ; echo ``` -### Image request - -Use a container-visible absolute image path. Do not use the `file://...` -prefix. +For image requests, use an absolute path the server process can read; do not use +the `file://` prefix: ```bash -python3 - <<'PY' -import json - -payload = { - "model": "None", - "messages": [ - { - "role": "user", - "content": [ - {"type": "text", "text": "Please describe this image in detail."}, - {"type": "image_url", "image_url": {"url": "/workspace/xcd_mllm/test.png"}}, - ], - } - ], - "max_tokens": 128, - "temperature": 0.0, - "stream": False, +cat > /tmp/mm_req_path.json <<'JSON' +{ + "model": "default", + "messages": [ + { + "role": "user", + "content": [ + {"type": "text", "text": "Please describe this image."}, + {"type": "image_url", "image_url": {"url": "/workspace/test.png"}} + ] + } + ], + "max_tokens": 128, + "temperature": 0.0, + "stream": false } - -with open("/tmp/mm_req_path.json", "w", encoding="utf-8") as f: - json.dump(payload, f, ensure_ascii=False) - -print("saved /tmp/mm_req_path.json") -PY +JSON curl -s --noproxy '*' http://127.0.0.1:30000/v1/chat/completions \ -H "Content-Type: application/json" \ --data @/tmp/mm_req_path.json ; echo ``` -## Development and tests +## Benchmark -Common unit tests: +`bench_one_batch` is a low-level offline benchmark. It initializes +`pymllm.executor.model_runner.ModelRunner` directly, bypassing the HTTP server, +tokenizer, scheduler, and detokenizer, and only measures one static prefill plus +per-token decode of the model itself. It is good for analyzing model forward, KV +cache, attention, CUDA Graph, and quantized kernels at the model level, and for +checking graph optimizations such as fused projection and residual-carry. It +does not measure online-serving TTFT / ITL / E2E — don't mix the two. -```bash -pytest pymllm/tests/test_compressed_tensors_config.py -q -pytest pymllm/tests/test_compressed_tensors_runtime.py -q -pytest pymllm/tests/test_qwen3_model_registry.py -q -pytest pymllm/tests/test_qwen3_weight_loading.py -q -pytest pymllm/tests/test_qwen3_forward_timing.py -q -pytest mllm-kernel/tests/test_int8_scaled_mm_cutlass.py -q -``` +`bench_one_batch` supports three measurement modes: + +- **Text-only**: prefill / decode with synthetic token ids. +- **Vision encoding (`vit_prefill`)**: a synchronized wall clock around the + vision encoder (`self.visual(...)`) only, reflecting pure vision-encode speed. +- **Multimodal prefill (`multimodal_prefill`)**: covers "vision encoding + LLM + prefill over image/text tokens", reflecting full multimodal prefill speed. -Common microbenchmarks: +Text-only: ```bash -python3 pymllm/tests/bench_w8a8_activation_quant.py -python3 mllm-kernel/benchmarks/bench_int8_scaled_mm.py -python3 mllm-kernel/benchmarks/bench_w4a16_vs_w8a8.py +PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ + --server.model_path \ + --server.dtype float16 \ + --quantization.method compressed-tensors \ + --server.mem_fraction_static 0.8 \ + --server.max_running_requests 1 \ + --server.max_total_tokens 2048 \ + --batch-size 1 \ + --input-len 256 512 1024 \ + --output-len 128 \ + --result-filename ``` -To measure first-use CUTLASS compilation again, clear the JIT cache: +`--batch-size`, `--input-len`, and `--output-len` all accept multiple values; +the script sweeps every combination and appends results to the JSONL file. +`output_len` uses total-output-token semantics: the first next token is already +produced after prefill, so the decode loop runs `output_len - 1` more steps. + +Multimodal prefill: pass a real image to `--image`, and when you also pass +`--input-len` explicitly, the length means the target total of +`image placeholder tokens + text prompt tokens` — the script only pads or +truncates text tokens, never image tokens. So you can sweep different totals such +as `314/512/1024/2048` on the same image to measure full multimodal prefill +including vision encoding: ```bash -rm -rf ~/.cache/mllm_kernel/cutlass_int8_scaled_mm/ +PYTHONPATH="$PWD:$PWD/mllm-kernel" python3 -m pymllm.bench_one_batch \ + --server.model_path \ + --server.trust_remote_code true \ + --server.dtype float16 \ + --quantization.method compressed-tensors \ + --server.mem_fraction_static 0.8 \ + --server.max_running_requests 1 \ + --server.disable_cuda_graph \ + --batch-size 1 \ + --input-len 314 512 1024 2048 \ + --output-len 1 \ + --image \ + --prompt "Describe this image." \ + --result-filename ``` -## Known limitations - -- The W8A8 CUTLASS path is JIT-compiled, so first startup includes about - 100 seconds of compilation overhead. -- W8A8 activation quantization uses a Triton kernel; its fixed decode-time - cost remains a future optimization target. -- Qwen3-VL ViT, `lm_head`, embeddings, and LayerNorm are outside the current - W8A8 quantized scope. -- Other GPUs need separate validation for tile dispatch, JIT compilation, and - performance. -- OpenAI-compatible responses hide debug timing by default for SGLang/OpenAI - compatibility. Use `--server.enable_debug_timing` only for local diagnostics; - strict model-level timing should use dedicated benchmarks. +In the JSONL, `vit_prefill_ms` wraps only `self.visual(...)`, while +`multimodal_prefill_*` are alias fields for the full VIT + LLM prefill — the two +have different scopes. In measurements on AGX Orin 32GB, W8A8 clearly leads FP16 +/ W4A16 on long prefill. + +### Profile + +`bench_one_batch` has a built-in profile entry for inspecting kernel timelines +locally. There are two paths: + +- **torch.profiler (supported)**: `--profile-activities CPU GPU` (default), + emits a `.trace.json.gz` timeline you can open in Perfetto / chrome://tracing. + The output directory is set by `PYMLLM_TORCH_PROFILER_DIR`, defaulting to + `/tmp`. +- **Nsight Systems / nsys (experimental)**: `--profile-activities CUDA_PROFILER` + drives nsys via `cudaProfilerStart/Stop`, and needs an outer wrapper like + `nsys --capture-range=cudaProfilerApi`. This path is still being polished and + may be rough in places; treat it as an optional deep-dive tool. From f346552893d726d68171493f26fc1c3b75f5fab3 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Mon, 8 Jun 2026 16:16:01 +0000 Subject: [PATCH 20/21] docs(readme): highlight Jetson Orin pymllm performance --- README-ZH.md | 51 ++++++++++++++---- README.md | 51 ++++++++++++++---- .../pymllm-jetson-prefill-throughput-2048.jpg | Bin 0 -> 363270 bytes .../pymllm-jetson-speedup-summary-2048.jpg | Bin 0 -> 355032 bytes 4 files changed, 80 insertions(+), 22 deletions(-) create mode 100644 assets/jetson/pymllm-jetson-prefill-throughput-2048.jpg create mode 100644 assets/jetson/pymllm-jetson-speedup-summary-2048.jpg diff --git a/README-ZH.md b/README-ZH.md index b5592d1e9..9106c4153 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -17,6 +17,8 @@ mllm ## 最新动态 +- [2026 年 6 月 8 日] `pymllm` 已覆盖 Qwen3、Qwen3-VL 与 Qwen3.5 在 Jetson Orin 上的 W4A16 / W8A8 serving;Qwen3-VL-2B W8A8 在 AGX Orin 32GB 上最高达到 3.12x prefill 加速比,decode 吞吐整体与 llama.cpp 接近。 +- [2026 年 4 月 30 日] `pymllm` 新增面向 Jetson 的 Qwen3 / Qwen3-VL BF16、W4A16 和 W8A8 serving 支持,覆盖 compressed-tensors AWQ 与 W8A8 INT8 路径。 - [2026 年 3 月 18 日] 🔥🔥🔥 `pymllm` 已支持在 Jetson Orin 和 Jetson Thor 设备上使用 CUDA(实验特性,仍在持续开发中)。 - [2026 年 2 月 3 日] 🔥🔥🔥 MLLM Qnn AOT 已支持在 NPU 上全图执行![快速开始](https://ubiquitouslearning.github.io/mllm/qnn_backend/aot_execute.html), [技术报告](https://chenghuawang.github.io/News/2026-01-29-mllm-qnn-aot-support/) - [2025 年 11 月 27 日] Android Demo 更新:通过一种全新的 In-App Go 服务架构,在 Android 上实现了 Qwen3 和 DeepSeek-OCR 的稳定流式推理。 @@ -29,6 +31,29 @@ mllm - 更加完善、精细的工程实现 - [2025 年 7 月 30 日] 为 QNN 后端模型新增旋转量化(Rotation Quantization)方法,并支持 Qwen-2-VL 2B(ViT 性能分析将在 v2 中集成) +## Jetson Orin CUDA Runtime + +`pymllm` 现已支持 Qwen3、Qwen3-VL 与 Qwen3.5 在 Jetson Orin 上运行,覆盖 BF16 serving 以及 W4A16、W8A8 两种量化 serving 路径。其中,W4A16 使用 AWQ compressed tensors 与 Marlin GEMM,W8A8 使用 Triton per-token activation quantization 与 CUTLASS INT8 GEMM。 + +在 `input_len=2048`、`output_len=128` 的测速口径下,`pymllm` 在 Jetson Orin 上的 prefill 性能相对 llama.cpp 有明显提升。Qwen3-VL-2B W8A8 在 AGX Orin 32GB 上最高达到 **3.12x prefill 加速比**,prefill 吞吐约 **12243 tok/s**。decode 吞吐整体与 llama.cpp 接近,不同模型、设备和量化格式下会有小幅领先或回落。 + +

+ +
+ +
+ +
+ +对于多模态 prefill,`bench_one_batch --image` 测量“视觉编码 + 图像/文本 token prefill”的完整路径。下表使用 `input_len=2048`,TPS 为多次运行的 mean latency 计算结果。 + +| Device | Model | FP16 | W4A16 | W8A8 | +|---|---|---:|---:|---:| +| AGX Orin 32GB | Qwen3-VL-2B | 4875.75 | 4700.28 | 6443.59 | +| AGX Orin 32GB | Qwen3-VL-4B | - | 2499.46 | 3837.07 | +| Orin NX 16GB | Qwen3-VL-2B | 2438.27 | 2494.89 | 3200.40 | +| Orin NX 16GB | Qwen3-VL-4B | - | 1231.21 | 1673.93 | + ## Android Demo & Architecture 我们已对 Android 端实现进行了重构,采用了一种稳健的、完全在设备端运行的 **Client-Server** 架构。 @@ -75,17 +100,21 @@ mllm 框架可以与主流社区框架的模型检查点无缝集成。通过 ml ### mllm v2 -| Model(v2) | CPU | Hexagon NPU
INT8 | -|-----------------------------------------------------------------------------|------|-----------------------| -| [Qwen3-0.6B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-0.6B-w4a32kai) | | -| [Qwen3-1.7B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-1.7B-w4a8-i8mm-kai) | [W4A16-SM8650](https://modelscope.cn/models/mllmTeam/Qwen3-1.7B-Qnn-AOT-SM8650/summary) | -| [Qwen3-4B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-4B-w4a8-i8mm-kai) | | -| [DeepSeek-OCR](https://github.com/deepseek-ai/DeepSeek-OCR) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/DeepSeek-OCR-w4a8-i8mm-kai) | | -| [SmolLM3](https://huggingface.co/blog/smollm3)| [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/SmolLM3-3B-w4a8-i8mm-kai) | | -| [Qwen2-VL-2B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-2B-Instruct-w4a32kai) || -| [Qwen2-VL-7B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-7B-Instruct-w4a32kai)|| -| [Qwen2.5-VL-3B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-3B-Instruct-w4a32kai)|| -| [Qwen2.5-VL-7B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-7B-Instruct-w4a32kai)|| +| Model(v2) | CPU | Jetson Orin CUDA | Hexagon NPU
INT8 | +|-----------------------------------------------------------------------------|------|------------------|-----------------------| +| [Qwen3-0.6B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-0.6B-w4a32kai) | | | +| [Qwen3-1.7B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-1.7B-w4a8-i8mm-kai) | | [W4A16-SM8650](https://modelscope.cn/models/mllmTeam/Qwen3-1.7B-Qnn-AOT-SM8650/summary) | +| [Qwen3-4B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-4B-w4a8-i8mm-kai) | | | +| Qwen3.5-2B | | ✔️ W4A16 / W8A8 | | +| Qwen3.5-4B | | ✔️ W4A16 / W8A8 | | +| Qwen3-VL-2B-Instruct | | ✔️ W4A16 / W8A8 | | +| Qwen3-VL-4B-Instruct | | ✔️ W4A16 / W8A8 | | +| [DeepSeek-OCR](https://github.com/deepseek-ai/DeepSeek-OCR) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/DeepSeek-OCR-w4a8-i8mm-kai) | | | +| [SmolLM3](https://huggingface.co/blog/smollm3)| [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/SmolLM3-3B-w4a8-i8mm-kai) | | | +| [Qwen2-VL-2B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-2B-Instruct-w4a32kai) | | | +| [Qwen2-VL-7B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-7B-Instruct-w4a32kai) | | | +| [Qwen2.5-VL-3B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-3B-Instruct-w4a32kai) | | | +| [Qwen2.5-VL-7B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-7B-Instruct-w4a32kai) | | | ### mllm v1 diff --git a/README.md b/README.md index 8b77ae0ca..3459c2329 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ mllm ## Latest News +- [2026 Jun 08] `pymllm` now covers Qwen3, Qwen3-VL, and Qwen3.5 on Jetson Orin with W4A16 / W8A8 serving; Qwen3-VL-2B W8A8 reaches up to 3.12x prefill speedup on AGX Orin 32GB, while decode throughput stays broadly close to llama.cpp. +- [2026 Apr 30] `pymllm` adds Jetson-oriented Qwen3 / Qwen3-VL BF16, W4A16, and W8A8 serving support, including compressed-tensors AWQ and W8A8 INT8 paths. - [2026 Mar 18] 🔥🔥🔥 `pymllm` now supports CUDA on Jetson Orin and Jetson Thor devices (experimental; still under active development). - [2026 Feb 03] 🔥🔥🔥 MLLM Qnn AOT Support for Full Graph Execution on NPU! [Quick Start](https://ubiquitouslearning.github.io/mllm/qnn_backend/aot_execute.html), [Technical Report](https://chenghuawang.github.io/News/2026-01-29-mllm-qnn-aot-support-en/) - [2025 Nov 27] Android Demo Update: Enabled stable Qwen3 and DeepSeek-OCR streaming on Android via a novel In-App Go Server Architecture. @@ -28,6 +30,29 @@ mllm - A more refined engineering implementation - [2025 Jul 30] Add Rotation Quantization method for QNN backend models and support Qwen-2-VL 2B(ViT profiling will integrate in v2) +## Jetson Orin CUDA Runtime + +`pymllm` now supports Qwen3, Qwen3-VL, and Qwen3.5 on Jetson Orin with BF16 serving plus W4A16 and W8A8 quantized serving. The W4A16 path uses AWQ compressed tensors and Marlin GEMM. The W8A8 path uses Triton per-token activation quantization and CUTLASS INT8 GEMM. + +For `input_len=2048` and `output_len=128`, `pymllm` shows strong prefill gains over llama.cpp on Jetson Orin. Qwen3-VL-2B W8A8 reaches up to **3.12x prefill speedup** on AGX Orin 32GB and about **12243 tok/s** prefill throughput. Decode throughput is generally close to llama.cpp, with small wins or losses depending on model, device, and quantization. + +
+ +
+ +
+ +
+ +For multimodal prefill, `bench_one_batch --image` measures the full path of vision encoding plus image/text token prefill. The table below uses `input_len=2048` and reports mean TPS across repeated runs. + +| Device | Model | FP16 | W4A16 | W8A8 | +|---|---|---:|---:|---:| +| AGX Orin 32GB | Qwen3-VL-2B | 4875.75 | 4700.28 | 6443.59 | +| AGX Orin 32GB | Qwen3-VL-4B | - | 2499.46 | 3837.07 | +| Orin NX 16GB | Qwen3-VL-2B | 2438.27 | 2494.89 | 3200.40 | +| Orin NX 16GB | Qwen3-VL-4B | - | 1231.21 | 1673.93 | + ## Android Demo & Architecture We have refactored the Android implementation to use a robust **Client-Server** architecture entirely on-device. @@ -73,17 +98,21 @@ The mllm framework integrates seamlessly with popular community frameworks' chec ### mllm v2 -| Model(v1) | CPU | Hexagon NPU
INT8 | -|-----------------------------------------------------------------------------|------|-----------------------| -| [Qwen3-0.6B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-0.6B-w4a32kai) | | -| [Qwen3-1.7B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-1.7B-w4a8-i8mm-kai) | [W4A16-SM8650](https://modelscope.cn/models/mllmTeam/Qwen3-1.7B-Qnn-AOT-SM8650/) | -| [Qwen3-4B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-4B-w4a8-i8mm-kai) | | -| [DeepSeek-OCR](https://github.com/deepseek-ai/DeepSeek-OCR) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/DeepSeek-OCR-w4a8-i8mm-kai) | | -| [SmolLM3](https://huggingface.co/blog/smollm3)| [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/SmolLM3-3B-w4a8-i8mm-kai) | | -| [Qwen2-VL-2B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-2B-Instruct-w4a32kai) || -| [Qwen2-VL-7B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-7B-Instruct-w4a32kai)|| -| [Qwen2.5-VL-3B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-3B-Instruct-w4a32kai)|| -| [Qwen2.5-VL-7B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/)|[✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-7B-Instruct-w4a32kai)|| +| Model(v2) | CPU | Jetson Orin CUDA | Hexagon NPU
INT8 | +|-----------------------------------------------------------------------------|------|------------------|-----------------------| +| [Qwen3-0.6B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-0.6B-w4a32kai) | | | +| [Qwen3-1.7B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-1.7B-w4a8-i8mm-kai) | | [W4A16-SM8650](https://modelscope.cn/models/mllmTeam/Qwen3-1.7B-Qnn-AOT-SM8650/) | +| [Qwen3-4B](https://github.com/QwenLM/Qwen3) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen3-4B-w4a8-i8mm-kai) | | | +| Qwen3.5-2B | | ✔️ W4A16 / W8A8 | | +| Qwen3.5-4B | | ✔️ W4A16 / W8A8 | | +| Qwen3-VL-2B-Instruct | | ✔️ W4A16 / W8A8 | | +| Qwen3-VL-4B-Instruct | | ✔️ W4A16 / W8A8 | | +| [DeepSeek-OCR](https://github.com/deepseek-ai/DeepSeek-OCR) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/DeepSeek-OCR-w4a8-i8mm-kai) | | | +| [SmolLM3](https://huggingface.co/blog/smollm3)| [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/SmolLM3-3B-w4a8-i8mm-kai) | | | +| [Qwen2-VL-2B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-2B-Instruct-w4a32kai) | | | +| [Qwen2-VL-7B-Instruct](https://qwenlm.github.io/zh/blog/qwen2-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2-VL-7B-Instruct-w4a32kai) | | | +| [Qwen2.5-VL-3B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-3B-Instruct-w4a32kai) | | | +| [Qwen2.5-VL-7B-Instruct](https://qwenlm.github.io/blog/qwen2.5-vl/) | [✔️ w4a8](https://www.modelscope.cn/models/mllmTeam/Qwen2.5-VL-7B-Instruct-w4a32kai) | | | ### mllm v1 diff --git a/assets/jetson/pymllm-jetson-prefill-throughput-2048.jpg b/assets/jetson/pymllm-jetson-prefill-throughput-2048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ea55c57f7fb87324577444c7bd824f67ffb80df GIT binary patch literal 363270 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

_nWpW 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�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

c=t~fbAucvBX6OK!6B+7jI3L)NX2P7@(h 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 HKP&$Q%>R6g literal 0 HcmV?d00001 diff --git a/assets/jetson/pymllm-jetson-speedup-summary-2048.jpg b/assets/jetson/pymllm-jetson-speedup-summary-2048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3f79aa3cc8625348f83d57b68565d767787a50c GIT binary patch literal 355032 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

17tSjA$GrB3gtM5Tz_2EHk(^&`b@Sq%&5Kq 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
t$p*A@%ZTZIYz-221hUR5oF^Wh#pM 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 literal 0 HcmV?d00001 From 32662c0c494a752e4bd253b287e8b9f567e9ce27 Mon Sep 17 00:00:00 2001 From: jialilve <3485723235@qq.com> Date: Mon, 8 Jun 2026 16:20:28 +0000 Subject: [PATCH 21/21] docs(pymllm): fix benchmark prompt typo --- pymllm/bench_one_batch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymllm/bench_one_batch.py b/pymllm/bench_one_batch.py index 6512310a6..190f92434 100644 --- a/pymllm/bench_one_batch.py +++ b/pymllm/bench_one_batch.py @@ -1217,7 +1217,7 @@ def run_benchmark(cfg: GlobalConfig, args: BenchArgs) -> list[dict[str, Any]]: DEFAULT_CORRECTNESS_PROMPTS = ( "The capital of France is", - "The capital of the United Kindom is", + "The capital of the United Kingdom is", "Today is a sunny day and I like", )