Prhub

#23422 [diffusion] support custom output folder name in GT generation workflo

原始 PR 作者 yhyang201 合并时间 2026-04-22 11:18 文件变更 2 提交数 3 评论 2 代码增减 +41 / -19

执行摘要

为扩散模型 GT 生成 CI 工作流添加自定义输出文件夹名称支持,提升灵活性。

根据PR描述,动机是“允许用户为生成的GT图像指定自定义输出文件夹名称(影响本地文件夹、产物名称和远程发布目标)”。这解决了现有工作流输出路径固定、缺乏灵活性的问题,便于用户在同一CI运行中区分不同测试集或进行并行测试。

该PR值得CI/基础设施维护者精读,以了解如何参数化CI工作流和配套脚本。关注点包括:环境变量与输入参数的联动设计、默认行为的保持策略、以及发布脚本的参数化重构模式。对于核心模型开发工程师,可快速浏览以知悉CI能力扩展。

讨论亮点

Review讨论较少,仅有一次由mickqian的批准,无具体评论。这表明变更设计清晰,直接满足了需求,未引发技术争议或设计权衡讨论。

实现拆解

  1. 工作流输入扩展:在.github/workflows/diffusion-ci-gt-gen.yml中,新增output_name输入参数,并设置环境变量OUTPUT_NAME(默认为diffusion-ci-outputs)。
  2. 本地路径与产物命名调整:将工作流中所有--out-dir参数、产物上传的namepath字段,从硬编码的diffusion-ci-outputs替换为动态的${{ env.OUTPUT_NAME }}
  3. 发布脚本参数化:修改scripts/ci/utils/diffusion/publish_diffusion_gt.py,将硬编码的远程目标目录TARGET_DIR改为可配置的DEFAULT_TARGET_DIR,并为collect_imagespublish函数添加target_dir参数,允许通过命令行--target-dir指定。
  4. 远程发布路径联动:在工作流的发布步骤中,当output_name非空时,动态构建--target-dir diffusion-ci/{output_name}参数传递给发布脚本,实现自定义远程路径;否则使用默认路径diffusion-ci/consistency_gt
  5. 无测试或文档配套:此变更仅涉及CI基础设施脚本,未添加或修改测试用例或文档。
文件 模块 状态 重要度
.github/workflows/diffusion-ci-gt-gen.yml 工作流配置 modified 4.65
scripts/ci/utils/diffusion/publish_diffusion_gt.py CI 脚本 modified 4.67

关键符号

collect_images publish

关键源码片段

scripts/ci/utils/diffusion/publish_diffusion_gt.py core-logic

这是发布 GT 图像到远程仓库的核心脚本,变更使其支持自定义目标目录,确保与工作流参数联动。

# 定义默认远程目标目录,支持通过参数覆盖
DEFAULT_TARGET_DIR = "diffusion-ci/consistency_gt"def collect_images(source_dir, target_dir):
    """
    从source_dir收集图像文件,返回(repo_path, content)元组列表。
    target_dir: 远程仓库中的目标目录,用于构建repo_path。
    """
    files = []
    for entry in sorted(os.listdir(source_dir)):
        full_path = os.path.join(source_dir, entry)
        if not os.path.isfile(full_path):
            continue
        if not any(entry.lower().endswith(ext) for ext in IMAGE_EXTENSIONS):
            continue
        with open(full_path, "rb") as f:
            content = f.read()
        repo_path = f"{target_dir}/{entry}" # 使用传入的 target_dir 构建路径
        files.append((repo_path, content))
    return filesdef publish(source_dir, target_dir=None):
    """
    发布图像到远程仓库。
    target_dir: 可选,指定远程目标目录;默认为DEFAULT_TARGET_DIR。
    """
    target_dir = target_dir or DEFAULT_TARGET_DIR # 处理默认值
    files_to_upload = collect_images(source_dir, target_dir)
    if not files_to_upload:
        print(f"No image files found in {source_dir}")
        return
    print(f"Found {len(files_to_upload)} image(s) to upload to {REPO_OWNER}/{REPO_NAME}/{target_dir}")
    # 后续上传逻辑保持不变 ...def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--source-dir", required=True, help="Directory containing GT images")
    parser.add_argument(
        "--target-dir",
        required=False,
        default=None,
        help=f"Target directory in the remote repo (default: {DEFAULT_TARGET_DIR})", # 新增命令行参数
    )
    args = parser.parse_args()
    publish(args.source_dir, args.target_dir) # 传递 target_dir 参数

评论区精华

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

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

风险与影响

  1. 向后兼容性风险:默认行为保持不变,对现有用户无影响。但若用户之前依赖硬编码路径的脚本或文档,可能需要更新。
  2. 参数传递错误风险:在.github/workflows/diffusion-ci-gt-gen.yml中,output_name输入为空时,--target-dir参数可能传递空字符串,但发布脚本的target_dir or DEFAULT_TARGET_DIR逻辑能正确处理,风险较低。
  3. 路径安全风险:自定义的output_name可能包含特殊字符或路径遍历序列(如../),但工作流在GitHub Actions环境中运行,且仅用于构建本地目录和远程路径,风险可控。
  4. 发布脚本逻辑风险publish函数新增可选参数,但调用方(工作流)已适配,不会破坏现有调用。
  1. 用户影响:为需要并行生成多组GT图像或组织测试集的用户提供了灵活性,不影响默认用户。
  2. 系统影响:仅修改CI工作流和发布脚本,不影响核心推理引擎、模型或运行时性能。
  3. 团队影响:简化了扩散模型测试的CI管理,支持更复杂的测试场景,如同时为不同模型版本生成GT。
路径参数化 向后兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论