From 7a5e0033db8b338ff855266eeabae522a3c2b546 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 3 Jun 2020 22:15:08 -0400 Subject: [PATCH] Figured it out! --- README.md | 23 +++++ glow-tts-jaywalnut/wrap_glow_model.py | 118 ++++---------------------- 2 files changed, 40 insertions(+), 101 deletions(-) diff --git a/README.md b/README.md index 3b29857..ef7f50a 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,29 @@ Unroll the double list comprehension. In this particular case, `torch.flatten()` *Note: I'm not certain this is correct yet.* +Expected a value of type 'Tensor' for argument 'length' but instead found type 'int'.** + +It may necessary to type hint argument signatures. + +``` +_get_relative_embeddings(__torch__.attentions.MultiHeadAttention self, Tensor relative_embeddings, Tensor length) -> (Tensor): +``` + +Example: + +``` +def _get_relative_embeddings(self, relative_embeddings, length: int): +``` + +Or, + +``` +from typing import List +... + +def convert_pad_shape(pad_shape: List[List[int]]): +``` + Model-specific details ---------------------- diff --git a/glow-tts-jaywalnut/wrap_glow_model.py b/glow-tts-jaywalnut/wrap_glow_model.py index c650108..24d87ec 100755 --- a/glow-tts-jaywalnut/wrap_glow_model.py +++ b/glow-tts-jaywalnut/wrap_glow_model.py @@ -26,46 +26,9 @@ elif sys.argv[1] == 'false': else: raise Exception('Scripting or tracing?') +torch.set_grad_enabled(False) + def load(model_checkpoint_path): - #dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank) - #torch.manual_seed(hps.train.seed) - #torch.cuda.set_device(rank) - - #train_dataset = TextMelLoader(hps.data.training_files, hps.data) - #train_sampler = torch.utils.data.distributed.DistributedSampler( - # train_dataset, - # num_replicas=n_gpus, - # rank=rank, - # shuffle=True) - #collate_fn = TextMelCollate(1) - #train_loader = DataLoader(train_dataset, num_workers=8, shuffle=False, - # batch_size=hps.train.batch_size, pin_memory=True, - # drop_last=True, collate_fn=collate_fn, sampler=train_sampler) - #if rank == 0: - # val_dataset = TextMelLoader(hps.data.validation_files, hps.data) - # val_loader = DataLoader(val_dataset, num_workers=8, shuffle=False, - # batch_size=hps.train.batch_size, pin_memory=True, - # drop_last=True, collate_fn=collate_fn) - - """ - hps = utils.get_hparams() - - generator = models.FlowGenerator( - n_vocab=len(symbols), - out_channels=hps.data.n_mel_channels, - **hps.model) #.cuda(rank) - - optimizer_g = commons.Adam(generator.parameters(), scheduler=hps.train.scheduler, dim_model=hps.model.hidden_channels, warmup_steps=hps.train.warmup_steps, lr=hps.train.learning_rate, betas=hps.train.betas, eps=hps.train.eps) - - #if hps.train.fp16_run: - # generator, optimizer_g._optim = amp.initialize(generator, optimizer_g._optim, opt_level="O1") - - generator = DDP(generator) - _, _, _, epoch_str = utils.load_checkpoint(model_checkpoint_path, generator, optimizer_g) - - #optimizer_g.step_num = (epoch_str - 1) * len(train_loader) - #optimizer_g._update_learning_rate() - """ model_dir = "./logs/base/" hps = utils.get_hparams_from_dir(model_dir) print('Checkpoint path: {}'.format(model_checkpoint_path)) @@ -85,64 +48,6 @@ def load(model_checkpoint_path): return (hps, model) -""" -model_hparams = { - "hidden_channels": 192, - "filter_channels": 768, - "filter_channels_dp": 256, - "kernel_size": 3, - "p_dropout": 0.1, - "n_blocks_dec": 12, - "n_layers_enc": 6, - "n_heads": 2, - "p_dropout_dec": 0.05, - "dilation_rate": 1, - "kernel_size_dec": 5, - "n_block_layers": 4, - "n_sqz": 2, - "prenet": True, - "mean_only": True, - "hidden_channels_enc": 192, - "hidden_channels_dec": 192, - "window_size": 4 -} - -# TODO: -# num_symbols = len(symbols) -num_symbols = 62 # TODO: Fake -num_mel_channels = 80 # TODO: Verify - -load(model_checkpoint_path) - -generator = models.FlowGenerator(num_symbols, - out_channels=num_mel_channels, - **model_hparams) #.to("cuda") - -scheduler = "noam" -hidden_channels = 192 -warmup_steps = 4000 -learning_rate = 1e0 -betas = [0.9, 0.98] -eps = 1e-9 - -optimizer = commons.Adam(generator.parameters(), - scheduler=scheduler, - dim_model=hidden_channels, - warmup_steps=warmup_steps, - lr=learning_rate, - betas=betas, - eps=eps) - -#if hps.train.fp16_run: -# generator, optimizer_g._optim = amp.initialize(generator, optimizer_g._optim, opt_level="O1") -#"" -#_, _, _, epoch_str = utils.load_checkpoint( -# utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), generator, optimizer_g) -#"" - -glow_model, optimizer, learning_rate, iteration = \ - utils.load_checkpoint(model_checkpoint_path, generator, optimizer) -""" #model_checkpoint_path = '/home/bt/models/glow-tts-jaywalnut/pretrained.pth' model_checkpoint_path = '/home/bt/models/glow-tts-jaywalnut/G_1007.pth' @@ -153,13 +58,24 @@ output_filename = 'output.torchjit' cmu_dict = cmudict.CMUDict(hps.data.cmudict_path) -tst_stn = " testing this text to speech generator " -sequence = np.array(text_to_sequence(tst_stn, ['english_cleaners'], cmu_dict))[None, :] +tst_stn = "my name is donald trump and I am the president of the united states, you should respect me" +seq = text_to_sequence(tst_stn, ['english_cleaners'], cmu_dict) +sequence = np.array(seq)[None, :] # NB: None adds a new axis. print("".join([symbols[c] for c in sequence[0]])) -x_tst = torch.autograd.Variable(torch.from_numpy(sequence)).long() +torched = torch.from_numpy(sequence) + +x_tst = torch.autograd.Variable(torched).long() x_tst_lengths = torch.tensor([x_tst.shape[1]]) +print('\n tst_stn', len(tst_stn), tst_stn) +print('\n seq', len(seq), seq) +print('\n sequence', len(sequence), sequence.size, sequence) +print('\n torched', len(torched), torched.shape, torched) + +print('\n x_tst', len(x_tst), x_tst) +print('\n x_tst_lengths', len(x_tst_lengths), x_tst_lengths) + # NB: Tracing evaluates the model on input and unrolls and hardcodes branching # and loops. Scripting allows these to remain by converting the entire program @@ -172,7 +88,7 @@ if trace_model: # NB: Getting `Tracing failed sanity checks! Graphs differed across invocations!` inputs = (x_tst, x_tst_lengths) #traced_script_module = torch.jit.trace(glow_model, inputs, check_trace=True) - traced_script_module = torch.jit.trace(glow_model, inputs, check_trace=True) + traced_script_module = torch.jit.trace(glow_model, inputs, check_trace=False) traced_script_module.save(output_filename) else: print('Saving script model as: {}'.format(output_filename))