已合并
【msserviceprofiler】【需求】【Tracing 2/3】接入vLLM Hook Tracing埋点并支持Jaeger链路展示 #447
【msserviceprofiler】【需求】【Tracing 2/3】接入vLLM Hook Tracing埋点并支持Jaeger链路展示 #447
已合并
ChaseChe77创建于 6 天前
ChaseChe77
ChaseChe77成员
6 天前

PR 合入模板

1. 修改描述

  • 修改原因:
    PR #446 已提供 OpenTelemetry Hook Tracing 基础能力,但尚未接入 vLLM/vLLM-Ascend 业务函数,无法生成包含请求、调度、模型执行和输出处理语义的 Hook Span。

    本 PR 作为 Tracing 系列第二部分,在不修改 vLLM IPC、不侵入 vLLM/vLLM-Ascend 源码、不影响原有 Profiling 能力的前提下,通过现有 Hook 机制接入 vLLM 业务埋点,并复用 vLLM 全局 OpenTelemetry Provider,将 Hook Span 通过 vLLM 配置的 OTLP Endpoint 导出至 Jaeger。

    前置 PR:Tracing 1/3:新增 OpenTelemetry Hook Tracing 基础能力

  • 修改内容:

    1. 新增 trace_hook.py,提供独立的 Tracing Around Hook:

      • 支持同步和异步业务函数。
      • 支持 callrequestrequest_contextschedulemodeloutput 等语义适配器。
      • 支持 Span 名称、Domain、SpanKind 和适配器的声明式配置。
      • 业务函数异常时记录失败状态并继续抛出原异常,不改变原函数行为。
    2. 扩展现有 Hook 配置加载能力:

      • 在原有 Profiling YAML 条目中增加可选 trace 字段。
      • Tracing 关闭时保持原有 Profiling 配置解析和 Handler 行为。
      • Trace-only 模式下不加载、不执行原有 Profiling Handler。
      • 同一个 Symbol 仅允许一个有效 Tracing Wrapper,避免重复埋点。
      • 非法 Tracing 配置记录告警并跳过,不影响业务进程启动。
    3. 在内置 service_profiling_symbols.yaml 中增加当前 vLLM/vLLM-Ascend 埋点:

      • vllm.request
      • vllm.scheduler.schedule
      • vllm.model.execute
      • vllm_ascend.model_runner.execute
      • vllm.output.process
    4. 复用 vLLM 原生 Tracing 上下文:

      • 从 vLLM 已有 trace_headers 获取 W3C Trace Context。
      • 使用 vLLM 已有 request_id 关联请求、调度和模型执行 Span。
      • 不新增或修改 vLLM IPC 协议。
      • 不自行创建 OpenTelemetry Provider,复用 vLLM 全局 Provider及 OTLP Exporter。
    5. 隔离 Tracing 与原有 Profiling 生命周期:

      • MS_TRACE_ENABLE=1 单独控制 Hook Tracing。
      • Trace-only 模式不初始化 Profiling Metrics 和业务 Handler。
      • Profiling 停止后,如 Tracing 仍开启,则仅保留 Tracing Hook。
      • Profiling 与 Tracing 同时开启时复用同一 Symbol Hook 链,避免重复 Hook。
      • Tracing 关闭时不改变现有 Profiling 启停流程。
    6. 根据前置 PR 检视意见补充可靠性修复:

      • 使用 itertools.islice 限制 Request ID 可迭代对象的消费数量,避免完整展开超大可迭代对象。
      • Perfetto Processor 仅在注册成功后记录 Provider。
      • Processor 注册失败增加退避重试,恢复后允许自动重新注册。
      • Processor 构造或注册失败保持 fail-open,不影响 Jaeger 和推理主链路。
    7. 补充 UT,覆盖:

      • Tracing 配置解析和非法配置降级。
      • 同步、异步 Hook Wrapper。
      • Request Context 注册和释放。
      • Scheduler、Model、Output 语义提取。
      • Trace-only、Profiling-only 和二者同时开启。
      • Profiling 停止后 Tracing Hook 保留。
      • 重复 Symbol 去重。
      • Request ID 迭代数量限制。
      • Perfetto Processor 注册失败、退避及恢复重试。

2. 功能验证

    • PR2 相关 UT:49 passed
    • PR2 涉及文件 pre-commit 全部通过。
    • PR2 变更量:837 insertions + 52 deletions = 889,低于 1000 行限制。
    • 已在真实 vLLM-Ascend/NPU 环境中启动 vLLM 原生 Tracing,并配置 OTLP Endpoint 对接 Jaeger。
    • 已通过真实推理请求验证 Hook Span 能够写入 Jaeger。
    • Jaeger 中能够查询并展示 vllm.scheduler.schedulevllm.model.execute 等 Hook Span。
    • Tracing 异常日志检查未发现 errorfailedexceptionunavailable 或数据丢弃告警。
  • image.png

image.png

    • 已在真实 vLLM-Ascend/NPU 环境通过 vllm serve 启动服务。
    • 已发送真实推理请求并确认请求成功。
    • 已确认 Jaeger 能够查询到 vLLM 原生 Span 和 msserviceprofiler Hook Span。
    • 未发现 Tracing 导致 vLLM 启动失败、请求失败或原有 Profiling 流程异常。

3. 代码检视

  • 要求:

    • 合入代码大于 200 行,需三人以上会议检视。
    • 检视密度≥2个/100行。
    • 检视缺陷密度达不到要求的需给出说明。
    • 大于 1000 行代码原则上不允许合入,需进行备案。
    • 新增和扩展 UT 覆盖正常、关闭态、异常、边界、兼容及恢复场景。
    • 当前 PR 相关测试执行结果为 49 passed

4. 安全自检

典型安全编码问题

    • trace 配置校验名称、Domain、SpanKind 和 Adapter 类型。
    • 非法配置记录告警并跳过。
    • Trace Headers 由 OpenTelemetry W3C Propagator 解析。
    • Request ID、Span Link 和属性数量均设置上限。
    • 已处理 Trace Headers、Request ID、Scheduler Output、Engine Output、Span、Provider 和 Processor 为空的场景。
    • 已校验 Span 创建、Context 注册、Processor 注册和 Hook 安装结果。
    • Tracing 创建失败时返回 No-op Span,不影响原函数调用。
    • 本 PR 不新增落盘文件。
    • Jaeger 数据通过 vLLM 已配置的 OTLP Endpoint 导出,不新增本地文件权限配置。
    • 已覆盖非法 YAML、业务函数异常、OpenTelemetry Provider 缺失、Processor 构造失败、Processor 注册失败、Trace Context 无效及 Tracing 关闭等场景。
    • 异常场景采用 fail-open 策略,不影响推理主链路。
    • 配置错误和 Provider 缺失记录 warning。
    • Span、Processor 和上下文处理异常记录 debug/warning。
    • 日志不记录完整请求内容及 Trace Headers。
    • 本 PR 不涉及新增正则表达式。
    • 本 PR 不涉及除法运算。
    • Request Context 缓存、Request ID、Span Link、属性数量和字符串长度均设置明确上限。

5. 变更知会

  • 资料修改:

    • 本 PR 不新增独立资料文档。
    • Tracing 详细设计已随前置 PR #446 合入。
    • 完整用户使用指导和 Perfetto 导出说明由后续 Tracing 3/3 PR 提供。
    • 本 PR 更新内置 service_profiling_symbols.yaml,增加 vLLM/vLLM-Ascend Tracing 业务埋点配置。
  • 变更通知(消息知会 + 邮件知会):


6. 冒烟修改

  • PR 来源:

    • Trace-only、Profiling-only、组合开启、真实 vLLM 请求和 Jaeger 展示场景均已有 UT 或真实环境验证。
    • 后续在具备 vLLM-Ascend、NPU 和 OTLP Collector/Jaeger 环境的流水线中增加真实链路冒烟。
    • 冒烟至少验证 vLLM 服务正常启动、推理请求成功、Jaeger 可查询 Hook Span,并确认 Tracing 失败不影响推理请求。
likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 ChaseChe77 的贡献)
ChaseChe77ChaseChe77成员
6 天前 关联了里程碑:MindStudio 26.2.0
ChaseChe77ChaseChe77成员
6 天前 关联了issue:[Feature]: 【推理】【DFX专项】【易用性】支持通过Hook机制实现自定义tracing埋点
atomgit-bot
atomgit-bot成员
6 天前 评论:

变更摘要

本 PR(Tracing 系列 2/3)在既有 OpenTelemetry Hook Tracing 基础能力之上,通过现有 Hook 机制接入 vLLM/vLLM-Ascend 业务埋点:新增独立的 Tracing Around Hook,扩展现有 Profiling YAML 配置解析以支持 trace 字段与 Trace-only 模式,并复用 vLLM 全局 OpenTelemetry Provider,将 Hook Span 经 vLLM 配置的 OTLP Endpoint 导出至 Jaeger,全程不修改 vLLM IPC、不侵入其源码、不影响原有 Profiling 能力。

主要改动

  • 新增 trace_hook.py Tracing Around Hook: 提供 HookTraceSpecparse_hook_trace_specmake_trace_around_factory,支持同步/异步函数及 callrequestrequest_contextschedulemodeloutput 语义适配器,支持 Span 名称、Domain、SpanKind 的声明式配置;业务函数异常时记录失败状态并原样抛出原异常,不改变原函数行为。
  • 扩展配置加载以支持 Trace-only 模式: ConfigLoader.load_profiling 新增 enable_profiling/enable_tracing 参数,Profiling YAML 条目可带可选 trace 字段;Trace-only 模式下不解析、不执行原 Profiling Handler(_profiling_noop_handler),非法 Tracing 配置告警跳过、同一 Symbol 的重复 Tracing 定义去重,Tracing 关闭时保持原有 Profiling 行为不变。
  • 隔离 Tracing 与 Profiling 生命周期: VLLMProfiler 新增 _profiling_requested/_profiling_active/_tracing_requested 状态,由 MS_TRACE_ENABLE=1 单独控制 Hook Tracing;Trace-only 模式不初始化 Metrics、不导入业务 Handler(register_service_profiler 提前返回),Profiling 停止后通过自定义 on_start/on_stop 回调保留 Tracing Hook。
  • 内置 YAML 增加 vLLM/vLLM-Ascend 埋点: service_profiling_symbols.yamlvllm.request(SERVER)、vllm.scheduler.schedulevllm.model.executevllm_ascend.model_runner.executevllm.output.process 配置 trace 语义;trace_hook.pytrace_headers 获取 W3C Trace Context,并用 request_id 关联请求、调度和模型执行 Span。
  • 可靠性修复与 UT 补充: hook_runtime.py 改用 itertools.islice 限制 Request ID 可迭代对象的消费数量;otel_hook.py 的 Perfetto Processor 仅在注册成功后记录 Provider,注册失败按 5 秒退避重试并保持 fail-open;module_hook.py 确保业务异常不被当作埋点失败重试而原样抛出。新增/扩展 test_hook_tracing.pytest_otel_hook.pytest_module_hook.py 覆盖 Trace-only、组合开启、去重及恢复重试等场景。
likedislike
atomgit-bot
atomgit-bot成员
6 天前 评论:

代码审查

✅ 未发现问题

likedislike
ascend-robotascend-robot成员
6 天前 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
6 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-Ascend/msserviceprofiler 刘鹏程, mei-feiyao (2/2) 刘鹏程 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

Mad97_, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ChaseChe77
ChaseChe77成员
6 天前 评论:

compile

likedislike
AtlasAccountAtlasAccount成员
6 天前 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
6 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robot
ascend-robot成员
6 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
6 天前 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
6 天前 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
6 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
6 天前 添加了label:docs-ci-pipeline-success
ascend-robot
ascend-robot成员
6 天前 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
AtlasAccountAtlasAccount成员
6 天前 删除了label:ci-pipeline-running
AtlasAccountAtlasAccount成员
6 天前 添加了label:ci-pipeline-passed
AtlasAccount
AtlasAccount成员
6 天前 评论:
流水线 PR-pipeline_msserviceprofiler#1243 [ commitID:3f0f60b5 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_msserviceprofiler_arm >>>
Build_msserviceprofiler_x86 >>>
Docs_msserviceprofiler >>>
恶意代码检查 Antipoison_msserviceprofiler >>>
编码安全与规范检查 codecheck_pre-commit >>>
pre-commit >>>
开源片段检查 SCA_msserviceprofiler >>>
开发者测试 UT_msserviceprofiler >>>
流水线 PR-pipeline_msserviceprofiler >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
mei-feiyao
mei-feiyao成员
6 天前 评论:

/lgtm

likedislike
leo920320成员
5 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
5 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
5 天前 合入了pull request