Hydra Trainer
A package that wraps Hugging Face's Transformer Trainer with Hydra integration for better configuration management and hyperparameter optimization support.
Checkout my powerformer repo for a concrete example.
Features
- Hydra configuration management
- Optuna hyperparameter optimization integration
- Easy-to-extend base classes for custom datasets and trainers
- Specify TrainingArguments or hyperparameter search parameters within a hydra configuration file
- An example config,
base.yaml, is provided in this package.
- An example config,
Installation
pip install hydra-trainer
Quick Start
- Create your dataset class by extending
BaseDatasetor use any dataset that extendsdatasets.Dataset:
from typing import Literal
from omegaconf import DictConfig
from hydra_trainer import BaseDataset
class ExampleDataset(BaseDataset):
def __init__(self, cfg: DictConfig, dataset_key: Literal["train", "eval"]):
super().__init__(cfg)
self.dataset_key = dataset_key
# TODO: implement dataset loading and preprocessing
raise NotImplementedError
def __len__(self):
# TODO: implement this method
raise NotImplementedError
def __getitem__(self, idx):
# TODO: implement this method
raise NotImplementedError
- Create your trainer class by extending
BaseTrainer:
from typing import Literal
import optuna
from omegaconf import DictConfig
from hydra_trainer import BaseTrainer
class ExampleTrainer(BaseTrainer[ExampleDataset, DictConfig]):
def model_init_factory(self):
def model_init(trial: optuna.Trial | None = None):
model_cfg = self.get_trial_model_cfg(trial, self.cfg)
# TODO: implement model initialization
raise NotImplementedError
return model_init
def dataset_factory(
self, dataset_cfg: DictConfig, dataset_key: Literal["train", "eval"]
) -> ExampleDataset:
# TODO: implement this method
raise NotImplementedError
- Set up your training script with Hydra:
import hydra
from omegaconf import DictConfig
@hydra.main(config_path="hydra_trainer", config_name="base", version_base=None)
def main(cfg: DictConfig):
trainer = ExampleTrainer(cfg)
trainer.train()
if __name__ == "__main__":
main()
BaseTrainer Key Features
- Model Initialization Factory: Implement
model_init_factory()to define how your model is created. - Dataset Factory: Implement
dataset_factory()to create your training and evaluation datasets
Configuration
The package uses Hydra for configuration management. Here's the base configuration structure:
seed: 42
checkpoint_path: null
resume_from_checkpoint: null
do_hyperoptim: false
early_stopping_patience: 3
model: # model parameters - access them within `model_init_factory` implementation
d_model: 128
n_layers: 12
n_heads: 16
d_ff: 512
trainer: # transformers.TrainingArguments
num_train_epochs: 3
eval_strategy: steps
eval_steps: 50
logging_steps: 5
output_dir: training_output
per_device_train_batch_size: 2
per_device_eval_batch_size: 4096
learning_rate: 5e-3
weight_decay: 0.0
fp16: true
hyperopt:
n_trials: 128
patience: 2
persistence: true # set to false to use in memory storage instead of db storage
load_if_exists: true
storage_url: postgresql://postgres:password@127.0.0.1:5432/postgres
storage_heartbeat_interval: 15
storage_engine_kwargs:
pool_size: 5
connect_args:
keepalives: 1
hp_space:
training:
- name: learning_rate # TrainingArguments attribute name
type: float
low: 5e-5
high: 5e-3
step: 1e-5
log: true
model:
- name: d_model # model parameters
type: int
low: 128
high: 512
step: 128
log: true
Hyperparameter Optimization
Enable hyperparameter optimization by setting do_hyperoptim: true in your config. The package uses Optuna for hyperparameter optimization with support for:
- Integer parameters
- Float parameters
- Categorical parameters
- Persistent storage with a relational database
- Early stopping with patient pruning
Metadata
Release files for hydra-trainer 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hydra_trainer-0.1.2.tar.gz | 5.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hydra_trainer-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.6 kB
Release files / hydra_trainer-0.1.2.tar.gz
| Download URL | hydra_trainer-0.1.2.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17359d1bb46be5bafaf4cbd87f89e5102336705ccc5f5658864a0e1e1b2b8a46
|
|
BLAKE2b-256 checksum How to use checksums |
80cb099a7ea1a8f87a447c0c41142b3f4c3795304ed789e9d23328ffac75a940
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 3, 2025.
Transparency logRelease files / hydra_trainer-0.1.2-py3-none-any.whl
| Download URL | hydra_trainer-0.1.2-py3-none-any.whl |
|---|---|
| Size | 5.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a600e7642ac80e0918d282216f49775302d7139f41e869aed2847da90a32c593
|
|
BLAKE2b-256 checksum How to use checksums |
bf0c871c08f29b23f5d1cfc9d2d59b14f06060286452ade87ec089e2057e6b99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 3, 2025.
Transparency log