news 2026/5/22 13:01:58

【vLLM-Ascend】 ModelRunner架构解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【vLLM-Ascend】 ModelRunner架构解析

作者:昇腾实战派

ModelRunner总览结构图

1.核心功能概述

  • 模型加载与编译 ​​:支持模型的加载、LoRA适配、以及使用torch.compile进行优化。
  • KV缓存管理 ​​:初始化和管理键值(KV)缓存,用于加速注意力机制中的计算。
  • 图捕获与优化 ​​:通过torchair或ACL Graph进行NPU图捕获,以提升推理效率。
  • 请求调度与状态更新 ​​:处理来自调度器的输出,并更新模型内部的状态。
  • 多模态支持 ​​:支持多模态输入(如图像、文本等),并进行相应的嵌入处理。

2.类结构分析

class NPUModelRunner

该类是整个模块的核心,继承自LoRAModelRunnerMixin,提供了以下关键方法:

  • ​**__init__**​:初始化配置参数、设备设置、模型相关参数、缓存配置等。
  • ​**_update_states**​:根据调度器输出更新模型内部状态。
  • ​**execute_model**​:执行模型推理流程,包括前向传播、采样生成、日志概率计算等。
  • ​**load_model**​:加载模型权重并应用LoRA适配。
  • ​**initialize_kv_cache**​:初始化KV缓存。
  • ​**capture_model**​:捕获NPU图,优化推理性能。
  • ​**profile_run**​:对模型进行性能分析,特别是多模态输入的处理。

3. 主要方法解析

1._update_states(self, scheduler_output: "SchedulerOutput")

  • 根据调度器输出更新模型内部状态。
  • 移除已完成的请求,添加新请求。
  • 更新每个请求的已生成 token 数量、块 ID 等信息。
  • 刷新采样元数据(sampling metadata)。

2.execute_model(...)

这是整个推理流程的核心函数,负责:

  1. 更新状态

    self._update_states(scheduler_output)

  2. 处理请求

    (attn_metadata, hidden_states, spec_decode_metadata, positions,

    num_scheduled_tokens, sample_indices) = self._process_reqs(…)

  3. 前向传播

    logits = self.model.compute_logits(hidden_states[sample_indices],None)

  4. 应用结构化输出约束

    ifscheduler_output.grammar_bitmaskisnotNone:

    logits = self.apply_grammar_bitmask(scheduler_output, logits)

  5. 采样下一个 token
    sampling_metadata = self.input_batch.sampling_metadata
    sampler_output = self.sampler(logits=bonus_logits, sampling_metadata=sampling_metadata)

  6. 构建输出结果
    model_runner_output = ModelRunnerOutput(…)


3.apply_grammar_bitmask(...)

  • 作用 ​​:对 logits 应用结构化输出约束(bitmask),防止生成非法 token。
  • 原理 ​​:
    • 输入一个 bitmask,表示哪些 token 是允许的。
    • 将不符合语法规则的 token 对应的 logit 设为负无穷。
    • 使用 xgrammar 提供的 C++ 实现,保证性能。
  • 数据拷贝 ​​:
    • xgrammar 只支持 CPU 和 float32 类型的 logits。
    • 所以先将 logits 拷贝到 CPU 并转换为 float32,处理完后再拷贝回 GPU。

4._process_reqs(...)

  • 作用 ​​:准备输入数据(位置编码、注意力掩码等)。
  • 流程 ​​:
    1. 获取每个请求的 scheduled token 数量。
    2. 构造位置编码(positions)。
    3. 构造 slot_mapping(用于索引缓存块)。
    4. 构造 attention mask。
    5. 构造 attention metadata。
    6. 执行模型前向传播。

5.initialize_kv_cache(...)/get_kv_cache_spec(...)

  • 作用 ​​:初始化 KV 缓存。
  • 实现方式 ​​:
    • 每个注意力层分配内存空间。
    • 支持不同的 KV 缓存格式(如FullAttentionSpec)。
    • 使用bind_kv_cache将缓存绑定到模型中。

