Skip to content

feat(deps): pip dep unification + cu126/dead-config cleanup + WORKSPA…#1124

Open
baohengyi wants to merge 60 commits into
alibaba:mainfrom
baohengyi:feature/pip_unify_v2
Open

feat(deps): pip dep unification + cu126/dead-config cleanup + WORKSPA…#1124
baohengyi wants to merge 60 commits into
alibaba:mainfrom
baohengyi:feature/pip_unify_v2

Conversation

@baohengyi

Copy link
Copy Markdown

Summary

Continues from #962

…CE/utils fixes

Squashed roll-up of the pip-unification work for the opensource side.

Strict separation invariant (Phase 2):

  • Opensource builds may only consume mirrors.aliyun.com/pypi/simple/ + rtp-opensource OSS + download.pytorch.org/whl//.
  • Internal builds may only consume artlab.alibaba-inc.com + rtp-opensource OSS.
  • The rtp-opensource OSS bucket is the SINGLE shared mirror for RTP-LLM custom wheels (flash_attn, deep_ep, deep_gemm, flashinfer_*, rtp_kernel, etc.) — same URL serves both sides.

Build cfg cleanup:

  • Drop cuda12 (cu126/torch2.6) build path entirely; cuda12_9 (cu129/torch2.8) is now the canonical x86 GPU build. cuda_pre_12_9 config_setting + every select branch that used it removed (latent ABI mismatch: cu126 native libs with torch 2.8 Python deps from the cu129 pip_parse).
  • Drop using_arm / using_cpu config_settings + their select branches — --config=arm / --config=cpu bazelrc entries were removed with the lockfiles so the [] branches were unreachable and default branches (decord, xfastertransformer_devel) silently applied.
  • Drop dead pip_ppu_torch lockfile registration from opensource pip.bzl (no using_ppu select branch in opensource arch_select.bzl).
  • Drop unused cu126 + cpu --extra-index-url from opensource pip.bzl — halves per-package query surface against download.pytorch.org and reduces regen timeout flakiness.
  • Drop CPU-only and ARM-CPU build paths (requirements_torch_cpu.txt, requirements_torch_arm.txt, requirements_cpu_arm.txt) — no bazel cfg wires them up anymore.
  • Drop build:cuda12_2 / build:cuda12_6 from .bazelrc; retarget multi-node perf test scripts/yaml + 5 docs (install/benchmark/debug/profiling/3fs) to --config=cuda12_9.
  • Delete torch_2.6_py310_cuda http_archive + cuda_pre_12_9 branch in BUILD.pytorch linkopts.

Shared-wheel hygiene:

  • aarch64 wheels retagged manylinux_2_28_aarch64 (uv refuses bare linux_aarch64 under aarch64-manylinux python-platform) and uploaded to OSS for direct version-pin.
  • URL-pin patched wheels to OUR OSS so resolver can't silently swap to an upstream copy with different bytes (flash_attn 2.8.3+cu12torch2.8cxx11abiTRUE, flashinfer-python 0.6.6, flashinfer-cubin 0.6.6 — we host patched variants).
  • nvidia-cutlass-dsl pinned 4.4.1 (latest on artlab; hash matches across artlab + aliyun mirror); pulls libs-base==4.4.1 transitive.

Whl_deps tightening:

  • whl_deps() select key changed from :using_cuda12 → :using_cuda12_9_x86 + default. The :using_cuda12 key over-matched every CUDA variant (cuda12_9 inherits build:cuda12 which sets using_cuda12=true), so cu129 wheels were baking torch==2.6.0+cu126 into install_requires.

WORKSPACE/pip stub:

  • WORKSPACE unconditionally calls pip_ppu_torch_install_deps(). Internal builds satisfy that via --override_repository=rtp_deps but opensource builds don't — so opensource-only builds errored 'Failed to load Starlark extension @pip_ppu_torch//:requirements.bzl'. Register pip_ppu_torch in opensource pip.bzl as a lazy alias of the cuda12_9 lockfile (pip_parse is lazy, no opensource select depends on it, so no PPU wheel is ever fetched).

py_library deps:

  • //rtp_llm:utils now declares :aiohttp. utils/util.py imports aiohttp but the target had no pip dep — surfaced as ModuleNotFoundError on ut-sm8x's util_test + duplicated_kv_test once the strict py_test runfiles sandbox started enforcing it.

Verified end-to-end on Aone CI pipeline 1346, run 39069908: all 28 jobs SUCCESS (cuda12_9 / cuda12_9_arm / amd / ppu / frontend builds + ut + smoke + perf + open_source variants).

@baohengyi baohengyi requested a review from LLLLKKKK as a code owner June 22, 2026 02:21
…CE/utils fixes

Squashed roll-up of the pip-unification work for the opensource side.

Strict separation invariant (Phase 2):
- Opensource builds may only consume mirrors.aliyun.com/pypi/simple/ +
  rtp-opensource OSS + download.pytorch.org/whl/<cfg>/.
- Internal builds may only consume artlab.alibaba-inc.com + rtp-opensource OSS.
- The rtp-opensource OSS bucket is the SINGLE shared mirror for RTP-LLM
  custom wheels (flash_attn, deep_ep, deep_gemm, flashinfer_*, rtp_kernel,
  etc.) — same URL serves both sides.

Build cfg cleanup:
- Drop cuda12 (cu126/torch2.6) build path entirely; cuda12_9 (cu129/torch2.8)
  is now the canonical x86 GPU build. cuda_pre_12_9 config_setting + every
  select branch that used it removed (latent ABI mismatch: cu126 native libs
  with torch 2.8 Python deps from the cu129 pip_parse).
- Drop using_arm / using_cpu config_settings + their select branches —
  --config=arm / --config=cpu bazelrc entries were removed with the lockfiles
  so the [] branches were unreachable and default branches (decord,
  xfastertransformer_devel) silently applied.
- Drop dead pip_ppu_torch lockfile registration from opensource pip.bzl
  (no using_ppu select branch in opensource arch_select.bzl).
- Drop unused cu126 + cpu --extra-index-url from opensource pip.bzl —
  halves per-package query surface against download.pytorch.org and
  reduces regen timeout flakiness.
- Drop CPU-only and ARM-CPU build paths (requirements_torch_cpu.txt,
  requirements_torch_arm.txt, requirements_cpu_arm.txt) — no bazel cfg
  wires them up anymore.
- Drop build:cuda12_2 / build:cuda12_6 from .bazelrc; retarget multi-node
  perf test scripts/yaml + 5 docs (install/benchmark/debug/profiling/3fs)
  to --config=cuda12_9.
- Delete torch_2.6_py310_cuda http_archive + cuda_pre_12_9 branch in
  BUILD.pytorch linkopts.

Shared-wheel hygiene:
- aarch64 wheels retagged manylinux_2_28_aarch64 (uv refuses bare
  linux_aarch64 under aarch64-manylinux python-platform) and uploaded to OSS
  for direct version-pin.
- URL-pin patched wheels to OUR OSS so resolver can't silently swap to an
  upstream copy with different bytes (flash_attn 2.8.3+cu12torch2.8cxx11abiTRUE,
  flashinfer-python 0.6.6, flashinfer-cubin 0.6.6 — we host patched variants).
- nvidia-cutlass-dsl pinned 4.4.1 (latest on artlab; hash matches across
  artlab + aliyun mirror); pulls libs-base==4.4.1 transitive.

Whl_deps tightening:
- whl_deps() select key changed from :using_cuda12 → :using_cuda12_9_x86 +
  default. The :using_cuda12 key over-matched every CUDA variant
  (cuda12_9 inherits build:cuda12 which sets using_cuda12=true), so cu129
  wheels were baking torch==2.6.0+cu126 into install_requires.

WORKSPACE/pip stub:
- WORKSPACE unconditionally calls pip_ppu_torch_install_deps(). Internal
  builds satisfy that via --override_repository=rtp_deps but opensource
  builds don't — so opensource-only builds errored 'Failed to load
  Starlark extension @pip_ppu_torch//:requirements.bzl'. Register
  pip_ppu_torch in opensource pip.bzl as a lazy alias of the cuda12_9
  lockfile (pip_parse is lazy, no opensource select depends on it, so
  no PPU wheel is ever fetched).

py_library deps:
- //rtp_llm:utils now declares :aiohttp. utils/util.py imports aiohttp
  but the target had no pip dep — surfaced as ModuleNotFoundError on
  ut-sm8x's util_test + duplicated_kv_test once the strict py_test
  runfiles sandbox started enforcing it.

Verified end-to-end on Aone CI pipeline 1346, run 39069908: all 28 jobs
SUCCESS (cuda12_9 / cuda12_9_arm / amd / ppu / frontend builds + ut +
smoke + perf + open_source variants).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@baohengyi baohengyi force-pushed the feature/pip_unify_v2 branch from d0a6fd8 to 43c2d4b Compare June 22, 2026 03:21
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/3 · P3/0

Blocking Issues

P1

  • 删除 config_setting 后仍有 select 引用导致 Bazel 分析失败 @ rtp_llm/BUILD:227
    • 建议:同步删除这两个 select 分支,或在根 BUILD 恢复对应 config_setting,保证所有引用可解析。

Non-blocking Suggestions

P2

  • CUDA/ROCm 共用 PyTorch extra-index 会增加依赖解析请求 @ deps/pip.bzl:27
    • 建议:拆成 CUDA/ROCm 专用 extra_args;CUDA lock/pip_parse 只带 cu129,ROCm 只带 rocm7.2,保留 PyPI 与 rtp-opensource 公共源。
  • XQA batch decode 覆盖被整体注释 @ rtp_llm/models_py/kernels/cuda/test/BUILD:61
    • 建议:恢复 py_test target;若暂时不稳定,保留 target 并加 manual/open_skip 或明确跳过条件,避免性能关键 decode 路径失去可发现覆盖。
  • multi_runner 参数校验会漏掉缺失变量 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:140
    • 建议:在生成 GANG_CONFIG_STRING 前初始化 START_PORT,并修正 test 表达式为 [ -z "$TP_SIZE" ] / [ -z "$MODEL_TYPE" ]。

Checklist ✅ (25 items passed)

Strengths

  • 删除旧 CPU、cuda12.6 相关 pip_parse 与 lockfile,减少 WORKSPACE 外部仓库数量和依赖解析面。
  • 文档中的构建、benchmark、profiling 示例统一到 cuda12_9,避免继续引导用户走旧 CUDA 配置。
  • 依赖源显式覆盖环境 PIP_INDEX_URL,降低误走内网源导致的解析不稳定风险。
  • 依赖入口从已删除的 cuda12_6/cpu/arm-cpu 配置收敛到 cuda12_9、cuda12_arm、rocm 三组,deps/BUILD 与 pip.bzl 中剩余 pip_parse 名称和 lockfile 路径一致。
  • 文档中本 shard 覆盖的 bazel 命令已同步更新为 --config=cuda12_9。
  • pip.bzl 显式覆盖默认 index,降低从私有源静默解析依赖的风险。
  • 保留 per-config lockfile 和 hash pinning,依赖解析失败会更早暴露。
  • 文档中的 cuda12_6 示例已同步为当前保留的 cuda12_9 配置。
  • 构建配置整体收敛到 cuda12_9,减少了 pre-12.9 分支选择复杂度。
  • WORKSPACE 增加 rtp_opensource_deps 稳定句柄,有助于内部 overlay 复用开源依赖声明。

@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/4 · P2/3 · P3/0

Blocking Issues

P1

  • cuda12_9_arm 会落到非 ARM 专用 Torch 依赖 @ arch_config/arch_select.bzl:78
    • 建议:给 using_cuda12_arm 单独选择 @pip_cuda12_arm_torch 的 requirement,并给 torch_deps 配套 ARM Torch repo/别名;否则移除或禁用 cuda12_9_arm 入口。
  • cuda12_9_arm 误落到 x86 CUDA 依赖 @ arch_config/arch_select.bzl:16
    • 建议:为 @rtp_llm//:using_cuda12_arm 增加 requirement_cuda12_arm 分支,并让 torch_deps 接入 ARM CUDA torch;若暂不支持则对 cuda12_9_arm fail fast。
  • 移除 av 依赖后 BUILD 仍强制引用 :av @ rtp_llm/BUILD:61
    • 建议:如果 av 已移除,请同步从 arch_dep 和 requirement 列表删除;如果仍需要,请恢复对应 lock/requirements 中的 av。
  • cuda12_9_arm 未使用专用 ARM pip 依赖 @ arch_config/arch_select.bzl:15
    • 建议:为 @rtp_llm//:using_cuda12_arm 增加显式 requirement/whl_deps/torch_deps 分支,指向 ARM lock 和匹配的 torch 版本/归档。

Non-blocking Suggestions

P2

  • XQA batch decode 覆盖被注释掉 @ rtp_llm/models_py/kernels/cuda/test/BUILD:61
    • 建议:恢复该 py_test;如果稳定性或耗时有问题,保留目标并加 manual/open_skip 或拆分长耗时 CUDA graph 用例。
  • XQA batch decode 回归测试被整体移除 @ rtp_llm/models_py/kernels/cuda/test/BUILD:62
    • 建议:恢复该 py_test;如依赖只支持 cuda12_9,可保留 select 并加 manual/skip 条件,而不是注释掉 target。
  • CUDA/ROCm 共用 extra-index 增加依赖解析请求 @ deps/pip.bzl:27
    • 建议:拆成公共 extra_args 加 CUDA/ROCm 专用 extra_args;CUDA 只带 cu129,ROCm 只带 rocm7.2。

