From ab0abd2b12d32d40f5120f79a2b90f2567cecbd7 Mon Sep 17 00:00:00 2001 From: mrq Date: Sat, 22 Feb 2025 09:07:33 -0600 Subject: [PATCH] fixes fixes fixes (a quarter of my recently processed audio returned zero'd tensors......) --- test.wav | Bin 0 -> 659534 bytes vall_e/config.py | 6 ++++++ vall_e/data.py | 19 ++++++++++++------- vall_e/emb/process.py | 22 ++++++++++++++++++++-- vall_e/engines/__init__.py | 8 +++++--- vall_e/models/base.py | 8 +++++--- 6 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 test.wav diff --git a/test.wav b/test.wav new file mode 100644 index 0000000000000000000000000000000000000000..e6b0b7ce5346ff9885a557f3bcad552239d4f194 GIT binary patch literal 659534 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
tj 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 literal 0 HcmV?d00001 diff --git a/vall_e/config.py b/vall_e/config.py index 2359244..7816bd4 100755 --- a/vall_e/config.py +++ b/vall_e/config.py @@ -168,6 +168,7 @@ class Dataset: use_metadata: bool = False # use genretaed metadata to aid in dataset loading validate: bool = True # validate each utterance on wheter it can be included based on duration range caps + strict_validate: bool = False # so far only governs if a path actually exists within the dataset, as this can be a bit slow (and shouldn't really happen normally) workers: int = 8 # number of dataloader workers to spawn cache: bool = True # use diskcache to cache the dataset @@ -269,6 +270,11 @@ class ModelExperimentalSettings: classifiers_bias: bool = True # base LLaMAs do not bias the output heads, but my existing weights do max_position_embeddings: int = 70 * 65 * 5 # 5 minutes of audio + resp_parallel_training: bool = True # used for version >= 7, computes loss for ALL quant levels rather than the randomly selected one + # this should allow for "faster" training as each sample is trained entirely, but slower backwards (and possibly less stable training, maybe) + monolithic_audio_encoder: bool = False # combines the prom/resp embeddings into one unit + # this usually sounds bad, as the model can "extract" features from the prom separate from the ones in the resp + # these technically should be as hyperparameters # performs token dropout to compensate for errors token_dropout_error: float = 0.0 # probability to nudge a token by ±1 diff --git a/vall_e/data.py b/vall_e/data.py index 45fb3f9..81424fd 100755 --- a/vall_e/data.py +++ b/vall_e/data.py @@ -765,10 +765,12 @@ def _load_paths_from_metadata(group_name, type="training", validate=False): # double check if in HDF5 # this might be slow - """ - if cfg.dataset.use_hdf5 and k not in cfg.hdf5: - return False - """ + if cfg.dataset.strict_validate: + if cfg.dataset.use_hdf5: + if k not in cfg.hdf5: + return False + elif not (data_dir / id).with_suffix(_get_artifact_extension()).exists(): + return False # add to duration bucket if type not in _durations_map: @@ -882,7 +884,6 @@ class Dataset(_Dataset): self.duration_map = _get_duration_map( self.dataset_type ) # cull speakers if they do not have enough utterances (or cull speakers with too many utternaces) - """ if cfg.dataset.min_utterances > 0 or cfg.dataset.max_utterances > 0: keys = list(self.paths_by_spkr_name.keys()) for key in keys: @@ -893,7 +894,7 @@ class Dataset(_Dataset): # slice away extraneous utterances if cfg.dataset.max_utterances: self.paths_by_spkr_name[key] = self.paths_by_spkr_name[key][:cfg.dataset.max_utterances] - """ + # flatten paths self.paths = list(itertools.chain.from_iterable(self.paths_by_spkr_name.values())) @@ -1272,7 +1273,11 @@ class Dataset(_Dataset): continue qnt = torch.from_numpy(cfg.hdf5[key]["audio"][:, :]).to(torch.int16) else: - qnt = _load_artifact(path, return_metadata=False) + try: + qnt = _load_artifact(path, return_metadata=False) + except Exception as e: + _logger.warning(f'Failed to load artifact: {path} ({e})') + path = None if 0 < trim_length and trim_length < qnt.shape[0]: qnt = trim( qnt, trim_length, reencode=cfg.dataset.reencode_on_concat, device=cfg.dataset.reencode_device ) diff --git a/vall_e/emb/process.py b/vall_e/emb/process.py index 19fb9df..427c8e4 100644 --- a/vall_e/emb/process.py +++ b/vall_e/emb/process.py @@ -21,6 +21,7 @@ from ..config import cfg # need to validate if this is safe to import before modifying the config from .g2p import encode as phonemize from .qnt import encode as quantize, encode_batch as quantize_batch +from ..data import _load_artifact def pad(num, zeroes): return str(num).zfill(zeroes+1) @@ -44,6 +45,10 @@ def process_job( outpath, waveform, sample_rate, text=None, language="en", devic # encodec requires this to be on CPU for resampling qnt = quantize(waveform, sr=sample_rate, device=device, dtype=dtype) + if torch.count_nonzero(qnt) == 0: + tqdm.write(f"Quantization returned zero'd tensor: {outpath}") + return + if cfg.audio_backend == "dac": state_dict = { "codes": qnt.codes.cpu().numpy().astype(np.uint16), @@ -106,6 +111,10 @@ def process_batched_jobs( jobs, speaker_id="", device=None, raise_exceptions=Tru continue for (outpath, waveform, sample_rate, text, language), qnt in zip( batch, codes ): + if torch.count_nonzero(qnt) == 0: + tqdm.write(f"Quantization returned zero'd tensor: {outpath}") + continue + if cfg.audio_backend == "dac": state_dict = { "codes": qnt.codes.cpu().numpy().astype(np.uint16), @@ -165,6 +174,7 @@ def process( output_dataset="training", transcription_filename="whisper.json", raise_exceptions=False, + verify_audio=False, stride=0, stride_offset=0, slice="auto", @@ -353,7 +363,13 @@ def process( text = segment["text"] if len(text) == 0 or outpath.exists(): - continue + if not verify_audio: + continue + + artifact = _load_artifact( outpath ) + if torch.count_nonzero(artifact) > 0: + continue + tqdm.write(f"Found zero'd quantized audio tensor: {outpath}") start = (segment['start']-0.05) end = (segment['end']+0.5) @@ -398,6 +414,7 @@ def main(): parser.add_argument("--output-dataset", type=str, default="training/dataset") parser.add_argument("--transcription-filename", type=str, default="whisper.json") parser.add_argument("--raise-exceptions", action="store_true") + parser.add_argument("--verify-audio", action="store_true") #parser.add_argument("--low-memory", action="store_true") parser.add_argument("--skip-existing-folders", action="store_true") parser.add_argument("--strict-languages", action="store_true") @@ -435,6 +452,7 @@ def main(): output_dataset=args.output_dataset, transcription_filename=args.transcription_filename, raise_exceptions=args.raise_exceptions, + verify_audio=args.verify_audio, stride=args.stride, stride_offset=args.stride_offset, slice=args.slice, @@ -453,4 +471,4 @@ def main(): ) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/vall_e/engines/__init__.py b/vall_e/engines/__init__.py index 8d9c133..133b7f1 100755 --- a/vall_e/engines/__init__.py +++ b/vall_e/engines/__init__.py @@ -403,9 +403,11 @@ def load_engines(training=True, **model_kwargs): kwargs["group"] = "DDP" kwargs['id'] = f'{key_name}-{salt}-{global_rank()}' - - engine.wandb = wandb.init(project=key_name, **kwargs) - engine.wandb.watch(engine.module) + try: + engine.wandb = wandb.init(project=key_name, **kwargs) + engine.wandb.watch(engine.module) + except Exception as e: + engine.wandb = None else: engine.wandb = None diff --git a/vall_e/models/base.py b/vall_e/models/base.py index e268752..21ccdcf 100755 --- a/vall_e/models/base.py +++ b/vall_e/models/base.py @@ -579,6 +579,10 @@ class Base(nn.Module): masking_ratio = self.config.experimental.masking_ratio if self.config is not None else False ignore_inputs_for_loss = self.config.experimental.ignore_inputs_for_loss if self.config is not None else False + resp_parallel_training = self.config.experimental.resp_parallel_training if self.config is not None else True + monolithic_audio_encoder = self.config.experimental.monolithic_audio_encoder if self.config is not None else False + + self.resp_parallel_training = resp_parallel_training n_tasks = self.config.tasks if self.config is not None else 8 n_langs = self.config.langs if self.config is not None else 2 @@ -708,10 +712,8 @@ class Base(nn.Module): if self.version >= 6: self.raw_text_emb = Embedding(self.n_raw_text_tokens, d_model) - self.resp_parallel_training = True # governs if all levels are trained in parallel or one per sample like the old way - self.monolithic_audio_encoder = False # monolithic sounds bad if self.version >= 7: - if self.monolithic_audio_encoder: + if monolithic_audio_encoder: self.audio_emb = AudioEncoder( n_tokens=n_audio_tokens + 1, # masked token n_levels=self.n_resp_levels,