执行摘要
- 一句话:将GB200夜间测试日志导出到S3存储
- 推荐动作:本PR属于基础设施增强,逻辑清晰,风险较低。值得关注的是其路径设计模式,可复用于其他CI日志导出场景。建议合并。
功能与动机
目前查看GB200夜间运行日志的唯一方式是直接访问集群,这给开发者排查失败问题带来了障碍。本PR将完整的/logs目录(包括prefill/decode/frontend worker输出文件、benchmark-rollup.json等)上传到S3兼容后端,方便开发者通过mc cp或MinIO Web控制台访问。
实现拆解
- 修改
scripts/ci/slurm/launch_gb200.sh:在生成的srtslurm.yaml中添加reporting.s3块,包含bucket、prefix和endpoint_url。prefix由${TRIGGER}/${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}/${SEQ_LEN}/${MATRIX_CONFIG_NAME}组成。同时添加了环境变量验证,确保S3相关变量已设置。
- 修改
.github/workflows/nightly-72-gpu-gb200.yml:在nightly-gb200-benchmark job中添加4个环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、S3_BUCKET、S3_ENDPOINT_URL),从仓库secrets中获取。同时添加MATRIX_CONFIG_NAME变量。
- 添加上传AI分析结果步骤:在工作流中新增一个步骤,当job失败时将
ai_analysis.md文件上传到S3,路径与日志前缀一致,便于关联分析。
关键文件:
scripts/ci/slurm/launch_gb200.sh(模块 CI脚本;类别 infra;类型 infrastructure): 核心变更:添加S3配置块和环境变量验证,定义日志路径前缀逻辑
.github/workflows/nightly-72-gpu-gb200.yml(模块 CI工作流;类别 infra;类型 infrastructure): 工作流配置:添加S3环境变量和AI分析上传步骤
关键符号:fmt_seq_len
关键源码片段
scripts/ci/slurm/launch_gb200.sh
核心变更:添加S3配置块和环境变量验证,定义日志路径前缀逻辑
# 验证环境变量是否设置,若未设置则报错退出
: "${S3_BUCKET:?S3_BUCKET must be set}"
: "${S3_ENDPOINT_URL:?S3_ENDPOINT_URL must be set}"
: "${AWS_ACCESS_KEY_ID:?AWS_ACCESS_KEY_ID must be set}"
: "${AWS_SECRET_ACCESS_KEY:?AWS_SECRET_ACCESS_KEY must be set}"
: "${MATRIX_CONFIG_NAME:?MATRIX_CONFIG_NAME must be set}"
: "${GITHUB_RUN_ID:?GITHUB_RUN_ID must be set}"
: "${GITHUB_RUN_ATTEMPT:?GITHUB_RUN_ATTEMPT must be set}"
# 根据触发事件类型确定前缀顶级目录:cron 或 manual
case "${GITHUB_EVENT_NAME:-}" in
schedule) TRIGGER=cron ;;
workflow_dispatch) TRIGGER=manual ;;
*) TRIGGER="${GITHUB_EVENT_NAME:-unknown}" ;;
esac
# 将 ISL/OSL 转换为 k 单位(如 1k1k),便于按序列长度分组
fmt_seq_len() {
local n=$1
if (( n % 1024 == 0 )); then echo "$((n / 1024))k"; else echo "$n"; fi
}
SEQ_LEN="$(fmt_seq_len "$ISL")$(fmt_seq_len "$OSL")"
S3_PREFIX="${TRIGGER}/${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}/${SEQ_LEN}/${MATRIX_CONFIG_NAME}"
# 在 srtslurm.yaml 中添加 reporting.s3 配置,srt-slurm 会在 prefix 后追加日期 /Slurm 任务 ID
cat > srtslurm.yaml <<EOF
reporting:
s3:
bucket: "${S3_BUCKET}"
prefix: "${S3_PREFIX}"
endpoint_url: "${S3_ENDPOINT_URL}"
EOF
.github/workflows/nightly-72-gpu-gb200.yml
工作流配置:添加S3环境变量和AI分析上传步骤
# 在 job 的 env 中传递 S3 凭据,这些值来自 repo secrets
env:
MATRIX_CONFIG_NAME: ${{ matrix.config.name }}
AWS_ACCESS_KEY_ID: ${{ secrets.NV_S3_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.NV_S3_SECRET_ACCESS_KEY }}
S3_BUCKET: ${{ secrets.NV_S3_BUCKET }}
S3_ENDPOINT_URL: ${{ secrets.NV_S3_ENDPOINT_URL }}
# 新增步骤:当 job 失败时,将 AI 分析结果上传到 S3
- name: Upload AI analysis to S3
if: failure()
continue-on-error: true
env:
ISL: ${{ matrix.config.isl }}
OSL: ${{ matrix.config.osl }}
run: |
ANALYSIS="${{ github.workspace }}/ai_analysis.md"
[ -f "$ANALYSIS" ] || { echo "no ai_analysis.md, skipping"; exit 0; }
case "${{ github.event_name }}" in
schedule) TRIGGER=cron ;;
workflow_dispatch) TRIGGER=manual ;;
*) TRIGGER="${{ github.event_name }}" ;;
esac
fmt() { if [ $(( $1 % 1024 )) -eq 0 ]; then echo "$(( $1 / 1024 ))k"; else echo "$1"; fi; }
SEQ_LEN="$(fmt "$ISL")$(fmt "$OSL")"
KEY="${TRIGGER}/${{ github.run_id }}-${{ github.run_attempt }}/${SEQ_LEN}/${{ matrix.config.name }}/ai_analysis.md"
aws --endpoint-url "$S3_ENDPOINT_URL" s3 cp "$ANALYSIS" "s3://${S3_BUCKET}/${KEY}"
评论区精华
本PR仅有一条来自gemini-code-assist bot的评论,提示每日配额已达上限,未产生其他评审讨论。
风险与影响
关联脉络
参与讨论