Checklist ✅ (25 items passed)

Strengths

  • 旧 cuda12_6/cpu/ARM-CPU 配置被收敛后,pip 解析和依赖矩阵更简单。
  • multi-node benchmark 默认构建参数同步到 cuda12_9,和新的主 CUDA 配置保持一致。
  • 旧的 cuda12_6 调用点已统一切到 cuda12_9,配置矩阵更收敛。
  • WORKSPACE 新增稳定的 rtp_opensource_deps 句柄,有助于 internal override 后继续引用开源 deps。
  • 删除 cuda_pre_12_9、using_cpu、using_arm 后,全仓未发现 BUILD 选择器里的悬挂引用。
  • 多节点 perf 默认构建参数已从 cuda12_6 同步到 cuda12_9。
  • 测试 BUILD 中旧 cuda_pre_12_9 分支清理较一致。
  • deps/BUILD、deps/pip.bzl 中剩余 pip_parse 与 lockfile 名称保持一致,旧 CPU/cuda12.6 入口已收敛。
  • 本 shard 覆盖的安装、benchmark、debug、profiling 文档已从 cuda12_6 同步到 cuda12_9。
  • pip 源显式设置 index-url,降低环境变量把开源依赖解析导向非预期源的风险。

…ngling :av reference

- arch_select.bzl: load @pip_cuda12_arm_torch requirement and add
  using_cuda12_arm select branch to requirement() so ARM builds resolve
  to the ARM lockfile instead of falling through to x86 cuda12_9.
- arch_select.bzl: add using_cuda12_arm branch to torch_deps() pointing
  at the new @torch_2.9_py310_cuda_arm http_archive (aarch64 cu129 wheel).
- deps/http.bzl: declare @torch_2.9_py310_cuda_arm http_archive.
- rtp_llm/BUILD: remove :av from arch_dep / arch_with_version_dep /
  requirement list since av is absent from all current lockfiles.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/5 · P3/0

Blocking Issues

P1

  • CUDA ARM wheel 的 torch 依赖版本写错 @ arch_config/arch_select.bzl:61
    • 建议:给 @rtp_llm//:using_cuda12_arm 单独加 torch==2.9.0+cu129 分支,默认分支只覆盖 x86 CUDA12.9。
  • lockfile 将直接依赖 transformers 静默降级 @ deps/requirements_lock_torch_gpu_cuda12_9.txt:3974
    • 建议:重新生成 cuda12_9/cuda12_arm/rocm lockfile,确保 lock 中 transformers 与 requirements_base.txt 的 4.57.1 一致;若必须降级,同步修改 source requirements 和 wheel metadata。

Non-blocking Suggestions

P2

  • XQA batch decode 测试目标被整体移除 @ rtp_llm/models_py/kernels/cuda/test/BUILD:61
    • 建议:恢复该测试目标,或拆分为可运行的 H20/manual 目标并说明替代覆盖。
  • XQA batch decode 回归测试目标被整体移除 @ rtp_llm/models_py/kernels/cuda/test/BUILD:62
    • 建议:恢复该 py_test 目标并只更新 cuda12_9 依赖选择;若已有等价覆盖,请在 BUILD 中保留目标为 manual/open_skip 或说明替代目标。
  • 多机脚本会吞掉远端构建或测试失败 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:32
    • 建议:保存后台 PID,逐个 wait $pid 聚合状态;子进程内使用 set -escp ... && ssh ...,最后非零退出。
  • 环境变量检查表达式格式错误 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:154
    • 建议:改为 [ -z "$TP_SIZE" ][ -z "$MODEL_TYPE" ],并建议配合 set -u 或统一的必填变量校验函数。
  • CUDA/ROCm 共用 extra-index 增加解析开销 @ deps/pip.bzl:27
    • 建议:拆分公共 extra_args 与 CUDA/ROCm 专用 extra_args;CUDA 只带 cu129,ROCm 只带 rocm7.2,避免依赖更新/安装阶段多余索引查询。

Checklist ✅ (25 items passed)

Strengths

  • 旧的 cuda12_6cuda_pre_12_9、CPU/ARM-CPU Bazel 分支大部分已清理到一致的 CUDA12.9/ROCm/CUDA-ARM 选择。
  • rtp_llm:utils 补上了 aiohttp 依赖,和 utils/util.py 的直接 import 关系一致。
  • 构建配置统一切到 cuda12_9,减少 cuda12_6/cuda12_2 分支带来的维护和性能基线分叉。
  • 多处 FlashInfer 依赖选择同步移除了 cuda_pre_12_9,和旧 CUDA 配置删除方向一致。
  • 旧的 cuda_pre_12_9、CPU、ARM-CPU 配置引用基本完成收敛,非文档路径未发现悬空 select 引用。
  • rtp_opensource_deps 提供了稳定的开源 deps handle,能降低内部 overlay 覆盖 rtp_deps 后读取 requirements 的脆弱性。
  • 移除旧 CPU、cuda12.6 相关 pip_parse 和 lockfile 后,WORKSPACE 外部 pip 仓库数量减少。
  • 文档中的构建、benchmark、debug、profiling 示例已同步到 cuda12_9。
  • pip 源显式设置 index-url,避免环境变量把开源依赖解析静默导向非预期源。
  • 依赖入口收敛到 cuda12_9、cuda12_arm、rocm 三套 lockfile,删除的旧 CPU/CUDA12 依赖在 deps/BUILD 和 deps/pip.bzl 中已同步清理。

… lockfiles

- whl_deps(): add using_cuda12_arm branch for torch==2.9.0+cu129
  (ARM lockfile pins 2.9.0, while x86 cuda12_9 stays on 2.8.0).
- requirements_base.txt: downgrade transformers 4.57.1 -> 4.51.2
  to match all three current lockfiles (cuda12_9, cuda12_arm, rocm).
  A full pip-compile regeneration is still needed to upgrade back.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/7 · P3/5

lgtm ready to ci

Non-blocking Suggestions

P2

  • PIP_EXTRA_ARGS 全局包含 rocm7.2 索引,增加非 ROCm 配置的 pip-compile 解析时间 @ deps/pip.bzl:28
    • 建议:将 PIP_EXTRA_ARGS 拆分为 PIP_BASE_ARGS + 每配置追加对应 pytorch index(cuda12_9 只加 cu129,rocm 只加 rocm7.2),避免 uv 对不相关 index 的无意义 HTTP 查询。注释已提到减少查询面积的目标,可进一步优化。
  • transformers 从 4.57.1 降级到 4.51.2 可能导致功能回退 @ deps/requirements_base.txt:51
    • 建议:确认降级是有意行为。建议在 PR 描述中说明原因(例如 4.57.x 有已知 bug、ARM 兼容性等),并确认 smoke test 覆盖了依赖新 API 的模型路径(如 ChatGLM4/5、DeepSeek-V3.2 等需要较新 transformers 的模型)。
  • aiter 版本在 http.bzl 和 requirements_rocm.txt 之间不一致 @ deps/http.bzl:70
    • 建议:统一 aiter 版本:http.bzl 的 Bazel archive 和 pip lockfile 使用相同版本号,或在 TODO 注释中记录为何两者有意不同。版本差异可能导致 Python/C++ 层 ABI 不匹配。
  • tensorrt-cu12-libs 缺少 x86_64 平台限制, 与同组其他 tensorrt 包不一致 @ deps/requirements_torch_gpu_cuda12_9.txt:22
    • 建议:添加 ; platform_machine == "x86_64" 保持一致. 虽然此 lockfile 目前只被 x86 config 消费, 但缺少 guard 在 lockfile regeneration 时会多拉无用的 ARM hash 或在将来复用时安装失败.
  • ROCm aiter 包版本降级,可能影响 MI300X 推理性能 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 降级是有意为之(如修复 bug),还是遗漏。若无明确原因,建议保持 0.1.14rc1 或在 ROCm perf test 中验证无回退。
  • XQA batch decode 测试被注释掉,丢失性能关键路径 CI 守护 @ rtp_llm/models_py/kernels/cuda/test/BUILD:61
    • 建议:XQA batch decode 是 decode 阶段热路径 kernel。建议修复测试依赖后恢复,而非长期注释,否则该 kernel 性能退化将无 CI 拦截。
  • BUILD.pytorch torch_libs 缺少 cuda12_arm linkopts,ARM CUDA 构建可能缺失 CUPTI profiling 支持 @ BUILD.pytorch:85
    • 建议:添加 @//:using_cuda12_arm 分支,链接 ARM 对应的 CUDA libs(至少 -lcudart, -lnccl, -lcudnn)。否则 ARM 平台无法使用 CUPTI/NVTX 进行性能分析。

P3

  • pip_gpu_rocm_torch 缺少 quiet=False 与其他 pip_parse 不一致 @ deps/pip.bzl:71
    • 建议:为 pip_gpu_rocm_torch 添加 quiet=False 保持一致性,便于调试安装超时问题。
  • transformers 从 4.57.1 降级到 4.51.2 可能缺少新模型架构支持 @ deps/requirements_base.txt:50
    • 建议:确认降级原因(兼容性/bug?),并在 PR 描述中记录。4.51.2 可能缺少 4.52+ 新增的模型架构 auto-class 注册(如 Qwen3-Next 等),需确认不影响模型加载。
  • PIP_EXTRA_ARGS 对所有 config 都包含 cu129 和 rocm7.2 索引 @ deps/pip.bzl:27
    • 建议:可以在 pip.bzl 中将索引参数分为共享部分和 config 专用部分,减少 lockfile 重生成时的无效网络查询。但鉴于 lockfile 有 hash 锁定,实际影响仅限于重生成速度,当前设计可接受。
  • aiter http_archive 版本(0.1.14rc1)与 pip ROCm 依赖版本(0.1.13.dev14)不一致 @ deps/http.bzl:73
    • 建议:TODO 中已提到 Phase 5 需要统一 http_archive 和 pip 依赖, 建议同步对齐 aiter 版本以避免编译期和运行期 ABI 差异. 如果 http_archive 是供 C++ headers 使用, 确认两个版本的 C ABI 兼容.
  • docs/start/install.md 的 bazel 构建命令包含不必要的 test 参数 @ docs/start/install.md:31
    • 建议:--test_output--test_envbazel build 无效, 仅对 bazel test 有意义. 这是 pre-existing 问题但既然在改这个文件, 可以顺手清理.

Checklist ✅ (25 items passed)

Strengths

  • 清理了 3 个已废弃的 pip_parse 和 2 个已废弃的 http_archive 条目,减少 WORKSPACE 加载时间和网络请求
  • 将 requirements 从硬编码 URL 改为 PEP 503 包名+版本规范,提升可维护性和 pip-compile 可重现性
  • pip.bzl 注释详细说明了 index 分层设计和 PPU stub 存在的理由,降低后续维护成本
  • docs 统一 cuda12_6→cuda12_9 与实际主力编译配置保持一致,避免用户按过时文档操作
  • 彻底清理了已废弃的 pip 配置(cpu、arm standalone、cuda12 non-9),大幅减少维护面
  • PIP_EXTRA_ARGS 增加了 --index-url 覆盖环境 PIP_INDEX_URL,防止开源构建意外拉取内网 artlab 包
  • pip_ppu_torch stub 有清晰的注释说明为何在开源侧必须声明
  • docs 统一从 cuda12_6 更新到 cuda12_9,保持构建指南一致性
  • 统一升级到 cuda12_9 + PyTorch 2.8/2.9,可利用更新的 CUDA kernel 和 cuDNN 优化
  • 移除 cuda_pre_12_9 分支后,flashinfer/flashattn/rtp-kernel 在 x86 和 ARM 上保持一致的特性集,避免了旧平台走 fallback 路径

…guard

- deps/pip.bzl: split PIP_EXTRA_ARGS into PIP_BASE_ARGS +
  PIP_CUDA_EXTRA_ARGS / PIP_ROCM_EXTRA_ARGS so CUDA pip_parse/compile
  only query cu129 index and ROCm only queries rocm7.2.
- deps/BUILD: update compile_pip_requirements to use config-specific
  extra args.
- BUILD.pytorch: add using_cuda12_arm branch for torch_libs linkopts
  (CUPTI/cudart/nccl/cudnn/nvtx) so ARM CUDA builds link correctly.
- requirements_torch_gpu_cuda12_9.txt: add platform_machine == x86_64
  guard to tensorrt-cu12-libs, matching tensorrt/tensorrt-cu12-bindings.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/6 · P3/4

Blocking Issues

P1

  • 删除 cuda_pre_12_9/using_arm config_setting 但内部 overlay 仍有引用,内部构建将崩溃 @ BUILD:28
    • 建议:需要同步更新 internal_source/bazel/arch_select.bzl 和 internal_source/.../barex_rdma/BUILD,移除所有 cuda_pre_12_9、using_arm、using_cpu 分支。否则内部构建(通过 --override_repository=arch_config=internal_source/bazel)会在 WORKSPACE 加载阶段失败。建议在同一 PR 中完成或确保内部侧先行/同步更新。

Non-blocking Suggestions

