Direct guide for training DPO models and running inference.
All trained models saved under experiments/:
experiments/
├── dataset1_2024-12-05_14-23-47/ # Standard DPO
│ └── checkpoints.jsonl
├── 2adapter_dataset1_2024-12-05_14-30-00/ # 2-Adapter DPO
│ ├── factual/
│ │ └── checkpoints.jsonl
│ └── creative/
│ └── checkpoints.jsonl
└── diversity_weighted_dataset1_gamma0.05_2024-12-05_14-45-00/ # Diversity-Weighted DPO
└── checkpoints.jsonl
Naming Convention:
- Standard:
dataset{N}_{timestamp} - 2-Adapter:
2adapter_dataset{N}_{timestamp} - Diversity-Weighted:
diversity_weighted_dataset{N}_gamma{value}_{timestamp}
All inference results saved under inference_results/:
inference_results/
├── standard_dpo/
│ └── dataset1_2024-12-05_14-23-47.json # Matches experiment folder name
├── 2adapter_dpo/
│ └── 2adapter_dataset1_2024-12-05_14-30-00.json
└── diversity_weighted_dpo/
└── diversity_weighted_dataset1_gamma0.05_2024-12-05_14-45-00.json
Mapping:
- Inference result filename = experiment folder name
- Easy 1-1 mapping between training run and inference results
Note: Training scripts use key=value syntax (no dashes).
python3 scripts/train_dpo.py model_name=Qwen/Qwen3-8B dataset=1 learning_rate=1e-5 num_epochs=1 batch_size=256 dpo_beta=0.1Output: experiments/dataset1_{timestamp}/
python3 scripts/train_2adapter_dpo.py model_name=Qwen/Qwen3-8B dataset=1 learning_rate=1e-5 num_epochs=1 batch_size=256 dpo_beta=0.1Output: experiments/2adapter_dataset1_{timestamp}/factual/ and .../creative/
python3 scripts/train_diversity_weighted_dpo.py model_name=Qwen/Qwen3-8B dataset=1 gamma=0.05 learning_rate=1e-5 num_epochs=1 batch_size=256 dpo_beta=0.1Output: experiments/diversity_weighted_dataset1_gamma0.05_{timestamp}/
| Parameter | Default | Description |
|---|---|---|
--dataset |
(required) | Dataset number: 1, 2, or 3 |
--learning_rate |
1e-5 |
Learning rate |
--num_epochs |
1 |
Number of training epochs |
--batch_size |
256 |
Training batch size |
--dpo_beta |
0.1 |
DPO beta parameter |
--lora_rank |
32 |
LoRA rank |
--gamma |
0.05 |
Diversity weight (diversity-weighted only) |
Note: Inference scripts use key=value syntax (no dashes), like training scripts.
python3 scripts/inference_standard_dpo.py \
model_path=tinker://experiments/dataset1_2024-12-05_14-23-47/sampler_weights/final \
test_dataset=scripts/test_ultrafeedback.parquet \
k_samples=5Output: inference_results/standard_dpo/dataset1_2024-12-05_14-23-47.json
python3 scripts/inference_2adapter_dpo.py \
factual_adapter_path=tinker://experiments/2adapter_dataset1_2024-12-05_14-30-00/factual/sampler_weights/final \
creative_adapter_path=tinker://experiments/2adapter_dataset1_2024-12-05_14-30-00/creative/sampler_weights/final \
test_dataset=scripts/test_ultrafeedback.parquet \
k_samples=5Output: inference_results/2adapter_dpo/2adapter_dataset1_2024-12-05_14-30-00.json
python3 scripts/inference_diversity_weighted_dpo.py \
model_path=tinker://experiments/diversity_weighted_dataset1_gamma0.05_2024-12-05_14-45-00/sampler_weights/final \
test_dataset=scripts/test_ultrafeedback.parquet \
k_samples=5Output: inference_results/diversity_weighted_dpo/diversity_weighted_dataset1_gamma0.05_2024-12-05_14-45-00.json
| Parameter | Default | Description |
|---|---|---|
model_path |
(required) | Trained model path (use /sampler_weights/final) |
factual_adapter_path |
(required) | Factual adapter path (2-adapter only) |
creative_adapter_path |
(required) | Creative adapter path (2-adapter only) |
test_dataset |
scripts/test_ultrafeedback.parquet |
Test dataset path |
k_samples |
5 |
Number of responses per prompt |
max_concurrent |
10 |
Max concurrent prompts |
temperature |
1.0 |
Sampling temperature |
Two test datasets are available for evaluation:
File: scripts/test_ultrafeedback.parquet
- Size: 2,000 prompts
- Source: UltraFeedback (same distribution as training data)
- Use case: Evaluate generalization on held-out UltraFeedback data
python3 scripts/inference_standard_dpo.py \
model_path=tinker://your-model-id/sampler_weights/final \
test_dataset=scripts/test_ultrafeedback.parquetFile: scripts/test_tulu_alpaca.parquet
- Size: 9,686 prompts
- Source: Tulu + Alpaca datasets (different distribution)
- Use case: Evaluate robustness on out-of-domain data
python3 scripts/inference_standard_dpo.py \
model_path=tinker://your-model-id/sampler_weights/final \
test_dataset=scripts/test_tulu_alpaca.parquetBoth datasets have compatible schemas:
instruction: The prompt/instructionlabel: Prompt type (factual/creative)creative_score: Creativity score (0-1)factual_score: Factuality score (0-1)
Each JSON file contains:
{
"metadata": {
"approach": "standard_dpo",
"experiment_folder": "dataset1_2024-12-05_14-23-47",
"model_path": "tinker://experiments/...",
"train_dataset": "dataset1",
"test_dataset": "scripts/test_ultrafeedback.parquet"
},
"results": [
{
"prompt": "...",
"responses": ["...", "...", "...", "...", "..."],
"alpha": 0.45,
"prompt_label": "creative",
"self_bleu": 0.234,
"distinct_2": 0.782,
"semantic_div": 1.456
}
],
"summary": {
"total_prompts": 2000,
"avg_self_bleu": 0.250,
"avg_distinct_2": 0.750,
"avg_semantic_div": 1.400
}
}| Metric | Range | Better Value | Description |
|---|---|---|---|
| Self-BLEU | 0-1 | Lower | Lexical overlap (n-gram similarity) |
| Distinct-2 | 0-1 | Higher | Unique bigrams ratio |
| Semantic Div | 0-2 | Higher | Embedding cosine distance |
# 1. Train standard DPO on dataset 1
python3 scripts/train_dpo.py model_name=Qwen/Qwen3-8B dataset=1
# Output: experiments/dataset1_2024-12-05_14-23-47/
# 2. Run inference on trained model
python3 scripts/inference_standard_dpo.py \
model_path=tinker://experiments/dataset1_2024-12-05_14-23-47/sampler_weights/final \
test_dataset=scripts/test_ultrafeedback.parquet
# Output: inference_results/standard_dpo/dataset1_2024-12-05_14-23-47.jsonMapping:
- Training folder:
experiments/dataset1_2024-12-05_14-23-47/ - Inference result:
inference_results/standard_dpo/dataset1_2024-12-05_14-23-47.json - Match: Same experiment name in both paths