Spaces:
Sleeping
Sleeping
| from typing import Union | |
| from omegaconf import OmegaConf | |
| from pathlib import Path | |
| from tqdm import tqdm | |
| def walk(input_path): | |
| """ | |
| helper function to yield folder's file content | |
| Input: | |
| input_path: the path of the folder | |
| Output: | |
| generator of files in directory tree | |
| """ | |
| for p in Path(input_path).iterdir(): | |
| if p.is_dir(): | |
| yield from walk(p) | |
| continue | |
| yield p.resolve() | |
| def upload_experiment_to_s3(experiment_id: str, | |
| dir_path: Path, | |
| bucket_name: str, | |
| include_parent: bool = True, logger=None): | |
| """ | |
| Uploads the experiment folder to s3 bucket | |
| Input: | |
| experiment_id: id of the experiment, taken usually from wandb logger | |
| dir_path: path to the experiment directory | |
| bucket_name: name of the desired bucket path | |
| include_parent: flag to include the parent of the experiment folder while saving to s3 | |
| """ | |
| import boto3 # lazy: only needed for S3 upload, not inference | |
| assert dir_path.is_dir(), 'should upload experiments as directories to s3!' | |
| object_global = experiment_id | |
| current_global = str(dir_path.resolve()) | |
| upload_files = list(walk(dir_path)) | |
| s3_client = boto3.client('s3') | |
| for upload_file in tqdm(upload_files): | |
| upload_file = str(upload_file) | |
| s3_client.upload_file(upload_file, bucket_name, upload_file.replace(current_global, object_global)) | |
| if logger is not None: | |
| print(f'experiment {logger.log_writer.run.id} has been successfully uploaded to {bucket_name} bucket') | |
| def merge_with_checkpoint(run_args, checkpoint_args): | |
| """ | |
| Merge into current args the needed arguments from checkpoint | |
| Right now we select the specific modules needed, can make it more generic if we'll see the need for it | |
| Input: | |
| run_args: dict_config of run args | |
| checkpoint_args: dict_config of checkpoint args | |
| Output: | |
| run_args: updated dict_config of run args | |
| """ | |
| OmegaConf.set_struct(run_args, False) | |
| run_args.model = OmegaConf.to_container(checkpoint_args.model, resolve=True) | |
| run_args.data.test_dataset.preprocessors = OmegaConf.to_container(checkpoint_args.data.train_dataset.preprocessors, resolve=True) | |
| run_args.data.test_dataset.seq_length = checkpoint_args.data.train_dataset.seq_length | |
| run_args.data.test_dataset.sample_rate = checkpoint_args.data.train_dataset.sample_rate | |
| run_args.data.sample_rate = checkpoint_args.data.sample_rate | |
| run_args.data.n_fft = checkpoint_args.data.n_fft | |
| run_args.data.hop_length = checkpoint_args.data.hop_length | |
| run_args.data.label_type = checkpoint_args.data.get('label_type', 'single_label') # using "get" for backward compatibility | |
| min_freq = checkpoint_args.data.get('min_freq', None) | |
| if min_freq is None: | |
| min_freq = checkpoint_args.data.min_freq_filtering | |
| run_args.data.min_freq = min_freq | |
| run_args.data.max_freq = checkpoint_args.data.get('max_freq', checkpoint_args.data.sample_rate // 2) | |
| run_args.data.label_names = checkpoint_args.data.label_names | |
| OmegaConf.set_struct(run_args, True) | |
| return run_args | |