P2

  • ROCm aiter 包版本降级可能影响 AMD GPU 推理性能 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 降级是有意为之(稳定性考虑)。如果 0.1.14rc1 有 ROCm kernel 优化(如 fused MoE、attention),降级可能导致 MI300X 上推理吞吐回退。建议在 PR 描述中注明降级原因。
  • test_xqa_batch_decode 测试被注释而非删除 @ rtp_llm/models_py/kernels/cuda/test/BUILD:61
    • 建议:如果该测试已废弃,建议直接删除注释代码和对应的 test_xqa_batch_decode.py 文件;如果只是暂时禁用,加 tags = ["manual"] 比注释掉更干净,且保留编译检查。
  • BUILD.pytorch torch_libs 两个分支完全重复 @ BUILD.pytorch:85
    • 建议:BUILD 根目录已定义 selects.config_setting_group(name="using_cuda12_9", match_any=[...]), 此处 select 可用 @//:using_cuda12_9 单分支替代两个重复分支,减少维护风险(未来若修改一个忘记另一个)。
  • lockfile 头部 extra-index-url 与 BUILD extra_args 不一致 @ deps/requirements_lock_cuda12_arm.txt:6
    • 建议:重新生成 lockfile 或确认 uv 生成时的 extra_args 与 BUILD 定义一致。虽然 pip_parse 使用 lockfile hash 安装不会拉错包,但头部注释会误导后续维护者。建议 uv 生成命令仅传入对应 config 的 indexes。
  • aiter 版本不一致:http.bzl vs requirements_rocm.txt @ deps/requirements_rocm.txt:2
    • 建议:确认两处引用场景是否独立(C++ build-time vs Python runtime)。如果是同一功能不同入口,应统一版本避免行为不一致。如确属不同用途请添加注释说明。
  • transformers 版本从 4.57.1 大幅降级到 4.51.2 @ deps/requirements_base.txt:51
    • 建议:降级跨 6 个小版本可能导致新模型架构(如 Qwen3、DeepSeek-V3.2)的 auto config 加载失败。请确认所有支持模型的 tokenizer/config 加载兼容 4.51.2,或在 commit message 中注明降级原因。

