执行摘要
升级 PyTorch 至 2.11.0 并适配 CI 与模型兼容性
根据 PyTorch 2.11.0 发布说明,升级以获得新特性、性能改进和 bug 修复,并保持与上游同步。PR body 直接引用发布说明链接。
建议所有开发者更新本地环境至 PyTorch 2.11 以与主分支对齐;重点审查扩散模型的输出差异和 MoE 编译 guard 逻辑。
无实质技术讨论;评论主要涉及 CI 重新触发命令。PR 的合并者通过多次 rerun 确保各平台测试通过。
根据 PyTorch 2.11.0 发布说明,升级以获得新特性、性能改进和 bug 修复,并保持与上游同步。PR body 直接引用发布说明链接。
建议所有开发者更新本地环境至 PyTorch 2.11 以与主分支对齐;重点审查扩散模型的输出差异和 MoE 编译 guard 逻辑。
无实质技术讨论;评论主要涉及 CI 重新触发命令。PR 的合并者通过多次 rerun 确保各平台测试通过。
pyproject.toml 中的 torch 版本约束,并升级 sgl-kernel 到 0.4.2 以匹配新 ABI(commit 6bcfd91bdc)。FORCE_REBUILD_DEEPEP),避免旧缓存二进制与 torch 2.11 ABI 冲突;同时清理 cu12 后缀包的冲突设置。scripts/ci/cuda/cache_nvidia_wheels.sh,简化依赖安装流程;调整 jit-kernel 和 NPU 测试工作流以复用 sgl-kernel 构建产物。RobertaProcessing API 变更:在 component_loader.py 中添加 _load_auto_tokenizer_with_roberta_processing_compat,在 test_utils.py 中添加对应的 CLIP 处理器回退,确保扩散模型加载不崩溃。consistency_threshold.json),并更新测试代码以在失败时保存可视化 artifact,适应 torch 2.11 下的轻微数值变化。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
python/sglang/multimodal_gen/runtime/loader/component_loaders/component_loader.py |
加载器 | modified | 7.38 |
python/sglang/multimodal_gen/test/test_utils.py |
测试工具 | modified | 7.52 |
python/sglang/srt/models/deepseek_v2.py |
深搜模型 | modified | 5.63 |
.github/workflows/pr-test-npu.yml |
CI 配置 | modified | 5.27 |
python/sglang/multimodal_gen/runtime/loader/component_loaders/component_loader.py
core-logic
核心逻辑:新增 `_load_auto_tokenizer_with_roberta_processing_compat` 函数,以兼容 tokenizers>=0.21 移除 `cls` 参数的变更,确保扩散模型中的 CLIP tokenizer 加载不崩溃。
def _load_auto_tokenizer_with_roberta_processing_compat(*args, **kwargs):
# tokenizers>=0.21 移除了 RobertaProcessing 的 `cls` 参数,
# 但 transformers 的 CLIPTokenizer 构建仍会传递该参数。
# 此函数在加载前临时替换 processors.RobertaProcessing 为兼容包装,
# 并确保加载后恢复原值,避免影响其他调用。
from tokenizers import processors
roberta_processing = processors.RobertaProcessing
def roberta_processing_compat(*processor_args, **processor_kwargs):
if "sep" in processor_kwargs and "cls" in processor_kwargs:
sep = processor_kwargs.pop("sep")
cls_token = processor_kwargs.pop("cls")
return roberta_processing(
sep, cls_token, *processor_args, **processor_kwargs
)
return roberta_processing(*processor_args, **processor_kwargs)
processors.RobertaProcessing = roberta_processing_compat
try:
return AutoTokenizer.from_pretrained(*args, **kwargs)
finally:
processors.RobertaProcessing = roberta_processing
class TokenizerLoader(ComponentLoader):
...
def load_customized(self, component_model_path, server_args, component_name):
...
try:
return AutoTokenizer.from_pretrained(...)
except TypeError as e:
if "RobertaProcessing" in str(e) and use_fast:
logger.warning("Fast tokenizer failed, retrying with compat...")
# 使用兼容包装重新加载
return _load_auto_tokenizer_with_roberta_processing_compat(
component_model_path,
padding_side="right",
use_fast=False,
)
raise
python/sglang/srt/models/deepseek_v2.py
data-contract
MoE forward guard 调整:扩展 torch.compile 跳过条件,考虑 speculative_num_draft_tokens,避免 EAGLE/MTP 场景下错误使用 dual_stream 路径。
# 在 MoE 的 forward 中,当启用 torch.compile 并且当前 batch 大小
# 小于等于 torch_compile_max_bs * draft_tokens 时,跳过 dual_stream 路径,
# 避免 torch.compile 生成的计算图与 EAGLE/MTP 共享导致的数值错误。
if (
self.num_fused_shared_experts == 0
and hidden_states.shape[0] > 0
and get_is_capture_mode()
and not (
get_global_server_args().enable_torch_compile
and hidden_states.shape[0]
<= get_global_server_args().torch_compile_max_bs
* (get_global_server_args().speculative_num_draft_tokens or 1)
)
):
return self.forward_normal_dual_stream(
hidden_states,
...
)
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
主要风险在于 torch 2.11 可能引入 API 变更导致运行时崩溃,已通过强制重建 deep_ep、添加 RobertaProcessing 回退等方式缓解;扩散模型数值精度变化已通过调整阈值适应;但仍有潜在的性能回归未被完全验证,尤其是 torch.compile 相关路径。
影响所有基于 PyTorch 2.11 运行的 SGLang 服务;CI 流程更简洁,但要求 runner 具备新版本环境;AMD、NPU、Blackwell 等平台的测试均需通过;扩散模型一致性基准需要重新校准。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论