From 39652cac94d6ccc4df02dc34893ab39b4f3068a5 Mon Sep 17 00:00:00 2001
From: allegroai <>
Date: Tue, 23 Jan 2024 17:29:05 +0200
Subject: [PATCH 01/26] Fix HPO crash when its corresponding task is
initialized with `continue_last_task=True`
---
clearml/automation/optimization.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clearml/automation/optimization.py b/clearml/automation/optimization.py
index c8ec47e8..08fa2c7c 100644
--- a/clearml/automation/optimization.py
+++ b/clearml/automation/optimization.py
@@ -1947,7 +1947,7 @@ class HyperParameterOptimizer(object):
objective if objective is not None else (
[-1] * self._objective_metric.len
),
- iteration_value if iteration_value is not None else (
+ [iteration_value] * self._objective_metric.len if iteration_value is not None else (
[-1] * self._objective_metric.len
),
params
From 64c37fe97f54b3f9de1ae8e80d09531085b2a778 Mon Sep 17 00:00:00 2001
From: pollfly <75068813+pollfly@users.noreply.github.com>
Date: Thu, 25 Jan 2024 19:41:05 +0200
Subject: [PATCH 02/26] Add dataset reporting example (#1180)
---
.../urbansounds_dataset_preprocessing.py | 163 ++++++++++++++++++
examples/datasets/urbansounds_get_data.py | 96 +++++++++++
2 files changed, 259 insertions(+)
create mode 100644 examples/datasets/urbansounds_dataset_preprocessing.py
create mode 100644 examples/datasets/urbansounds_get_data.py
diff --git a/examples/datasets/urbansounds_dataset_preprocessing.py b/examples/datasets/urbansounds_dataset_preprocessing.py
new file mode 100644
index 00000000..7230afb9
--- /dev/null
+++ b/examples/datasets/urbansounds_dataset_preprocessing.py
@@ -0,0 +1,163 @@
+import os.path
+from pathlib import Path
+
+import matplotlib as mpl
+import numpy as np
+from tqdm import tqdm
+import torchaudio
+import torch
+from clearml import Task, Dataset
+
+task = Task.init(project_name="examples/Urbansounds", task_name="preprocessing")
+
+# Let's preprocess the data and create a new ClearML dataset from it, so we can track it around
+# The cool thing is, we can easily debug, by using, you guessed it: debug samples! We can log both
+# the original sound and its processed mel spectrogram as debug samples, so we can manually check
+# if everything went as planned.
+
+
+class PreProcessor:
+ def __init__(self):
+ self.configuration = {"number_of_mel_filters": 64, "resample_freq": 22050}
+ task.connect(self.configuration)
+
+ def preprocess_sample(self, sample, original_sample_freq):
+ if self.configuration["resample_freq"] > 0:
+ resample_transform = torchaudio.transforms.Resample(
+ orig_freq=original_sample_freq,
+ new_freq=self.configuration["resample_freq"],
+ )
+ sample = resample_transform(sample)
+
+ # This will convert audio files with two channels into one
+ sample = torch.mean(sample, dim=0, keepdim=True)
+
+ # Convert audio to log-scale Mel spectrogram
+ melspectrogram_transform = torchaudio.transforms.MelSpectrogram(
+ sample_rate=self.configuration["resample_freq"],
+ n_mels=self.configuration["number_of_mel_filters"],
+ )
+ melspectrogram = melspectrogram_transform(sample)
+ melspectogram_db = torchaudio.transforms.AmplitudeToDB()(melspectrogram)
+
+ # Make sure all spectrograms are the same size
+ fixed_length = 3 * (self.configuration["resample_freq"] // 200)
+ if melspectogram_db.shape[2] < fixed_length:
+ melspectogram_db = torch.nn.functional.pad(
+ melspectogram_db, (0, fixed_length - melspectogram_db.shape[2])
+ )
+ else:
+ melspectogram_db = melspectogram_db[:, :, :fixed_length]
+
+ return melspectogram_db
+
+
+class DataSetBuilder:
+ def __init__(self):
+ self.configuration = {"dataset_path": "dataset"}
+ task.connect(self.configuration)
+
+ self.original_dataset = Dataset.get(
+ dataset_project="examples/Urbansounds",
+ dataset_name="UrbanSounds example",
+ dataset_tags=["raw"],
+ alias="Raw Dataset",
+ )
+ # This will return the pandas dataframe we added in the previous task
+ self.metadata = (
+ Task.get_task(task_id=self.original_dataset._task.id)
+ .artifacts["metadata"]
+ .get()
+ )
+ # This will download the data and return a local path to the data
+ self.original_dataset_path = Path(
+ self.original_dataset.get_mutable_local_copy(
+ self.configuration["dataset_path"], overwrite=True
+ )
+ )
+
+ # Prepare a preprocessor that will handle each sample one by one
+ self.preprocessor = PreProcessor()
+
+ # Get ready for the new one
+ self.preprocessed_dataset = None
+
+ def log_dataset_statistics(self):
+ histogram_data = self.metadata["label"].value_counts()
+ self.preprocessed_dataset.get_logger().report_table(
+ title="Raw Dataset Metadata",
+ series="Raw Dataset Metadata",
+ table_plot=self.metadata,
+ )
+ self.preprocessed_dataset.get_logger().report_histogram(
+ title="Class distribution",
+ series="Class distribution",
+ values=histogram_data,
+ iteration=0,
+ xlabels=histogram_data.index.tolist(),
+ yaxis="Amount of samples",
+ )
+
+ def build_dataset(self):
+ # Let's create a new dataset that is a child of the original one
+ # We'll add the preprocessed samples to the original dataset, leading to a new version
+ # Providing the parent dataset allows us to keep a clear lineage of our data
+ self.preprocessed_dataset = Dataset.create(
+ dataset_name="UrbanSounds example",
+ dataset_project="examples/Urbansounds",
+ dataset_tags=["preprocessed"],
+ parent_datasets=[self.original_dataset.id],
+ )
+
+ # loop through the metadata entries and preprocess each sample, then add some of them as debug samples to
+ # manually double check in the UI that everything has worked (you can watch the spectrogram and listen to the
+ # audio side by side in the debug sample UI)
+ for i, (_, data) in tqdm(enumerate(self.metadata.iterrows())):
+ _, audio_file_path, label = data.tolist()
+ sample, sample_freq = torchaudio.load(
+ self.original_dataset_path / audio_file_path, normalize=True
+ )
+ spectrogram = self.preprocessor.preprocess_sample(sample, sample_freq)
+ # Get only the filename and replace the extension, we're saving an image here
+ new_file_name = os.path.basename(audio_file_path).replace(".wav", ".npy")
+ # Get the correct folder, basically the original dataset folder + the new filename
+ spectrogram_path = (
+ self.original_dataset_path
+ / os.path.dirname(audio_file_path)
+ / new_file_name
+ )
+ # Save the numpy array to disk
+ np.save(spectrogram_path, spectrogram)
+
+ # Log every 10th sample as a debug sample to the UI, so we can manually check it
+ if i % 10 == 0:
+ # Convert the numpy array to a viewable JPEG
+ rgb_image = mpl.colormaps["viridis"](
+ spectrogram[0, :, :].detach().numpy() * 255
+ )[:, :, :3]
+ title = os.path.splitext(os.path.basename(audio_file_path))[0]
+
+ # Report the image and the original sound, so they can be viewed side by side
+ self.preprocessed_dataset.get_logger().report_image(
+ title=title, series="spectrogram", image=rgb_image
+ )
+ self.preprocessed_dataset.get_logger().report_media(
+ title=title,
+ series="original_audio",
+ local_path=self.original_dataset_path / audio_file_path,
+ )
+ # The original data path will now also have the spectrograms in its filetree.
+ # So that's why we add it here to fill up the new dataset with.
+ self.preprocessed_dataset.add_files(self.original_dataset_path)
+ # Again add some visualizations to the task
+ self.log_dataset_statistics()
+ # We still want the metadata
+ self.preprocessed_dataset._task.upload_artifact(
+ name="metadata", artifact_object=self.metadata
+ )
+ self.preprocessed_dataset.finalize(auto_upload=True)
+
+
+if __name__ == "__main__":
+ datasetbuilder = DataSetBuilder()
+ datasetbuilder.build_dataset()
diff --git a/examples/datasets/urbansounds_get_data.py b/examples/datasets/urbansounds_get_data.py
new file mode 100644
index 00000000..9f442077
--- /dev/null
+++ b/examples/datasets/urbansounds_get_data.py
@@ -0,0 +1,96 @@
+import pandas as pd
+from pathlib import Path
+from clearml import Task, Dataset, StorageManager
+
+task = Task.init(project_name="examples/Urbansounds", task_name="download data")
+
+configuration = {
+ "selected_classes": [
+ "air_conditioner",
+ "car_horn",
+ "children_playing",
+ "dog_bark",
+ "drilling",
+ "engine_idling",
+ "gun_shot",
+ "jackhammer",
+ "siren",
+ "street_music",
+ ]
+}
+task.connect(configuration)
+
+
+def get_urbansound8k():
+ # Download UrbanSound8K dataset (https://urbansounddataset.weebly.com/urbansound8k.html)
+ # For simplicity we will use here a subset of that dataset using clearml StorageManager
+ path_to_urbansound8k = StorageManager.get_local_copy(
+ "https://allegro-datasets.s3.amazonaws.com/clearml/UrbanSound8K.zip",
+ extract_archive=True,
+ )
+ path_to_urbansound8k_csv = (
+ Path(path_to_urbansound8k) / "UrbanSound8K" / "metadata" / "UrbanSound8K.csv"
+ )
+ path_to_urbansound8k_audio = Path(path_to_urbansound8k) / "UrbanSound8K" / "audio"
+
+ return path_to_urbansound8k_csv, path_to_urbansound8k_audio
+
+
+def log_dataset_statistics(dataset, metadata):
+ histogram_data = metadata["class"].value_counts()
+ dataset.get_logger().report_table(
+ title="Raw Dataset Metadata", series="Raw Dataset Metadata", table_plot=metadata
+ )
+ dataset.get_logger().report_histogram(
+ title="Class distribution",
+ series="Class distribution",
+ values=histogram_data,
+ iteration=0,
+ xlabels=histogram_data.index.tolist(),
+ yaxis="Amount of samples",
+ )
+
+
+def build_clearml_dataset():
+ # Get a local copy of both the data and the labels
+ path_to_urbansound8k_csv, path_to_urbansound8k_audio = get_urbansound8k()
+ urbansound8k_metadata = pd.read_csv(path_to_urbansound8k_csv)
+ # Subset the data to only include the classes we want
+ urbansound8k_metadata = urbansound8k_metadata[
+ urbansound8k_metadata["class"].isin(configuration["selected_classes"])
+ ]
+
+ # Create a pandas dataframe containing labels and other info we need later (fold is for train test split)
+ metadata = pd.DataFrame(
+ {
+ "fold": urbansound8k_metadata.loc[:, "fold"],
+ "filepath": (
+ "fold"
+ + urbansound8k_metadata.loc[:, "fold"].astype(str)
+ + "/"
+ + urbansound8k_metadata.loc[:, "slice_file_name"].astype(str)
+ ),
+ "label": urbansound8k_metadata.loc[:, "classID"],
+ }
+ )
+
+ # Now create a clearml dataset to start versioning our changes and make it much easier to get the right data
+ # in other tasks as well as on different machines
+ dataset = Dataset.create(
+ dataset_name="UrbanSounds example",
+ dataset_project="examples/Urbansounds",
+ dataset_tags=["raw"],
+ )
+
+ # Add the local files we downloaded earlier
+ dataset.add_files(path_to_urbansound8k_audio)
+ # Add the metadata in pandas format, we can now see it in the webUI and have it be easily accessible
+ dataset._task.upload_artifact(name="metadata", artifact_object=metadata)
+ # Let's add some cool graphs as statistics in the plots section!
+ log_dataset_statistics(dataset, urbansound8k_metadata)
+ # Finalize and upload the data and labels of the dataset
+ dataset.finalize(auto_upload=True)
+
+
+if __name__ == "__main__":
+ build_clearml_dataset()
From 5ad082d2e7d740623f1449665541466c0de0331a Mon Sep 17 00:00:00 2001
From: pollfly <75068813+pollfly@users.noreply.github.com>
Date: Sat, 27 Jan 2024 17:52:09 +0200
Subject: [PATCH 03/26] Update README Gifs (#1191)
---
README.md | 15 ++++++++++++++-
docs/datasets.gif | Bin 0 -> 244185 bytes
docs/experiment_manager.gif | Bin 0 -> 2270934 bytes
docs/orchestration.gif | Bin 0 -> 154713 bytes
docs/pipelines.gif | Bin 0 -> 388091 bytes
5 files changed, 14 insertions(+), 1 deletion(-)
create mode 100644 docs/datasets.gif
create mode 100644 docs/experiment_manager.gif
create mode 100644 docs/orchestration.gif
create mode 100644 docs/pipelines.gif
diff --git a/README.md b/README.md
index 2f6f441c..3ca88610 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,20 @@ Instrumenting these components is the **ClearML-server**, see [Self-Hosting](htt
---
-
+
+
+
## ClearML Experiment Manager
diff --git a/docs/datasets.gif b/docs/datasets.gif
new file mode 100644
index 0000000000000000000000000000000000000000..932893e429fc770d71543af67dc23639f3097f08
GIT binary patch
literal 244185
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