P3

  • test_xqa_batch_decode 测试被注释而非删除 @ rtp_llm/models_py/kernels/cuda/test/BUILD:62
    • 建议:如果该测试已废弃(移除了 cuda_pre_12_9 配置),建议直接删除注释代码,而非保留注释块。如需保留可加 TODO 说明恢复计划。
  • refresh_compdb 配置更新为 cuda12_9 @ BUILD:136
    • 建议:更新合理。确保开发者的 compile_commands.json 重新生成(bazel run //:refresh_compdb)以匹配新配置。
  • cuda12_arm 缺少 datasets / auto-gptq / autoawq @ deps/requirements_cuda12_arm.txt:1
    • 建议:如果 ARM 平台也需要量化功能(GPTQ/AWQ),需补齐这些依赖。如不需要可忽略,建议注释说明 ARM config 的定位。
  • docs 统一更新 cuda12_6 → cuda12_9,未说明迁移注意事项 @ docs/start/install.md:31
    • 建议:建议在安装文档中注明 cuda12_6 已弃用(或至少加一行说明需要 CUDA 12.9+ 环境),避免用户在 CUDA 12.6 环境下按新文档操作失败。

Checklist ✅ (25 items passed)

Strengths

  • 平台收敛干净:移除 cuda12/12.2/12.6/cpu/arm 五个废弃配置,select 分支从 5-6 路简化到 3 路(cuda12_9_x86 / cuda12_arm / rocm),减少构建系统复杂度和潜在的配置错误
  • PyTorch 升级至 2.8(x86)和 2.9(ARM),带来更好的 CUDA Graph 支持、kernel 优化和 FP4/FP8 改进,对推理性能有正向影响
  • NVTX 库从 nvToolsExt 切换到 nvtx3interop,与 CUDA 12.9 的原生 NVTX3 API 对齐,profiling 开销更低
  • 移除未使用的 av(PyAV)依赖,减少 wheel 体积和 import 开销
  • 平台精简彻底 — 开源侧所有 cuda12_2、cuda12_6、cpu、arm、cpu_latest 引用已被一致清除,grep 确认无残留
  • BUILD.pytorch 中 cuda12_arm 现在获得了正确的 CUDA linkopts(之前漏掉了,落入空 default 分支),是一个隐含 bug 的修复
  • rtp_opensource_deps 仓库的添加设计合理,注释清楚解释了 internal override 场景下的需求
  • perf_test 脚本和 YAML 的 cuda12_6→cuda12_9 迁移一致且完整
  • 将 PIP_EXTRA_ARGS 拆分为 PIP_BASE_ARGS + 平台专属 index,避免 pip-compile/uv 对每个包同时查询 cu129 和 rocm7.2 两个 PyTorch index,显著减少 lockfile 再生成时的网络查询量和跨区域超时概率
  • 为 tensorrt-cu12-libs 添加 platform_machine == "x86_64" 约束,避免 ARM 构建尝试下载不存在的 x86 wheel 导致解析失败

…oc cleanup

- Restore test_xqa_batch_decode py_test with open_skip/H20/manual tags
  instead of leaving it commented out.
- multi_runner.sh: collect background PIDs and aggregate exit codes so
  remote build/test failures are no longer swallowed.
- multi_runner.sh: fix [ -z "" ] / [ -z "" ]
  spacing and initialize START_PORT before GANG_CONFIG_STRING.
- http.bzl: add TODO explaining aiter 0.1.14rc1 archive vs 0.1.13.dev14
  pip lockfile version gap; unification requires pip-compile regeneration.
- docs/start/install.md: remove --test_output/--test_env from bazel build
  example (those flags only apply to bazel test).
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/9 · P3/6

lgtm ready to ci

Non-blocking Suggestions

P2

  • multi_build_script 未修复失败传播,可能浪费多节点测试时间 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:32
    • 建议:将 multi_build_script 的 wait 改为与 multi_test_script 一样的 PID 跟踪 + EXIT_CODE 传播模式。构建失败不传播会导致 test 阶段在损坏节点上白跑,浪费 GPU 时间。multi_kill_script / multi_copy_script / multi_clean_script 同理。
  • ROCm aiter 包从 0.1.14rc1 降级到 0.1.13 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 版本降级是否有意为之。0.1.14rc1 可能包含 ROCm 推理性能优化(特别是 attention/MoE 相关 kernel),降级可能引入性能回退。如果是稳定性原因则记录理由。
  • whl_deps() ROCm 分支缺少 torch 版本声明 @ arch_config/arch_select.bzl:57
    • 建议:确认 ROCm 镜像已预装 torch,或在 whl_deps 的 rocm 分支也加上 torch 版本约束,避免运行时版本不匹配
  • multi_test_script 中 && 与 ; 混用导致错误链断裂 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:181
    • 建议:scp 失败时 && 短路但 ; 不阻断后续命令,且 set -e 不会因 && 左侧失败触发 errexit。应改为全部用 && 连接,或去掉 && 完全依赖 set -e(即把 && \ 改为 ; \,让 set -e 统一处理)。
  • cuda12 基础配置仍可独立使用但已无有效 torch_libs/torch_deps 分支 @ .bazelrc:71
    • 建议:要么在 .bazelrc 中注释说明 cuda12 仅作为内部基础配置禁止单独使用,要么添加一个构建时断言(如 fail() 宏)防止不带 cuda12_9/cuda12_9_arm 后缀时误用。
  • ROCm lockfile 包含无关的 CUDA cu129 extra-index-url,增加 pip 解析开销 @ deps/requirements_lock_rocm.txt:5
    • 建议:ROCm lockfile 不应包含 cu129 索引。这是 uv 自动生成的(PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS 被混在一起传入),重新生成时应只传入 PIP_ROCM_EXTRA_ARGS。同理 ARM lockfile 也不应有 rocm7.2 索引。每次 pip install 多余索引会带来额外网络请求和解析延迟。
  • ARM CUDA lockfile 包含无关的 ROCm rocm7.2 extra-index-url @ deps/requirements_lock_cuda12_arm.txt:6
    • 建议:重新生成 ARM CUDA lockfile 时只使用 PIP_CUDA_EXTRA_ARGS,不要混入 ROCm 索引。当前两个 lockfile 都同时包含了 cu129 和 rocm7.2 索引,表明 uv 生成时没有严格区分 config。虽然 lockfile 已锁定 hash 不会误装,但多余索引在 pip install 阶段仍有网络探测开销。
  • aiter http_archive (0.1.14rc1) 与 pip lockfile (0.1.13.dev14) 版本不一致,可能导致 ABI 兼容问题 @ deps/http.bzl:69
    • 建议:PR 已用 TODO 标注了这个问题。建议创建跟踪 issue 确保后续统一版本,避免 C++ header 与 Python runtime 之间 ABI 不匹配导致运行时 crash 或静默数值错误。当前标注为 P2 因为 TODO 已记录且非本 PR 新引入的风险。
  • transformers 从 4.57.1 降级到 4.51.2,可能丢失性能优化 @ deps/requirements_base.txt:51
    • 建议:transformers 4.57.1 → 4.51.2 是较大的降级(6个小版本),4.52-4.57 可能包含新模型支持和 tokenizer/generation 性能优化。确认降级原因(如 ARM 兼容性或与 tokenizers 0.21.4 匹配),并在 PR 描述中记录。如果是 ARM wheel 可用性限制,建议在 requirements_base.txt 保持高版本,仅在 ARM config 降级。

P3

  • perf test 默认 config 从 cuda12_6 切到 cuda12_9,需确认基线对齐 @ rtp_llm/test/perf_test/multi_node/multi_benchmark_config.yaml:20
    • 建议:CUDA 12.9 工具链 + CXX11 ABI + 新 torch 版本会影响性能基线。建议在合入后对 multi-node perf test 做一次 baseline rerun 并记录新基线,避免后续对比时产生误判。
  • BUILD.pytorch torch_libs 两个 CUDA 分支完全相同,可合并 @ BUILD.pytorch:85
    • 建议:使用已有的 using_cuda12_9 config_setting_group(match_any = [cuda12_9_x86, cuda12_arm])替代两个重复分支
  • requirements_base.txt 中仍残留 av==16.1.0 @ arch_config/arch_select.bzl:64
    • 建议:如果确认不再使用 av 包,应同步清理 deps/requirements_base.txt 中的 av==16.1.0 条目,避免 pip requirements 锁文件继续安装无用依赖。
  • pip_ppu_torch 和 pip_gpu_cuda12_9_torch 使用相同 lockfile,造成冗余解析 @ deps/pip.bzl:52
    • 建议:这是有意的设计(注释已说明 PPU 是内部专用,开源侧用 stub)。但 Bazel WORKSPACE 加载阶段会对同一 lockfile 做两次 pip_parse,可增加 WORKSPACE 加载时间。如果 WORKSPACE 条件分支允许,可考虑在开源侧将 PPU 合并到 cuda12_9 的 pip_parse。不过当前注释清楚说明了原因,标记为 P3。
  • README_cn.md中遗留对已删除配置的引用 @ deps/requirements_torch_gpu_cuda12.txt:0
    • 建议:更新README_cn.md中的pip install示例(requirements_torch_gpu_cuda12.txt → requirements_lock_torch_gpu_cuda12_9.txt)和错误示例(@pip_gpu_cuda12_torch → @pip_gpu_cuda12_9_torch)。
  • docs/references/Update-whl-Deps.md引用已删除的compile_pip_requirements target @ deps/BUILD:1
    • 建议:更新Update-whl-Deps.md中的示例命令为仍存在的target,如 bazel run //deps:requirements_torch_gpu_cuda12_9.update。

Checklist ✅ (25 items passed)

Strengths

  • 干净移除 cuda12_2/cuda12_6/cpu/arm 等已废弃平台配置,减少 select 分支数量,降低构建系统复杂度
  • multi_test_script 新增 PID 跟踪和 EXIT_CODE 传播,正确处理多节点并行测试中单节点失败的场景
  • 修复 bash 语法 bug([ -z "$TP_SIZE"][ -z "$TP_SIZE" ]),避免参数校验失效导致无效测试浪费资源
  • nvToolsExt → nvtx3interop 升级与 CUDA 12.9 对齐,使用新版 NVTX API
  • 修复了 multi_runner.sh 中 [ -z "$TP_SIZE"][ -z "$MODEL_TYPE"] 的 shell 语法错误,原代码缺少空格会导致条件判断失效
  • 将 START_PORT 的 export 移到 GANG_CONFIG 生成之前,修复了当环境变量未预设时 GANG_CONFIG 中 port 为空的 bug
  • multi_test_script 的 PID 追踪和退出码传播机制,确保远程节点测试失败时脚本能正确返回错误
  • 清理了已废弃的 cuda12/cuda12_2/cuda12_6/cpu/arm 平台配置,降低维护负担,select 分支更清晰
  • 将统一的 PIP_EXTRA_ARGS 拆分为 PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS,避免 CUDA/ROCm 交叉索引查询,改善依赖解析性能
  • 删除废弃的 torch_2.1/2.3/2.6 http_archive 和 requirements_lock_torch_arm/cpu/cuda12 文件,显著精简构建依赖图

@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/7 · P3/4

lgtm ready to ci

Non-blocking Suggestions

P2

  • lockfile 中交叉 index-url 导致 pip/uv 安装时多余网络请求 @ deps/requirements_lock_cuda12_arm.txt:6
    • 建议:lockfile 是 uv 自动生成的,根源在 compile_pip_requirements 将 PIP_BASE_ARGS(不含平台 index)和平台 index 拼接后传入。但 uv 会把所有 extra_args 的 index 都写入 lockfile header。应在 regenerate lockfile 后手动移除不匹配平台的 --extra-index-url 行,或分离 PIP_BASE_ARGS 中不放 index,在 compile_pip_requirements 中只传对应平台的 index。当前 CUDA lockfile 查询 rocm7.2 index 和反之会各多一轮 HTTP round-trip per package(约几百个包),在 CI cold-install 时可增加几十秒延迟。
  • aiter http_archive (0.1.14rc1) 与 requirements_rocm.txt (0.1.13.dev14) 版本不一致可能导致 ABI 不匹配 @ deps/http.bzl:69
    • 建议:PR 作者已标注 TODO(pip_unify Phase 5),这不是本 PR 引入的新问题,但建议在后续 PR 中尽快统一版本。若 C++ header 有 breaking change(如结构体字段新增/删除),可能在 ROCm 运行时导致 segfault 或 silent data corruption。建议添加 CI 检查验证 aiter 版本一致性。
  • ROCm/ARM lockfile 包含 cu129 index URL(cosmetic 不一致) @ deps/requirements_lock_rocm.txt:5
    • 建议:lockfile 由 uv 自动生成时把所有 index 都写进去了(包括不属于该 config 的 cu129)。功能上无影响(pip install 按 hash 匹配),但容易误导维护者。建议下次 regenerate 时传入 config-specific index,或在 lockfile 顶部加注释说明多余 index 是 uv 的默认行为。
  • ROCm aiter 包版本降级可能影响 AMD GPU 推理性能 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 降级是有意为之(如稳定性问题)还是无意遗漏。aiter 是 AMD 推理加速库,0.1.14rc1 相比 0.1.13 可能包含 ROCm kernel 优化。如果是有意降级请在 commit message 中说明原因。
  • transformers 从 4.57.1 降级到 4.51.2,跨 6 个次版本 @ rtp_llm/BUILD:563
    • 建议:确认降级原因——4.57.1 可能包含 tokenizer 性能优化和新模型架构支持。如果是因为兼容性问题需降级,建议在 PR 描述中注明,并评估是否影响已支持模型的 tokenizer 性能。
  • multi_build_script 等函数未同步修复错误传播 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:32
    • 建议:对 multi_build_script 等其他并行函数也应用相同的 PIDS 跟踪模式,确保构建/清理失败能正确传播
  • multi_test_script 子 shell 中 set -e 与 ; \ 混用,scp 失败后仍会执行 ssh @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:180
    • 建议:将 ; \ 全部改为 && \,使 scp 或 ENV_STR 失败时后续命令不再执行(与 set -e 行为一致)。当前 scp 用了 &&,但后续语句用 ; 分隔,意味着只有第一个 && 有效,后续 echo/ssh 不受 scp 成功与否控制。虽然 set -e 在简单命令失败时会退出子 shell,但 $(...) 赋值和 echo 几乎不会失败,所以实际风险较低。

P3

  • PIP_EXTRA_ARGS 向后兼容别名已无消费者 @ deps/pip.bzl:38
    • 建议:删除未使用的 PIP_EXTRA_ARGS 别名及其注释,避免后续维护者误以为仍有外部消费者。如有 internal_source 侧引用则保留并加注释说明。
  • test_xqa_batch_decode 新增 manual tag 降低测试覆盖率 @ rtp_llm/models_py/kernels/cuda/test/BUILD:68
    • 建议:manual tag 会使该测试不再被 bazel test //... 自动执行。如果是临时禁用请添加 TODO 注释说明恢复条件;如果是永久移除请确认 XQA batch decode 路径有其他测试覆盖。
  • BUILD.pytorch torch_libs 两个分支完全重复 @ BUILD.pytorch:85
    • 建议:使用 BUILD 中已定义的 @//:using_cuda12_9(match_any group)替代两个重复分支
  • xft_dep select 实际为空操作 @ rtp_llm/BUILD:52
    • 建议:如果 xfastertransformer 已不再使用,可考虑移除 xft_dep 及相关 config_setting

Checklist ✅ (25 items passed)

Strengths

  • 将 pip index 按平台拆分为 PIP_CUDA_EXTRA_ARGS / PIP_ROCM_EXTRA_ARGS,避免 CUDA 构建拉取 ROCm wheel 或反之(概念正确,lockfile 层面还需完善)
  • 移除过时的 torch 2.1/2.6/CPU/cuda12 配置和对应 http_archive、requirements 文件,显著简化依赖矩阵
  • requirements_torch_gpu_cuda12_9.txt 从硬编码 URL 迁移到 PEP 503 包名 + index 方式,lockfile 可复现性更好
  • transformers 版本从 4.57.1 降级到 4.51.2 并在所有 lockfile 中保持一致,消除了源文件和 lockfile 的版本偏差
  • 为 CUDA ARM 平台补齐了完整的 wheel 依赖(deep-ep、deep-gemm、flash-attn、flash-mla、flashinfer 等),此前该配置明显不完整
  • 文档统一从 cuda12_6 迁移到 cuda12_9,与构建系统实际默认配置一致
  • pip index 按 config 拆分(PIP_BASE_ARGS / PIP_CUDA_EXTRA_ARGS / PIP_ROCM_EXTRA_ARGS),避免 ROCm resolve 时探测 cu129 index 导致的 403 失败
  • 从 inline URL 迁移到 PEP 503 版本号 + 统一 simple index,大幅提升 requirements 文件可读性和可维护性
  • PyTorch 从 2.6 升级到 2.8/2.9,CUDA 12.9 环境可获得 torch 层面的性能提升
  • multi_runner.sh 修复了 shell 变量校验 bug($TP_SIZE"] 缺少空格导致校验无效),并改进了 PID 追踪和退出码传播,确保多节点性能测试失败能被正确捕获

@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/9 · P3/9

lgtm ready to ci

Non-blocking Suggestions

P2

  • ROCm 和 CUDA ARM lockfile 包含不必要的 cross-config 额外索引 @ deps/requirements_lock_cuda12_arm.txt:6
    • 建议:CUDA ARM lockfile 不应包含 ROCm 索引,ROCm lockfile 不应包含 CUDA 索引。pip install 时会对每个 extra-index-url 发起额外的 HTTP 请求来搜索包,增加安装耗时和不必要的网络开销。建议在 compile_pip_requirements 中为 CUDA 和 ROCm 使用各自独立的 extra_args(当前 BUILD 中已正确区分 PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS),但 uv 生成的 lockfile 头部似乎合并了所有索引。检查 uv 是否有 --no-extra-index 选项或手动修剪 lockfile 头部。
  • aiter http_archive (0.1.14rc1) 与 pip lockfile (0.1.13.dev14) 版本不一致 @ deps/http.bzl:69
    • 建议:http_archive 提供的 aiter C++ headers/runtime 是 0.1.14rc1,而 pip 安装的 Python 包是 0.1.13.dev14。PR 中已通过 TODO 注释标注了此问题(感谢),但存在 ABI 不兼容风险。建议尽快统一版本,至少在 PR 描述中注明此为已知差异及影响范围。
  • pip_ppu_torch 与 pip_gpu_cuda12_9_torch 使用相同 lockfile 导致重复解析开销 @ deps/pip.bzl:52
    • 建议:两个 pip_parse 使用完全相同的 lockfile 和 extra_pip_args,Bazel WORKSPACE 阶段会对同一 lockfile 解析两次。虽然 pip_parse 是 lazy 的不会下载 wheel,但 Starlark 阶段的解析仍有开销。注释已说明原因(PPU stub),可接受但值得关注——若 internal override 覆盖了 pip_ppu_torch,此处只影响 opensource 构建。
  • ROCm aiter 库版本降级可能影响推理性能 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 降级是有意为之(例如兼容性修复),还是无意跟随。若降级有原因请加注释,否则保持 0.1.14rc1 以获得最新 kernel 优化。
  • multi_test_script 中 build/test 函数错误传播不一致 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:32
    • 建议:将 multi_build_script 中的 wait; 也改为 PID 跟踪模式,保持一致性。build 失败静默会导致后续 test 浪费 GPU 时间。
  • set -e 与 && 组合导致 scp 失败时不会中断子 shell @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:181
    • 建议:去掉 &&,改用纯 ; 分隔 (set -e 会在 scp 失败时自动中断子 shell):
      set -e
      scp ...
      ENV_STR=...
      echo ...
      ssh ...
      或者把所有命令都用 && 串联(去掉 ;)。当前 && 仅保护了 ENV_STR 赋值,echo 和 ssh 仍会在 scp 失败后执行。
  • transformers 从 4.57.1 降到 4.51.2,可能破坏新模型加载 @ rtp_llm/BUILD:563
    • 建议:确认所有已支持模型在 transformers==4.51.2 下能正常加载,特别是 Qwen3、DeepSeek-V3.2 等较新模型。如果降级是故意的(与 torch 2.8 兼容),建议在 commit message 或注释中说明原因。
  • transformers 从 4.57.1 降级到 4.51.2,可能影响新模型支持 @ rtp_llm/BUILD:555
    • 建议:确认项目代码没有使用 transformers 4.52+ 新增的 API(如新 model class、tokenizer 特性等)。如果是有意降级(如与 torch 2.8 兼容),建议在 commit message 或注释中说明原因。
  • ROCm aiter 包从 0.1.14rc1 降级到 0.1.13 @ arch_config/arch_select.bzl:52
    • 建议:确认 ROCm 构建和推理不依赖 aiter 0.1.14 的新功能/修复。如果是有意回退,建议记录原因。

P3

  • transformers 从 4.57.1 降级到 4.51.2 @ deps/requirements_base.txt:51
    • 建议:降级幅度较大(6 个 minor 版本)。lockfile 已全部对齐,无一致性问题。但建议在 PR 描述或 commit message 中说明降级原因(如兼容性或 bug),便于后续维护。
  • 文档中 cuda12_6 → cuda12_9 更新正确但 benchmark.md 仍含 feature 分支引用 @ docs/benchmark/benchmark.md:111
    • 建议:benchmark 文档的 open_source_ref 仍然写死了 feature 分支 'origin/feature/yiyin_multi_benchmark',建议改为通用说明或 main 分支引用。
  • PIP_EXTRA_ARGS 向后兼容别名默认为 CUDA,ROCm 调用方可能误用 @ deps/pip.bzl:38
    • 建议:建议在注释中说明此别名仅供 CUDA 上下文使用,或在未来版本中移除该别名迫使调用方显式选择 PIP_CUDA_EXTRA_ARGS 或 PIP_ROCM_EXTRA_ARGS。当前 BUILD 文件中已正确区分,风险较低。
  • cuda12_arm requirements 中 flash-attn 缺少 @ URL 和 platform_machine marker @ deps/requirements_cuda12_arm.txt:7
    • 建议:ARM lockfile 中 hash 已锁定正确的 wheel,当前不影响安装。但建议与 cuda12_9 保持一致风格,显式使用 @ URL 指向 aarch64 wheel 以避免 index 解析时误拉 x86_64 wheel(hash 会兜底,但显式更安全)。
  • docs/references/Update-whl-Deps.md 仍引用已删除的 requirements_torch_gpu_cuda12 target @ deps/BUILD:44
    • 建议:更新 docs/references/Update-whl-Deps.md 中的示例,将 requirements_torch_gpu_cuda12 改为当前存在的 target(如 requirements_torch_gpu_cuda12_9)。
  • README_cn.md 中 pip install 仍引用已删除的 requirements_torch_gpu_cuda12.txt @ deps/BUILD:44
    • 建议:更新 README_cn.md 中的安装说明,将 requirements_torch_gpu_cuda12.txt 改为 requirements_torch_gpu_cuda12_9.txt。
  • BUILD.pytorch torch_libs 两个 CUDA select 分支完全重复 @ BUILD.pytorch:86
    • 建议:使用已有的 selects.config_setting_group using_cuda12_9(matches using_cuda12_9_x86 OR using_cuda12_arm)来合并这两个分支,减少重复。
  • multi_test_script 中 set -e 与 && 混用冗余 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:180
    • 建议:既然已有 set -e,将 && 改为 ; 或分行即可,保持风格统一。
  • multi_runner.sh 中 set -e + && 混用未能完全保护 scp 失败场景 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:179-184
    • 建议:如果 scp 失败,echo 和 ssh 仍会执行(&& 左侧失败不触发 set -e)。可改为全部用 && 连接,或在 scp 后单独检查 $?。当前行为与旧代码一致,非回归。

Checklist ✅ (25 items passed)

Strengths

  • 将 pip 索引按 config 拆分为 PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS,避免 CUDA 构建查询 ROCm 索引、ROCm 构建查询 CUDA 索引,减少解析和网络开销
  • 移除了过时的 torch 2.1/2.6 和 cpu/aarch64 旧版 http_archive,减少 WORKSPACE 加载和解析时间
  • requirements 源文件从硬编码 URL 改为 PEP 503 包名+版本,使 lockfile 可由 uv 自动生成和维护,降低手动维护成本
  • ROCm 包 URL 从内网 sinian-metrics-platform 迁移到公网 rtp-opensource OSS,使开源构建不再依赖内网可达性
  • 为 tensorrt/amdsmi 等包添加了 platform_machine 和 sys_platform 环境标记,避免非目标平台下载不必要的大包
  • 文档统一从 cuda12_6 迁移至 cuda12_9,与当前默认构建配置保持一致
  • 将 PIP_EXTRA_ARGS 拆分为 PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS,避免 ROCm 构建误查 CUDA index,设计清晰
  • 彻底清理了过时的 torch_2.1_cpu、torch_2.6_cuda12、requirements_torch_cpu 等死配置,降低维护负担
  • 平台配置大幅精简(移除 cuda12_2/cuda12_6/cpu/arm),减少 Bazel select 分支数量,降低构建配置维护成本和潜在的错误配置风险
  • ARM 平台从 CPU-only torch 2.3 升级到 CUDA torch 2.9,释放 GPU 加速能力

- Trim cross-config PyTorch indexes from lockfile headers (CUDA lockfiles
  keep cu129, ROCm keeps rocm7.2).
- Unify aiter http_archive to 0.1.13.dev14 to match ROCm lockfile.
- Clarify pip_ppu_torch stub comment and PIP_EXTRA_ARGS CUDA-only default.
- Merge duplicate CUDA linkopts in BUILD.pytorch via using_cuda12_9 group.
- Pin flash-attn in ARM requirements to aarch64 wheel URL + marker.
- Add transformers 4.51.2 downgrade note in requirements_base.txt and
  rtp_llm/BUILD wheel metadata.
- Fix multi_runner.sh build exit-code aggregation and remove set -e/&& mix.
- Update README_cn.md/benchmark.md/Update-whl-Deps.md to reference
  requirements_torch_gpu_cuda12_9 / origin main.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/6 · P3/4

lgtm ready to ci

Non-blocking Suggestions

P2

  • README_cn.md 引用已删除的 pip_gpu_cuda12_torch 名称 @ README_cn.md:93
    • 建议:将错误示例更新为 pip_gpu_cuda12_9_torch 或其他仍存在的 pip_parse name,保持文档与实际 pip.bzl 一致
  • aiter 版本降级可能导致 ROCm 运行时回退 @ arch_config/arch_select.bzl:58
    • 建议:确认 aiter 降级是有意为之。若内部 ROCm 代码依赖 0.1.14rc1 新增 API,运行时会 ImportError。建议验证 ROCm smoke test 通过。
  • 删除 lockfile 后未更新引用该文件的脚本 @ deps/requirements_lock_torch_gpu_cuda12.txt:1
    • 建议:同步修改 multi_local_executor.sh 中的引用,改为 requirements_lock_torch_gpu_cuda12_9.txt(与当前 x86_64 CUDA 配置对齐)。
  • multi_kill/copy/clean 未同步 PID 错误传播修复 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:52
    • 建议:multi_kill_script、multi_copy_script、multi_clean_script 也应采用相同的 PIDS + wait $PID 模式传播错误。尤其是 multi_copy_script,拷贝失败未感知会导致后续分析使用不完整的 trace 数据,浪费排查时间。
  • multi_kill_script / multi_copy_script 仍使用旧的 wait 模式,失败会被静默吞掉 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:64
    • 建议:将 multi_kill_script 和 multi_copy_script 也改为 PIDS 追踪 + 逐个 wait 的模式,保持与 build/test 函数一致的错误传播行为
  • test_xqa_batch_decode 添加 manual 标签后可能无 CI 覆盖 @ rtp_llm/models_py/kernels/cuda/test/BUILD:68
    • 建议:确认有显式 CI target 覆盖此测试,否则 flashinfer decode 路径的回归将无法被检测到;如果测试确实不稳定,添加注释说明原因和恢复计划

P3

  • whl_reqs transformers 从 4.57.1 降级到 4.51.2 @ rtp_llm/BUILD:565
    • 建议:注释说明是为了匹配 requirements_base.txt 和 lockfile,合理。确认 4.51.2 无 tokenizer 性能回退即可(4.52+ 有 fast tokenizer 改进)。
  • perf test 默认 bazel config 从 cuda12_6 切到 cuda12_9 后需确认性能基线 @ rtp_llm/test/perf_test/multi_node/multi_benchmark_config.yaml:21
    • 建议:cuda12_9 启用 FP4 和 SM10.0 支持(_GLIBCXX_USE_CXX11_ABI=1),编译产物与 cuda12_6 不同。首次切换后建议重新采集基线数据避免历史对比失真。
  • README 安装示例引用过时的 cuda11 whl 包和旧版本号 @ README_cn.md:67
    • 建议:将 whl 示例更新为当前版本和 cuda12_9 变体,或改为引导用户查看 release page
  • README_cn.md 文档与实际 wheel 版本不一致 @ README_cn.md:61
    • 建议:更新 README 中的 whl 示例为 cuda12_9 版本的包名,并删除 'for the cuda12 whl package' 措辞,与新的只支持 cuda12_9 的方向一致。

Checklist ✅ (25 items passed)

Strengths

  • aiter 版本统一(http_archive 降至 0.1.13.dev14 匹配 requirements_lock_rocm.txt),消除了 C++ 头文件/runtime 与 Python wheel 之间的 ABI 不匹配风险
  • 移除跨平台 extra-index-url(CUDA lockfile 不再查 rocm7.2,ROCm lockfile 不再查 cu129),减少无效网络探测,加速 pip resolve
  • flash-attn ARM 改用预编译 whl 直接 URL,避免耗时的源码编译
  • transformers 版本 pin 添加了清晰的注释说明为何保持 4.51.2 以及升级的前提条件
  • pip.bzl 中 PIP_EXTRA_ARGS 别名和 pip_ppu_torch stub 的注释更新,降低后续维护者误解风险
  • pip 索引按 CUDA/ROCm 分离(PIP_CUDA_EXTRA_ARGS vs PIP_ROCM_EXTRA_ARGS),避免 uv 对不相关索引的跨查询,提升锁文件生成稳定性
  • aiter 版本在 http.bzl、requirements_rocm.txt、lockfile 和 arch_select.bzl whl_deps 四处完全一致(0.1.13.dev14),注释也标明了 C++ archive 需与 Python wheel 保持同步
  • transformers 降级到 4.51.2 有清晰注释说明原因(lockfile 需在 Linux x86_64 + Python 3.10 上重新生成),且三个 lockfile 中的版本一致
  • multi_runner.sh 修复了 multi_build_script 和 multi_test_script 中并行 SSH 的错误传播(PIDS + wait $PID),避免节点失败时静默继续浪费 GPU 资源
  • 修复了 multi_test_script 中 -z "$TP_SIZE"]-z "$MODEL_TYPE"] 的 bash 语法错误(缺少空格导致条件判断失效)

