Implementation:Huggingface Alignment handbook TrlParser Parse Args And Config
| Knowledge Sources | |
|---|---|
| Domains | NLP, Training, Configuration |
| Last Updated | 2026-02-07 00:00 GMT |
Overview
Concrete tool for parsing YAML recipe configs and CLI arguments into typed dataclass tuples, provided by the TRL library.
Description
TrlParser is TRL's extension of HuggingFace's HfArgumentParser that adds support for YAML configuration files via the --config flag. In the alignment-handbook, it is the universal entry point for all training scripts (SFT, DPO, ORPO). It parses a tuple of dataclass types and returns populated instances, with CLI arguments overriding YAML values.
The alignment-handbook uses custom dataclass extensions (ScriptArguments, SFTConfig, DPOConfig, ORPOConfig) that add fields like chat_template and dataset_mixture on top of TRL's base classes.
Usage
Use this when launching any alignment-handbook training script. The parser is always the first operation in the __main__ block, producing the three config objects consumed by main().
Code Reference
Source Location
- Repository: alignment-handbook
- File: scripts/sft.py (lines 171-173), scripts/dpo.py (lines 156-158), scripts/orpo.py (lines 155-157)
Signature
class TrlParser:
def __init__(
self,
dataclass_types: tuple[type, ...],
):
"""
Args:
dataclass_types: Tuple of dataclass types to parse into.
Typically (ScriptArguments, SFTConfig/DPOConfig/ORPOConfig, ModelConfig).
"""
def parse_args_and_config(self) -> tuple:
"""
Parse CLI arguments and optional YAML config file.
Returns:
Tuple of populated dataclass instances matching the order
of dataclass_types provided to __init__.
"""
Import
from trl import TrlParser, ModelConfig
from alignment import ScriptArguments, SFTConfig # or DPOConfig, ORPOConfig
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| dataclass_types | tuple[type, ...] | Yes | Tuple of dataclass types to parse (e.g., (ScriptArguments, SFTConfig, ModelConfig)) |
| --config | str (CLI flag) | Yes | Path to YAML recipe config file (e.g., recipes/zephyr-7b-beta/sft/config_full.yaml) |
| CLI overrides | various | No | Any dataclass field can be overridden via CLI (e.g., --learning_rate 2e-5) |
Outputs
| Name | Type | Description |
|---|---|---|
| script_args | ScriptArguments | Dataset configuration (dataset_name or dataset_mixture, splits) |
| training_args | SFTConfig / DPOConfig / ORPOConfig | Training hyperparameters (learning rate, batch size, epochs, loss settings) |
| model_args | ModelConfig | Model loading config (model_name_or_path, dtype, quantization, PEFT flags) |
Usage Examples
SFT Training Entry Point
from alignment import ScriptArguments, SFTConfig
from trl import ModelConfig, TrlParser
if __name__ == "__main__":
parser = TrlParser((ScriptArguments, SFTConfig, ModelConfig))
script_args, training_args, model_args = parser.parse_args_and_config()
main(script_args, training_args, model_args)
DPO Training Entry Point
from alignment import DPOConfig, ScriptArguments
from trl import ModelConfig, TrlParser
if __name__ == "__main__":
parser = TrlParser((ScriptArguments, DPOConfig, ModelConfig))
script_args, training_args, model_args = parser.parse_args_and_config()
main(script_args, training_args, model_args)
CLI Launch with YAML Config
# Launch SFT with a recipe config
accelerate launch --config_file recipes/accelerate_configs/zero3.yaml \
scripts/sft.py \
--config recipes/zephyr-7b-beta/sft/config_full.yaml
# Override a specific parameter from CLI
accelerate launch --config_file recipes/accelerate_configs/zero3.yaml \
scripts/sft.py \
--config recipes/zephyr-7b-beta/sft/config_full.yaml \
--learning_rate 1e-5