ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SGLang Diffusion 快速路径全景指南:从 AdaLN 调制融合到分布式重叠的复用图谱

SGLang Diffusion 快速路径全景指南:从 AdaLN 调制融合到分布式重叠的复用图谱 SGLang Diffusion 快速路径全景指南从 AdaLN 调制融合到分布式重叠的复用图谱【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang本篇指南基于sglang.multimodal_gen扩散Diffusion推理栈中的已有快速路径fast path体系编写系统梳理了 16 类核心融合模式、QK Norm/RoPE 优化、请求级质量门控quality gate、VAE 解码重写以及 Ulysses/USP 通信重叠族。读者读完本文后可以在面对一条新的 diffusion 性能瓶颈时先按复用已有融合 → 调整配置 → 再考虑新内核的顺序完成排查并能读懂python/sglang/kernels/ops/diffusion与python/sglang/multimodal_gen/runtime中对应内核、门控与回退逻辑的实际调用关系。一、文档定位先复用再优化existing-fast-paths.md的核心方法论只有一句话在把一个 diffusion 瓶颈交给内核开发、Nsight 分析或框架专属优化流程之前先把它映射到一条已存在的融合路径或分布式重叠模式上。该文档位于python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/existing-fast-paths.md本身是 benchmark/profile 技能链的组成部分——profile 发现问题后先对照本图谱找现成答案找不到再动手写新内核。从源码结构看整个快速路径体系分为两层内核层python/sglang/kernels/ops/diffusion/下的modulate/、norm/、rope/、layout/、routing/、sites/、activation/、attention/目录以及python/sglang/kernels/kda_kernels/下的 JIT/CUDA 自定义算子运行时层python/sglang/multimodal_gen/runtime/layers/layernorm.py、elementwise.py、fused_scale_shift_gate.py、usp.py、moe.py、runtime/models/dits/与runtime/models/vaes/中的各模型接线以及runtime/breakable_cuda_graph/runner.py。所有融合路径都遵循守卫guard通过则走融合内核否则回退到原生 PyTorch的统一范式本文后续各节会逐一给出守卫条件与回退行为。二、16 类核心融合模式详解2.1 Scale/Shift 逐元素与门控融合AdaLN 调制这是 diffusion 模型中最常见的调制模式对应三种数学形态x * (1 scale) shifta * (k b) cMulAdd见 elementwise.py其forward_cuda直接调用fuse_scale_shift_kernel(a, b, c, scale_constantk)Qwen 风格(layernorm / residual layernorm) scale/shift gate select由 fused_scale_shift_gate.py 中的FusedLayerNormScaleShiftGateSelect01与FusedResidualLayerNormScaleShiftGateSelect01两个CustomOp承载CUDA 路径分别落到fuse_layernorm_scale_shift_gate_select01_kernel与fuse_residual_layernorm_scale_shift_gate_select01_kernel。关键内核是 scale_shift_triton.py 中的fuse_scale_shift_kernel。其约束与实现要点x必须是 CUDA 且连续assert x.is_contiguous()scale/shift支持 0D/1D/2D/3D/4D 广播4D[B, F, 1, C]形态要求L % F 0对应 kernel 中按frame_seqlen计算帧索引的_fused_scale_shift_4d_kernel因果视频冷启动4D 路径使用静态的 2 的幂次列 tileBLOCK_N而非 Triton autotune。原因是 LingBot-World 每个 transformer block 都会调用一次该路径若在请求时引入 autotuning其开销可能主导第一个 denoise stepNPU 回退scale_shift.py在 NPU 上切换到npu_fallback原生路径。验证覆盖在 test_modulate.py 与 test_model_fast_paths.py。2.2 Norm Scale/Shift 融合CuTe DSL对应内核fused_norm_scale_shift与fused_scale_residual_norm_scale_shift位置在 layernorm.py 与 scale_residual_norm_cutedsl.py。支持的数学形态y norm(x) * (1 scale) shifty norm(residual gate * x) * (1 scale) shift。运行时层的_NormScaleShift与_ScaleResidualNormScaleShift两个基类分别派生出LayerNormScaleShift/RMSNormScaleShift与ScaleResidualLayerNormScaleShift/ScaleResidualRMSNormScaleShift封装了该融合。约束与行为要求D % 256 0且D 8192见forward_cuda中的守卫x/residual/gate/scale/shift必须通过 shape 与 stride 校验数据类型仅限 fp16/bf16/fp32CuTe DSL 编译缓存以(dtype, ndim, D, norm_type)为键None张量用标量占位符替代守卫失败时layernorm.py会打印 warning 并回退到原生 PyTorchROCm 侧还有SGLANG_USE_ROCM_FLYDSL环境变量控制的可选 flydsl 路径。2.3 Bit-exact adaLN 调制与 LayerNormmodulation这一类强调数值逐位一致bit-exact包含modulate_scale_shiftx * (1 scale[:, None]) shift[:, None]合并为一次 JIT CUDA launch实现在 modulate_scale_shift_jit.pyfused_layernorm_modulateBF16LayerNorm(x) * (1 scale) shift合并为一次 Triton launch且复现 aten BF16 归约与舍入顺序实现在 layernorm_modulate_triton.pyfused_qk_head_layernormGLM-Image 的逐头 Q/K LayerNorm使用同样的 aten 兼容归约。约束方面JIT 调制路径要求对齐的连续 CUDA fp16/bf16 BLC 输入与[B, D]形态的 scale/shiftTriton LayerNorm 路径仅针对 BF16且只对其守卫的 aten dispatch 声明 bit-exact。FLUX/GLM/SANA 会在首次遇到时执行一次实时的 eager 等价性检查见 2.9 的BitExactFusionGate不匹配则 fail closed关闭融合并保持原生路径。2.4 请求级融合门qualityextra-high与qualityhigh这是 SGLang diffusion 服务中非常独特的机制融合路径的挂载与否由请求的--quality参数决定。涉及文件quality_gate.pyQualityGatedFusion类负责按融合家族整体标记/启用/停用一组 sitemount()是 all-or-nothing 的——任何一个 site 未通过静态守卫整个家族保持参考路径bitexact_gate.pyBitExactFusionGate类负责首见first-sighttorch.equal校验支持 once-for-allGLM/Ernie与 per-signatureFLUX/Sana两种模式且明确禁止在torch.compile追踪或 CUDA graph 捕获期间做该校验fast_path_gate.pyVaeFastPathGate与use_vae_fast_path上下文管理器VAE 门在每次 decode 后强制复位。语义要点qualitylossless默认是精确参考路径qualityextra-high与qualityhigh挂载的是已校验但不逐位一致的 DiT 融合与 decode 范围的 VAE 重写high是累积的还可能启用模型自有的近似路径不要把请求参数--quality与--output-quality混淆——后者控制输出文件的压缩与模型数学无关。目前覆盖的融合家族包括FLUX affine-folded LNmodulate / fused GELU sites、Wan cublasLt/NVFP4 GELU、Qwen added-QKV、GLM/Qwen/Hunyuan/LTX fused GELU、LTX RMSNormmodulate、Hunyuan QK RMSNorm、Ideogram gated RMSNorm、LingBot RMSNorm、SANA-Video linear attention、FLUX.1/FLUX.2/Z-Image/SD3 共用的通用 KL VAE decoder 重写以及 Wan/Qwen-Image VAE 的 RMSNormSiLUQwen-Image VAE 即 Wan 2.1 VAE其 gate 还会把Resample上采样输入重表达为规范的 NHWC strides使 2D conv 端到端以 channels_last 运行。2.5 Z-Image bf16 原生 RMSNorm 调制Triton内核rmsnorm_scale与rmsnorm_tanh_residual位于 native_bf16_rmsnorm_triton.py调用方在zimage.py与 fused_gate_rmsnorm_site.py。数学形态y rmsnorm(x) * scaley residual tanh(gate) * rmsnorm(x)。约束CUDA bf16 张量、连续权重、可展平的行 stride、兼容的调制行数、D 8192。这些内核保留 Z-Image 的 bf16 原生算术守卫失败时返回None由运行时包装器执行原生 PyTorch 公式。2.6 Triton LayerNorm/RMSNorm 融合内核rms_norm_fn、layer_norm_fn、norm_infer位于 norm_triton.py。rms_norm_fn支持 fp32 RMSNorm 的 residual/dropout/rowscale/x1 分支norm_infer是面向推理的精简路径layernorm.py 中LayerNorm.forward_cuda即走norm_infer。约束最后一维必须连续且N * element_size 64KB。2.7 Triton 单遍 RMSNorm小 hidden size 快速路径内核triton_one_pass_rms_norm位于 rmsnorm_onepass_triton.py。适用场景RMSNorm.forward_cuda中hidden_size 128时启用见layernorm.py第 137-140 行。注意该路径应保留在rmsnorm_onepass.py的自定义算子包装之后直接用wrap_triton会在动态行数下触发重编译。2.8 Triton RoPE 融合内核apply_rotary_embedding位于 rotary_triton.py入口在rotary_embedding/utils.py。适用 GPT-J 风格非 NeoxRoPE要求head_size为偶数。NPU 回退到npu_fallback.apply_rotary_embedding_native。2.9 LTX2 split RoPE 融合内核apply_ltx2_split_rotary_emb位于 ltx2_rotary_triton.py用于 LTX-2 在[B, S, num_heads * head_dim]上的分离式旋转嵌入cos与sin为两个独立张量。约束cos/sin形状须匹配[B, H, S, head_dim / 2]且inner_dim H * head_dim。排查规则若 LTX-2 trace 中出现大型 split-RoPE PyTorch 链先检查该 LTX2 专用 Triton 路径是否因 shape/dtype 被禁用再考虑新 RoPE 内核。2.10 共享残差门加法融合LTX2 / LongCat-Image / SANA / SANA-Video内核diffusion_residual_gate_add实现于 residual_gate_add_jit.py 与 CUDA 源码 residual_gate_add.cuh。数学形态为residual update * gate被 LTX2 的 attention/MLP 残差、LongCat-Image 的 joint/single-stream transformer 残差、SANA/SANA-Video 的 transformer block 直接调用。约束与行为细节输入必须是同设备 CUDA 张量、单一 dtypefp16/bf16/fp32且update.shape residual.shape普通路径接受连续输入与 full 或行广播 gate_gate_mode区分 full/row/per-token 三种 gate 模式SANA-Video 路径额外接受转置稠密 3D 残差stride 为(tokens * hidden, 1, tokens)、连续 update 与连续[1, 1, hidden]gate并保持输出的残差 stride——为此实现了residual_gate_add_transposed分块内核不要对转置残差强制.contiguous()运行时异常torch.compile之外会记录一次日志、对该 device/dtype 禁用快速路径并回退到residual update * gate该算子通过torch.library.custom_op注册并带register_fake因而在torch.compile(fullgraphTrue)下也可用。微基准见 bench_residual_gate_add.py。排查规则若这三个模型 trace 中围绕残差出现大量muladd阶梯先检查输入 stride 与既有 CUDA 路径是否被 shape/dtype/layout 或先前运行时失败禁用。2.11 MiniMax-H3 索引 AdaLN 调制与门控残差融合内核indexed_scale_shift_bf16_与indexed_gate_bf16_位于 indexed_modulation_triton.py调用方为minimax_h3.py。H3 的 packed video/audio/text 行通过combined_indices选择逐 token 调制Triton 路径就地替代index_select加 scale/shift 或门控残差链。约束CUDA BF16 H3 张量、BF16 调制张量、连续可复用输入门控路径还要求连续的other不支持的 shape/dtype 保留 eager 公式数值契约内核显式复现 H3 eager BF16 舍入边界未经 H3 一致性检查不得用数学等价但舍入不同的收缩替换。2.12 MiniMax-H3 packed Ulysses QKV 与输出重排内核pack_qkv_destination_major与usp_merge_heads位于 ulysses_qkv_triton.py 与 usp_relayout_jit.py接线在runtime/layers/usp.py与minimax_h3.py。一次 destination-major QKV pack 加一次 collective 替代三次分别准备的 Ulysses 输入交换输出 JIT 内核在合并 gathered heads 时替代permute(...).contiguous()packed QKV 快速打包要求 CUDA fp16/bf16 且 Q/K/V dtype 一致、头维连续、eager 执行usp_merge_heads要求非空连续 5D CUDA fp16/bf16/fp32 张量且在torch.compile内禁用传输层面2 rank 且 peer-accessible 的 CUDA group 可用既有 IPC A2A 传输更大或不支持的 group 回退到普通 collective 路径。2.13 HunyuanVideo / LTX upsampler GroupNorm SiLU 融合内核triton_group_norm_silu位于 group_norm_silu_triton.py入口apply_group_norm_silu在hunyuanvae.py与latent_upsampler.py。适用activation(group_norm(x))条件是激活为非 inplace 的nn.SiLU且 GroupNorm 为 affine。主链路默认启用无环境变量开关包装器仅在守卫通过时派发到 Triton。约束仅 CUDA 推理路径、无梯度、x.requires_grad False、affine norm 带 weight 和 bias不支持的场景回退activation(norm(x))。验证见 test_norm.py 与python/sglang/multimodal_gen/test/unit/test_latent_upsampler_group_norm_silu.py。2.14 Wan 因果 VAE 数据移动融合内核cat_pad_channels_last_3d与dup_up3d_add位于 wan_causal_cache_triton.py调用方wanvae.py。前者在单次 channels-last-3D pass 中同时构造因果 Conv3d 输入与下一个紧凑特征缓存后者融合main DupUp3D(src)避免物化repeat_interleave permute().contiguous()中间量。这是 bit-exact 的数据移动/同序加法替换与请求门控的 Wan RMSNormSiLU 路径相互独立不支持的布局或 padding 回退到 aten 链。Qwen-Image VAEautoencoder_kl_qwenimage.py对每个因果 conv 槽复用同一cat_pad_channels_last_3d compact-cache 辅助函数单帧图像 decode 将紧凑缓存保持在参考尺寸一帧峰值内存不会增长。2.15 Helios 成对转置 RoPE内核fused_inplace_helios_qk_rope位于 helios_qk_rope_jit.py 与csrc/diffusion/helios_qk_rope.cuh调用方helios.py。它对已归一化的连续 Q/K 一次性就地应用 Helios 的转置 fp32 频率表替代每个 attention block 中两次 eager 的 unflatten/chunk/multiply/add/stack 链。约束CUDA fp16/bf16 Q/K、匹配的连续[B, S, H, D]布局、连续 fp32 频率[B, S, 2 * D]、偶数D、Q/K 指针对齐TP RMSNorm 保留 eager 路径。数值契约显式 round-to-nearest fp32 运算复现 eager 逐元素舍入边界后再转回激活 dtype正确性测试要求torch.equal包括生产形态[8640, 40, 128]。当前真实模型验证仅覆盖单张 H100不是多卡扩展性声明。2.16 LingBot Video 分组受限 MoE 路由内核group_limited_topk位于 group_limited_topk_triton.py接线在runtime/layers/moe.py的LingBotVideoRouter._group_limited_topk。它将 group top-2 归约、选中组 mask 构造、掩码专家分数与最终 expert top-k 融合为每个 token 一次 Triton 程序。生产配置为128 专家、4 组、选中 2 组、每 token 选 8 个专家。约束NVIDIA CUDA、非空连续 fp32[tokens, experts]分数、每组至少 2 个 2 的幂专家、有效组数、top_k不超过选中组容量不支持的输入保留 eagertorch.topk/mask 路径数值契约选中 expert-id 集合与受守卫的 CUDA 参考一致但顺序不确定参考用torch.topk(..., sortedFalse)该路径是选择等价selection-equivalent且默认开启与请求quality无关该 launch 以带 fake 实现的自定义算子注册因此torch.compile(fullgraphTrue)下守卫路径同样可用。三、更快的 CUDA 内核使用点3.1 sgl-kernel RMSNorm 与 fused add RMSNorm在 layernorm.py 的RMSNorm.forward_cuda中标准 bf16/fp16 CUDA 路径使用sgl_kernel.fused_add_rmsnorm有 residual 时与sgl_kernel.rmsnorm无 residual 且hidden_size 128时hidden_size 128走 Triton 单遍Z-Image 保持 bf16 算术使用其专用 Triton native-norm 内核守卫通过时ROCm 回退到原生NPU 走torch_npu的npu_add_rms_norm/npu_rms_normAITER 可用时走 aiter 的rmsnorm2d_fwd系列。3.2 注意力后端选择CUDA 平台优先 FlashAttentionFA3/FA4不支持时回退 Torch SDPA可通过--attention-backend或global_force_attn_backend强制。相关文件platforms/cuda.py、selector.py、attention_backends.mdx。3.3 FlashInfer RoPEQ/K 就地rotary_embedding/utils.py中优先使用flashinfer.rope.apply_rope_with_cos_sin_cache_inplace否则回退 Triton RoPE。3.4 Varlen USP attention pack/scatterattention/layer.py 中带 mask 的USPAttention.forward可用fused_pack_qkv将稠密 Q/K/V 收集为 packed[total_valid, H, D]行执行 varlen attention 后用fused_scatter_to_padded散射回去内核位于 varlen_pack_pad_triton.py。若 masked attention trace 在 Python/高级索引 pack/scatter 上耗时先检查这条融合 varlen 路径为何未触发。四、QK Norm 与 QK Norm RoPE 优化4.1apply_qk_norm入口在layernorm.py快速路径为 norm.py 的 JIT fused inplace QK normfused_inplace_qknorm。融合路径前置条件仅 CUDAallow_inplaceTrue且q_eps k_epsq/k连续、fp16/bf16、norm weight dtype 匹配can_use_fused_inplace_qknorm(head_dim, dtype)返回 true支持的 head dim64, 128, 256, 512, 1024。融合路径将 q/k reshape 为[B, -1, head_dim]后就地归一化前置条件失败则回退逐张量 RMSNorm。验证见 test_qknorm.py 与 test_qknorm_across_heads.py。4.2apply_qk_norm_rope入口在layernorm.py快速路径为 qknorm_rope_jit.py 的fused_inplace_qknorm_rope。环境变量SGLANG_ENABLE_FUSED_QKNORM_ROPE1保持融合路径默认开启。额外前置条件q/k 为同 shape 的连续 4D 张量can_use_fused_inplace_qknorm_rope(head_dim, rope_dim, is_neox, dtype)返回 true支持的 head dim64, 128, 256。守卫全部通过时优先走融合 JIT 内核否则回退apply_qk_norm(...)apply_flashinfer_rope_qk_inplace(...)。MiniMax-H3 的 DiT 直接为 BF16 head dim 128、96 rotary dims、NeoX 布局且round_norm_before_ropeTrue调用fused_inplace_qknorm_rope——该标志属于 H3 的 eager 数值契约编译执行会刻意回退到分离的 eager 操作。若 LTX2 trace 错过通用融合路径先按 enablement/shape 守卫问题排查再检查 LTX2 split-RoPE 专用路径。五、量化与打包投影的模型专属快速路径5.1 Nunchaku Fused GELU MLP入口_fused_gelu_mlpruntime/models/dits/flux.py。Nunchaku 量化 checkpoint 可将fc1 GEMM GELU shift re-quant fc2.lora_down融合到第二次 GEMM 之前避免物化独立的 GELU 激活。若 Nunchaku trace 显示分离的fc1 - gelu - quant - fc2.lora_down先当作缺失的既有快速路径处理。5.2 NVFP4 / Nunchaku Packed QKV量化 FLUX 家族 checkpoint 可将 attention 投影以 packed QKV 形式存储SGLang 有意切换到MergedColumnParallelLinear路径to_qkv、to_added_qkv、to_qkv_mlp_proj而非分离的to_q/to_k/to_vFLUX.2 NVFP4flux_2.py在quant_config为ModelOptFp4Config时显式启用 fused packed QKV因为 NVFP4 checkpoint 在磁盘上就是以 packed 形式存储 image-attention QKVNunchaku原始/转换后的 Nunchaku checkpoint 名称在 flux.py 的 config remapping 中被映射到 fusedto_qkv/to_added_qkv名称NVFP4 风格 checkpoint 的正确性还依赖wtscale、attentionwcscales等量化元数据。5.3 SANA Packed Projection GEMMsSANA 自注意力用单个MergedColumnParallelLinearto_qkvGEMM 产出 Q/K/V交叉注意力用单个to_kvGEMM 产出 encoder K/Vquery 投影保持分离因为它使用 denoising hidden states而 K/V 共享 step-invariant 的 encoder hidden states。若 SANA trace 出现分离的自注意力to_q/to_k/to_v或分离的交叉注意力to_k/to_v视为既有 packed-projection 路径退化。六、请求级 DiT 融合与 Breakable CUDA GraphBCG的交互BCG 运行器位于 runner.py为支持的 pipeline 在 eager attention/collective 周围捕获固定分辨率的 DiT 段。文档特别强调了与 quality 门控的交互陷阱qualityextra-high/high的 DiT sites 在请求边界挂载BCG 预热默认使用模型的 lossless 采样默认值除非显式捕获了 quality-aware graph 变体在 quality 挂载之前捕获的 graph 保留 lossless 模块分支挂载后重放会静默绕过请求的融合内核——即使张量签名匹配因此一个 extra-high/high BCG 的数据点仅在以下情况有效模型没有请求级 DiT quality sites或日志证明这些 sites 在匹配的 graph 捕获之前已挂载[Diffusion BCG] captured之后的挂载会使该数据点失效。一条有效的 BCG benchmark 必须显示[Diffusion BCG] captured且无 support disable、capture failure、serving signature MISSED或 eager-fallback 标记。宽度和高度不是签名的全部公开的--warmup-resolutions不会覆盖视频模型的合成预热帧数短 profile 请求可能捕获默认时间形状serving 时再 miss——此类计时应被拒绝而非标注为 BCG。七、近期模型审计边界关键事实基准文档给出了若干已审计模型的快速路径现状这些是排查新模型瓶颈时的已知边界LongCat-Image支持固定、已捕获分辨率下的 BCG。其 DiT 始终接收 512-token prompt body因此不同原始 prompt 长度复用同一 graph 签名而无需 padding模型专属的 pass-through padder 防止通用 buckets 将该固定 shape 扩展成未使用的 graph 签名。它仍保留分离的图像/文本 QKV 投影并在每个 single block 内做 joint-streamcat/split——不要把这些误判为缺失的既有 packed 路径。SANA-Video已打包 self QKV 与 cross KV。固定 832x480 服务下其默认 300-token prompt shape 可复用单个 BCG 而无需通用 text-bucket padding。文档记录了一次 H200 81 帧 8 步运行eager 920.6–925.3 ms/stepBCG 797.8–798.9 ms/step最终视频 bit-exact保留峰值内存增加约 3.4 GB。其 conv/modulation 公式与 SANA 镜像但尚未调用 SANA 的 bit-exact bias-SiLU、bias-GLU、residual-gate、LayerNorm-modulation 或一次性连续布局辅助函数——复用这些辅助函数优先于编写 video-only 内核。LingBot Video MoErouter 实现 sigmoidbias grouped top-kruntime/layers/moe.pyCUDA 布局守卫通过时使用默认开启的 fused Triton selector其 fused Triton RMSNorm 行内核仍在qualityextra-high/high下按 weight dtype 与 hidden size 请求门控。LTX-2.5复用成熟的 LTX-2 DiT 路径可选的 diffusion decoder 需单独处理——确认 NATTENna3d激活后再检查其逐 block 3D RoPE 构造与 split QKV/SwiGLU 投影。Cosmos3 Edge继承既有 Cosmos3 attention-prep 融合先 profile 稠密 squared-ReLU MLP且不要重复关闭的实验性 Cosmos BCG 方向其模型状态生命周期问题未解决。八、已有通信族与重叠模式在提出任何新 overlap 设计之前必须先排除仓库内已有的通信族Ulysses / USP attentionall_to_all、ring_attn、head/sequence reshards 属于既有分布式 attention 家族跨节点 SP--nnodes、--node-rank、--dist-init-addr已受支持优先 node-local Ulysses × cross-node Ringencoder 保持复制逐个模型验证 Ring admissionMiniMax-H3 TP AdaLN_can_batch_block_adaln()通过时DiT 将每个 block 的 TP-local AdaLN 投影堆叠并在 block 循环前做一次 batched all-gather——每个 block 出现一次 all-gather 说明该批量路径未命中MiniMax-H3 final projectionsH3 在最终 TP 列 gather 前移除 dead text/padding 行并为 SP 行 gather 合并 video/audio——优化输出通信时保持该顺序Turbo-layer 异步 all-to-allall_to_all_single(..., async_opTrue) staged waits 构成既有重叠家族turbo_layer.pyTorchInductor 计算/通信重排torch._inductor.config.reorder_for_compute_comm_overlap True可部分重叠编译后的 denoise traceBCG与torch.compile、Cache-DiT 互斥默认分辨率自动捕获额外服务分辨率放入--warmup-resolutionsprompt 签名用--bcg-text-buckets双流 diffusion 模型use_dual_stream True如hunyuan3d.py是既有 overlap 家族。九、约束与回退汇总快速路径约束回退scale_shiftTritonCUDA 连续xNPU 切npu_fallback原生路径Bit-exact BF16 LayerNormmodulateaten 兼容 shape 实时等价检查通过eager 公式CuTe DSL fused normsD % 256 0且D 8192fp16/bf16/fp32原生 PyTorch带 warningTriton norm kernels最后一维连续N * element_size 64KB原生FlashAttentionfp16/bf16 且 SM80Torch SDPAresidual_gate_add同设备同 dtypeupdate.shape residual.shaperesidual update * gate运行时异常后按 device/dtype 禁用group_limited_topkfp32 连续分数、合法组布局eagertorch.topk/mask十、新模型集成检查清单将新 diffusion 模型接入时按以下顺序检查以最大化复用复用LayerNormScaleShift或ScaleResidual*模块而非重写融合逻辑保持张量连续满足 CuTe 融合路径的 D 对齐% 256与尺寸 8192AdaLN 调制使用fuse_scale_shift_kernel并保留 PyTorch 回退使用apply_qk_norm确保 head_dim 落在 fused QK norm 支持列表内若使用 FlashInfer RoPE避免pack qkv保证 Q/K 连续attention 遵循selector.py优先级仅在必要时用 CLI 覆盖LingBot 风格分组路由仅在谓词接受确切 group 布局时复用group_limited_topk否则保留 eager 选择链。十一、扩展内核时的硬性规范文档对确需新写内核的场景给出明确要求添加torch.library.custom_op与register_fake以获得 compile 与 meta 支持residual_gate_add_jit.py与group_limited_topk均遵循此模式CuTe compile 缓存键保持(dtype, ndim, D)对齐避免隐式广播强制隐藏的contiguous()拷贝保留 NPU 与 ROCm 回退路径若上述 16 个家族均不匹配收集 benchmark/profile 技能的实证证据将内核工作移交给 kernel、Nsight 或框架专属优化流程。十二、配套资源索引融合模式验证测试test_modulate.py、test_norm.py、test_layout.py、test_routing.py、test_sites.py、test_model_fast_paths.py微基准bench_qwen_image_modulation.py、bench_group_norm_silu.py、bench_residual_gate_add.py内核目录导航diffusion 内核 README 与python/sglang/kernels/ops/diffusion/下的modulate/、norm/、rope/、layout/、routing/、sites/子目录。理解这张既有快速路径图谱的价值在于SGLang 的 diffusion 加速并非零散的内核堆积而是一套有守卫、有回退、有数值契约、有请求级门控的分层体系。新模型接入或性能优化时先对照本文定位可复用的融合家族与约束能显著避免重复造轮子也能在真正需要新内核时给出更高质量的决策依据。【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表