…or internal overlays

Internal source overlays still reference @pip_gpu_cuda12_torch, which was
removed in the pip unification. Restore it as a thin alias pointing to
the same requirements_lock_torch_gpu_cuda12_9.txt so CI can resolve
@pip_gpu_cuda12_torch_deep_ep and other pip_parse-generated targets.

TODO: Remove once internal overlays migrate to @pip_gpu_cuda12_9_torch.
…_select.bzl

upstream/main arch_config/arch_select.bzl loads both
@pip_gpu_cuda12_torch and @pip_gpu_cuda12_9_torch. The internal
overlay may still use the old version that references
requirement_gpu_cuda12. Restore the load statement to prevent
'variable not defined' errors when internal arch_select.bzl
is used alongside the opensource WORKSPACE.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/5 · P3/7

lgtm ready to ci

Non-blocking Suggestions

P2

  • multi_kill_script / multi_copy_script / multi_clean_script 未修复错误吞没问题 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:64
    • 建议:将 multi_kill_script、multi_copy_script、multi_clean_script 中的裸 wait 也改为 PID 跟踪模式,与 multi_build_script/multi_test_script 保持一致。kill/copy/clean 失败时静默继续会导致后续 perf test 在错误状态下运行,浪费 GPU 时间。
  • multi_copy_script 未同步升级 PID 追踪错误传播 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:81
    • 建议:对 multi_copy_script 也添加 PID 追踪 + EXIT_CODE 传播逻辑,与 multi_build_script 保持一致。copy 静默失败会导致测试结果丢失、排查困难。multi_kill_script 可接受(kill 是 best-effort)。
  • multi_kill_script 和 multi_copy_script 未同步修复错误传播 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:52
    • 建议:将 multi_kill_script 和 multi_copy_script 也改为 PIDS/wait-per-PID 模式以一致地传播子进程失败
  • lockfile 与 source 文件中 flash-attn 规范不一致 @ deps/requirements_lock_cuda12_arm.txt:634
    • 建议:source 文件改为 direct URL + platform marker,但 lockfile 未重新生成。需在 aarch64 host 上运行 bazel run //deps:requirements_cuda12_arm.update 重新生成 lockfile,使 lockfile 也反映 URL 形式的 flash-attn 依赖。当前不影响构建(hash 仍匹配同一 wheel),但 lockfile 与 source 语义有偏差。
  • tensorrt-cu12-libs lockfile 缺少 platform_machine guard @ deps/requirements_lock_torch_gpu_cuda12_9.txt:3830
    • 建议:运行 bazel run //deps:requirements_torch_gpu_cuda12_9.update 重新生成 lockfile,使 platform_machine guard 从 source 文件传播到 lockfile。当前 lockfile 仅由 x86 pip_parse 消费,不会导致实际安装问题,但 source/lockfile 不一致会在未来 lockfile 审计中造成混淆。

P3

  • ROCm aiter 包降级可能影响 MI300X 推理性能 @ arch_config/arch_select.bzl:59
    • 建议:确认降级是否为兼容性需要。如果是 torch 版本变更导致的兼容问题,建议在注释中说明原因。
  • whl_reqs transformers 版本从 4.57.1 降至 4.51.2 @ rtp_llm/BUILD:565
    • 建议:确认 4.51.2 已覆盖所有已支持模型的 tokenizer。若后续需要升级,应同步重新生成 lockfile。当前注释已说明操作流程,可接受。
  • README_cn.md 仍残留 cuda11/cuda12 旧引用 @ README_cn.md:66
    • 建议:更新 wheel 示例行,使用 cuda12_9 版本的 whl 包名和说明,与上方 requirements 引用保持一致。
  • README_cn.md 仍引用过时的 cuda11 wheel 示例 @ README_cn.md:63
    • 建议:更新 wheel 示例为当前版本和 cuda12_9 变体,或添加 placeholder 说明用户应从 release page 获取对应 wheel
  • arch_select.bzl 加载了未使用的 requirement_gpu_cuda12 @ arch_config/arch_select.bzl:3
    • 建议:已有 TODO 标记,可在 internal overlay 迁移后一并删除;当前无实际风险
  • 重复 pip_parse 解析同一 4400 行 lockfile 增加 WORKSPACE 加载开销 @ deps/pip.bzl:78
    • 建议:当前开销是纯 Starlark 解析(毫秒级),短期可接受。TODO 标记已存在,建议在内部 overlay 迁移到 @pip_gpu_cuda12_9_torch 后尽快移除此 alias 和 WORKSPACE 中对应的 install_deps() 调用,减少 WORKSPACE 评估时间。
  • 新增 torch_2.9_py310_cuda_arm http_archive 仅有单一下载 URL @ deps/http.bzl:60
    • 建议:参考 rules_pkg 的双 URL 模式,为关键 wheel 添加 OSS mirror 作为 fallback(已在 TODO Phase 5 中规划)。考虑优先级:先为 ARM torch wheel 添加 rtp-opensource OSS 备份。

Checklist ✅ (25 items passed)

Strengths

  • multi_build_script / multi_test_script 增加 PID 跟踪和 EXIT_CODE 传播,修复了多节点构建/测试失败被静默吞没的问题,避免在错误状态下浪费 GPU 资源
  • 修复了 multi_test_script 中 $TP_SIZE"] 和 $MODEL_TYPE"] 的 shell 语法 bug(缺少空格导致 -z 校验永远不触发),防止无效参数浪费多节点 GPU 时间
  • 清理 cuda12_2/cuda12_6/cpu/arm 等弃用平台配置,简化 select() 分支,降低 Bazel 分析复杂度
  • BUILD.pytorch torch_libs linkopts 从 cuda_pre_12_9 + cuda12_9_x86 两分支合并为 using_cuda12_9 一个分支,正确覆盖 ARM GPU (GB200) 场景
  • 修复了 multi_runner.sh 中两处 shell 语法错误($TP_SIZE"]$MODEL_TYPE"] 缺少空格),原代码在 bash 严格模式下会报错
  • multi_build_script / multi_test_script 升级为 PID 追踪 + exit code 传播,不再静默吞掉远程节点失败
  • START_PORT 默认值设置移到 GANG_CONFIG_STRING 构建之前,修复了原代码中 START_PORT 可能为空的 bug
  • 平台配置清理策略清晰:已删除 config 的 config_setting 保留为 legacy alias 并标注 TODO(pip_unify),避免内部代码断裂
  • 向后兼容别名有清晰的 TODO(pip_unify) 标记和迁移路径说明,避免了内部构建中断
  • pip_parse 的 lazy 特性确保未使用的 alias 不会触发实际 wheel 下载,运行时零开销

# Conflicts:
#	deps/requirements_base.txt
#	deps/requirements_lock_cuda12_arm.txt
#	deps/requirements_lock_rocm.txt
#	deps/requirements_lock_torch_arm.txt
#	deps/requirements_lock_torch_cpu.txt
#	deps/requirements_lock_torch_gpu_cuda12.txt
#	deps/requirements_lock_torch_gpu_cuda12_9.txt
#	rtp_llm/BUILD
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/7 · P3/10

lgtm ready to ci

Non-blocking Suggestions

