From 8f207043c5bdf9824e33cb84a378725f4a88e255 Mon Sep 17 00:00:00 2001 From: dohe0342 Date: Fri, 9 Jun 2023 15:42:02 +0900 Subject: [PATCH] from local --- .../.data2vec_audio.py.swp | Bin 45056 -> 16384 bytes .../.train_bitfit_tta.py.swp | Bin 77824 -> 0 bytes .../.train_tta.py.swp | Bin 0 -> 86016 bytes .../data2vec_audio.py | 18 ++ .../{train_bitfit_tta.py => train_tta.py} | 219 ++++++------------ 5 files changed, 94 insertions(+), 143 deletions(-) delete mode 100644 egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.train_bitfit_tta.py.swp create mode 100644 egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.train_tta.py.swp rename egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/{train_bitfit_tta.py => train_tta.py} (91%) diff --git a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.data2vec_audio.py.swp b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.data2vec_audio.py.swp index 215c8f6718b36d6866cc18ec63b438a5f84ec002..131f031802e8c7ac2f75e00c3d5ea3d1841181f5 100644 GIT binary patch delta 1416 zcmZA0OK1~87zgmLNi|VZ+tg~sYMF{iqA>F%T~Gz{;H#JD4V;7q*amKR;vu>K ziU%RVYC>9z(Y6< z%}@^&@YubMD2L`9hMnLB-n(0H6HY)14A=>qU?cDz`dzu#EPr*;b5E9u%QVulL^vb& zr~%zb%i)YEo2sN}F*6VhvG~FRJcRpn-*O(84rr#DmijREg;VCjAdN4?N1nl=ETii2 zu)SKRp>*qNAxDcdEu$r|M>ZK#1BJX0tE+1auC?J)RX+qDeuO58~I%4tR7VW+d= zIRDNkNm^1fC27N?6Hcs#@p3~>7wyBK%Q0QfWbBga`SN)^bk3bUk9Tb~-b4OoG7S8B zRZ4URj>9qNfUU3uf-o|Z=pNjFE=WN$R6zxNFCqE}FCY&V?1vPz!XBsrR|!?p2sVEP qXJ9k%VpjR`Ma2U%tQTEA>*en9{Nwe}B5VFWpViRr&3`%A;`$3EwOVcf literal 45056 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 Mr7cj4dTQYR4LJ#qbN~PV diff --git a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.train_bitfit_tta.py.swp b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/.train_bitfit_tta.py.swp deleted file mode 100644 index b31384a950e90291abd5b3d056000580308862c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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¨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%0AWi@q6Le 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≀0WItmDpSo5FBWq?Rt(#Ok)a7T1st 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 F{~tyDV0Qoj literal 0 HcmV?d00001 diff --git a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/data2vec_audio.py b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/data2vec_audio.py index 5521c56c8..9bff19f09 100644 --- a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/data2vec_audio.py +++ b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/data2vec_audio.py @@ -38,6 +38,24 @@ from convolution import ConvolutionModule logger = logging.getLogger().setLevel(logging.INFO) +class LoRAHook(): + def __init__(self, module, embedding_dim, rank, lora_alpha): + self.hook = module.register_forward_hook(self.hook_fn) + self.lora = LoRAModule( + embedding_dim=embedding_dim, + rank=rank, + lora_alpha=lora_alpha, + ) + def hook_fn(self, module, input, output): + lora_out = self.lora(input[0]) + output += lora_out + + def save_checkpoint(self, i, iter_, save_dir): + if isinstance(self.lora, DDP): + lora = self.lora.module + torch.save(lora.state_dict(), f"{save_dir}/lora_{iter_}_{i}.pt") + + class TransformerEncoderAdapter(TransformerEncoder): def __init__(self, args: Wav2Vec2Config): super().__init__(args) diff --git a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_bitfit_tta.py b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_tta.py similarity index 91% rename from egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_bitfit_tta.py rename to egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_tta.py index ccd94c641..feeac7699 100755 --- a/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_bitfit_tta.py +++ b/egs/tedlium3/ASR/pruned_transducer_stateless_d2v_v2/train_tta.py @@ -101,6 +101,7 @@ from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.tensorboard import SummaryWriter from zipformer import Zipformer from data2vec_encoder import FairSeqData2VecEncoder +from data2vec_audio import LoRAModule, LoRAHook from icefall import diagnostics from icefall.checkpoint import remove_checkpoints @@ -123,8 +124,8 @@ from icefall.utils import ( ) import wandb +import fairseq -#from icefall.checkpoint import save_checkpoint as save_checkpoint_impl LRSchedulerType = Union[torch.optim.lr_scheduler._LRScheduler, optim.LRScheduler] @@ -138,26 +139,33 @@ def set_batch_count(model: Union[nn.Module, DDP], batch_count: float) -> None: model.encoder.num_updates = int(batch_count) -def add_adapter_arguments(parser: argparse.ArgumentParser): +def add_pea_arguments(parser: argparse.ArgumentParser): parser.add_argument( - "--add-adapter", + "--adapter", type=str2bool, default=False, help="add adapter to rep model's encoder" ) parser.add_argument( - "--adapter-lr", - type=float, - default=0.0001, - help="adapter learning rate" + "--bitfit", + type=str2bool, + default=False, + help="bias only training for PEA" + ) + + parser.add_argument( + "--lora", + type=str2bool, + default=False, + help="Low Rank Adaptation training for PEA" ) parser.add_argument( - "--gender", - type=str, - default='male', - help="select gender" + "--pea-lr", + type=float, + default=0.0001, + help="PEA learning rate" ) @@ -314,12 +322,6 @@ def add_model_arguments(parser: argparse.ArgumentParser): """, ) - parser.add_argument( - "--prompt", - type=str2bool, - default=False, - ) - def get_parser(): parser = argparse.ArgumentParser( @@ -528,10 +530,16 @@ def get_parser(): default=True, help="Whether to use half precision training.", ) - + + parser.add_argument( + "--pea", + type=str2bool, + default=True, + help="Whether to train parameter efficient adaptation", + ) add_model_arguments(parser) add_rep_arguments(parser) - add_adapter_arguments(parser) + add_pea_arguments(parser) return parser @@ -588,7 +596,7 @@ def get_params() -> AttributeDict: "best_train_epoch": -1, "best_valid_epoch": -1, "batch_idx_train": 0, - "log_interval": 5, + "log_interval": 20, "reset_interval": 200, "valid_interval": 3000, # For the 100h subset, use 800 # parameters for zipformer @@ -663,7 +671,7 @@ def get_transducer_model(params: AttributeDict) -> nn.Module: encoder = get_encoder_model(params) decoder = get_decoder_model(params) joiner = get_joiner_model(params) - + model = Transducer( encoder=encoder, decoder=decoder, @@ -672,8 +680,6 @@ def get_transducer_model(params: AttributeDict) -> nn.Module: decoder_dim=params.decoder_dim, joiner_dim=params.joiner_dim, vocab_size=params.vocab_size, - prompt=params.prompt, - sid=params.spk_id, ) return model @@ -714,7 +720,7 @@ def load_checkpoint_if_available( filename = params.exp_dir / f"checkpoint-{params.start_batch}.pt" elif params.start_epoch > 1: filename = params.exp_dir / f"epoch-{params.start_epoch-1}.pt" - elif params.add_adapter: + elif params.pea: filename = params.exp_dir / f"../d2v-base-T.pt" else: return None @@ -727,7 +733,7 @@ def load_checkpoint_if_available( model_avg=model_avg, optimizer=optimizer, scheduler=scheduler, - strict=True if not params.add_adapter else False, + strict=True if not params.pea else False, ) keys = [ @@ -1001,6 +1007,7 @@ def train_one_epoch( world_size: int = 1, rank: int = 0, wb = None, + lora_modules = None, ) -> None: """Train the model for one epoch. @@ -1100,54 +1107,23 @@ def train_one_epoch( if params.print_diagnostics and batch_idx == 5: return - ''' - if ( - rank == 0 - and params.batch_idx_train > 0 - and params.batch_idx_train % params.average_period == 0 - ): - update_averaged_model( - params=params, - model_cur=model, - model_avg=model_avg, - ) - ''' - if ( params.batch_idx_train > 0 and params.batch_idx_train % params.save_every_n == 0 ): params.cur_batch_idx = batch_idx - save_checkpoint_with_global_batch_idx( - out_dir=params.exp_dir, - global_batch_idx=params.batch_idx_train, - model=model, - model_avg=model_avg, - params=params, - optimizer=optimizer, - scheduler=scheduler, - sampler=train_dl.sampler, - scaler=scaler, - rank=rank, - ) del params.cur_batch_idx - ''' - remove_checkpoints( - out_dir=params.exp_dir, - topk=params.keep_last_k, - rank=rank, - ) - ''' + + if rank == 0: + for i, lora in enumerate(lora_modules): + lora.save_checkpoint(i, params.batch_idx_train, params.exp_dir) if batch_idx % 100 == 0 and params.use_fp16: # If the grad scale was less than 1, try increasing it. The _growth_interval # of the grad scaler is configurable, but we can't configure it to have different # behavior depending on the current grad scale. cur_grad_scale = scaler._scale.item() - ''' - if cur_grad_scale < 1.0 or (cur_grad_scale < 8.0 and batch_idx % 400 == 0): - scaler.update(cur_grad_scale * 2.0) - ''' + if cur_grad_scale < 0.01: logging.warning(f"Grad scale is small: {cur_grad_scale}") if cur_grad_scale < 1.0e-05: @@ -1156,16 +1132,7 @@ def train_one_epoch( f"grad_scale is too small, exiting: {cur_grad_scale}" ) - #if params.batch_idx_train > 4000 and loss > 300 and params.wandb: - # wb.log({"valid/loss": 10000}) - # raise RuntimeError( - # f"divergence... exiting: loss={loss}" - # ) - if batch_idx % (params.log_interval*params.accum_grads) == 0: - #for n, p in model.named_parameters(): - # if 'adapter' in n: - # print(p) if params.multi_optim: cur_enc_lr = scheduler_enc.get_last_lr()[0] cur_dec_lr = scheduler_dec.get_last_lr()[0] @@ -1223,36 +1190,6 @@ def train_one_epoch( wb.log({"train/pruned_loss": loss_info["pruned_loss"]*numel}) wb.log({"train/ctc_loss": loss_info["ctc_loss"]*numel}) - ''' - logging.info("Computing validation loss") - valid_info = compute_validation_loss( - params=params, - model=model, - sp=sp, - valid_dl=valid_dl, - world_size=world_size, - ) - model.train() - logging.info(f"Epoch {params.cur_epoch}, validation: {valid_info}") - logging.info( - f"Maximum memory allocated so far is {torch.cuda.max_memory_allocated()//1000000}MB" - ) - if tb_writer is not None: - valid_info.write_summary( - tb_writer, "train/valid_", params.batch_idx_train - ) - - if wb is not None and rank == 0: - numel = 1 / (params.accum_grads * valid_info["utterances"]) - #wb.log({"valid/loss": valid_info["loss"]*numel}) - wb.log({"valid/loss": numel*(valid_info["simple_loss"] - +valid_info["pruned_loss"] - +valid_info["ctc_loss"] - )}) - wb.log({"valid/simple_loss": valid_info["simple_loss"]*numel}) - wb.log({"valid/pruned_loss": valid_info["pruned_loss"]*numel}) - wb.log({"valid/ctc_loss": valid_info["ctc_loss"]*numel}) - ''' loss_value = tot_loss["loss"] / tot_loss["utterances"] params.train_loss = loss_value if params.train_loss < params.best_train_loss: @@ -1449,17 +1386,6 @@ def run(rank, world_size, args, wb=None): valid_cuts += librispeech.dev_other_cuts() valid_dl = librispeech.valid_dataloaders(valid_cuts) - ''' - if not params.print_diagnostics: - scan_pessimistic_batches_for_oom( - model=model, - train_dl=train_dl, - optimizer=optimizer, - sp=sp, - params=params, - ) - ''' - scaler = GradScaler(enabled=params.use_fp16, init_scale=1.0) if checkpoints and "grad_scaler" in checkpoints: logging.info("Loading grad scaler state dict") @@ -1506,7 +1432,7 @@ def run(rank, world_size, args, wb=None): cleanup_dist() -def run_adapter(rank, world_size, args, wb=None): +def run_pea(rank, world_size, args, wb=None): """ Args: rank: @@ -1557,8 +1483,7 @@ def run_adapter(rank, world_size, args, wb=None): model_avg: Optional[nn.Module] = None if rank == 0: # model_avg is only used with rank 0 - #model_avg = copy.deepcopy(model).to(torch.float64) - model_avg = None + model_avg = copy.deepcopy(model).to(torch.float64) assert params.start_epoch > 0, params.start_epoch checkpoints = load_checkpoint_if_available( @@ -1570,33 +1495,40 @@ def run_adapter(rank, world_size, args, wb=None): logging.info("Using DDP") model = DDP(model, device_ids=[rank], find_unused_parameters=True) - adapter_names = [] - adapter_param = [] - for n, p in model.named_parameters(): - if 'q_proj.bias' in n or 'fc1.bias' in n: - adapter_names.append(n) - adapter_param.append(p) - else: - p.requires_grad = False - - ''' - if 'adapters' in n:# or 'joiner' in n or 'simple' in n or 'ctc' in n: - adapter_names.append(n) - adapter_param.append(p) - elif 'joiner' in n or 'simple' in n or 'ctc' in n: - p.requires_grad = True - else: - p.requires_grad = False - ''' - optimizer_adapter = ScaledAdam( - adapter_param, - lr=params.adapter_lr, - clipping_scale=5.0, - parameters_names=[adapter_names], - ) + lora_modules = [] + for modules in model.modules(): + if isinstance(modules, fairseq.modules.multihead_attention.MultiheadAttention): + for module in modules.modules(): + if isinstance(module, torch.nn.Linear): + lora_modules.append(LoRAHook( + module, + embedding_dim=args.encoder_dim, + rank=args.rank, + lora_alpha=args.lora_alpha, + )) - scheduler_adapter = Eden(optimizer_adapter, 10000, 7) #params.lr_batche, params.lr_epochs) - optimizer, scheduler = optimizer_adapter, scheduler_adapter + if world_size > 1: + logging.info("Using DDP for LoRA") + for module in lora_modules: + module.lora = module.lora.to(device) + module.lora = DDP(module.lora, device_ids=[rank], find_unused_parameters=False) + + pea_names = [] + pea_param = [] + for i, module in enumerate(lora_modules): + for n, p in module.lora.named_parameters(): + new_n = str(i) + n + pea_names.append(new_n) + pea_param.append(p) + + optimizer_pea = ScaledAdam( + pea_param, + lr=params.pea_lr, + clipping_scale=5.0, + parameters_names=[pea_names], + ) + scheduler_pea = Eden(optimizer_pea, 10000, 7) + optimizer, scheduler = optimizer_pea, scheduler_pea librispeech = LibriSpeechAsrDataModule(args) train_cuts = librispeech.vox_cuts(option=params.spk_id) @@ -1611,7 +1543,7 @@ def run_adapter(rank, world_size, args, wb=None): train_dl = librispeech.train_dataloaders( train_cuts, sampler_state_dict=sampler_state_dict ) - + valid_cuts = librispeech.dev_clean_cuts(option=params.gender) valid_cuts += librispeech.dev_other_cuts(option=params.gender) valid_dl = librispeech.valid_dataloaders(valid_cuts) @@ -1643,6 +1575,7 @@ def run_adapter(rank, world_size, args, wb=None): world_size=world_size, rank=rank, wb=wb, + lora_modules=lora_modules, ) if params.print_diagnostics: @@ -1746,13 +1679,13 @@ def main(): world_size = args.world_size assert world_size >= 1 if world_size > 1: - mp.spawn(run if not args.add_adapter else run_adapter, + mp.spawn(run if not args.pea else run_pea, args=(world_size, args, wb), nprocs=world_size, join=True ) else: - if args.add_adapter: run_adapter(rank=0, world_size=1, args=args, wb=wb) + if args.pea: run_pea(rank=0, world_size=1, args=args, wb=wb) else: run(rank=0, world_size=1, args=args, wb=wb) torch.set_num_threads(1)