6.capture_model()

  • 作用 ​​:通过torchairACL Graph进行图捕获,提升推理效率。
  • 流程 ​​:
    • 对不同 batch size 运行 dummy run。
    • 编译图模式。
    • 记录消耗时间和显存。

7.profile_run()/_dummy_run(...)

  • 作用 ​​:对模型进行性能分析,特别是多模态输入的处理。
  • 流程 ​​:
    1. 构造 dummy 输入。
    2. 执行一次前向传播。
    3. 清理缓存。

4. 其他重要方法

方法名说明
load_model()加载模型权重并应用 LoRA 适配
get_model()返回当前模型
_get_spec_token_ids(...)生成推测解码所需的 token ID
_generate_draft_token_ids(...)使用 ngram 等策略生成 draft tokens
_generate_mtp_token_ids(...)使用 deepseek_mtp 等策略生成 draft tokens

5. NPU modelrunner 流程图

这是整个NPU modelrunner 的流程图,上图中步骤1-5为主模型推理,6为主模型验证,7.0-7.3为MTP模型推理。此次主要适配内容为主模型验证和mtp模型推理。
如果未配置MTP可以忽略整个第7阶段。
整个MTP的推理流程主要分为三个阶段:主模型推理、主模型验证、mtp模型推理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 13:01:56

DNS劫持检测与修复:完整操作步骤分享

在日常网络访问中,你是否遇到过输入熟悉网址却跳转到陌生广告页面、搜索引擎结果被篡改,或是频繁弹出无关弹窗的情况?这些异常很可能是DNS劫持在作祟。DNS劫持会篡改域名解析结果,不仅影响正常上网体验,还可能带来钓鱼…

作者头像 李华
网站建设 2026/5/22 13:00:37

2026年词语:闽梅失淳

定义:闽梅失淳 闽梅失淳是指:本是天然清甜的福建本土杨梅,沦为药水果,丢了原本淳朴口感与品质。 背景 2026 年 5 月中旬,福建漳州龙海浮宫镇、白水镇(全国知名早熟杨梅主产区)被媒体暗访曝光&am…

作者头像 李华
网站建设 2026/5/22 13:00:09

MultiHighlight插件:让代码阅读不再痛苦的终极解决方案

MultiHighlight插件:让代码阅读不再痛苦的终极解决方案 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors 🎨💡 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight 你是否…

作者头像 李华
网站建设 2026/5/22 13:00:03

服务雪崩、降级、熔断与服务保护

微服务系统最怕的不是一个服务失败,而是一个服务失败后,调用方一直等待、重试、堆积线程,最后把整条链路拖垮。这就是服务雪崩。 一句话概括:服务雪崩是故障沿调用链扩散;服务降级是给用户一个兜底结果;服务…

作者头像 李华
网站建设 2026/5/22 12:51:05

Claude CLI 缓存陷阱:为什么用第三方模型时 token 会暴涨 10 倍?

一个开发者的真实经历 上周,我收到一位朋友的微信: “我用 Claude Code 接 DeepSeek API,明明代码没怎么变,token 消耗却突然涨了好几倍,一天就把额度用完了。” 这个情况不是个例。在 GitHub 上,至少有 80 多个相关 issue,核心问题都指向同一个点——Claude CLI 默认…

作者头像 李华
网站建设 2026/5/22 12:51:04

为什么AI终于能进车间了?从聊天工具到生产力,这三件事正在发生

中石化车间里的AI 2026年5月,中石化发布了"烽火"工业智能体。 这个智能体不是用来聊天的,而是能直接操作工业软件、分析生产数据、跑仿真。它是石油化工行业第一个真正能进车间的数字专家。 在这之前,AI在工业场景里的应用,大多停留在"数据分析"层面…

作者头像 李华