P2

  • multi_kill_script / multi_copy_script 未同步错误传播改进 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:52
    • 建议:将 multi_kill_script 和 multi_copy_script 中的并行等待也改为 PID 追踪 + 逐个 wait 的模式,与 multi_build_script / multi_test_script 保持一致,避免 scp/ssh 失败时静默忽略
  • multi_copy_script 子进程缺少 set -e,scp 失败后继续执行后续 scp @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:86
    • 建议:在子进程开头加 set -e,与 multi_build_script / multi_test_script 一致
  • multi_kill_script 未同步改进错误传播逻辑 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:64
    • 建议:对 multi_kill_script 也应用相同的 PID 跟踪 + EXIT_CODE 传播模式,保持一致性。虽然 kill 操作失败不太严重,但调用者无法知道是否所有节点都成功停止了。
  • 三份 pip_parse 解析同一 lockfile,增加 WORKSPACE 加载开销 @ deps/pip.bzl:57
    • 建议:这是已知的向后兼容临时方案(注释中有 TODO(pip_unify)),Starlark 解析开销相比 wheel 下载可忽略。建议在 internal overlay 迁移完成后及时清理 pip_gpu_cuda12_torch 别名,减少 WORKSPACE 冷加载时间(预计可节省 ~1-2 秒解析时间)。当前可接受。
  • datasets 包从 requirements 源文件中移除但仍存在于 lockfile 中 @ deps/requirements_torch_gpu_cuda12_9.txt:1
    • 建议:datasets 在 lockfile 中通过传递依赖保留了下来(可能通过 auto-gptq 等间接依赖),所以功能不受影响。但如果后续 lockfile 重新生成,datasets 可能因为不再是直接依赖而被移除。建议:如果 smooth_quant_convert 工具仍需要 datasets,应将其加回 requirements_torch_gpu_cuda12_9.txt 作为显式依赖。
  • tabulate 版本在 ARM lockfile 与 cuda12_9 源文件不一致 @ deps/requirements_lock_cuda12_arm.txt:3497
    • 建议:如果需要版本一致性,在 requirements_cuda12_arm.txt 中也显式 pin tabulate==0.9.0;否则只是小版本差异可以接受。
  • rtp-kernel 版本在 ARM 和 x86 lockfile 之间不同 @ deps/requirements_cuda12_arm.txt:15
    • 建议:确认两个 rtp-kernel wheel 确实是同一 commit 的不同平台构建(x86 vs aarch64),如果是则可接受。如果意外使用了错误平台的 wheel,可能导致 import 或 symbol 错误。

P3

  • README_cn.md 安装示例与新版本不一致 @ README_cn.md:66
    • 建议:更新 whl 包安装示例为 cuda12_9 对应版本,或改为通用说明引导用户查看 release page
  • arch_select.bzl requirement() 默认分支语义变化 @ arch_config/arch_select.bzl:22
    • 建议:当前行为与移除 CPU/ARM 平台支持的目标一致,建议确认内部 overlay 的 arch_select.bzl 是否也做了对应调整
  • ROCm aiter 版本降级可能影响 ROCm 推理性能 @ arch_config/arch_select.bzl:59
    • 建议:确认 aiter 降级是有意为之(兼容性修复),或在 ROCm 平台上对比降级前后的 kernel 性能基线。
  • requirement_gpu_cuda12 导入后未在开源 arch_select.bzl 中使用 @ arch_config/arch_select.bzl:3
    • 建议:已有 TODO 标注,可在内部 overlay 迁移完成后移除此 import,避免加载不必要的 .bzl 文件。
  • README_cn.md 仍引用 cuda11 wheel 示例 @ README_cn.md:61
    • 建议:既然 requirements 已更新为 cuda12_9,示例 whl 也应更新为 cuda12_9 版本,或至少移除过时的 cuda11 示例描述。
  • test_xqa_batch_decode 新增 manual tag 未说明原因 @ rtp_llm/models_py/kernels/cuda/test/BUILD:68
    • 建议:添加注释说明为何将此测试标记为 manual(是暂时禁用、环境限制还是已被其他测试覆盖)。
  • ROCm pip_parse timeout 远高于其他配置(12000 vs 3600) @ deps/pip.bzl:100
    • 建议:这个超时值从原始代码继承,可能是因为 ROCm wheel 体积大或 OSS 下载慢。建议添加注释说明原因,或在网络条件改善后尝试降低到 7200。对构建正路径无性能影响,仅影响超时等待上限。
  • 文档中 cuda12_6→cuda12_9 替换全面且一致 @ docs/start/install.md:31
    • 建议:文档更新与配置变更一致,无遗漏。install.md 中还额外移除了冗余的 --test_output 和 --test_env 参数(这是 build 命令不需要的),改善了用户体验。
  • 文档中 lockfile 生成工具描述与实际不一致 @ docs/references/Update-whl-Deps.md:31
    • 建议:将文档中的 lockfile 生成工具描述从 'pip-compile' 更新为 'uv',保持与实际 lockfile 头部一致。同时 line 37 的 '--extra-index-url' 应更新为 '--index-url'(主索引)+ 多个 '--extra-index-url'。
  • 文档示例中 transformers 版本与实际 pin 不一致 @ docs/references/Update-whl-Deps.md:17
    • 建议:将示例中的 transformers 版本更新为当前实际 pin 的 4.51.2,或使用明确的占位符如 'transformers==X.Y.Z' 说明这只是示例。

Checklist ✅ (25 items passed)

Strengths

  • 修复了 multi_runner.sh 中两处 shell 语法 bug:$TP_SIZE"]$MODEL_TYPE"] 缺少空格导致 -z 校验无效,这是重要的健壮性修复
  • multi_build_script / multi_test_script 新增 PID 追踪 + 逐个 wait 的错误传播模式,子进程加 set -e,并行 SSH 任务失败不再被静默忽略
  • BUILD.pytorch torch_libs 使用 using_cuda12_9 (含 ARM) 替代分开的 cuda_pre_12_9 / using_cuda12_9_x86,修复了 ARM CUDA 构建缺少 CUDA 链接库的问题
  • 保留 using_arm / using_cpu / cuda_pre_12_9 / pip_gpu_cuda12_torch 作为带 TODO 标记的向后兼容别名,避免内部源码在迁移完成前出现构建中断
  • WORKSPACE 新增 rtp_opensource_deps 仓库,为内部 overlay 提供稳定的开源 deps 引用句柄,设计合理
  • multi_runner.sh 修复了 [ -z "$TP_SIZE"][ -z "$MODEL_TYPE"] 的 shell 语法错误(缺少空格),此前验证门控可能静默失败导致参数缺失的性能测试继续执行
  • build/test 函数新增 PID 跟踪 + EXIT_CODE 传播,任意节点构建/测试失败会正确退出而非静默继续,避免浪费多节点测试资源
  • ARM 平台 torch 从 CPU-only 2.3 升级到 CUDA 2.9,x86 从 torch 2.6 升级到 2.8,可利用更新的 PyTorch 性能优化
  • pip 依赖从硬编码 URL 统一到 PEP 503 索引 + 版本约束,显著改善了可维护性和依赖解析性能(resolver 可并行查找)
  • CUDA/ROCm 索引严格分离(PIP_CUDA_EXTRA_ARGS / PIP_ROCM_EXTRA_ARGS),避免了 resolver 对不相关索引的无效查询

@wht21

wht21 commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

internal source has been updated, please review the changes!

…ssertions

- qwen2_vl VisionAttention: add missing self.head_dim; fix bool-add mask
  leak by switching to masked_fill(~mask, -inf) (matches SDPA semantics)
- OpenaiEndpoint::extract_generation_config: guard chat_render_/tokenizer_
  before deref to avoid null-pointer crash
- test_xqa: assert support() results in test_support; convert silent
  return to self.skipTest in _test_decode_correctness
- deepseek_vl2/_create_config & kimi_k25/_read_top_config: raise
  FileNotFoundError instead of silently returning None/{} on missing config.json
- TensorPbConvert::torchToPb: move tensor to CPU before serialization to
  avoid reading GPU memory as host bytes
- embeding_test: randint upper bound = embedding table rows (vocab), not hidden_size
- tau2_bench_comparer: tarfile.extractall(filter='data') to block path traversal
- QueryConverter::transMMInputsPB: take vector by const ref instead of by value
- deepgemm_wrapper: globals().get(name) instead of getattr(globals(), ...)
  which never matched (dict has no such attribute), forcing re-init every call
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/7 · P3/3

Blocking Issues

P1

  • getDebugInfo() 中 tokenizer_/chat_render_ 未做空指针检查 @ rtp_llm/cpp/api_server/openai/OpenaiEndpoint.cc:120
    • 建议:在 getDebugInfo() 中对 tokenizer_ 和 chat_render_ 也添加空指针检查,与 extract_generation_config() 和构造函数保持一致。例如 prompt 部分可以 fallback 到 rendered_prompt,tokenizer_info/renderer_info 可以设为空字符串。

Non-blocking Suggestions

P2

  • torchToPb 新增 .to(kCPU) 隐式同步,部分调用方已手动做了 CPU 拷贝 @ rtp_llm/cpp/model_rpc/TensorPbConvert.cc:57
    • 建议:此修改是正确性修复(GPU tensor 直接 data_ptr() 会崩溃),但 PrefillRpcServer.cc:310-317 已经手动做了 .cpu() 转换,导致一次冗余的 is_cuda() 检查。建议在函数注释中说明 'accepts GPU tensors — will copy to CPU if needed',让调用方知道无需提前转 CPU,统一由 torchToPb 处理,去掉 PrefillRpcServer 中的手动 .cpu() 调用以减少冗余代码。
  • VisionAttention 中 ~attention_mask 创建临时 tensor @ rtp_llm/multimodal/multimodal_mixins/qwen2_vl/modeling_qwen2_vl.py:197
    • 建议:可以在构造 attention_mask 时直接反转逻辑(初始化为 True,attended 区域设为 False),避免 ~ 操作的临时分配。但此路径仅在 eager 模式使用(默认 sdpa/flash_attn),影响极小。
  • multi_kill_script / multi_clean_script 仍用 bare wait,失败被吞 @ rtp_llm/test/perf_test/multi_node/multi_runner.sh:101
    • 建议:将 multi_kill_script 和 multi_clean_script 也改为 PIDS 数组 + 逐个 wait + EXIT_CODE 传播的模式,与 build/test 保持一致。
  • tarfile.extractall(filter="data") 在 Python < 3.10.12 上不可用 @ rtp_llm/test/smoke/tau2_bench_comparer.py:152
    • 建议:加版本保护:若 sys.version_info < (3, 10, 12) 则不传 filter 参数,或确认 Docker 镜像中 Python >= 3.10.12。
  • cuda_pre_12_9 config_setting 保留但 .bazelrc 中 cuda12 不再定义 using_cuda12_9_x86=false @ BUILD:22
    • 建议:验证 internal source 中是否仍有 select 依赖 cuda_pre_12_9,若有则确保 cuda12 config 在 .bazelrc 中正确设置 using_cuda12_9_x86=false(当前 cuda12 已设置此值,应无问题),并尽快迁移后删除。
  • 三个 pip_parse 指向同一锁文件,WORKSPACE 加载开销冗余 @ deps/pip.bzl:57
    • 建议:当前已有 TODO 注释标注 pip_gpu_cuda12_torch 是向后兼容别名。可通过 Starlark 的 native.existing_rule() 检查是否已注册,或在内部 overlay 迁移完成后尽快移除重复声明,减少 WORKSPACE parse 时间(每个 pip_parse 都会读取并解析完整锁文件)。pip_ppu_torch 也是相同锁文件的 alias,建议合并时考虑统一处理。
  • docs/benchmark/benchmark.md 源文件已更新但对应 HTML 构建产物可能未重新生成 @ docs/benchmark/benchmark.md:1
    • 建议:重新构建文档(如 make html)以使 build/ 下的 HTML 与源 .md 文件一致,或者将 docs/build/ 添加到 .gitignore 避免提交生成物。

P3

  • pip.bzl 保留 PIP_EXTRA_ARGS 向后兼容别名可能导致误用 @ deps/pip.bzl:40
    • 建议:PIP_EXTRA_ARGS 默认指向 CUDA 索引,如果 ROCm 调用者误引用该别名会静默拉取错误的 PyTorch 包。建议在内部 overlay 完成迁移后移除此别名,或添加 buildifier 检查确保 ROCm BUILD 不使用 PIP_EXTRA_ARGS。
  • compile_pip_requirements 未覆盖 cpu/arm 场景的 lockfile 再生入口 @ deps/BUILD:47
    • 建议:可在 deps/BUILD 添加简短注释说明 CPU 和旧 CUDA12 场景已由 cuda12_9 lockfile 统一覆盖(或不再支持独立 CPU-only 构建)
  • docs/references/Update-whl-Deps.md 示例中缺少 --index-url 说明 @ docs/references/Update-whl-Deps.md:35
    • 建议:可补充说明 lockfile 头部的 --index-url 由 PIP_CUDA_EXTRA_ARGS / PIP_ROCM_EXTRA_ARGS 控制,避免手动编辑

Checklist ✅ (56 items passed)

