Spaces:
Runtime error
Runtime error
import os | |
from typing import Optional | |
import torch | |
from transformers import Trainer | |
def maybe_zero_3(param, ignore_status=False, name=None): | |
from deepspeed import zero | |
from deepspeed.runtime.zero.partition_parameters import ZeroParamStatus | |
if hasattr(param, "ds_id"): | |
if param.ds_status == ZeroParamStatus.NOT_AVAILABLE: | |
if not ignore_status: | |
print(name, "no ignore status") | |
with zero.GatheredParameters([param]): | |
param = param.data.detach().cpu().clone() | |
else: | |
param = param.detach().cpu().clone() | |
return param | |
def get_mm_adapter_state_maybe_zero_3(named_params, keys_to_match): | |
to_return = { | |
k: t | |
for k, t in named_params | |
if any(key_match in k for key_match in keys_to_match) | |
} | |
to_return = { | |
k: maybe_zero_3(v, ignore_status=True, name=k).cpu() | |
for k, v in to_return.items() | |
} | |
return to_return | |
class LLaVATrainer(Trainer): | |
def _save_checkpoint(self, model, trial, metrics=None): | |
if getattr(self.args, "tune_mm_mlp_adapter", False): | |
from transformers.trainer_utils import PREFIX_CHECKPOINT_DIR | |
checkpoint_folder = f"{PREFIX_CHECKPOINT_DIR}-{self.state.global_step}" | |
run_dir = self._get_output_dir(trial=trial) | |
output_dir = os.path.join(run_dir, checkpoint_folder) | |
# Only save Adapter | |
keys_to_match = ["mm_projector"] | |
if getattr(self.args, "use_im_start_end", False): | |
keys_to_match.extend(["embed_tokens", "embed_in"]) | |
weight_to_save = get_mm_adapter_state_maybe_zero_3( | |
self.model.named_parameters(), keys_to_match | |
) | |
if self.args.local_rank == 0 or self.args.local_rank == -1: | |
self.model.config.save_pretrained(output_dir) | |
torch.save( | |
weight_to_save, os.path.join(output_dir, f"mm_projector.bin") | |
) | |
else: | |
super(LLaVATrainer, self)._save_checkpoint(model, trial, metrics) | |
def _save(self, output_dir: Optional[str] = None, state_dict=None): | |
if getattr(self.args, "tune_mm_mlp_adapter", False): | |
pass | |
else: | |
super(LLaVATrainer, self)._save(output_dir, state_dict) | |