| #!/usr/bin/env bash |
| set -euox pipefail |
|
|
|
|
| |
| CONFIG_SPECS=( |
| "ppo_trainer:_generated_ppo_trainer.yaml:" |
| "ppo_megatron_trainer:_generated_ppo_megatron_trainer.yaml:--config-name=ppo_megatron_trainer.yaml" |
| ) |
|
|
| generate_config() { |
| local config_name="$1" |
| local output_file="$2" |
| local config_arg="$3" |
| |
| local target_cfg="verl/trainer/config/${output_file}" |
| local tmp_header=$(mktemp) |
| local tmp_cfg=$(mktemp) |
| |
| echo "# This reference configration yaml is automatically generated via 'scripts/generate_trainer_config.sh'" > "$tmp_header" |
| echo "# in which it invokes 'python3 scripts/print_cfg.py --cfg job ${config_arg}' to flatten the 'verl/trainer/config/${config_name}.yaml' config fields into a single file." >> "$tmp_header" |
| echo "# Do not modify this file directly." >> "$tmp_header" |
| echo "# The file is usually only for reference and never used." >> "$tmp_header" |
| echo "" >> "$tmp_header" |
| |
| python3 scripts/print_cfg.py --cfg job ${config_arg} > "$tmp_cfg" |
| |
| cat "$tmp_header" > "$target_cfg" |
| sed -n '/^actor_rollout_ref/,$p' "$tmp_cfg" >> "$target_cfg" |
| |
| rm "$tmp_cfg" "$tmp_header" |
| |
| echo "Generated: $target_cfg" |
| } |
|
|
| for spec in "${CONFIG_SPECS[@]}"; do |
| IFS=':' read -r config_name output_file config_arg <<< "$spec" |
| generate_config "$config_name" "$output_file" "$config_arg" |
| done |
|
|
| for spec in "${CONFIG_SPECS[@]}"; do |
| IFS=':' read -r config_name output_file config_arg <<< "$spec" |
| target_cfg="verl/trainer/config/${output_file}" |
| if ! git diff --exit-code -- "$target_cfg" >/dev/null; then |
| echo "✖ $target_cfg is out of date. Please regenerate via 'scripts/generate_trainer_config.sh' and commit the changes." |
| exit 1 |
| fi |
| done |
|
|
| echo "All good" |
| exit 0 |
|
|