Save Axolotl config as WandB artifact (#716)
This commit is contained in:
committed by
GitHub
parent
5855dded3d
commit
490923fb78
@@ -194,6 +194,7 @@ def load_cfg(config: Path = Path("examples/"), **kwargs):
|
|||||||
# load the config from the yaml file
|
# load the config from the yaml file
|
||||||
with open(config, encoding="utf-8") as file:
|
with open(config, encoding="utf-8") as file:
|
||||||
cfg: DictDefault = DictDefault(yaml.safe_load(file))
|
cfg: DictDefault = DictDefault(yaml.safe_load(file))
|
||||||
|
cfg.axolotl_config_path = config
|
||||||
# if there are any options passed in the cli, if it is something that seems valid from the yaml,
|
# if there are any options passed in the cli, if it is something that seems valid from the yaml,
|
||||||
# then overwrite the value
|
# then overwrite the value
|
||||||
cfg_keys = cfg.keys()
|
cfg_keys = cfg.keys()
|
||||||
|
|||||||
@@ -514,3 +514,27 @@ def log_prediction_callback_factory(trainer: Trainer, tokenizer):
|
|||||||
return control
|
return control
|
||||||
|
|
||||||
return LogPredictionCallback
|
return LogPredictionCallback
|
||||||
|
|
||||||
|
|
||||||
|
class SaveAxolotlConfigtoWandBCallback(TrainerCallback):
|
||||||
|
"""Callback to save axolotl config to wandb"""
|
||||||
|
|
||||||
|
def __init__(self, axolotl_config_path):
|
||||||
|
self.axolotl_config_path = axolotl_config_path
|
||||||
|
|
||||||
|
def on_train_begin(
|
||||||
|
self,
|
||||||
|
args: AxolotlTrainingArguments, # pylint: disable=unused-argument
|
||||||
|
state: TrainerState, # pylint: disable=unused-argument
|
||||||
|
control: TrainerControl,
|
||||||
|
**kwargs, # pylint: disable=unused-argument
|
||||||
|
):
|
||||||
|
if is_main_process():
|
||||||
|
try:
|
||||||
|
artifact = wandb.Artifact(name="axolotl-config", type="config")
|
||||||
|
artifact.add_file(local_path=self.axolotl_config_path)
|
||||||
|
wandb.run.log_artifact(artifact)
|
||||||
|
LOG.info("Axolotl config has been saved to WandB as an artifact.")
|
||||||
|
except (FileNotFoundError, ConnectionError) as err:
|
||||||
|
LOG.warning(f"Error while saving Axolotl config to WandB: {err}")
|
||||||
|
return control
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ from axolotl.monkeypatch.relora import ReLoRACallback, ReLoRAScheduler
|
|||||||
from axolotl.utils.callbacks import (
|
from axolotl.utils.callbacks import (
|
||||||
EvalFirstStepCallback,
|
EvalFirstStepCallback,
|
||||||
GPUStatsCallback,
|
GPUStatsCallback,
|
||||||
|
SaveAxolotlConfigtoWandBCallback,
|
||||||
SaveBetterTransformerModelCallback,
|
SaveBetterTransformerModelCallback,
|
||||||
bench_eval_callback_factory,
|
bench_eval_callback_factory,
|
||||||
log_prediction_callback_factory,
|
log_prediction_callback_factory,
|
||||||
@@ -775,6 +776,9 @@ def setup_trainer(cfg, train_dataset, eval_dataset, model, tokenizer, total_num_
|
|||||||
LogPredictionCallback = log_prediction_callback_factory(trainer, tokenizer)
|
LogPredictionCallback = log_prediction_callback_factory(trainer, tokenizer)
|
||||||
trainer.add_callback(LogPredictionCallback(cfg))
|
trainer.add_callback(LogPredictionCallback(cfg))
|
||||||
|
|
||||||
|
if cfg.use_wandb:
|
||||||
|
trainer.add_callback(SaveAxolotlConfigtoWandBCallback(cfg.axolotl_config_path))
|
||||||
|
|
||||||
if cfg.do_bench_eval:
|
if cfg.do_bench_eval:
|
||||||
trainer.add_callback(bench_eval_callback_factory(trainer, tokenizer))
|
trainer.add_callback(bench_eval_callback_factory(trainer, tokenizer))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user