Strengths

  • 修复 Qwen2-VL VisionAttention 注意力掩码逻辑:旧代码用 attn_weights + bool_mask(0/1 偏置),无法正确屏蔽跨序列注意力;新代码用 masked_fill(-inf) 正确实现因果掩码
  • TensorPbConvert::torchToPb 新增 .to(torch::kCPU),防止 GPU tensor 直接调用 data_ptr() 导致序列化错误或非法内存访问
  • deepgemm_wrapper: getattr(globals(), symbol, None) → globals().get(symbol),修复了对 dict 对象做属性查找(永远返回 None)的逻辑错误,使延迟初始化的重复调用检查生效
  • embeding_test: randint 上界从 hidden_size 改为 w.shape[0](vocab_size),修复了可能生成越界索引的测试 bug
  • multi_runner.sh 修复两处 bash test 表达式语法错误($TP_SIZE"] → $TP_SIZE" ]),并改进并行 SSH 的错误传播(PID 追踪 + EXIT_CODE 聚合)
  • DeepSeekVL2 和 KimiK25 的 _read_top_config / _create_config 将静默返回 None/空 dict 改为 raise FileNotFoundError,避免后续代码在无效状态上运行
  • tarfile.extractall 添加 filter='data' 参数,防范 Python 3.12+ 的路径穿越安全风险
  • QueryConverter::transMMInputsPB 参数从值传递改为 const 引用,避免不必要的 vector 拷贝
  • 将 PIP_EXTRA_ARGS 按平台拆分为 PIP_CUDA_EXTRA_ARGS 和 PIP_ROCM_EXTRA_ARGS,避免 uv 在锁文件再生成时向 cu129 和 rocm7.2 索引双向查询所有包,显著降低依赖解析时间
  • 清理了已废弃的 cuda12/cu126/cpu/arm 等旧配置(http_archive、pip_parse、requirements 文件),减少 WORKSPACE 加载解析量
  • 文档 install.md 正确移除了 bazel build 命令中无意义的 --test_output 和 --test_env 参数

…sformers 5.2.0)

  Cross-platform uv resolve (--python-platform aarch64-manylinux_2_28) on x86 so the
  aarch64 CUDA lock matches x86/ROCm at transformers/sentence-transformers 5.2.0.
  Custom aarch64 wheels resolved from the public rtp-opensource bucket; torch==2.9.0+cu129.
  No absolute-path leaks. No aarch64 hardware needed.
@LLLLKKKK

LLLLKKKK commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/1 · P3/0

lgtm ready to ci

Non-blocking Suggestions

P2

  • _safe_extractallSmokeException 构造参数缺失 @ rtp_llm/test/smoke/tau2_bench_comparer.py:47
    • 建议:按项目约定改为 raise SmokeException(QueryStatus.OTHERS, "..."),两处 unsafe path/link target 分支保持一致,这样 smoke runner 能正确归类失败原因。

Checklist ✅ (54 items passed)

Strengths

  • cuda12_6/CPU/ARM 配置迁移同步到了文档、perf 脚本和 requirements 引用,未看到残留旧配置消费者。
  • XQA support 测试从只打日志变为断言,embedding 测试也修正了 token id 采样范围,测试有效性有提升。
  • TensorPbConvert::torchToPb 对非 CPU tensor 先搬到 CPU,再读取 data_ptr(),避免 RPC 序列化直接读 device memory。

@wht21

wht21 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

internal source has been updated, please review the changes!

baohengyi added 2 commits July 9, 2026 04:40
The cuda12_arm lock (generated with uv) otherwise resolved older
pydantic 2.7.0 / safetensors 0.6.2 / regex 2025.9.18 than pip-compile
picks for x86/ROCm (2.13.4 / 0.8.0 / 2026.6.28), despite no constraint
and aarch64 wheels being available. Pin all three in the shared base so
every platform locks to the same versions. Requires regenerating the
cuda12_arm lock.
@LLLLKKKK

LLLLKKKK commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/1 · P3/0

Blocking Issues

P1

  • tokenizer/render 缺失时会静默忽略请求级生成约束 @ rtp_llm/cpp/api_server/openai/OpenaiEndpoint.cc:81
    • 建议:对 tokenizer/render 依赖的请求字段改为 fail-fast 返回明确错误;或在无 renderer 时用 tokenizer 提供等价编码路径,并补充空 tokenizer/render + stop/select_tokens_str/sp_advice_prompt 的单测,验证不会静默放宽生成语义。
  • 新增注释暴露了内部依赖源主机名 @ deps/pip.bzl:4
    • 建议:删除具体内部主机名,改成“内部-only package index”这类泛化描述;同时保留当前 --index-url 覆盖行为和公开源说明即可。

Non-blocking Suggestions

P2

  • ARM 构建配置名文档与 bazelrc 不一致 @ docs/start/install.md:42
    • 建议:要么把文档改成 --config=cuda12_9_arm,要么在 .bazelrc 增加 build:cuda12_arm --config=cuda12_9_arm 兼容别名,并同步 README/脚本中的推荐配置名。

