Prhub

#36019 [diffusion] Honor XDG cache for model overlays

原始 PR 作者 BBuf 合并时间 2026-08-24 14:11 文件变更 2 提交数 1 评论 1 代码增减 +21 / -3

执行摘要

模型 overlay 缓存路径改为优先服从 XDG 缓存目录

在H200批量扫描中,LTX-2.3在/root/.cache/sgl_diffusion下留下了约146GB和31个权重文件,尽管XDG_CACHE_HOME指向了任务缓存。这导致overlay检查点(如LTX-2.3和JoyEcho)将权重物化在任务隔离缓存之外,造成资源泄漏和潜在的缓存污染。PR旨在通过遵循XDG缓存规范来隔离缓存,防止此类泄漏。

值得快速浏览,变更小而聚焦。重点理解get_diffusion_cache_root()为何改为从envs取值,以及为何默认路径改为XDG_CACHE_HOME。该改动体现了对Linux缓存规范的遵循。

讨论亮点

该PR没有评论或审核讨论。唯一的评论是作者BBuf触发的CI重新运行指令。

实现拆解

  1. 修改缓存根目录解析函数:在python/sglang/multimodal_gen/runtime/utils/model_overlay.py中,将get_diffusion_cache_root()的实现从直接读取环境变量改为引用envs.SGLANG_DIFFUSION_CACHE_ROOT,该变量封装了XDG_CACHE_HOME的默认回退逻辑。
  2. 引入envs模块依赖:在文件头部新增from sglang.multimodal_gen import envs导入,确保环境变量解析逻辑与模块其他部分保持一致。
  3. 新增单元测试:在python/sglang/multimodal_gen/test/unit/test_model_overlay.py中新增两个测试用例,分别验证默认回退到XDG缓存目录和显式设置覆盖优先级的场景。

通过这些改动,缓存路径解析逻辑集中到envs中,后续修改环境变量行为只需调整一处。

文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/utils/model_overlay.py 缓存路径 modified 5.74
python/sglang/multimodal_gen/test/unit/test_model_overlay.py 测试 added 5.95

关键符号

get_diffusion_cache_root

关键源码片段

python/sglang/multimodal_gen/runtime/utils/model_overlay.py data-contract

核心源码修改,将缓存根目录解析改为复用 envs 模块,使其遵循 XDG_CACHE_HOME

# python/sglang/multimodal_gen/runtime/utils/model_overlay.py
# 通过复用 envs 模块,统一缓存根目录解析逻辑,默认回退到 XDG_CACHE_HOME/sgl_diffusion
from sglang.multimodal_gen import envs
​
​
def get_diffusion_cache_root() -> str:
    # 直接返回 envs 中解析好的值:
    # - 显式设置 SGLANG_DIFFUSION_CACHE_ROOT 时优先
    # - 否则回退到 XDG_CACHE_HOME/sgl_diffusion(默认 XDG_CACHE_HOME 为 ~/.cache)
    return envs.SGLANG_DIFFUSION_CACHE_ROOT
python/sglang/multimodal_gen/test/unit/test_model_overlay.py test-coverage

新增测试,覆盖默认 XDG 回退和显式设置优先级,保障行为正确性

# python/sglang/multimodal_gen/test/unit/test_model_overlay.py
from sglang.multimodal_gen.runtime.utils.model_overlay import get_diffusion_cache_root
​
​
def test_uses_xdg_cache_home_by_default(monkeypatch):
    # 仅设置 XDG_CACHE_HOME,未显式设置 diffusion 缓存根时,应回退到 XDG 缓存目录下
    monkeypatch.setenv("XDG_CACHE_HOME", "/tmp/sglang-xdg-cache")
    monkeypatch.delenv("SGLANG_DIFFUSION_CACHE_ROOT", raising=False)
​
    assert get_diffusion_cache_root() == "/tmp/sglang-xdg-cache/sgl_diffusion"
​
​
def test_explicit_diffusion_cache_root_takes_precedence(monkeypatch):
    # 显式设置 diffusion 缓存根时,应覆盖 XDG_CACHE_HOME
    monkeypatch.setenv("SGLANG_DIFFUSION_CACHE_ROOT", "/tmp/sglang-diffusion-cache")
    monkeypatch.setenv("XDG_CACHE_HOME", "/tmp/sglang-xdg-cache")
​
    assert get_diffusion_cache_root() == "/tmp/sglang-diffusion-cache"

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

变更影响所有diffusion模型overlay的缓存路径解析。主要风险是:

1) 对已有用户,如果之前依赖默认路径~/.cache/sgl_diffusion,且未设置XDG_CACHE_HOME,则行为不变(因为XDG默认值就是~/.cache);
2) 如果设置了XDG_CACHE_HOME,缓存位置会变化,可能导致重新下载权重,但这是预期行为;
3) 由于逻辑移入envs模块,需要确保envs模块的导入不会引起循环依赖,目前看来依赖关系清晰。

影响所有使用diffusion模型overlay的用户,尤其是设置XDG_CACHE_HOME的环境。修复后缓存位置更规范,避免了权重泄漏到隔离缓存之外,减少了磁盘占用和潜在冲突。对系统而言,缓存路径解析逻辑统一到envs,提高了可维护性。对团队而言,新增的测试确保了行为回归。影响程度中等,属于行为修正。

缓存路径行为变化 可能需重新下载权重 依赖 envs 模块实现细节

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论