| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import nemo_run as run |
|
|
| from nemo.collections import vlm |
|
|
|
|
| def configure_recipe(nodes: int = 1, gpus_per_node: int = 8, pretrain=False, language_model_from_pretrained=None): |
| """Configure the recipe""" |
| if pretrain: |
| recipe = vlm.llava_next_7b.pretrain_recipe( |
| dir="./outputs/checkpoints/llava", |
| name="llava_pretrain", |
| num_nodes=nodes, |
| num_gpus_per_node=gpus_per_node, |
| language_model_from_pretrained=language_model_from_pretrained, |
| ) |
| else: |
| recipe = vlm.llava_next_7b.finetune_recipe( |
| dir="./outputs/checkpoints/llava", |
| name="llava_finetune", |
| num_nodes=nodes, |
| num_gpus_per_node=gpus_per_node, |
| ) |
| recipe.trainer.max_steps = 20 |
| recipe.trainer.val_check_interval = 20 |
| recipe.model.config.freeze_vision_model = True |
| return recipe |
|
|
|
|
| def local_executor_torchrun(nodes: int = 1, devices: int = 8) -> run.LocalExecutor: |
| |
| |
| env_vars = {} |
|
|
| executor = run.LocalExecutor(ntasks_per_node=devices, launcher="torchrun", env_vars=env_vars) |
|
|
| return executor |
|
|
|
|
| def run_pretraining(language_model_from_pretrained=None): |
| |
| recipe = configure_recipe(pretrain=True, language_model_from_pretrained=language_model_from_pretrained) |
| executor = local_executor_torchrun(nodes=recipe.trainer.num_nodes, devices=recipe.trainer.devices) |
|
|
| run.run(recipe, executor=executor) |
|
|
|
|
| def run_finetuning(): |
| |
| recipe = configure_recipe(pretrain=False) |
| executor = local_executor_torchrun(nodes=recipe.trainer.num_nodes, devices=recipe.trainer.devices) |
|
|
| run.run(recipe, executor=executor) |
|
|
|
|
| |
| if __name__ == "__main__": |
| run_pretraining(language_model_from_pretrained='/root/.cache/nemo/models/lmsys/vicuna-7b-v1.5/') |
| |
|
|