Checklist Violations (2 fail / 54 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue ARM 构建配置名文档与 bazelrc 不一致
    安装文档声明支持 --config=cuda12_arm,但 .bazelrc 中实际定义的是 build:cuda12_9_arm,没有 cuda12_arm alias。用户按新文档执行会得到未知 config,而 ARM 依赖和 select 分支实际需要 using_cuda12_arm=true
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue tokenizer/render 缺失时会静默忽略请求级生成约束
    ChatService 会把 extract_generation_config() 的结果直接交给生成流;但当 chat_render_tokenizer_ 为空且请求带 stopselect_tokens_strsp_advice_prompt 时,新代码只打印 warning 并继续返回 config。下游停止匹配和 select token 逻辑依赖 token id,结果是请求被接受但约束未生效。

Strengths

  • 依赖入口从 cuda12 收敛到 cuda12_9WORKSPACEarch_select.bzl、source requirements 与主要 lockfile 的 torch/torchvision pin 基本保持一致。
  • TensorPbConvert::torchToPb 对非 CPU tensor 先拷到 host 再读取,避免了直接把 GPU data_ptr() 当 host 字节序列化的严重错误。
  • multi_runner.sh 修正了 shell [ -z "$VAR" ] 空格问题,并开始汇总远端子进程退出码,比原来更容易暴露多节点失败。

baohengyi added 4 commits July 9, 2026 06:13
When chat_render_ is null, encode request stop words via the tokenizer
(equivalent token-id path) instead of skipping; when neither renderer nor
tokenizer is available, or when select_tokens/sp_advice_prompt are requested
without a tokenizer, fail fast with std::runtime_error (mapped to an error
response by HttpApiServer's top-level catch). Uses std::runtime_error rather
than HttpApiServerException to avoid a cross-layer dependency from the
low-level :openai library. Adds unit tests for the fallback and fail-fast paths.
- install.md: --config=cuda12_arm -> --config=cuda12_9_arm (matches .bazelrc)
- pip.bzl: generalize internal-index hostname references in comments
pip (used by rules_python at build time) picked the PyPI sdist over the
bucket's plain linux_x86_64 wheel for fast-hadamard-transform, then failed
building it (setup.py imports torch, absent in the isolated build env),
aborting cuda12_9 analysis. Reference deep-ep, deep-gemm, fast-hadamard-transform,
fast-safetensors, fastsafetensors, flash-mla and rtp-kernel by explicit
rtp-opensource OSS wheel URL (per-arch, matching flash-attn/flashinfer) so pip
installs the wheel directly instead of resolving/ building from an index. All
18 wheel URLs verified reachable (HTTP 200). Requires regenerating the cuda12_9
and cuda12_arm lockfiles.
@LLLLKKKK

LLLLKKKK commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/1 · P3/0

Blocking Issues

P1

  • wheel 依赖元数据未同步新增 pin @ rtp_llm/BUILD:581
    • 建议:同步更新 whl_reqs:至少将 pydanticsafetensors 改成与 requirements_base.txt 相同的固定版本,并加入 regex==2026.6.28。如果 wheel metadata 有意保持宽松,需要在依赖策略里说明为什么 lockfile 与发布 metadata 可以不一致,并补 wheel 安装路径验证。

Non-blocking Suggestions

P2

  • tarball 安全提取分支构造 SmokeException 参数不完整 @ rtp_llm/test/smoke/tau2_bench_comparer.py:47
    • 建议:改为 raise SmokeException(QueryStatus.OTHERS, "..."),两个 unsafe 分支都同步修正,并加一个包含 ../ member 的小单测覆盖 Python fallback 分支。

Checklist Violations (2 fail / 54 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue wheel 依赖元数据未同步新增 pin
    本 PR 在 requirements_base.txt 明确固定 pydantic==2.13.4regex==2026.6.28safetensors==0.8.0,三份 lockfile 也同步固定;但 whl_reqs 仍写 safetensorspydantic,且没有 regex pin。通过 wheel 安装会重新解析这些依赖,绕过本次跨平台一致性约束。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue tarball 安全提取分支构造 SmokeException 参数不完整
    _safe_extractall() 在发现 unsafe member 时调用 SmokeException(message),但 SmokeException 构造函数需要 (QueryStatus, message)。Python 3.10 无 filter 参数且 tarball 命中 unsafe path 时,会抛 TypeError,错误语义不再是 smoke 的 QueryStatus.OTHERS

Strengths

  • OpenAI endpoint 对空 renderer/tokenizer 的 stop words、debug info 和 select token 路径补了 fail-fast 或 fallback,测试覆盖了新增分支。
  • cuda12 兼容别名指向 cuda12_9,并清理了多节点 perf 脚本里旧 cuda12_6 配置,迁移方向清晰。

baohengyi added 2 commits July 9, 2026 07:33
The wheel's install_requires listed unpinned safetensors/pydantic and no
regex, so installing rtp_llm from the wheel would re-resolve them and bypass
the cross-platform version pins added to requirements_base.txt and the three
lockfiles. Pin safetensors==0.8.0, pydantic==2.13.4 and add regex==2026.6.28.
SmokeException requires (QueryStatus, message); the unsafe-tarball-member
branches passed only the message, so hitting an unsafe path/link raised
TypeError instead of a SmokeException(QueryStatus.OTHERS, ...).
@LLLLKKKK

LLLLKKKK commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/0 · P3/0

Blocking Issues

P1

  • lockfile 更新 target 仍引用错误的 requirements_base label @ deps/BUILD:51
    • 建议:如果公开的更新入口保持 //deps:*.update,把三个 extra_data 改为 ":requirements_base.txt";如果实际入口改为外部 repo target,则同步更新 lockfile 头部和文档中的命令,并验证三个 lock 更新 target 都可分析执行。

Checklist Violations (1 fail / 54 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue lockfile 更新 target 仍引用错误的 requirements_base label
    deps/BUILD 的三个 compile_pip_requirements 仍用 extra_data = ["//:requirements_base.txt"],但仓库根包没有这个文件,文件实际在 deps/ 包内;文档要求运行 bazel run //deps:requirements_torch_gpu_cuda12_9.update,该入口会解析到根包 label,导致 lockfile 无法按文档再生成。

Strengths

  • OpenAI endpoint 对 stop words、select_tokens、sp_advice_prompt 的空 tokenizer/render 路径从静默丢弃改为 fallback 或 fail-fast,并补了针对性单测。
  • TensorPB 序列化在非 CPU tensor 上先搬到 CPU,避免直接按 host 指针读取 device memory 的错误。
  • XQA support 测试从日志观察改为明确断言,测试有效性比原来更强。

baohengyi added 2 commits July 9, 2026 07:53
…se label

The three lockfile update targets referenced extra_data = ["//:requirements_base.txt"],
but requirements_base.txt lives in the deps/ package (exported there), not the
repo root. The documented 'bazel run //deps:<cfg>.update' entry points therefore
failed to analyze against a nonexistent root label. Use ":requirements_base.txt".
@LLLLKKKK

LLLLKKKK commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/0 · P3/0

Blocking Issues

P1

  • ROCm wheel metadata 没有同步新的 requirements/lock 依赖集合 @ arch_config/arch_select.bzl:59
    • 建议:把 arch_config/arch_select.bzl 的 ROCm whl_deps()deps/requirements_rocm.txt/lockfile 对齐,至少同步 amdsmi 来源、torch/torchvision/triton 版本以及 fast-safetensors/fastsafetensors。最好用同一份结构化依赖源生成 requirements 和 wheel metadata,避免后续再次漂移。
  • tau2 tarball 的旧 Python fallback 仍使用不完整的解包安全策略 @ rtp_llm/test/smoke/tau2_bench_comparer.py:55
    • 建议:旧 Python 分支不要回落到裸 extractall()。逐个 member 校验并只允许 regular file/directory,必要时拒绝所有 link/special file,清理 uid/gid/mode 后单独 extract;同时补充包含 ..、绝对路径、link、FIFO/device 等成员的单测,确保旧 Python 路径和 filter="data" 行为一致。

Checklist Violations (3 fail / 54 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue ROCm wheel metadata 没有同步新的 requirements/lock 依赖集合
    本 PR 将 ROCm requirements/lock 更新为新的命名依赖集合,包含更新后的 amdsmi 来源以及 fast-safetensorsfastsafetensorstorchtorchvisiontriton 等 pin;但 whl_deps() 的 ROCm 分支仍只写旧的 pyrsmi/amdsmi/aiter/triton-kernels 子集。ROCm wheel 安装时会得到与 CI/lockfile 不同的依赖环境。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue tau2 tarball 的旧 Python fallback 仍使用不完整的解包安全策略
    新 fallback 先检查成员路径和 linkname,随后在旧 Python 分支调用未带 filter 的 tar.extractall()。该自定义检查没有覆盖 filter="data" 的完整语义,例如拒绝特殊文件类型、清理 owner/mode 等;而 tarball 来自可配置外部 URL,且注释说明该 fallback 会在 smoke 容器路径生效。目前也没有恶意 tar 成员回归测试。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue tau2 tarball 的旧 Python fallback 仍使用不完整的解包安全策略
    新 fallback 先检查成员路径和 linkname,随后在旧 Python 分支调用未带 filter 的 tar.extractall()。该自定义检查没有覆盖 filter="data" 的完整语义,例如拒绝特殊文件类型、清理 owner/mode 等;而 tarball 来自可配置外部 URL,且注释说明该 fallback 会在 smoke 容器路径生效。目前也没有恶意 tar 成员回归测试。

Strengths

  • Bazel cuda12 兼容 alias 指向 cuda12_9,降低旧命令误配 cu126/cu129 依赖的风险。
  • OpenaiEndpoint 对空 tokenizer/render 的处理更明确,并补充了对应单测。
  • XQA support 测试从仅打印 warning 改为断言,提升了测试有效性。

baohengyi added 3 commits July 9, 2026 14:38
whl_deps() ROCm branch only listed pyrsmi/amdsmi(old sinian source)/aiter/
triton-kernels, so the ROCm wheel's install_requires diverged from the
regenerated lockfile. Align it: amdsmi -> rtp-opensource bucket, and add the
triton URL, fast-safetensors, fastsafetensors, torch and torchvision pins that
requirements_rocm.txt/lockfile carry.
The pre-3.12 fallback did a bare extractall() after only path/linkname checks.
Approximate tarfile's data filter instead: allow only regular files and
directories (reject sym/hard links and device/fifo/char/block special files),
strip archive ownership and setuid/setgid/sticky + group/other write bits, and
extract only the vetted members. Verified locally against ../ traversal,
absolute paths, symlink, hardlink and FIFO members.
@LLLLKKKK

LLLLKKKK commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/0 · P3/0

Blocking Issues

P1

  • CUDA 12 wheel 输出名仍标记为 cuda121 @ rtp_llm/BUILD:707
    • 建议:将 rtp_llm_cuda12package_name 同步为 cu129,例如 rtp_llm-%s+cuda129,或改成不会承诺具体 CUDA ABI 的名称,并同步相关 release 脚本/文档。

Checklist Violations (1 fail / 54 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue CUDA 12 wheel 输出名仍标记为 cuda121
    本 PR 已将 --config=cuda12 指向 cuda12_9,依赖也切到 torch==2.8.0+cu129,但 rtp_llm_cuda12 目标仍输出 rtp_llm-%s+cuda121...whl。用该目标发布时,wheel 文件名与实际 CUDA/PyTorch ABI 不一致,容易让发布脚本或用户选错包。

Strengths

  • cuda12_6/torch2.6 引用基本清理干净,cuda12 alias、pip index 分离和 lockfile 关键包版本之间有明确注释。
  • OpenAI endpoint 对 request stop words、select_tokenssp_advice_prompt 的空 tokenizer/render 路径改为 fallback 或 fail-fast,并补了单测。
  • TensorPbConvert 在序列化 GPU tensor 时先转 CPU,避免直接按 host bytes 读取 device memory。
  • XQA support 测试从只打印结果改为断言,multi-node 脚本也开始传播远端失败退出码。

--config=cuda12 now maps to cuda12_9 with torch==2.8.0+cu129, but the
rtp_llm_cuda12 target still emitted rtp_llm-<ver>+cuda121.whl, mislabeling the
CUDA/PyTorch ABI and risking wrong package selection by release scripts/users.
Rename to +cuda129.
@LLLLKKKK

LLLLKKKK commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: LGTM

Summary: P0/0 · P1/0 · P2/0 · P3/0

lgtm ready to ci

Checklist ✅ (54 items passed)

Strengths

  • 依赖统一同时更新了 .bazelrcWORKSPACEarch_config/arch_select.bzldeps/pip.bzl 和文档,旧 cuda12/pip_gpu_cuda12_torch 入口保留了兼容别名,降低迁移期断裂风险。
  • OpenAI endpoint 对空 chat_render_/tokenizer_ 的处理从隐式空指针变为 fallback 或 fail-fast,并补了聚焦单测。
  • TensorPbConvert 在序列化非 CPU tensor 前显式搬到 CPU,修复了跨 RPC 读取 device memory 的正确性风险。
  • tau2 tarball 解包新增路径穿越和特殊文件防护,多节点 perf 脚本也开始汇总后台任务失败码,测试/运维路径更稳。

@wht21

wht21 commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

internal source has been updated, please review the changes!

@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/4 · P2/0 · P3/0

Blocking Issues

P1

  • 空对象防护没有覆盖真实 HTTP 服务边界 @ rtp_llm/cpp/api_server/openai/OpenaiEndpoint.cc:79
    • 建议:在 HttpApiServer 边界统一把 py::none 转为真正的空指针;render 不可用时不要注册 chat 路由,或在解引用前返回明确的客户端错误。补充从 HttpApiServer::start/v1/chat/completions 的集成测试。
  • GPU Tensor 序列化分支没有回归测试 @ rtp_llm/cpp/model_rpc/TensorPbConvert.cc:61
    • 建议:在现有 H20 target 中增加 CUDA tensor 的连续、非连续以及 FP16/BF16/INT32 round-trip 用例,并为 ROCm 提供对应覆盖,比较 shape、dtype 和完整 payload。
  • XQA CUDA Graph 测试被标记为 manual @ rtp_llm/models_py/kernels/cuda/test/BUILD:68
    • 建议:移除 manual 并让目标进入对应 GPU gate;若完整测试耗时过长,将关键 capture/replay case 拆成非 manual 的快速 target,仅把压力测试保留为 manual。
  • 独立功能混入依赖迁移大型 PR @ deps/requirements_base.txt:59
    • 建议:保留依赖/config/lockfile 为一个变更,将 API/RPC 修复、推理修复、安全解包、性能脚本和测试调整拆成独立 PR,并分别附带对应回归测试。

Checklist Violations (6 fail / 136 total)

General Principles Checklist

  • [6.1] Architecture — 状态不变量:创建/更新/失败/重试/回滚路径有效 → issue 空对象防护没有覆盖真实 HTTP 服务边界
    新增测试直接向 OpenaiEndpoint 传入 C++ nullptr;真实 HttpApiServer::start() 却会注册持有空 render 的 ChatService,而 chatCompletions() 在调用这些新 guard 前就解引用 render。pybind 启动路径还会把 py::none tokenizer 包装成非空 Tokenizer 指针。因此外部请求仍可能空指针崩溃或抛 Python 属性异常。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue 空对象防护没有覆盖真实 HTTP 服务边界
    新增测试直接向 OpenaiEndpoint 传入 C++ nullptr;真实 HttpApiServer::start() 却会注册持有空 render 的 ChatService,而 chatCompletions() 在调用这些新 guard 前就解引用 render。pybind 启动路径还会把 py::none tokenizer 包装成非空 Tokenizer 指针。因此外部请求仍可能空指针崩溃或抛 Python 属性异常。
  • [6.1] Quality — Mega-PR 已拆分为独立变更 → issue 独立功能混入依赖迁移大型 PR
    该 PR 包含 52 个文件和 57 个提交。除依赖、lockfile 与构建配置迁移外,还同时修改 OpenAI 空值语义、GPU Tensor RPC、Qwen vision attention、DeepGEMM、tar 解包、多节点脚本及 XQA 测试;这些改动均可独立回滚,合并后显著削弱 review、回滚和 bisect 的可控性。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue GPU Tensor 序列化分支没有回归测试
    新逻辑仅在 tensor 非 CPU 时执行 to(torch::kCPU),但现有 QueryConverterTest 的 FP32、BF16、scalar 和 non-contiguous case 全部创建 CPU tensor,本 PR 也未增加 GPU case。GPU multimodal/embedding 输出经过 RPC 时,device copy、stride 和 dtype 字节序列化仍没有生产边界覆盖。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue GPU Tensor 序列化分支没有回归测试
    新逻辑仅在 tensor 非 CPU 时执行 to(torch::kCPU),但现有 QueryConverterTest 的 FP32、BF16、scalar 和 non-contiguous case 全部创建 CPU tensor,本 PR 也未增加 GPU case。GPU multimodal/embedding 输出经过 RPC 时,device copy、stride 和 dtype 字节序列化仍没有生产边界覆盖。
  • [6.1] Tests — 被删除测试有等价替代覆盖 → issue XQA CUDA Graph 测试被标记为 manual
    净变更给 test_xqa_batch_decode 增加了 manual,仓库中也没有显式执行该 target 的 CI 引用。该文件覆盖真实 graph capture/replay、padding replay、cross-page replay 和 2D packed KV cache;同 PR 加强的 test_xqa.py 不包含这些路径,因此自动回归覆盖并未等价保留。

Strengths

  • 依赖源、主要平台 pin、lockfile 与 Bazel 选择链路整体保持一致,已清除删除配置的仓库内悬挂引用。
  • TensorPbConvert 增加 device-to-host 拷贝,避免直接把 GPU 地址当作主机内存序列化。
  • 多节点脚本开始传播后台任务失败,XQA support 测试也从仅记录日志改为真实断言。

@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/0 · P3/0

Blocking Issues

P1

  • CUDA wheel 元数据遗漏 torchvision 运行时依赖 @ arch_config/arch_select.bzl:78
    • 建议:在 x86 与 ARM 分支加入和对应 lockfile 一致的 torchvision pin,并增加从空环境安装生成 wheel 后导入多模态入口的测试。

Checklist Violations (3 fail / 136 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue CUDA wheel 元数据遗漏 torchvision 运行时依赖
    requirements_torch_gpu_cuda12_9.txtrequirements_cuda12_arm.txt 均直接要求 torchvision//rtp_llm:multimodal 也依赖该包;但 whl_deps() 的 x86 与 ARM 分支只返回 torch,仅 ROCm 分支包含 torchvision。因此 CUDA wheel 的 install_requires 不会安装它,干净环境直接安装 wheel 后,多模态模块会在顶层 import 处失败;当前也没有 clean-wheel import 测试覆盖该边界。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue CUDA wheel 元数据遗漏 torchvision 运行时依赖
    requirements_torch_gpu_cuda12_9.txtrequirements_cuda12_arm.txt 均直接要求 torchvision//rtp_llm:multimodal 也依赖该包;但 whl_deps() 的 x86 与 ARM 分支只返回 torch,仅 ROCm 分支包含 torchvision。因此 CUDA wheel 的 install_requires 不会安装它,干净环境直接安装 wheel 后,多模态模块会在顶层 import 处失败;当前也没有 clean-wheel import 测试覆盖该边界。

RTP-LLM Checklist

  • [A] 兼容性与配置 — 依赖、lockfile、wheel metadata、optional extras 和平台 override 必须同源一致;默认安装依赖不得包含明文 HTTP、内部 URL、个人绝对路径、本地 symlink/local_repository 或未同步 lock 的版本漂移 → issue CUDA wheel 元数据遗漏 torchvision 运行时依赖
    requirements_torch_gpu_cuda12_9.txtrequirements_cuda12_arm.txt 均直接要求 torchvision//rtp_llm:multimodal 也依赖该包;但 whl_deps() 的 x86 与 ARM 分支只返回 torch,仅 ROCm 分支包含 torchvision。因此 CUDA wheel 的 install_requires 不会安装它,干净环境直接安装 wheel 后,多模态模块会在顶层 import 处失败;当前也没有 clean-wheel import 测试覆盖该边界。

Strengths

  • CUDA 12.9 构建别名、平台依赖选择和迁移文档保持了较清晰的一致性。
  • 改进了 XQA 测试断言、多节点脚本错误传播、GPU Tensor 序列化及 tar 包解压安全性。

whl_deps() x86 and ARM branches returned only torch, so the CUDA wheel's
install_requires omitted torchvision even though the lockfiles require it and
//rtp_llm:multimodal imports it. A clean 'pip install rtp_llm-...+cuda129.whl'
would then fail at the multimodal top-level import. Pin torchvision to match
each lockfile (x86 0.23.0+cu129, ARM 0.24.0); ROCm already carried it.
@LLLLKKKK

Copy link
Copy Markdown
Collaborator

AI Code Review - PR #1124

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/0 · P3/0

Blocking Issues

P1

  • 公开安装命令未携带解析 CUDA 依赖所需的软件源 @ README_cn.md:65
    • 建议:将文档改为安装自带索引和哈希的 requirements_lock_torch_gpu_cuda12_9.txt,或在 requirements/命令中显式声明所需公开索引;同时增加一次干净容器中的文档安装 smoke,避免 Bazel 的 PIP_CUDA_EXTRA_ARGS 掩盖公开安装路径的问题。

Checklist Violations (1 fail / 136 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:外部 HTTP/RPC API、持久数据、配置、环境迁移安全 → issue 公开安装命令未携带解析 CUDA 依赖所需的软件源
    文档现在直接执行 pip3 install -r deps/requirements_torch_gpu_cuda12_9.txt。该源文件包含 torchtorchvision 等只能通过额外软件源解析的版本,却没有 index 指令;对应 lockfile 顶部则明确依赖额外索引。干净环境按文档执行会报找不到版本,无法继续安装 wheel。

Strengths

  • 三套 lockfile 的关键版本与 wheel metadata 已对齐,未发现重复依赖、缺失哈希或本地绝对路径残留。
  • OpenAI 请求约束在 tokenizer/renderer 缺失时改为显式 fallback 或 fail-fast,并补充了对应单测。
  • 旧构建配置和已删除 requirements 文件的仓库内引用已同步清理,并明确记录了构建配置迁移。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants