Files
obsidian/projects/auto-tuner/ali-optimization.md

14 KiB
Raw Permalink Blame History

TL;DR

从整理的与 Qwen 模型相关的优化 commit 可以看出: 大部分优化点比较工程化从常见的优化点方式出发数据流优化、算子级优化、初始化、长上下文等等哪里有钉子就哪锤头打哪case by case 的优化某一模型在某一配置下存在的性能问题。

可以看出仍然缺乏系统层的「自动优化」与「动态调优」,所有优化均为静态配置与人工调参(如:手写 fused_moe 的 json 配置、硬编码 warp/block 尺寸),优化主要针对已知 GPU 拓扑的静态 tuning缺少基于 runtime profiling 的动态优化层。

对比 DynamoLLM, NanoFlow, OrcaServe, AutoTP, MorphServe 已经探索了:自动并行拓扑搜索、异步调度重构与运行时自适应 FP8 策略

线上的 workflow 更接近于:测试性能有问题 -> 找到 bottleneck -> 解决问题

核心挑战system 的经典问题,抽象的通用性与优化的定制性。 做抽象之后:系统一致,容易得到通用性优化,但是针对每一模型可能达不到最优性能 不做抽象:每个模型都能灵活的在任意组件上手动调优性能,但成本高、难以通用

对于 MoE 的优化shared experts 计算与通信的重叠、kernel fuse

模型优化点总结

1. 并行化与数据流优化

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
Vision Data-Parallel 编码器路径 Qwen2-VL, Qwen3-VL c98be0a23, 70b808fe1, 3127274d0 支持在视觉塔中关闭TP、改为DP运行 视觉编码器张量大、TP通信过重 是,本质为 parallelism config search
Sequence-Parallel MoE dispatch Qwen3-Next, Qwen3-MoE vllm/model_executor/models/qwen3_next.py:183, 3127274d0 令 tokens 在 TP rank 之间切分后再送 EP防止重复专家调度 DeepEP / TP×EP 并行导致重复计算 是,本质需要的是类似 DynamoLLM根据 token 负载调整通信策略
Shared Fused MoE 重叠优化 Qwen3-Next shared_fused_moe.py, vllm/model_executor/models/qwen3_next.py:161 避免重复计算共享专家,节省计算 Shared expert 与 EP 重叠浪费算力 是,本质属于 DBO 搜索的一环
Fused MoE 内部 all-reduce Qwen3-MoE 4f510bc2 将 all-reduce 内嵌进专家执行阶段 TP>1 时额外一次 all-reduce 过慢 是,本质属于 DBO 搜索的一环
非阻塞数据流 + pinned buffer Qwen3-VL, Qwen2.5-VL b2155ed31, 2c1c7dfb3, 0426e3c5e, 67da5720d4, e283976f3 主机异步构建 seqlens 并异步拷贝到 GPU 避免 cudaSync 阻塞,多帧视频管线更流畅 否,取决于 runtime benchmark 观测 H2D/D2H 延迟
DeepEP 通信修正 (TP×EP) Qwen3-Next, Qwen3-MoE vllm/model_executor/models/qwen3_next.py:183, qwen3_moe.py:139,192 消除 EP 重复调度,避免多余 all-to-all 多维并行模式中重复专家调用 是,本质属于 DBO 搜索的一环

2. 内核与算子级优化

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
fast_pos_embed_interpolate 向量化 Qwen3-VL 30d08911f, af7dfb0d1, a6049be7 将 Python 循环替换为 meshgrid 张量操作 大图像/视频分辨率下插值耗时过高 否,过于 specific
Triton Interleaved MRoPE 核 Qwen3-VL cea91a32f, 3127274d0, c242c9803 用 Triton kernel 实现交织 3D RoPE 视觉-时序交错嵌入需 GPU 融合旋转
Fused RMSNorm 替代多次 norm Qwen3 dense / MoE / Next f80ae5bd, 82e64c7 RMSNorm 融合为单 kernel 以减少 launch 长上下文下 norm 成为热点 是,类似 NanoFlow 等可以自动搜索进行算子融合
O(n) inverse permutation Qwen2.5-VL 67da5720d4, e283976f3 取代 argsort 排序以降低 O(n log n) 复杂度 视觉窗口注意力频繁重排
Bool-mask → index_select Qwen3-Next 785d8b6 改为纯 GPU 索引避免 host copy MTP 多 token 预测频繁索引
FP8 batched expert kernels Qwen3-MoE compressed_tensors_moe.py:937,991 自动选择 FP8 Cutlass / Triton 专家核 MoE 中 expert 众多需 batched 执行 通用
LayerNorm tile 化 与 SM cache Qwen3-Next 82e64c7 Triton LN 按行块 tile 计算 减少 kernel launch + 提升 占用率 通用

3. 精度与存储路径优化FP8 / 量化 / KV Cache

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
FP8 KV-Cache 存储 Qwen2 da971ec7 允许 FP8 缓存 KV 对 长上下文 KV 占显存大
FP8 KV-Scale 重映射 Qwen2 MoE bd4397352 修正 FP8 缓存比例 加载 防止量化漂移
分离 QKVZ / BA 投影 Qwen3-Next ef7eefe1 (2025-09-18) 拆分 in-proj 以支持 FP8 checkpoint FP8 blockwise 加载需结构匹配
FP8 精度 guard 修正 Qwen3-MoE a258ad8b 调整量化 scale 计算 FP8 精度漂移 工程实践
4-bit bnb 预量化加载 Qwen3-MoE bitsandbytes_loader.py:467 支持 4bit BNB 权重 降低权重存储带宽 trivial
FP8 / Fused MoE 配置矩阵 Qwen3-Next, Qwen3-MoE 238c4c17, 482e52f56, 75334956c, 9f04d9d55, 12a8414d8, f82f7a899, 7a70a7189, 569bf1c9c, c733bd5e8 针对 GB200 / H200 / H100 等 GPU 提供 FP8 调参 json 不同 GPU SM 结构 差异大需 warp/block 适配 离线 profile 进行调优
ROCm FP8 配置 (MI300X) Qwen3 / MoE 2007d4d5, f5a3c655 ROCm 专用 Triton 块 配置 兼容 AMD 栈 工程实践

4. 初始化与加载

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
Max-token heuristics Qwen2/2.5-VL 2c5302fad 通过启发式计算最大 token 代替伪输入 启动时避免生成假图像
Cached profiling inputs + fast HF processor Qwen2-VL 1298c677, d49adea1 缓存启动探测 数据 以减少 初始化 模型启动耗时高 trivial
Rotary dispatch abstraction (CUDA/ROCm) Qwen series 5e4a8223c 动态选择后端 FlashAttn kernel 兼容 ROCm 与 CUDA 堆栈 工程实践

5. 推理路径与长上下文优化

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
Dual-chunk attention Qwen3 dense qwen3.py:118,199 支持 >128K 上下文 分块 KV 长上下文 KV 膨胀 是,根据负载在线自动决定是否切分
Gated DeltaNet linear attention Qwen3-Next vllm/model_executor/models/qwen3_next.py:206, 1266, 1292 融合 conv + recurrent 层 线性化 attention Prefill 阶段 计算 O(n²) 太高 否,需要结合模型调优选择合适的算法
Mamba-style state cache Qwen3-Next 1218, vllm/model_executor/layers/mamba/abstract.py:50 状态缓存 高效 布局 + 允许 speculative decode GDN/Mamba 混合 需要 状态 重用
Multi-Token Prediction (MTP) Qwen3-Next 785d8b6 (相关 MTP 路径) 重用 decoder 层 用于草稿 token 预测 提升 spec decode 吞吐 是,根据 metrics 自动决定 MTP 深度
Speculative metadata 构建 Qwen3-Next gdn_attn.py:22,61 gpu_model_runner.py:1374 预建 元数据 避免 draft 接受 重算 减少 prefill 延迟 工程实践

6. 多模态视觉流水线优化

优化点 适用模型 Commit(s) 优化说明 模型特性出发点 是否可以自动调优
reshape 替代 concat 拼接 Qwen3-VL, Qwen2.5-VL 0426e3c5, 2c1c7dfb 减少内存重新分配 图像批次拼接昂贵 是,图优化
缓存 vision dims 与 deepstack 拆分 Qwen3-VL 1dfea5f4 避免重复 .contiguous() 与 维度计算 多尺度视觉特征 频繁分块 runtime shape memory
Flash / xFormers / SDPA 适配 Qwen2.5-VL / Qwen3-VL 02ed8a1fb, 70b808fe1, 47c712621, c242c9803 统一不同 attention 后端 不同 GPU 和 视频 长度 需求 工程实践
Rotary window pipeline GPU 重写 Qwen2.5-VL 67da5720d4, e283976f3 预建 窗口 索引,减少 cudaMemcpy 重复 CPU→GPU 拷贝
Memoized seqlens 缓存 Qwen2-VL / Qwen3-VL 70b808fe1, 3127274d0 重用序列长度 元数据 视频帧结构 重复 计算多 工程实践

总结视图(跨类对照)

优化类别 代表模型 核心收益 代表 Commits
并行化与数据流 Qwen3-VL / Qwen3-Next / Qwen3-MoE 异步、少通信、高并发 b2155ed31, 0426e3c5e, 3127274d0
内核与算子 Qwen3-VL / Qwen3-Next / Qwen2.5-VL GPU 融合计算 30d08911f, cea91a32f, 82e64c7
精度与存储 Qwen2 / Qwen3-MoE / Next FP8 高效推理 da971ec7, bd4397352, ef7eefe1, 238c4c17
初始化加载 Qwen2-VL / 全系 快速启动 / 多后端 2c5302fad, 5e4a8223c
推理优化 Qwen3-Next / dense 线性化注意力、Spec Decode 加速 785d8b6, 1266, 1374
视觉流水线 Qwen2.5-VL / 3-VL GPU 端视频处理 吞吐 0426e3c5, 67da5720d4, 1dfea5f4
跨平台 Qwen3-Next / 全系 ROCm / Blackwell 兼容 qwen3_next.py:306