用于超参数调优的 GitHub Actions 工作流

面向机器学习的 CI/CD

Ravi Bhadauria

Machine Learning Instructor

分支式工作流

  • 为训练与超参数调优分别创建功能分支
    • 仅触发目标作业
    • 其他作业不触发
    • 通过 if 条件实现
  • 超参数调优
    • 打印统计表便于分析
    • 自动就参数变更打开新 PR
  • 训练
    • 在训练 PR 中读取新参数文件
面向机器学习的 CI/CD

设置条件判断

超参数调优
jobs:
  hp_tune_and_publish_report:
    # Run when branch name starts with hp_tune/
    if: startsWith(github.head_ref, 'hp_tune/')

steps: ... - name: | DVC pipeline for hyperparameter tuning run: dvc repro -f hp_tune
训练
jobs:
  train_and_publish_report:
    # Run when branch name starts with train/
    if: startsWith(github.head_ref, 'train/')

steps: ... - name: Run DVC pipeline for training run: dvc repro train
面向机器学习的 CI/CD

设置工作流权限

仓库设置 > Actions > General

用于配置工作流权限的设置页面截图

面向机器学习的 CI/CD

超参数调优作业启动

  • 请将分支名前缀设为 hp_tune/

GHA 工作流截图:调优作业运行,训练作业已跳过

面向机器学习的 CI/CD

超参数调优作业指标

显示将网格搜索结果作为评论的 PR 截图

面向机器学习的 CI/CD

从调优运行创建训练 PR

steps:
  - name: Create training branch
    env:
      REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run: |
      # Branch name begins with train/
      export BRANCH_NAME=train/$(git rev-parse --short "${{ github.sha }}")

# Create PR for training cml pr create \ --user-email [email protected] \ --user-name HPBot \ --message "Hyperparameter tuning" \ --branch $BRANCH_NAME \ --target-branch main \ rfc_best_params.json
面向机器学习的 CI/CD

新的训练分支 PR

顶部截图:GHA 工作流产出的新模型训练 PR

底部截图:GHA 工作流产出的新模型训练 PR(机器人)

面向机器学习的 CI/CD

新的训练分支 PR

新训练 PR 中最佳参数文件的差异截图

面向机器学习的 CI/CD

手动启动训练运行

  • GITHUB_TOKEN 无法触发其自身创建的 PR 上的工作流

    • 防止递归运行
  • 变通方案

    • 使用具备相应权限的个人访问令牌
      steps:
        - env:
            GITHUB_TOKEN: ${{ secrets.MY_TOKEN }}
      
    • 在 GHA 流水线中于调优后立即运行训练作业
    • 强制推送代码以触发运行(强制复查)
      -> git checkout train/1f34fs
      -> git commit --amend --no-edit && git push -f
      
1 https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
面向机器学习的 CI/CD

训练作业启动

GHA 工作流截图:训练作业运行,调优作业已跳过

面向机器学习的 CI/CD

Passons à la pratique !

面向机器学习的 CI/CD

Preparing Video For Download...