From 6c0dbaaab20eb5730bd9b5fdedb0107c61c7f2d3 Mon Sep 17 00:00:00 2001 From: Boris Feld Date: Mon, 8 Jul 2024 18:45:10 +0200 Subject: [PATCH] Use new comet_ml.login instead of comet_ml.init --- .../Running_Offline_Experiments.ipynb | 66 +- .../Computer_Vision_with_Comet.ipynb | 4 +- guides/get-started/Comet_Quickstart.ipynb | 4 +- .../Image_Classification_with_Keras.ipynb | 114 +- ...ith_Structured_Data_Churn_Prediction.ipynb | 1198 ++++++------- .../A_Guide_to_Remote_Artifacts.ipynb | 4 +- .../Introduction_to_Artifacts.ipynb | 4 +- .../Comet_in_Notebooks.ipynb | 78 +- integrations/annoy/annoy_example.py | 3 +- integrations/annoy/requirements.txt | 2 +- .../notebooks/Comet_and_Snowflake.ipynb | 361 ++-- .../notebooks/CometLLM_hello_world.ipynb | 4 +- .../Alpaca_Lora_Finetuning_with_Comet.ipynb | 4 +- .../gradio/notebooks/Gradio_and_Comet.ipynb | 4 +- ...del_Inferences_with_Comet_and_Gradio.ipynb | 4 +- ..._NerfStudio_sitcoms3d_evaluate_model.ipynb | 6 +- ..._with_Tensorflow_Model_Analysis_TFMA.ipynb | 156 +- .../notebooks/Comet_Optimizer_Keras.ipynb | 114 +- .../ray-tune/notebooks/Comet_and_Ray.ipynb | 4 +- .../notebooks/Comet_and_Accelerate.ipynb | 4 +- .../anomalib/notebooks/Anomalib_Comet.ipynb | 37 +- .../catalyst/notebooks/Catalyst_x_Comet.ipynb | 125 +- .../mosaicml-getting-started.py | 2 +- .../mosaicml-getting-started/requirements.txt | 2 +- .../composer/notebooks/comet_composer.ipynb | 4 +- .../deepspeed-cifar/cifar10_deepspeed.py | 2 +- .../deepspeed-cifar/requirements.txt | 2 +- .../deepspeed/notebooks/comet_deepspeed.ipynb | 4 +- .../fastai-hello-world/fastai_hello_world.py | 2 +- .../fastai-hello-world/requirements.txt | 2 +- .../fastai/notebooks/fastai_hello_world.ipynb | 4 +- .../Comet_with_Hugging_Face_Trainer.ipynb | 4 +- .../requirements.txt | 2 +- .../transformers-distilbert-fine-tuning.py | 2 +- .../keras/keras-mnist-dnn/keras-mnist-dnn.py | 2 +- .../keras/keras-mnist-dnn/requirements.txt | 2 +- .../keras/notebooks/Comet_with_Keras.ipynb | 4 +- .../notebooks/Comet_and_LightGBM.ipynb | 4 +- .../mlflow/notebooks/Comet_and_MLFlow.ipynb | 99 +- .../Comet-NerfStudio_sitcoms3d.ipynb | 4 +- .../prophet/notebooks/Comet_and_Prophet.ipynb | 4 +- .../pycaret/notebooks/comet_pycaret.ipynb | 4 +- .../Comet_and_Pytorch_Lightning.ipynb | 26 +- .../pytorch-lightning-optimizer.py | 2 +- .../requirements.txt | 2 +- .../notebooks/Comet_Pytorch_Tensorboard.ipynb | 4 +- .../Comet_Pytorch_TensorboardX.ipynb | 4 +- .../pytorch/notebooks/Comet_and_Pytorch.ipynb | 4 +- .../notebooks/Histogram_Logging_Pytorch.ipynb | 4 +- .../pytorch-tensorboard-example.py | 2 +- .../pytorch-tensorboard/requirements.txt | 2 +- .../Comet_with_ray_train_keras.ipynb | 4 +- .../Comet_with_ray_train_xgboost.ipynb | 4 +- .../train_mnist.ipynb | 46 +- .../train_text_classification.ipynb | 56 +- .../pytorch-mnist/train_mnist.ipynb | 28 +- .../tensorflow-mnist/train_mnist.ipynb | 36 +- .../notebooks/Comet_with_Scikit_Learn.ipynb | 234 +-- .../comet-scikit-classification-example.py | 2 +- .../requirements.txt | 2 +- .../requirements.txt | 2 +- .../sklearn-model-saving-example.py | 2 +- .../comet-scikit-nlp-example.py | 2 +- .../sklearn-nlp-example/requirements.txt | 2 +- .../spark-nlp/notebooks/Comet_SparkNLP.ipynb | 258 ++- .../notebooks/Comet_and_Tensorflow.ipynb | 4 +- .../xgboost/notebooks/Comet_and_XGBoost.ipynb | 95 +- ...w_to_use_comet_with_xgboost_tutorial.ipynb | 33 +- .../xgboost/notebooks/xg_comet.ipynb | 50 +- .../yolov5/notebooks/Comet_and_YOLOv5.ipynb | 4 +- .../yolov8/notebooks/YOLOv8_and_Comet.ipynb | 579 +++---- .../notebooks/comet_gymnasium_example.ipynb | 4 +- .../metaflow-model-evaluation.py | 2 +- .../requirements.txt | 2 +- .../notebooks/metaflow_hello_world.ipynb | 4 +- .../notebooks/metaflow_model_eval.ipynb | 6 +- .../Comet-Confusion-Matrix-Pytorch.ipynb | 1498 ++++++++--------- notebooks/Comet-Confusion-Matrix.ipynb | 38 +- notebooks/Comet-Python-API.ipynb | 50 +- notebooks/ExpiringDataExample.ipynb | 27 +- 80 files changed, 2773 insertions(+), 2806 deletions(-) diff --git a/guides/advanced/Running_Offline_Experiments.ipynb b/guides/advanced/Running_Offline_Experiments.ipynb index c2e69cbe..77bb0b48 100644 --- a/guides/advanced/Running_Offline_Experiments.ipynb +++ b/guides/advanced/Running_Offline_Experiments.ipynb @@ -1,18 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", @@ -25,14 +11,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "wMWufCyZbZOx" }, + "outputs": [], "source": [ - "!pip install comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install -U \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", @@ -45,16 +31,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "B2s8nND-birg" }, + "outputs": [], "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"running-offline\")" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login(project_name=\"running-offline\")" + ] }, { "cell_type": "markdown", @@ -67,16 +53,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "o7UtgSB-bk6K" }, + "outputs": [], "source": [ "experiment = comet_ml.OfflineExperiment()\n", "experiment.log_metrics({\"accuracy\": 0.5, \"loss\": 0.001})\n", "experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -98,23 +84,37 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "uo53wkSabrnW" }, + "outputs": [], "source": [ "!comet upload /content/.cometml-runs/*.zip" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "lxMv2erXgLtD" }, - "source": [], - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/guides/computer_vision/Computer_Vision_with_Comet.ipynb b/guides/computer_vision/Computer_Vision_with_Comet.ipynb index 4986f9bc..2761881d 100644 --- a/guides/computer_vision/Computer_Vision_with_Comet.ipynb +++ b/guides/computer_vision/Computer_Vision_with_Comet.ipynb @@ -61,7 +61,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml torch torchvision timm datasets h5py scipy scikit-learn \"pandas<2\" \"numpy<2\"" + "%pip install -U \"comet_ml>=3.44.0\" torch torchvision timm datasets h5py scipy scikit-learn \"pandas<2\" \"numpy<2\"" ] }, { @@ -86,7 +86,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-pytorch-image-classification-svhn\")\n", + "comet_ml.login(project_name=\"comet-example-pytorch-image-classification-svhn\")\n", "\n", "# Create the Comet Experiment for logging\n", "experiment = comet_ml.Experiment()" diff --git a/guides/get-started/Comet_Quickstart.ipynb b/guides/get-started/Comet_Quickstart.ipynb index 4daf4e3c..f95a7b09 100644 --- a/guides/get-started/Comet_Quickstart.ipynb +++ b/guides/get-started/Comet_Quickstart.ipynb @@ -76,7 +76,7 @@ }, "outputs": [], "source": [ - "%pip install -U comet_ml \"numpy<2.0.0\"" + "%pip install -U \"comet_ml>=3.44.0\" \"numpy<2.0.0\"" ] }, { @@ -98,7 +98,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-intro-to-comet\")" + "comet_ml.login(project_name=\"comet-example-intro-to-comet\")" ] }, { diff --git a/guides/get-started/Image_Classification_with_Keras.ipynb b/guides/get-started/Image_Classification_with_Keras.ipynb index 7ab25063..fe4b7edc 100644 --- a/guides/get-started/Image_Classification_with_Keras.ipynb +++ b/guides/get-started/Image_Classification_with_Keras.ipynb @@ -1,18 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", @@ -25,14 +11,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "DJnmqphuY2eI" }, + "outputs": [], "source": [ - "!pip install comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install -U \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", @@ -45,16 +31,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "HNQRM0U3caiY" }, + "outputs": [], "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"keras-image-classification\")" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login(project_name=\"keras-image-classification\")" + ] }, { "cell_type": "markdown", @@ -67,18 +53,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "e-5rRYaUw5AF" }, + "outputs": [], "source": [ "from tensorflow import keras\n", "from tensorflow.keras.datasets import mnist\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense, Dropout\n", "from tensorflow.keras.callbacks import EarlyStopping" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -91,15 +77,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "m-OWU2ynwp2u" }, + "outputs": [], "source": [ "# create an experiment with your api key\n", "experiment = comet_ml.Experiment()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -112,9 +98,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "YFbozHiJxTax" }, + "outputs": [], "source": [ "# the data, shuffled and split between train and test sets\n", "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", @@ -130,9 +118,7 @@ "\n", "print(x_train.shape[0], \"train samples\")\n", "print(x_test.shape[0], \"test samples\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -145,9 +131,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "xsZ8x-ntxCkV" }, + "outputs": [], "source": [ "# these will all get logged\n", "params = {\n", @@ -164,9 +152,7 @@ "# convert class vectors to binary class matrices\n", "y_train = keras.utils.to_categorical(y_train, num_classes)\n", "y_test = keras.utils.to_categorical(y_test, num_classes)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -179,9 +165,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "flH9VHctxjSB" }, + "outputs": [], "source": [ "model = Sequential()\n", "model.add(Dense(64, activation=\"relu\", input_shape=(784,)))\n", @@ -193,9 +181,7 @@ "model.compile(\n", " loss=\"categorical_crossentropy\", optimizer=params[\"optimizer\"], metrics=[\"accuracy\"]\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -208,15 +194,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "wtXRSEccyTEO" }, + "outputs": [], "source": [ "experiment.log_parameters(params)\n", "experiment.log_dataset_hash(x_train) # creates and logs a hash of your data" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -229,9 +215,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "Y8DNdezRxpng" }, + "outputs": [], "source": [ "# will log metrics with the prefix 'train_'\n", "model.fit(\n", @@ -242,9 +230,7 @@ " verbose=1,\n", " validation_data=(x_test, y_test),\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -266,17 +252,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "DwJRmFH8yYqI" }, + "outputs": [], "source": [ "loss, accuracy = model.evaluate(x_test, y_test)\n", "metrics = {\"loss\": loss, \"accuracy\": accuracy}\n", "with experiment.test():\n", " experiment.log_metrics(metrics)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -298,20 +284,22 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "jWpEX1gz8gNX" }, + "outputs": [], "source": [ "predictions = model.predict(x_test)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "h1hA_J0B7kNi" }, + "outputs": [], "source": [ "# Logs the image corresponding to the model prediction\n", "def index_to_example(index):\n", @@ -332,9 +320,7 @@ " title=\"Confusion Matrix: Evaluation\",\n", " file_name=\"confusion-matrix-eval.json\",\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -347,14 +333,28 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "z_5zd8Pby2-b" }, + "outputs": [], "source": [ "experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/guides/get-started/Using_Comet_with_Structured_Data_Churn_Prediction.ipynb b/guides/get-started/Using_Comet_with_Structured_Data_Churn_Prediction.ipynb index 189769e7..60be42b7 100644 --- a/guides/get-started/Using_Comet_with_Structured_Data_Churn_Prediction.ipynb +++ b/guides/get-started/Using_Comet_with_Structured_Data_Churn_Prediction.ipynb @@ -1,542 +1,179 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "collapsed_sections": [ - "-cTh8OcaYvbU" - ], - "toc_visible": true + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "-cTh8OcaYvbU" + }, + "source": [ + "# Install Comet" + ] }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M4EOdXIXYm9J" + }, + "outputs": [], + "source": [ + "%pip install -U \"comet_ml>=3.44.0\"" + ] }, - "language_info": { - "name": "python" + { + "cell_type": "markdown", + "metadata": { + "id": "IWjxrVhSYxOG" + }, + "source": [ + "# Initialize Comet\n", + "Set your API Key to enable logging to Comet from this notebook" + ] }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "6ef35152dfa94fd28f335622a8d70060": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "HBoxView", - "_dom_classes": [], - "_model_name": "HBoxModel", - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.5.0", - "box_style": "", - "layout": "IPY_MODEL_75da1f6c7fdb4247bed5492f19ef02b1", - "_model_module": "@jupyter-widgets/controls", - "children": [ - "IPY_MODEL_a492186217b74b99ab9a28d548949b51", - "IPY_MODEL_b79ed0fd8678443b8044defcf4070035", - "IPY_MODEL_7ba958da9a1f4bd3b286c8457b9a1e15" - ] - } - }, - "75da1f6c7fdb4247bed5492f19ef02b1": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": "row wrap", - "width": "100%", - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": "inline-flex", - "left": null - } + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, - "a492186217b74b99ab9a28d548949b51": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "HTMLView", - "style": "IPY_MODEL_1604a7da5a32433e8d94cf151e7bc762", - "_dom_classes": [], - "description": "", - "_model_name": "HTMLModel", - "placeholder": "​", - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "value": "Done! Use 'show' commands to display/save. ", - "_view_count": null, - "_view_module_version": "1.5.0", - "description_tooltip": null, - "_model_module": "@jupyter-widgets/controls", - "layout": "IPY_MODEL_5e514536afb44c18a8941b78dca05fb2" - } + "id": "e0p8Dy37YzB6", + "outputId": "394f1bc0-a9d3-47f5-938c-fd90b5631188" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET INFO: Comet API key is valid\n" + ] + } + ], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-churn-prediction\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "K5vd4RpuY1JD" + }, + "source": [ + "# Download The Data using Artifacts" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cA2-gecsoH7P" + }, + "source": [ + "[Comet Artifacts](https://www.comet.ml/site/artifacts/) help you conveniently track your datasets throughout the experimentation process. Here we're going to fetch the dataset Churn prediction using just two lines of code!\n", + "\n", + "You can take a look at the dataset [here](https://www.comet.ml/team-comet-ml/artifacts/telco-churn-dataset/1.0.0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, - "b79ed0fd8678443b8044defcf4070035": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "ProgressView", - "style": "IPY_MODEL_1d70e8affa5b40b7a623cb72e0f4e1f2", - "_dom_classes": [], - "description": "", - "_model_name": "FloatProgressModel", - "bar_style": "success", - "max": 1, - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "value": 1, - "_view_count": null, - "_view_module_version": "1.5.0", - "orientation": "horizontal", - "min": 0, - "description_tooltip": null, - "_model_module": "@jupyter-widgets/controls", - "layout": "IPY_MODEL_12cf675cc2a5410bb2771751c76eee65" - } + "id": "T79GP9cWY2r8", + "outputId": "da6f7b38-96bc-4a78-a5aa-c22bc4faf042" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET WARNING: As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", + "COMET INFO: Couldn't find a Git repository in '/content' and lookings in parents. You can override where Comet is looking for a Git Patch by setting the configuration `COMET_GIT_DIRECTORY`\n", + "COMET INFO: Experiment is live on comet.ml https://www.comet.ml/team-comet-ml/comet-churn-prediction/23731d13e7ee4a858490ad124a38ef82\n", + "\n" + ] + } + ], + "source": [ + "experiment = comet_ml.Experiment()\n", + "artifact = experiment.get_artifact(\"team-comet-ml/telco-churn-dataset:latest\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, - "7ba958da9a1f4bd3b286c8457b9a1e15": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "HTMLView", - "style": "IPY_MODEL_54e4bd5cfafe447aab4a6486bd96e6e6", - "_dom_classes": [], - "description": "", - "_model_name": "HTMLModel", - "placeholder": "​", - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "value": " [100%] 00:01 -> (00:00 left)", - "_view_count": null, - "_view_module_version": "1.5.0", - "description_tooltip": null, - "_model_module": "@jupyter-widgets/controls", - "layout": "IPY_MODEL_3c6f27c83d4d4bc38db343ae05217ec8" - } + "id": "xxGTMsSxtkbI", + "outputId": "c3f57eba-e21e-4845-fb87-10835fcdf188" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET INFO: Artifact 'team-comet-ml/telco-churn-dataset:1.0.0' download has been started asynchronously\n", + "COMET INFO: Still downloading 1 file(s), remaining 1.69 MB/1.69 MB\n", + "COMET INFO: Artifact 'team-comet-ml/telco-churn-dataset:1.0.0' has been successfully downloaded\n" + ] }, - "1604a7da5a32433e8d94cf151e7bc762": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "StyleView", - "_model_name": "DescriptionStyleModel", - "description_width": "", - "_view_module": "@jupyter-widgets/base", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.2.0", - "_model_module": "@jupyter-widgets/controls" - } - }, - "5e514536afb44c18a8941b78dca05fb2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } - }, - "1d70e8affa5b40b7a623cb72e0f4e1f2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "StyleView", - "_model_name": "ProgressStyleModel", - "description_width": "", - "_view_module": "@jupyter-widgets/base", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.2.0", - "bar_color": null, - "_model_module": "@jupyter-widgets/controls" - } - }, - "12cf675cc2a5410bb2771751c76eee65": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": "2", - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } - }, - "54e4bd5cfafe447aab4a6486bd96e6e6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_view_name": "StyleView", - "_model_name": "DescriptionStyleModel", - "description_width": "", - "_view_module": "@jupyter-widgets/base", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.2.0", - "_model_module": "@jupyter-widgets/controls" - } - }, - "3c6f27c83d4d4bc38db343ae05217ec8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } + { + "data": { + "text/plain": [ + "Artifact(name='telco-churn-dataset', artifact_type='dataset', version=None, aliases=set(), version_tags=set())" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" } - } - } - }, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "-cTh8OcaYvbU" - }, + ], "source": [ - "# Install Comet" + "artifact.download(\"./\")" ] }, - { - "cell_type": "code", - "metadata": { - "id": "M4EOdXIXYm9J" - }, - "source": [ - "!pip install comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "id": "IWjxrVhSYxOG" + "id": "3VEeKx2laVn6" }, "source": [ - "# Initialize Comet\n", - "Set your API Key to enable logging to Comet from this notebook" + "# Basic EDA and Dataset Profiling with Sweetviz" ] }, { "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "e0p8Dy37YzB6", - "outputId": "394f1bc0-a9d3-47f5-938c-fd90b5631188" - }, - "source": [ - "import comet_ml\n", - "\n", - "comet_ml.init(project_name=\"comet-churn-prediction\")" - ], "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "COMET INFO: Comet API key is valid\n" - ] - } - ] - }, - { - "cell_type": "markdown", "metadata": { - "id": "K5vd4RpuY1JD" + "id": "pAzrJEL5aYMu" }, + "outputs": [], "source": [ - "# Download The Data using Artifacts" + "!pip install sweetviz --quiet" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": { - "id": "cA2-gecsoH7P" + "id": "Uc03ALoRaaAR" }, + "outputs": [], "source": [ - "[Comet Artifacts](https://www.comet.ml/site/artifacts/) help you conveniently track your datasets throughout the experimentation process. Here we're going to fetch the dataset Churn prediction using just two lines of code!\n", + "import pandas as pd\n", + "import sweetviz\n", "\n", - "You can take a look at the dataset [here](https://www.comet.ml/team-comet-ml/artifacts/telco-churn-dataset/1.0.0)" + "df = pd.read_csv(\"./telco-churn-dataset.csv\", index_col=0)" ] }, { "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "T79GP9cWY2r8", - "outputId": "da6f7b38-96bc-4a78-a5aa-c22bc4faf042" - }, - "source": [ - "experiment = comet_ml.Experiment()\n", - "artifact = experiment.get_artifact(\"team-comet-ml/telco-churn-dataset:latest\")" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "COMET WARNING: As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", - "COMET INFO: Couldn't find a Git repository in '/content' and lookings in parents. You can override where Comet is looking for a Git Patch by setting the configuration `COMET_GIT_DIRECTORY`\n", - "COMET INFO: Experiment is live on comet.ml https://www.comet.ml/team-comet-ml/comet-churn-prediction/23731d13e7ee4a858490ad124a38ef82\n", - "\n" - ] - } - ] - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xxGTMsSxtkbI", - "outputId": "c3f57eba-e21e-4845-fb87-10835fcdf188" - }, - "source": [ - "artifact.download(\"./\")" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "COMET INFO: Artifact 'team-comet-ml/telco-churn-dataset:1.0.0' download has been started asynchronously\n", - "COMET INFO: Still downloading 1 file(s), remaining 1.69 MB/1.69 MB\n", - "COMET INFO: Artifact 'team-comet-ml/telco-churn-dataset:1.0.0' has been successfully downloaded\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "Artifact(name='telco-churn-dataset', artifact_type='dataset', version=None, aliases=set(), version_tags=set())" - ] - }, - "metadata": {}, - "execution_count": 25 - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3VEeKx2laVn6" - }, - "source": [ - "# Basic EDA and Dataset Profiling with Sweetviz" - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "pAzrJEL5aYMu" - }, - "source": [ - "!pip install sweetviz --quiet" - ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "id": "Uc03ALoRaaAR" - }, - "source": [ - "import pandas as pd\n", - "import sweetviz\n", - "\n", - "df = pd.read_csv(\"./telco-churn-dataset.csv\", index_col=0)" - ], "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -558,26 +195,25 @@ "id": "Tl7SFsNypu69", "outputId": "11cfe3af-1b14-4653-bc06-09310011a585" }, - "source": [ - "report = sweetviz.analyze(df, target_feat=\"Churn Label\")\n", - "report.log_comet(experiment)" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6ef35152dfa94fd28f335622a8d70060", - "version_minor": 0, - "version_major": 2 + "version_major": 2, + "version_minor": 0 }, "text/plain": [ " | | [ 0%] 00:00 -> (? left)" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "report = sweetviz.analyze(df, target_feat=\"Churn Label\")\n", + "report.log_comet(experiment)" ] }, { @@ -600,6 +236,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -607,13 +244,8 @@ "id": "TtL4OdtonqW5", "outputId": "e7c3fe16-e3c5-4a5f-fad5-a231e1fdef8a" }, - "source": [ - "df.columns" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "Index(['CustomerID', 'Count', 'Country', 'State', 'City', 'Zip Code',\n", @@ -627,9 +259,13 @@ " dtype='object')" ] }, + "execution_count": 29, "metadata": {}, - "execution_count": 29 + "output_type": "execute_result" } + ], + "source": [ + "df.columns" ] }, { @@ -643,6 +279,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -650,13 +287,8 @@ "id": "1k0O4YvhvceP", "outputId": "39727ea7-e4d6-4c22-9ab3-2e3dc3c32671" }, - "source": [ - "df.dtypes" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "CustomerID object\n", @@ -695,9 +327,13 @@ "dtype: object" ] }, + "execution_count": 30, "metadata": {}, - "execution_count": 30 + "output_type": "execute_result" } + ], + "source": [ + "df.dtypes" ] }, { @@ -717,9 +353,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "3sYA_LPyvfu-" }, + "outputs": [], "source": [ "def convert_to_float(x):\n", " try:\n", @@ -731,15 +369,15 @@ "\n", "df[\"Total Charges\"] = df[\"Total Charges\"].apply(lambda x: convert_to_float(x))\n", "df.dropna(subset=[\"Total Charges\"], inplace=True)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "zU9ePgJq7qjA" }, + "outputs": [], "source": [ "y = df.pop(\"Churn Value\")\n", "X = df.drop(\n", @@ -755,9 +393,7 @@ " ],\n", " axis=1,\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -779,17 +415,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "4KAMJBlk_zOw" }, + "outputs": [], "source": [ "X_features = pd.get_dummies(X)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -798,13 +435,8 @@ "id": "5hLAXaANp20v", "outputId": "79992742-c211-4826-ec2a-db4eb57b07de" }, - "source": [ - "X_features.head()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -1345,9 +977,13 @@ "[5 rows x 1179 columns]" ] }, + "execution_count": 34, "metadata": {}, - "execution_count": 34 + "output_type": "execute_result" } + ], + "source": [ + "X_features.head()" ] }, { @@ -1361,18 +997,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nIeGPpZQ0JZL" }, + "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X_features, y, test_size=0.2, random_state=42\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -1385,6 +1021,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1392,16 +1029,8 @@ "id": "WitZoZ1ndOoa", "outputId": "fec68dd8-0f77-45b9-ae12-835d2dd844f4" }, - "source": [ - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "clf = RandomForestClassifier()\n", - "clf.fit(X_train, y_train)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", @@ -1414,9 +1043,16 @@ " verbose=0, warm_start=False)" ] }, + "execution_count": 35, "metadata": {}, - "execution_count": 35 + "output_type": "execute_result" } + ], + "source": [ + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "clf = RandomForestClassifier()\n", + "clf.fit(X_train, y_train)" ] }, { @@ -1448,6 +1084,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1455,6 +1092,16 @@ "id": "vM4tZzxy79TG", "outputId": "ccc4e564-feee-449f-cd98-d6179126974e" }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'0': {'precision': 0.9997591522157996, 'recall': 1.0, 'f1-score': 0.9998795616042394, 'support': 4151}, '1': {'precision': 1.0, 'recall': 0.9993215739484396, 'f1-score': 0.999660671869698, 'support': 1474}, 'accuracy': 0.9998222222222222, 'macro avg': {'precision': 0.9998795761078998, 'recall': 0.9996607869742198, 'f1-score': 0.9997701167369687, 'support': 5625}, 'weighted avg': {'precision': 0.999822265039606, 'recall': 0.9998222222222222, 'f1-score': 0.9998222027653569, 'support': 5625}}\n", + "{'0': {'precision': 0.8246869409660107, 'recall': 0.9110671936758893, 'f1-score': 0.8657276995305164, 'support': 1012}, '1': {'precision': 0.6885813148788927, 'recall': 0.5037974683544304, 'f1-score': 0.5818713450292397, 'support': 395}, 'accuracy': 0.7967306325515281, 'macro avg': {'precision': 0.7566341279224518, 'recall': 0.7074323310151598, 'f1-score': 0.7237995222798781, 'support': 1407}, 'weighted avg': {'precision': 0.786476761645178, 'recall': 0.7967306325515281, 'f1-score': 0.7860381046278835, 'support': 1407}}\n" + ] + } + ], "source": [ "from sklearn.metrics import classification_report\n", "\n", @@ -1473,27 +1120,16 @@ "\n", "with experiment.test():\n", " log_classification_report(y_test, clf.predict(X_test))" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "{'0': {'precision': 0.9997591522157996, 'recall': 1.0, 'f1-score': 0.9998795616042394, 'support': 4151}, '1': {'precision': 1.0, 'recall': 0.9993215739484396, 'f1-score': 0.999660671869698, 'support': 1474}, 'accuracy': 0.9998222222222222, 'macro avg': {'precision': 0.9998795761078998, 'recall': 0.9996607869742198, 'f1-score': 0.9997701167369687, 'support': 5625}, 'weighted avg': {'precision': 0.999822265039606, 'recall': 0.9998222222222222, 'f1-score': 0.9998222027653569, 'support': 5625}}\n", - "{'0': {'precision': 0.8246869409660107, 'recall': 0.9110671936758893, 'f1-score': 0.8657276995305164, 'support': 1012}, '1': {'precision': 0.6885813148788927, 'recall': 0.5037974683544304, 'f1-score': 0.5818713450292397, 'support': 395}, 'accuracy': 0.7967306325515281, 'macro avg': {'precision': 0.7566341279224518, 'recall': 0.7074323310151598, 'f1-score': 0.7237995222798781, 'support': 1407}, 'weighted avg': {'precision': 0.786476761645178, 'recall': 0.7967306325515281, 'f1-score': 0.7860381046278835, 'support': 1407}}\n" - ] - } ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "8VfmrSrYcj6h" }, - "source": [], - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] }, { "cell_type": "markdown", @@ -1506,9 +1142,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "ZUsq52bG04cA" }, + "outputs": [], "source": [ "import numpy as np\n", "from sklearn.metrics import precision_recall_curve\n", @@ -1518,12 +1156,11 @@ ")\n", "pr_df = pd.DataFrame([precision, recall, thresholds]).T\n", "pr_df.columns = [\"precision\", \"recall\", \"thresholds\"]" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1531,15 +1168,8 @@ "id": "0bOPUuwD3wvc", "outputId": "8943e7ff-65d0-4adf-9b1f-dfd40f2d119d" }, - "source": [ - "experiment.log_table(\n", - " filename=\"precision-recall-data.csv\", tabular_data=pr_df, headers=True\n", - ")" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'api': 'https://www.comet.ml/api/rest/v2/experiment/asset/get-asset?assetId=55b49bb4a07a447499f8e73a0f9b4f68&experimentKey=f598691808cd450788e66c8e19d353a7',\n", @@ -1547,9 +1177,15 @@ " 'web': 'https://www.comet.ml/api/asset/download?assetId=55b49bb4a07a447499f8e73a0f9b4f68&experimentKey=f598691808cd450788e66c8e19d353a7'}" ] }, + "execution_count": 19, "metadata": {}, - "execution_count": 19 + "output_type": "execute_result" } + ], + "source": [ + "experiment.log_table(\n", + " filename=\"precision-recall-data.csv\", tabular_data=pr_df, headers=True\n", + ")" ] }, { @@ -1563,6 +1199,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1570,21 +1207,8 @@ "id": "AhlY74C2fLOd", "outputId": "0bdf2c1d-aa3e-47a7-8b6a-476cb3425e70" }, - "source": [ - "def index_to_example(index):\n", - " return X_test.iloc[index, :][[\"CLTV\", \"Monthly Charges\", \"Total Charges\"]].to_json()\n", - "\n", - "\n", - "experiment.log_confusion_matrix(\n", - " y_test.tolist(),\n", - " clf.predict(X_test).tolist(),\n", - " index_to_example_function=index_to_example,\n", - ")" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'api': 'https://www.comet.ml/api/rest/v2/experiment/asset/get-asset?assetId=1aa491a9f9414927915e5f47147fadb2&experimentKey=f598691808cd450788e66c8e19d353a7',\n", @@ -1592,9 +1216,21 @@ " 'web': 'https://www.comet.ml/api/asset/download?assetId=1aa491a9f9414927915e5f47147fadb2&experimentKey=f598691808cd450788e66c8e19d353a7'}" ] }, + "execution_count": 20, "metadata": {}, - "execution_count": 20 + "output_type": "execute_result" } + ], + "source": [ + "def index_to_example(index):\n", + " return X_test.iloc[index, :][[\"CLTV\", \"Monthly Charges\", \"Total Charges\"]].to_json()\n", + "\n", + "\n", + "experiment.log_confusion_matrix(\n", + " y_test.tolist(),\n", + " clf.predict(X_test).tolist(),\n", + " index_to_example_function=index_to_example,\n", + ")" ] }, { @@ -1608,6 +1244,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1615,14 +1252,10 @@ "id": "fDkoO27LGFJP", "outputId": "e8788d6e-9d13-49f1-eed1-6d71ac03ad67" }, - "source": [ - "experiment.end()" - ], - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "COMET INFO: ---------------------------\n", "COMET INFO: Comet.ml Experiment Summary\n", @@ -1703,16 +1336,383 @@ "COMET INFO: The Python SDK has 3600 seconds to finish before aborting...\n" ] } + ], + "source": [ + "experiment.end()" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "QKuRKijJ7ivO" }, - "source": [], - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "-cTh8OcaYvbU" + ], + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "12cf675cc2a5410bb2771751c76eee65": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1604a7da5a32433e8d94cf151e7bc762": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1d70e8affa5b40b7a623cb72e0f4e1f2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "3c6f27c83d4d4bc38db343ae05217ec8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "54e4bd5cfafe447aab4a6486bd96e6e6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5e514536afb44c18a8941b78dca05fb2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6ef35152dfa94fd28f335622a8d70060": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a492186217b74b99ab9a28d548949b51", + "IPY_MODEL_b79ed0fd8678443b8044defcf4070035", + "IPY_MODEL_7ba958da9a1f4bd3b286c8457b9a1e15" + ], + "layout": "IPY_MODEL_75da1f6c7fdb4247bed5492f19ef02b1" + } + }, + "75da1f6c7fdb4247bed5492f19ef02b1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "7ba958da9a1f4bd3b286c8457b9a1e15": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3c6f27c83d4d4bc38db343ae05217ec8", + "placeholder": "​", + "style": "IPY_MODEL_54e4bd5cfafe447aab4a6486bd96e6e6", + "value": " [100%] 00:01 -> (00:00 left)" + } + }, + "a492186217b74b99ab9a28d548949b51": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5e514536afb44c18a8941b78dca05fb2", + "placeholder": "​", + "style": "IPY_MODEL_1604a7da5a32433e8d94cf151e7bc762", + "value": "Done! Use 'show' commands to display/save. " + } + }, + "b79ed0fd8678443b8044defcf4070035": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_12cf675cc2a5410bb2771751c76eee65", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_1d70e8affa5b40b7a623cb72e0f4e1f2", + "value": 1 + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/guides/manage_data/A_Guide_to_Remote_Artifacts.ipynb b/guides/manage_data/A_Guide_to_Remote_Artifacts.ipynb index 4f3a38c7..d7ae0a8b 100644 --- a/guides/manage_data/A_Guide_to_Remote_Artifacts.ipynb +++ b/guides/manage_data/A_Guide_to_Remote_Artifacts.ipynb @@ -28,7 +28,7 @@ }, "outputs": [], "source": [ - "%pip install --upgrade comet_ml" + "%pip install --upgrade \"comet_ml>=3.44.0\"" ] }, { @@ -53,7 +53,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"remote-artifacts\")" + "comet_ml.login(project_name=\"remote-artifacts\")" ] }, { diff --git a/guides/manage_data/Introduction_to_Artifacts.ipynb b/guides/manage_data/Introduction_to_Artifacts.ipynb index 54ce8d5f..6c0d98b0 100644 --- a/guides/manage_data/Introduction_to_Artifacts.ipynb +++ b/guides/manage_data/Introduction_to_Artifacts.ipynb @@ -50,7 +50,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml pandas scikit-learn joblib" + "%pip install -U \"comet_ml>=3.44.0\" pandas scikit-learn joblib" ] }, { @@ -63,7 +63,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"guide-artifacts-demo\")" + "comet_ml.login(project_name=\"guide-artifacts-demo\")" ] }, { diff --git a/guides/tracking-ml-training/Comet_in_Notebooks.ipynb b/guides/tracking-ml-training/Comet_in_Notebooks.ipynb index 45f2953d..f385ac98 100644 --- a/guides/tracking-ml-training/Comet_in_Notebooks.ipynb +++ b/guides/tracking-ml-training/Comet_in_Notebooks.ipynb @@ -1,18 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", @@ -26,14 +12,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "bjfA7OqbUvc4" }, + "outputs": [], "source": [ - "!pip install comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install -U \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", @@ -46,16 +32,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "-frLwX-YUzDn" }, + "outputs": [], "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-in-notebooks\")" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login(project_name=\"comet-in-notebooks\")" + ] }, { "cell_type": "markdown", @@ -68,17 +54,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "Jw9kxe09Vf6C" }, + "outputs": [], "source": [ "experiment = comet_ml.Experiment()\n", "\n", "for idx, value in enumerate(range(0, 100, 10)):\n", " experiment.log_metric(\"accuracy\", value / 100, step=idx)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -91,14 +77,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "fcj_fe3dV5jN" }, + "outputs": [], "source": [ "experiment.display(tab=\"charts\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -111,14 +97,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "kfSiNZEZVz4Y" }, + "outputs": [], "source": [ "experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -131,23 +117,37 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "tBbLw06mWfal" }, + "outputs": [], "source": [ "experiment.display(tab=\"code\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "drpje33JXHXN" }, - "source": [], - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/annoy/annoy_example.py b/integrations/annoy/annoy_example.py index a9f0a53f..6991d0d5 100644 --- a/integrations/annoy/annoy_example.py +++ b/integrations/annoy/annoy_example.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import random import comet_ml @@ -6,7 +7,7 @@ # Use this if you are using the Cloud version of Comet.ml # Comment this line if you are using a on-premise version of Comet.ml -comet_ml.init() +comet_ml.login() # Uncomment this line if you are using a on-premise version of Comet.ml # comet_ml.init_onprem() diff --git a/integrations/annoy/requirements.txt b/integrations/annoy/requirements.txt index 09d06463..b198caf7 100644 --- a/integrations/annoy/requirements.txt +++ b/integrations/annoy/requirements.txt @@ -1,2 +1,2 @@ annoy -comet_ml +comet_ml>=3.44.0 diff --git a/integrations/data-management/snowflake/notebooks/Comet_and_Snowflake.ipynb b/integrations/data-management/snowflake/notebooks/Comet_and_Snowflake.ipynb index f426d2cb..34ed5c37 100644 --- a/integrations/data-management/snowflake/notebooks/Comet_and_Snowflake.ipynb +++ b/integrations/data-management/snowflake/notebooks/Comet_and_Snowflake.ipynb @@ -1,182 +1,183 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "oDqA6MrBfXal" + }, + "source": [ + "![comet-banner.png](data:image/png;base64,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)" + ] }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "![comet-banner.png](data:image/png;base64,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)" - ], - "metadata": { - "id": "oDqA6MrBfXal" - } - }, - { - "cell_type": "markdown", - "source": [ - "[Snowflake](https://www.snowflake.com/en/) is a data platform that offers cloud-based data storage and analytics services that serve a wide range of applications such as data warehouses and data lakes, data engineering, and data science and ML workloads.\n", - "\n", - "Data science and machine learning teams use [Comet](https://www.comet.com?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake)’s ML platform to track, compare, explain, and optimize their models across the complete ML lifecycle – from managing experiments to monitoring models in production.\n", - "\n", - "Comet works with Jupyter Notebooks and Scripts and most importantly it is 100% free to [get started](https://www.comet.com/signup?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake)!" - ], - "metadata": { - "id": "IacY50E8fj7p" - } - }, - { - "cell_type": "code", - "source": [], - "metadata": { - "id": "tQBQd3L0c_a_" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Install Dependencies" - ], - "metadata": { - "id": "ZjBkTgW-ih5e" - } - }, - { - "cell_type": "code", - "source": [ - "%pip install comet_ml snowflake-snowpark-python pandas" - ], - "metadata": { - "id": "jztHMyUGfitU" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Prerequisites\n", - "\n", - "In order to run this example, you will need a [Comet API key](https://www.comet.com/signup?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake) and a [Snowflake Account](https://www.snowflake.com/login/)" - ], - "metadata": { - "id": "0-8vTHXQiyfM" - } - }, - { - "cell_type": "markdown", - "source": [ - "# Initialize Comet" - ], - "metadata": { - "id": "Vl7tvoeQjBqf" - } - }, - { - "cell_type": "code", - "source": [ - "import comet_ml\n", - "comet_ml.init(project_name=\"comet-example-snowflake\")" - ], - "metadata": { - "id": "V-upQnd_i0Ly" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Start a Snowflake Session" - ], - "metadata": { - "id": "B1UEegaL3lyO" - } - }, - { - "cell_type": "code", - "source": [ - "from snowflake.snowpark import Session\n", - "\n", - "# Configure Snowflake and Comet\n", - "connection_parameters = {\n", - " \"account\": \"Your Account Name\",\n", - " \"user\": \"Your User Name\",\n", - " \"password\": \"Your Snowflake Password\",\n", - " \"database\": \"SNOWFLAKE_SAMPLE_DATA\",\n", - "}\n", - "\n", - "session = Session.builder.configs(connection_parameters).create()" - ], - "metadata": { - "id": "HmBjmbMX3vmB" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Run a Query and Log the resulting dataset information as a Comet Artifact" - ], - "metadata": { - "id": "jPp4tW4M36MC" - } - }, - { - "cell_type": "code", - "source": [ - "experiment = comet_ml.Experiment(project_name=\"comet-snowflake\")\n", - "df = session.sql(\"select * from TPCH_SF10.ORDERS limit 1000\")\n", - "\n", - "comet_snowflake.log_snowpark_dataframe_v1(\n", - " experiment, \"my-snowflake-dataframe\", df, log_sample=True, sample_size=50\n", - ")\n", - "\n", - "experiment.end()" - ], - "metadata": { - "id": "6I0CW6Ul4AW-" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Fetch the Query Information from the logged Artifact" - ], - "metadata": { - "id": "fAsG1nAm4J6p" - } - }, - { - "cell_type": "code", - "source": [ - "experiment = comet_ml.Experiment(project_name=\"comet-snowflake\")\n", - "query = comet_snowflake.get_artifact_v1(\n", - " experiment, \"snowflake-dataframe\", \"team-comet-ml\"\n", - ")\n", - "df = session.sql(query)" - ], - "metadata": { - "id": "V1tITCI14Nd7" - }, - "execution_count": null, - "outputs": [] - } - ] -} \ No newline at end of file + { + "cell_type": "markdown", + "metadata": { + "id": "IacY50E8fj7p" + }, + "source": [ + "[Snowflake](https://www.snowflake.com/en/) is a data platform that offers cloud-based data storage and analytics services that serve a wide range of applications such as data warehouses and data lakes, data engineering, and data science and ML workloads.\n", + "\n", + "Data science and machine learning teams use [Comet](https://www.comet.com?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake)’s ML platform to track, compare, explain, and optimize their models across the complete ML lifecycle – from managing experiments to monitoring models in production.\n", + "\n", + "Comet works with Jupyter Notebooks and Scripts and most importantly it is 100% free to [get started](https://www.comet.com/signup?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake)!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tQBQd3L0c_a_" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZjBkTgW-ih5e" + }, + "source": [ + "# Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jztHMyUGfitU" + }, + "outputs": [], + "source": [ + "%pip install -U \"comet_ml>=3.44.0\" snowflake-snowpark-python pandas" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0-8vTHXQiyfM" + }, + "source": [ + "# Prerequisites\n", + "\n", + "In order to run this example, you will need a [Comet API key](https://www.comet.com/signup?utm_source=github.com&utm_medium=referral&utm_campaign=comet_notebook&utm_content=snowflake) and a [Snowflake Account](https://www.snowflake.com/login/)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vl7tvoeQjBqf" + }, + "source": [ + "# Initialize Comet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "V-upQnd_i0Ly" + }, + "outputs": [], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-example-snowflake\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B1UEegaL3lyO" + }, + "source": [ + "# Start a Snowflake Session" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "HmBjmbMX3vmB" + }, + "outputs": [], + "source": [ + "from snowflake.snowpark import Session\n", + "\n", + "# Configure Snowflake and Comet\n", + "connection_parameters = {\n", + " \"account\": \"Your Account Name\",\n", + " \"user\": \"Your User Name\",\n", + " \"password\": \"Your Snowflake Password\",\n", + " \"database\": \"SNOWFLAKE_SAMPLE_DATA\",\n", + "}\n", + "\n", + "session = Session.builder.configs(connection_parameters).create()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jPp4tW4M36MC" + }, + "source": [ + "# Run a Query and Log the resulting dataset information as a Comet Artifact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6I0CW6Ul4AW-" + }, + "outputs": [], + "source": [ + "experiment = comet_ml.Experiment(project_name=\"comet-snowflake\")\n", + "df = session.sql(\"select * from TPCH_SF10.ORDERS limit 1000\")\n", + "\n", + "comet_snowflake.log_snowpark_dataframe_v1(\n", + " experiment, \"my-snowflake-dataframe\", df, log_sample=True, sample_size=50\n", + ")\n", + "\n", + "experiment.end()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fAsG1nAm4J6p" + }, + "source": [ + "# Fetch the Query Information from the logged Artifact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "V1tITCI14Nd7" + }, + "outputs": [], + "source": [ + "experiment = comet_ml.Experiment(project_name=\"comet-snowflake\")\n", + "query = comet_snowflake.get_artifact_v1(\n", + " experiment, \"snowflake-dataframe\", \"team-comet-ml\"\n", + ")\n", + "df = session.sql(query)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/llm/comet-llm/notebooks/CometLLM_hello_world.ipynb b/integrations/llm/comet-llm/notebooks/CometLLM_hello_world.ipynb index cad9da07..9d56c8ad 100644 --- a/integrations/llm/comet-llm/notebooks/CometLLM_hello_world.ipynb +++ b/integrations/llm/comet-llm/notebooks/CometLLM_hello_world.ipynb @@ -57,9 +57,9 @@ }, "outputs": [], "source": [ - "import comet_ml\n", + "import comet_llm\n", "\n", - "comet_ml.init(project_name=\"comet-example-llm-hello-world\")" + "comet_llm.init(project_name=\"comet-example-llm-hello-world\")" ] }, { diff --git a/integrations/llm/finetuning/alpaca-lora/notebooks/Alpaca_Lora_Finetuning_with_Comet.ipynb b/integrations/llm/finetuning/alpaca-lora/notebooks/Alpaca_Lora_Finetuning_with_Comet.ipynb index f59813c6..128b6223 100644 --- a/integrations/llm/finetuning/alpaca-lora/notebooks/Alpaca_Lora_Finetuning_with_Comet.ipynb +++ b/integrations/llm/finetuning/alpaca-lora/notebooks/Alpaca_Lora_Finetuning_with_Comet.ipynb @@ -37,7 +37,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -59,7 +59,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-alpaca-lora-finetuning\")" + "comet_ml.login(project_name=\"comet-example-alpaca-lora-finetuning\")" ] }, { diff --git a/integrations/model-evaluation/gradio/notebooks/Gradio_and_Comet.ipynb b/integrations/model-evaluation/gradio/notebooks/Gradio_and_Comet.ipynb index 359ed2fa..df25b06d 100644 --- a/integrations/model-evaluation/gradio/notebooks/Gradio_and_Comet.ipynb +++ b/integrations/model-evaluation/gradio/notebooks/Gradio_and_Comet.ipynb @@ -55,7 +55,7 @@ }, "outputs": [], "source": [ - "%pip install -U comet_ml gradio altair torch torchvision \"transformers<4.40.0\" requests Pillow" + "%pip install -U \"comet_ml>=3.44.0\" gradio altair torch torchvision \"transformers<4.40.0\" requests Pillow" ] }, { @@ -78,7 +78,7 @@ "import comet_ml\n", "import gradio as gr\n", "\n", - "comet_ml.init(project_name=\"comet-example-gradio-notebook\")" + "comet_ml.login(project_name=\"comet-example-gradio-notebook\")" ] }, { diff --git a/integrations/model-evaluation/gradio/notebooks/Logging_Model_Inferences_with_Comet_and_Gradio.ipynb b/integrations/model-evaluation/gradio/notebooks/Logging_Model_Inferences_with_Comet_and_Gradio.ipynb index 3b18abf2..ba9e72a0 100644 --- a/integrations/model-evaluation/gradio/notebooks/Logging_Model_Inferences_with_Comet_and_Gradio.ipynb +++ b/integrations/model-evaluation/gradio/notebooks/Logging_Model_Inferences_with_Comet_and_Gradio.ipynb @@ -42,7 +42,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml torch \"transformers<4.40.0\" \"gradio>=4.0\" shap" + "%pip install -U \"comet_ml>=3.44.0\" torch \"transformers<4.40.0\" \"gradio>=4.0\" shap" ] }, { @@ -68,7 +68,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-gradio-inference\")" + "comet_ml.login(project_name=\"comet-example-gradio-inference\")" ] }, { diff --git a/integrations/model-evaluation/nerfstudio/notebooks/Comet_NerfStudio_sitcoms3d_evaluate_model.ipynb b/integrations/model-evaluation/nerfstudio/notebooks/Comet_NerfStudio_sitcoms3d_evaluate_model.ipynb index 39243ac7..0eb72139 100644 --- a/integrations/model-evaluation/nerfstudio/notebooks/Comet_NerfStudio_sitcoms3d_evaluate_model.ipynb +++ b/integrations/model-evaluation/nerfstudio/notebooks/Comet_NerfStudio_sitcoms3d_evaluate_model.ipynb @@ -38,7 +38,7 @@ "# Installing TinyCuda\n", "%cd /content/\n", "!gdown \"https://drive.google.com/u/1/uc?id=1-7x7qQfB7bIw2zV4Lr6-yhvMpjXC84Q5&confirm=t\"\n", - "!pip install tinycudann-1.7-cp310-cp310-linux_x86_64.whl" + "%pip install tinycudann-1.7-cp310-cp310-linux_x86_64.whl" ] }, { @@ -51,7 +51,7 @@ "source": [ "# Install nerfstudio\n", "%cd /content/\n", - "!pip install git+https://github.com/nerfstudio-project/nerfstudio" + "%pip install -U git+https://github.com/nerfstudio-project/nerfstudio" ] }, { @@ -77,7 +77,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init()" + "comet_ml.login()" ] }, { diff --git a/integrations/model-evaluation/tensorflow-model-analysis/notebooks/Comet_with_Tensorflow_Model_Analysis_TFMA.ipynb b/integrations/model-evaluation/tensorflow-model-analysis/notebooks/Comet_with_Tensorflow_Model_Analysis_TFMA.ipynb index ebc3290d..0ed7cb3b 100644 --- a/integrations/model-evaluation/tensorflow-model-analysis/notebooks/Comet_with_Tensorflow_Model_Analysis_TFMA.ipynb +++ b/integrations/model-evaluation/tensorflow-model-analysis/notebooks/Comet_with_Tensorflow_Model_Analysis_TFMA.ipynb @@ -1,103 +1,74 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "# Install Comet" - ], "metadata": { "id": "re1sfMFZsui6" - } + }, + "source": [ + "# Install Comet and dependencies" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "l2pryucSqLOS" }, + "outputs": [], "source": [ - "!pip install --upgrade comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install -U \"comet_ml>=3.44.0\" tensorflow-model-analysis" + ] }, { "cell_type": "markdown", - "source": [ - "# Install Dependencies" - ], - "metadata": { - "id": "l5uZf2ppssOf" - } - }, - { - "cell_type": "code", "metadata": { - "id": "dWTbGtU2HkZA" + "id": "vNAfoInQsxXz" }, - "source": [ - "!pip install tensorflow-model-analysis" - ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", "source": [ "# Initialize Comet" - ], - "metadata": { - "id": "vNAfoInQsxXz" - } + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "tMFDWlcEHmEo" }, + "outputs": [], "source": [ "import comet_ml\n", "\n", - "comet_ml.init()" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login()" + ] }, { "cell_type": "markdown", - "source": [ - "# Fetch Tensorflow Model Analysis Data" - ], "metadata": { "id": "8BP3xQk3szXf" - } + }, + "source": [ + "# Fetch Tensorflow Model Analysis Data" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "yYhrTG1kffZB" }, + "outputs": [], "source": [ "import tensorflow_model_analysis as tfma" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "qhnrUpHsWjlZ" }, + "outputs": [], "source": [ "# Get the Data\n", "\n", @@ -118,24 +89,24 @@ "\n", "print(\"Here's what we downloaded:\")\n", "!ls -R {BASE_DIR}" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Setup TFMA Data Schema" - ], "metadata": { "id": "dmmmSLCAtDZy" - } + }, + "source": [ + "# Setup TFMA Data Schema" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "PLRNn-H8Wmmq" }, + "outputs": [], "source": [ "# Setup Data Schema\n", "\n", @@ -148,24 +119,24 @@ "schema = schema_pb2.Schema()\n", "contents = file_io.read_file_to_string(SCHEMA)\n", "schema = text_format.Parse(contents, schema)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Encode Data to TFRecords Format" - ], "metadata": { "id": "-V5tOHQyuWXE" - } + }, + "source": [ + "# Encode Data to TFRecords Format" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "93uAo29pW4dJ" }, + "outputs": [], "source": [ "# Encode Data to TFRecords format using the Schema\n", "\n", @@ -202,24 +173,24 @@ " writer.write(example.SerializeToString())\n", "\n", "!ls {tfrecord_file}" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Setup TFMA Evaluation Config and Run the Analysis" - ], "metadata": { "id": "fAgYPsd1uczE" - } + }, + "source": [ + "# Setup TFMA Evaluation Config and Run the Analysis" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "6q1RGsX5XAmy" }, + "outputs": [], "source": [ "import tensorflow_model_analysis as tfma\n", "\n", @@ -286,24 +257,24 @@ " data_location=tfrecord_file,\n", " output_path=keras_output_path,\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Log TFMA Visualizations to Comet" - ], "metadata": { "id": "UwifkpNwulHg" - } + }, + "source": [ + "# Log TFMA Visualizations to Comet" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "UuHkdVTzrJdg" }, + "outputs": [], "source": [ "%env COMET_AUTO_LOG_TFMA=1\n", "\n", @@ -315,18 +286,27 @@ "tfma.view.render_plot(results)\n", "\n", "experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", - "source": [], + "execution_count": null, "metadata": { "id": "bLvy5CTXuoni" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-optimization/comet-optimizer/notebooks/Comet_Optimizer_Keras.ipynb b/integrations/model-optimization/comet-optimizer/notebooks/Comet_Optimizer_Keras.ipynb index 0cb865d7..3dc08789 100644 --- a/integrations/model-optimization/comet-optimizer/notebooks/Comet_Optimizer_Keras.ipynb +++ b/integrations/model-optimization/comet-optimizer/notebooks/Comet_Optimizer_Keras.ipynb @@ -1,22 +1,8 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, "cells": [ { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -24,14 +10,10 @@ "id": "u6N22Dmnat1a", "outputId": "f366c559-3a79-475f-ae44-3494c35bbeb9" }, - "source": [ - "!pip install comet_ml --quiet" - ], - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "\u001b[?25l\r\u001b[K |█ | 10 kB 16.2 MB/s eta 0:00:01\r\u001b[K |██▏ | 20 kB 17.8 MB/s eta 0:00:01\r\u001b[K |███▎ | 30 kB 19.8 MB/s eta 0:00:01\r\u001b[K |████▍ | 40 kB 19.7 MB/s eta 0:00:01\r\u001b[K |█████▌ | 51 kB 10.3 MB/s eta 0:00:01\r\u001b[K |██████▋ | 61 kB 11.7 MB/s eta 0:00:01\r\u001b[K |███████▋ | 71 kB 11.7 MB/s eta 0:00:01\r\u001b[K |████████▊ | 81 kB 12.8 MB/s eta 0:00:01\r\u001b[K |█████████▉ | 92 kB 13.1 MB/s eta 0:00:01\r\u001b[K |███████████ | 102 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████ | 112 kB 10.9 MB/s eta 0:00:01\r\u001b[K |█████████████▏ | 122 kB 10.9 MB/s eta 0:00:01\r\u001b[K |██████████████▏ | 133 kB 10.9 MB/s eta 0:00:01\r\u001b[K |███████████████▎ | 143 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████████▍ | 153 kB 10.9 MB/s eta 0:00:01\r\u001b[K |█████████████████▌ | 163 kB 10.9 MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 174 kB 10.9 MB/s eta 0:00:01\r\u001b[K |███████████████████▊ | 184 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████████████▊ | 194 kB 10.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 204 kB 10.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████ | 215 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 225 kB 10.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 235 kB 10.9 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▎ | 245 kB 10.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▎ | 256 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▍ | 266 kB 10.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 276 kB 10.9 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▋ | 286 kB 10.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▊| 296 kB 10.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 299 kB 10.9 MB/s \n", "\u001b[K |████████████████████████████████| 54 kB 1.8 MB/s \n", @@ -40,6 +22,9 @@ "\u001b[?25h Building wheel for configobj (setup.py) ... \u001b[?25l\u001b[?25hdone\n" ] } + ], + "source": [ + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -51,6 +36,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -58,12 +44,6 @@ "id": "eKXK0Irvaw2h", "outputId": "76cd6f37-a4dd-4c54-c82f-5808526318e9" }, - "source": [ - "import comet_ml\n", - "\n", - "comet_ml.init(project_name=\"comet-optimizer\")" - ], - "execution_count": null, "outputs": [ { "name": "stdout", @@ -75,17 +55,23 @@ ] }, { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "COMET INFO: Comet API key is valid\n", "COMET INFO: Comet API key saved in /root/.comet.config\n" ] } + ], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-optimizer\")" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -93,6 +79,16 @@ "id": "X5sQWU3BapLH", "outputId": "1d9e52b6-111b-40c7-9502-03b2ad2108ec" }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "60000 train samples\n", + "10000 test samples\n" + ] + } + ], "source": [ "from tensorflow.keras.datasets import mnist\n", "from tensorflow.keras.layers import Dense\n", @@ -160,21 +156,11 @@ "\n", "# Get the dataset:\n", "x_train, y_train, x_test, y_test = get_dataset()" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "60000 train samples\n", - "10000 test samples\n" - ] - } ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -182,6 +168,16 @@ "id": "TOtpiuGZcBD8", "outputId": "b1099ad7-c479-41f5-c8d4-4eca75e57fa1" }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET INFO: COMET_OPTIMIZER_ID=5d81d806b4c947d2ae8741bb8c21c1c0\n", + "COMET INFO: Using optimizer config: {'algorithm': 'bayes', 'configSpaceSize': 'infinite', 'endTime': None, 'id': '5d81d806b4c947d2ae8741bb8c21c1c0', 'lastUpdateTime': None, 'maxCombo': 10, 'name': 'Optimize MNIST Network', 'parameters': {'batch_size': {'type': 'discrete', 'values': [64, 128, 256]}, 'first_layer_units': {'mu': 500, 'scalingType': 'normal', 'sigma': 50, 'type': 'integer'}}, 'predictor': None, 'spec': {'gridSize': 10, 'maxCombo': 10, 'metric': 'loss', 'minSampleSize': 100, 'objective': 'minimize', 'retryAssignLimit': 0, 'retryLimit': 1000}, 'startTime': 24021673633, 'state': {'mode': None, 'seed': None, 'sequence': [], 'sequence_i': 0, 'sequence_pid': None, 'sequence_retry': 0, 'sequence_retry_count': 0}, 'status': 'running', 'suggestion_count': 0, 'trials': 1, 'version': '2.0.1'}\n" + ] + } + ], "source": [ "# The optimization config:\n", "config = {\n", @@ -201,24 +197,15 @@ "}\n", "\n", "opt = comet_ml.Optimizer(config)" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "COMET INFO: COMET_OPTIMIZER_ID=5d81d806b4c947d2ae8741bb8c21c1c0\n", - "COMET INFO: Using optimizer config: {'algorithm': 'bayes', 'configSpaceSize': 'infinite', 'endTime': None, 'id': '5d81d806b4c947d2ae8741bb8c21c1c0', 'lastUpdateTime': None, 'maxCombo': 10, 'name': 'Optimize MNIST Network', 'parameters': {'batch_size': {'type': 'discrete', 'values': [64, 128, 256]}, 'first_layer_units': {'mu': 500, 'scalingType': 'normal', 'sigma': 50, 'type': 'integer'}}, 'predictor': None, 'spec': {'gridSize': 10, 'maxCombo': 10, 'metric': 'loss', 'minSampleSize': 100, 'objective': 'minimize', 'retryAssignLimit': 0, 'retryLimit': 1000}, 'startTime': 24021673633, 'state': {'mode': None, 'seed': None, 'sequence': [], 'sequence_i': 0, 'sequence_pid': None, 'sequence_retry': 0, 'sequence_retry_count': 0}, 'status': 'running', 'suggestion_count': 0, 'trials': 1, 'version': '2.0.1'}\n" - ] - } ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nvIbiv1ZcDQo" }, + "outputs": [], "source": [ "for experiment in opt.get_experiments():\n", " # Log parameters, or others:\n", @@ -235,18 +222,31 @@ "\n", " # Optionally, end the experiment:\n", " experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "Q0Pz-LtqLqLo" }, - "source": [], - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-optimization/ray-tune/notebooks/Comet_and_Ray.ipynb b/integrations/model-optimization/ray-tune/notebooks/Comet_and_Ray.ipynb index f8a4369d..0d60406b 100644 --- a/integrations/model-optimization/ray-tune/notebooks/Comet_and_Ray.ipynb +++ b/integrations/model-optimization/ray-tune/notebooks/Comet_and_Ray.ipynb @@ -44,7 +44,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml \"ray[tune]\"" + "%pip install -U \"comet_ml>=3.44.0\" \"ray[tune]\"" ] }, { @@ -67,7 +67,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-ray-tune-hello-world\")" + "comet_ml.login(project_name=\"comet-example-ray-tune-hello-world\")" ] }, { diff --git a/integrations/model-training/accelerate/notebooks/Comet_and_Accelerate.ipynb b/integrations/model-training/accelerate/notebooks/Comet_and_Accelerate.ipynb index 39f3afea..fbe4780a 100644 --- a/integrations/model-training/accelerate/notebooks/Comet_and_Accelerate.ipynb +++ b/integrations/model-training/accelerate/notebooks/Comet_and_Accelerate.ipynb @@ -46,7 +46,7 @@ }, "outputs": [], "source": [ - "%pip install \"comet_ml>=3.31.5\" torch torchvision tqdm \"accelerate>=0.17.0\"" + "%pip install -U \"comet_ml>=3.44.0\" torch torchvision tqdm \"accelerate>=0.17.0\"" ] }, { @@ -68,7 +68,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init()" + "comet_ml.login()" ] }, { diff --git a/integrations/model-training/anomalib/notebooks/Anomalib_Comet.ipynb b/integrations/model-training/anomalib/notebooks/Anomalib_Comet.ipynb index 5c215939..3c28d058 100644 --- a/integrations/model-training/anomalib/notebooks/Anomalib_Comet.ipynb +++ b/integrations/model-training/anomalib/notebooks/Anomalib_Comet.ipynb @@ -23,10 +23,7 @@ }, { "cell_type": "code", - "source": [ - "!pip install comet_ml --q\n", - "import comet_ml" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -34,11 +31,10 @@ "id": "mfJ7ria2WgZb", "outputId": "99f83301-9086-4c07-badb-471f64ee4663" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m501.8/501.8 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.5/54.5 kB\u001b[0m \u001b[31m2.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", @@ -50,22 +46,25 @@ "\u001b[?25h" ] } + ], + "source": [ + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "3Dr3VHzafL-z", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "3Dr3VHzafL-z", "outputId": "11e06f48-7d32-46fa-837d-7dec04097e08" }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Cloning into 'anomalib'...\n", "remote: Enumerating objects: 28365, done.\u001b[K\n", @@ -104,7 +103,7 @@ "source": [ "!git clone https://github.com/openvinotoolkit/anomalib.git\n", "%cd anomalib\n", - "!pip install . --q" + "%pip install ." ] }, { @@ -122,25 +121,27 @@ }, { "cell_type": "code", - "source": [ - "comet_ml.init(api_key=\"\")" - ], + "execution_count": null, "metadata": { - "id": "jbmCLpu6T8P7", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "jbmCLpu6T8P7", "outputId": "c65cb2d4-4c41-4b3e-9b3b-30934dfa5452" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Valid Comet API Key saved in /root/.comet.config (set COMET_CONFIG to change where it is saved).\n" ] } + ], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login()" ] }, { @@ -315,16 +316,16 @@ "cell_type": "code", "execution_count": null, "metadata": { - "id": "CezXI1d848cg", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "CezXI1d848cg", "outputId": "b0b0005f-b0ae-4017-ccc7-efaaed6ca8ce" }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "To use wandb logger install it using `pip install wandb`\n", "/usr/local/lib/python3.10/dist-packages/anomalib/config/config.py:275: UserWarning: config.project.unique_dir is set to False. This does not ensure that your results will be written in an empty directory and you may overwrite files.\n", @@ -775,4 +776,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} \ No newline at end of file +} diff --git a/integrations/model-training/catalyst/notebooks/Catalyst_x_Comet.ipynb b/integrations/model-training/catalyst/notebooks/Catalyst_x_Comet.ipynb index 0b3f8c17..e8cc002a 100644 --- a/integrations/model-training/catalyst/notebooks/Catalyst_x_Comet.ipynb +++ b/integrations/model-training/catalyst/notebooks/Catalyst_x_Comet.ipynb @@ -1,20 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "toc_visible": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, "cells": [ { "cell_type": "markdown", @@ -47,15 +31,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "01UyDh4SUXes" }, + "outputs": [], "source": [ - "!pip install catalyst --quiet\n", - "!pip install comet_ml --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install catalyst \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", @@ -68,16 +51,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "O7g_JrgB64ob" }, + "outputs": [], "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"catalyst-tests\")" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login(project_name=\"comet-example-catalyst-notebook\")" + ] }, { "cell_type": "markdown", @@ -90,9 +73,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "4stX87FG4Pjd" }, + "outputs": [], "source": [ "import os\n", "import torch\n", @@ -105,9 +90,7 @@ "from torch.utils.data import DataLoader, TensorDataset\n", "from catalyst import dl\n", "from catalyst.callbacks.checkpoint import CheckpointCallback" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -120,9 +103,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "N1sevzQl4KKx" }, + "outputs": [], "source": [ "def train(logger, hparams={\"lr\": 0.02, \"batch_size\": 32}):\n", " model = nn.Sequential(nn.Flatten(), nn.Linear(28 * 28, 10))\n", @@ -168,9 +153,7 @@ " load_best_on_end=True,\n", " loggers={\"comet\": logger},\n", " )" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -183,15 +166,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "zm2ZNi174ClH" }, + "outputs": [], "source": [ "logger = dl.CometLogger()\n", "train(logger)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -213,14 +196,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "PNL9zSjz9wkb" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"charts\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -244,26 +227,26 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "_k2bW7Zd9fow" }, + "outputs": [], "source": [ "logger = dl.CometLogger(comet_mode=\"offline\", **{\"offline_directory\": \"/tmp\"})\n", "train(logger)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "81Co00LA84_N" }, + "outputs": [], "source": [ "! comet upload /tmp/.zip" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -287,16 +270,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "WGQ3GP7mHMOt" }, + "outputs": [], "source": [ "previous_experiment_id = \"previous-experiment-id\"\n", "logger = dl.CometLogger(experiment_id=previous_experiment_id, tags=[\"resumed\"])\n", "train(logger)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -320,9 +303,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "r7_8JXnP7k0q" }, + "outputs": [], "source": [ "class CustomRunner(dl.IRunner):\n", " def __init__(self, logdir, device):\n", @@ -431,21 +416,19 @@ " \"targets\": y,\n", " \"logits\": logits,\n", " }" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "-kaV527kCIe4" }, + "outputs": [], "source": [ "runner = CustomRunner(\"/tmp\", \"cuda\")\n", "runner.run()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -469,9 +452,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "_EdVhgQXFihE" }, + "outputs": [], "source": [ "logger = dl.CometLogger()\n", "\n", @@ -567,9 +552,7 @@ " CometCheckpointCallback(logdir=\"/tmp\", logger=logger),\n", " ],\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -582,14 +565,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "fjCdbHVW-_Nu" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"assets\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -602,9 +585,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nO8pPnpsn2Gb" }, + "outputs": [], "source": [ "logger = dl.CometLogger()\n", "\n", @@ -641,9 +626,23 @@ ")\n", "logger.log_metrics(metrics, stage_key=\"evaluation\", loader_key=\"valid\", scope=\"batch\")\n", "logger.experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-training/composer/mosaicml-getting-started/mosaicml-getting-started.py b/integrations/model-training/composer/mosaicml-getting-started/mosaicml-getting-started.py index 246c1561..4f54da26 100644 --- a/integrations/model-training/composer/mosaicml-getting-started/mosaicml-getting-started.py +++ b/integrations/model-training/composer/mosaicml-getting-started/mosaicml-getting-started.py @@ -10,7 +10,7 @@ from composer.models import ComposerClassifier from torchvision import datasets, transforms -comet_ml.init(project_name="comet-example-mosaicml-getting-started") +comet_ml.login(project_name="comet-example-mosaicml-getting-started") torch.manual_seed(42) # For replicability data_directory = "./data" diff --git a/integrations/model-training/composer/mosaicml-getting-started/requirements.txt b/integrations/model-training/composer/mosaicml-getting-started/requirements.txt index f3026bf7..e8e8f76b 100644 --- a/integrations/model-training/composer/mosaicml-getting-started/requirements.txt +++ b/integrations/model-training/composer/mosaicml-getting-started/requirements.txt @@ -1,3 +1,3 @@ -comet_ml +comet_ml>=3.44.0 matplotlib mosaicml diff --git a/integrations/model-training/composer/notebooks/comet_composer.ipynb b/integrations/model-training/composer/notebooks/comet_composer.ipynb index 4df9aada..0340d696 100644 --- a/integrations/model-training/composer/notebooks/comet_composer.ipynb +++ b/integrations/model-training/composer/notebooks/comet_composer.ipynb @@ -43,7 +43,7 @@ }, "outputs": [], "source": [ - "%pip install \"composer>=0.16.1\" \"comet_ml>=3.33.10\" matplotlib" + "%pip install -U \"composer>=0.16.1\" \"comet_ml>=3.44.0\" matplotlib" ] }, { @@ -63,7 +63,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-mosaicml-getting-started-notebook\")" + "comet_ml.login(project_name=\"comet-example-mosaicml-getting-started-notebook\")" ] }, { diff --git a/integrations/model-training/deepspeed/deepspeed-cifar/cifar10_deepspeed.py b/integrations/model-training/deepspeed/deepspeed-cifar/cifar10_deepspeed.py index 61159f46..185ef58f 100644 --- a/integrations/model-training/deepspeed/deepspeed-cifar/cifar10_deepspeed.py +++ b/integrations/model-training/deepspeed/deepspeed-cifar/cifar10_deepspeed.py @@ -13,7 +13,7 @@ from deepspeed.moe.utils import split_params_into_different_moe_groups_for_optimizer # Login to Comet if needed -comet_ml.init() +comet_ml.login() def add_argument(): diff --git a/integrations/model-training/deepspeed/deepspeed-cifar/requirements.txt b/integrations/model-training/deepspeed/deepspeed-cifar/requirements.txt index cb019dc1..6a5bacd1 100644 --- a/integrations/model-training/deepspeed/deepspeed-cifar/requirements.txt +++ b/integrations/model-training/deepspeed/deepspeed-cifar/requirements.txt @@ -1,4 +1,4 @@ -comet_ml>=3.39.0 +comet_ml>=3.44.0 deepspeed>=0.14.3 torch torchvision diff --git a/integrations/model-training/deepspeed/notebooks/comet_deepspeed.ipynb b/integrations/model-training/deepspeed/notebooks/comet_deepspeed.ipynb index 9bafdcec..e8f7b62a 100644 --- a/integrations/model-training/deepspeed/notebooks/comet_deepspeed.ipynb +++ b/integrations/model-training/deepspeed/notebooks/comet_deepspeed.ipynb @@ -45,7 +45,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml deepspeed torch torchvision" + "%pip install -U \"comet_ml>=3.44.0\" deepspeed torch torchvision" ] }, { @@ -67,7 +67,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init()" + "comet_ml.login()" ] }, { diff --git a/integrations/model-training/fastai/fastai-hello-world/fastai_hello_world.py b/integrations/model-training/fastai/fastai-hello-world/fastai_hello_world.py index 0cf64ed4..0b46bb5a 100644 --- a/integrations/model-training/fastai/fastai-hello-world/fastai_hello_world.py +++ b/integrations/model-training/fastai/fastai-hello-world/fastai_hello_world.py @@ -19,7 +19,7 @@ EPOCHS = 5 -comet_ml.init(project_name="comet-examples-fastai-hello-world") +comet_ml.login(project_name="comet-examples-fastai-hello-world") experiment = comet_ml.Experiment() path = untar_data(URLs.MNIST_TINY) diff --git a/integrations/model-training/fastai/fastai-hello-world/requirements.txt b/integrations/model-training/fastai/fastai-hello-world/requirements.txt index 944d34f1..25a2bdd2 100644 --- a/integrations/model-training/fastai/fastai-hello-world/requirements.txt +++ b/integrations/model-training/fastai/fastai-hello-world/requirements.txt @@ -1,2 +1,2 @@ -comet_ml>=3.37.0 +comet_ml>=3.44.0 fastai diff --git a/integrations/model-training/fastai/notebooks/fastai_hello_world.ipynb b/integrations/model-training/fastai/notebooks/fastai_hello_world.ipynb index 9f26de8f..2a1f7115 100644 --- a/integrations/model-training/fastai/notebooks/fastai_hello_world.ipynb +++ b/integrations/model-training/fastai/notebooks/fastai_hello_world.ipynb @@ -43,7 +43,7 @@ }, "outputs": [], "source": [ - "%pip install -U fastai comet_ml>=3.37.0" + "%pip install -U fastai comet_ml>=3.44.0" ] }, { @@ -104,7 +104,7 @@ "outputs": [], "source": [ "# Create Comet Experiment\n", - "comet_ml.init(project_name=\"comet-examples-fastai-hello-world-notebook\")\n", + "comet_ml.login(project_name=\"comet-examples-fastai-hello-world-notebook\")\n", "experiment = comet_ml.Experiment()" ] }, diff --git a/integrations/model-training/hugging_face/notebooks/Comet_with_Hugging_Face_Trainer.ipynb b/integrations/model-training/hugging_face/notebooks/Comet_with_Hugging_Face_Trainer.ipynb index d958ee0d..eb4bb797 100644 --- a/integrations/model-training/hugging_face/notebooks/Comet_with_Hugging_Face_Trainer.ipynb +++ b/integrations/model-training/hugging_face/notebooks/Comet_with_Hugging_Face_Trainer.ipynb @@ -42,7 +42,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml torch datasets transformers scikit-learn accelerate" + "%pip install -U \"comet_ml>=3.44.0\" torch datasets transformers scikit-learn accelerate" ] }, { @@ -64,7 +64,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-examples-transfomers-trainer\")" + "comet_ml.login(project_name=\"comet-examples-transfomers-trainer\")" ] }, { diff --git a/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/requirements.txt b/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/requirements.txt index ff7b74dc..ef809fb0 100644 --- a/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/requirements.txt +++ b/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/requirements.txt @@ -1,5 +1,5 @@ accelerate -comet_ml +comet_ml>=3.44.0 pandas scikit-learn torch diff --git a/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/transformers-distilbert-fine-tuning.py b/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/transformers-distilbert-fine-tuning.py index 5eb9ca05..03634bae 100644 --- a/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/transformers-distilbert-fine-tuning.py +++ b/integrations/model-training/hugging_face/transformers-distilbert-fine-tuning/transformers-distilbert-fine-tuning.py @@ -19,7 +19,7 @@ EPOCHS = 100 # Login to Comet if needed -comet_ml.init(project_name="comet-example-transformers-distilbert-fine-tuning") +comet_ml.login(project_name="comet-example-transformers-distilbert-fine-tuning") class Dataset(torch.utils.data.Dataset): diff --git a/integrations/model-training/keras/keras-mnist-dnn/keras-mnist-dnn.py b/integrations/model-training/keras/keras-mnist-dnn/keras-mnist-dnn.py index 3c91a84b..8bbb1526 100644 --- a/integrations/model-training/keras/keras-mnist-dnn/keras-mnist-dnn.py +++ b/integrations/model-training/keras/keras-mnist-dnn/keras-mnist-dnn.py @@ -21,7 +21,7 @@ } # Login to Comet if needed -comet_ml.init() +comet_ml.login() def main(): diff --git a/integrations/model-training/keras/keras-mnist-dnn/requirements.txt b/integrations/model-training/keras/keras-mnist-dnn/requirements.txt index c90ed9b9..36a4d75f 100644 --- a/integrations/model-training/keras/keras-mnist-dnn/requirements.txt +++ b/integrations/model-training/keras/keras-mnist-dnn/requirements.txt @@ -1,4 +1,4 @@ -comet_ml +comet_ml>=3.44.0 matplotlib numpy pillow diff --git a/integrations/model-training/keras/notebooks/Comet_with_Keras.ipynb b/integrations/model-training/keras/notebooks/Comet_with_Keras.ipynb index 684eb4a6..31af6701 100644 --- a/integrations/model-training/keras/notebooks/Comet_with_Keras.ipynb +++ b/integrations/model-training/keras/notebooks/Comet_with_Keras.ipynb @@ -42,7 +42,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml tensorflow numpy" + "%pip install -U \"comet_ml>=3.44.0\" tensorflow numpy" ] }, { @@ -64,7 +64,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-keras-notebook\")" + "comet_ml.login(project_name=\"comet-example-keras-notebook\")" ] }, { diff --git a/integrations/model-training/lightgbm/notebooks/Comet_and_LightGBM.ipynb b/integrations/model-training/lightgbm/notebooks/Comet_and_LightGBM.ipynb index cebffbe8..e8e95274 100644 --- a/integrations/model-training/lightgbm/notebooks/Comet_and_LightGBM.ipynb +++ b/integrations/model-training/lightgbm/notebooks/Comet_and_LightGBM.ipynb @@ -21,7 +21,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml lightgbm pandas scikit-learn" + "%pip install -U \"comet_ml>=3.44.0\" lightgbm pandas scikit-learn" ] }, { @@ -47,7 +47,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-lightgbm\")" + "comet_ml.login(project_name=\"comet-example-lightgbm\")" ] }, { diff --git a/integrations/model-training/mlflow/notebooks/Comet_and_MLFlow.ipynb b/integrations/model-training/mlflow/notebooks/Comet_and_MLFlow.ipynb index dc6bbf9a..8bdf76ca 100644 --- a/integrations/model-training/mlflow/notebooks/Comet_and_MLFlow.ipynb +++ b/integrations/model-training/mlflow/notebooks/Comet_and_MLFlow.ipynb @@ -1,27 +1,13 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "# Install Dependencies" - ], "metadata": { "id": "Ot2sn7Zrzwtt" - } + }, + "source": [ + "# Install Dependencies" + ] }, { "cell_type": "code", @@ -31,52 +17,56 @@ }, "outputs": [], "source": [ - "!pip install comet_ml\n", - "!pip install mlflow" + "%pip install -U \"comet_ml>=3.44.0\" mlflow" ] }, { "cell_type": "markdown", - "source": [ - "# Initialize Comet" - ], "metadata": { "id": "A4aji9dozzbe" - } + }, + "source": [ + "# Initialize Comet" + ] }, { "cell_type": "code", - "source": [ - "import comet_ml\n", - "\n", - "comet_ml.init(project_name=\"comet-mlflow\")" - ], + "execution_count": null, "metadata": { "id": "fTae69M2u-hl" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-examples-mlflow-notebook\")" + ] }, { "cell_type": "markdown", - "source": [ - "# Run MLFlow" - ], "metadata": { "id": "1R-zIOmm2gJP" - } + }, + "source": [ + "# Run MLFlow" + ] }, { "cell_type": "markdown", - "source": [ - "Once Comet is imported at the top of your script, it will automatically log experiment data from your MLFlow runs" - ], "metadata": { "id": "u-a86wIo3mfj" - } + }, + "source": [ + "Once Comet is imported at the top of your script, it will automatically log experiment data from your MLFlow runs" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ljuZ8I_q2ZgX" + }, + "outputs": [], "source": [ "import keras\n", "\n", @@ -154,21 +144,30 @@ "\n", "mlflow.keras.log_model(model, \"model\", registered_model_name=\"Test Model\")\n", "mlflow.end_run()" - ], - "metadata": { - "id": "ljuZ8I_q2ZgX" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", - "source": [], + "execution_count": null, "metadata": { "id": "sVz6748M6R8_" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-training/nerfstudio/notebooks/Comet-NerfStudio_sitcoms3d.ipynb b/integrations/model-training/nerfstudio/notebooks/Comet-NerfStudio_sitcoms3d.ipynb index a445a2da..aadc7efe 100644 --- a/integrations/model-training/nerfstudio/notebooks/Comet-NerfStudio_sitcoms3d.ipynb +++ b/integrations/model-training/nerfstudio/notebooks/Comet-NerfStudio_sitcoms3d.ipynb @@ -62,7 +62,7 @@ "source": [ "# Install nerfstudio\n", "%cd /content/\n", - "%pip install \"nerfstudio>=1.0.0\"" + "%pip install -U \"nerfstudio>=1.0.0\"" ] }, { @@ -122,7 +122,7 @@ "\n", "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-nerfstudio-example\")" + "comet_ml.login(project_name=\"comet-example-nerfstudio-example\")" ] }, { diff --git a/integrations/model-training/prophet/notebooks/Comet_and_Prophet.ipynb b/integrations/model-training/prophet/notebooks/Comet_and_Prophet.ipynb index ae82b133..8a32725b 100644 --- a/integrations/model-training/prophet/notebooks/Comet_and_Prophet.ipynb +++ b/integrations/model-training/prophet/notebooks/Comet_and_Prophet.ipynb @@ -45,7 +45,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml prophet plotly \"numpy<2.0.0\"" + "%pip install -U \"comet_ml>=3.44.0\" prophet plotly \"numpy<2.0.0\"" ] }, { @@ -67,7 +67,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-prophet\")" + "comet_ml.login(project_name=\"comet-example-prophet\")" ] }, { diff --git a/integrations/model-training/pycaret/notebooks/comet_pycaret.ipynb b/integrations/model-training/pycaret/notebooks/comet_pycaret.ipynb index c6a33089..48fede74 100644 --- a/integrations/model-training/pycaret/notebooks/comet_pycaret.ipynb +++ b/integrations/model-training/pycaret/notebooks/comet_pycaret.ipynb @@ -33,7 +33,7 @@ }, "outputs": [], "source": [ - "%pip install -U \"pycaret>=3.0.3\" comet_ml \"numpy==1.23\"" + "%pip install -U \"pycaret>=3.0.3\" \"comet_ml>=3.44.0\" \"numpy==1.23\"" ] }, { @@ -61,7 +61,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-pycaret-notebook\")" + "comet_ml.login(project_name=\"comet-example-pycaret-notebook\")" ] }, { diff --git a/integrations/model-training/pytorch-lightning/notebooks/Comet_and_Pytorch_Lightning.ipynb b/integrations/model-training/pytorch-lightning/notebooks/Comet_and_Pytorch_Lightning.ipynb index 557c0197..e2693556 100644 --- a/integrations/model-training/pytorch-lightning/notebooks/Comet_and_Pytorch_Lightning.ipynb +++ b/integrations/model-training/pytorch-lightning/notebooks/Comet_and_Pytorch_Lightning.ipynb @@ -30,7 +30,7 @@ "id": "pBrcDoZ5q7Rr" }, "source": [ - "# Install Comet" + "# Install Comet and dependencies" ] }, { @@ -41,27 +41,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GZriRwZRsHSa" - }, - "source": [ - "# Install Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "POAGnif7sKUh" - }, - "outputs": [], - "source": [ - "%pip install torch torchvision \"pytorch-lightning<2.0.0\" \"numpy<2.0.0\"" + "%pip install -U \"comet_ml>=3.44.0\" torch torchvision \"pytorch-lightning<2.0.0\" \"numpy<2.0.0\"" ] }, { @@ -83,7 +63,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-examples-pytorch-lightning\")" + "comet_ml.login(project_name=\"comet-examples-pytorch-lightning\")" ] }, { diff --git a/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/pytorch-lightning-optimizer.py b/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/pytorch-lightning-optimizer.py index 1a0c86a4..1654dfb4 100644 --- a/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/pytorch-lightning-optimizer.py +++ b/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/pytorch-lightning-optimizer.py @@ -27,7 +27,7 @@ from pytorch_lightning import LightningModule, Trainer # Login to Comet if needed -comet_ml.init(project_name="comet-example-pytorch-lightning-optimizer") +comet_ml.login(project_name="comet-example-pytorch-lightning-optimizer") class PyTorchLightningModel(LightningModule): diff --git a/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/requirements.txt b/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/requirements.txt index 6e3f55d2..82fcb5d7 100644 --- a/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/requirements.txt +++ b/integrations/model-training/pytorch-lightning/pytorch-lightning-optimizer/requirements.txt @@ -1,4 +1,4 @@ -comet_ml +comet_ml>=3.44.0 pytorch_lightning torch torchvision diff --git a/integrations/model-training/pytorch/notebooks/Comet_Pytorch_Tensorboard.ipynb b/integrations/model-training/pytorch/notebooks/Comet_Pytorch_Tensorboard.ipynb index acc5ea8f..8f8ac0df 100644 --- a/integrations/model-training/pytorch/notebooks/Comet_Pytorch_Tensorboard.ipynb +++ b/integrations/model-training/pytorch/notebooks/Comet_Pytorch_Tensorboard.ipynb @@ -45,7 +45,7 @@ }, "outputs": [], "source": [ - "%pip install \"comet_ml>=3.31.15\" \"matplotlib>=1.1.0\" numpy tensorboard torch torchvision" + "%pip install -U \"comet_ml>=3.44.0\" \"matplotlib>=1.1.0\" numpy tensorboard torch torchvision" ] }, { @@ -67,7 +67,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-pytorch-tensorboard-notebook\")" + "comet_ml.login(project_name=\"comet-example-pytorch-tensorboard-notebook\")" ] }, { diff --git a/integrations/model-training/pytorch/notebooks/Comet_Pytorch_TensorboardX.ipynb b/integrations/model-training/pytorch/notebooks/Comet_Pytorch_TensorboardX.ipynb index 819ad2e4..b25bea6b 100644 --- a/integrations/model-training/pytorch/notebooks/Comet_Pytorch_TensorboardX.ipynb +++ b/integrations/model-training/pytorch/notebooks/Comet_Pytorch_TensorboardX.ipynb @@ -60,7 +60,7 @@ "outputs": [], "source": [ "# Temporarily use Pillow 9 until tensorboardX fix compatbility\n", - "%pip install comet_ml tensorboardX torch torchvision matplotlib \"Pillow<10.0.0\"" + "%pip install -U \"comet_ml>=3.44.0\" tensorboardX torch torchvision matplotlib \"Pillow<10.0.0\"" ] }, { @@ -117,7 +117,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-pytorch-tensorboardX\")" + "comet_ml.login(project_name=\"comet-example-pytorch-tensorboardX\")" ] }, { diff --git a/integrations/model-training/pytorch/notebooks/Comet_and_Pytorch.ipynb b/integrations/model-training/pytorch/notebooks/Comet_and_Pytorch.ipynb index ed0968e8..a97e766a 100644 --- a/integrations/model-training/pytorch/notebooks/Comet_and_Pytorch.ipynb +++ b/integrations/model-training/pytorch/notebooks/Comet_and_Pytorch.ipynb @@ -48,7 +48,7 @@ }, "outputs": [], "source": [ - "%pip install \"comet_ml>=3.38.0\" torch torchvision tqdm" + "%pip install -U \"comet_ml>=3.44.0\" torch torchvision tqdm" ] }, { @@ -71,7 +71,7 @@ "import comet_ml\n", "from comet_ml.integration.pytorch import watch\n", "\n", - "comet_ml.init(project_name=\"comet-example-pytorch-notebook\")" + "comet_ml.login(project_name=\"comet-example-pytorch-notebook\")" ] }, { diff --git a/integrations/model-training/pytorch/notebooks/Histogram_Logging_Pytorch.ipynb b/integrations/model-training/pytorch/notebooks/Histogram_Logging_Pytorch.ipynb index 0b33149c..41ce351b 100644 --- a/integrations/model-training/pytorch/notebooks/Histogram_Logging_Pytorch.ipynb +++ b/integrations/model-training/pytorch/notebooks/Histogram_Logging_Pytorch.ipynb @@ -48,7 +48,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml torch torchvision tqdm" + "%pip install -U \"comet_ml>=3.44.0\" torch torchvision tqdm" ] }, { @@ -70,7 +70,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-pytorch-histogram-logging\")" + "comet_ml.login(project_name=\"comet-example-pytorch-histogram-logging\")" ] }, { diff --git a/integrations/model-training/pytorch/pytorch-tensorboard/pytorch-tensorboard-example.py b/integrations/model-training/pytorch/pytorch-tensorboard/pytorch-tensorboard-example.py index 5b45b3b3..d701df50 100644 --- a/integrations/model-training/pytorch/pytorch-tensorboard/pytorch-tensorboard-example.py +++ b/integrations/model-training/pytorch/pytorch-tensorboard/pytorch-tensorboard-example.py @@ -20,7 +20,7 @@ } -comet_ml.init() +comet_ml.login() experiment = comet_ml.Experiment(project_name="comet-example-pytorch-tensorboard") experiment.log_parameters(hyper_params) diff --git a/integrations/model-training/pytorch/pytorch-tensorboard/requirements.txt b/integrations/model-training/pytorch/pytorch-tensorboard/requirements.txt index 29d35d80..e1321582 100644 --- a/integrations/model-training/pytorch/pytorch-tensorboard/requirements.txt +++ b/integrations/model-training/pytorch/pytorch-tensorboard/requirements.txt @@ -1,4 +1,4 @@ -comet_ml>=3.31.15 +comet_ml>=3.44.0 matplotlib>=1.1.0 numpy tensorboard diff --git a/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_keras.ipynb b/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_keras.ipynb index 2d51217a..6f171b5e 100644 --- a/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_keras.ipynb +++ b/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_keras.ipynb @@ -41,7 +41,7 @@ }, "outputs": [], "source": [ - "%pip install -U comet_ml \"ray[air]>=2.1.0\" \"keras<3\" \"tensorflow<2.16.0\"" + "%pip install -U \"comet_ml>=3.44.0\" \"ray[air]>=2.1.0\" \"keras<3\" \"tensorflow<2.16.0\"" ] }, { @@ -63,7 +63,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-ray-train-keras\")" + "comet_ml.login(project_name=\"comet-example-ray-train-keras\")" ] }, { diff --git a/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_xgboost.ipynb b/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_xgboost.ipynb index 7fb9745c..b37ba11c 100644 --- a/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_xgboost.ipynb +++ b/integrations/model-training/ray-train/notebooks/Comet_with_ray_train_xgboost.ipynb @@ -42,7 +42,7 @@ "outputs": [], "source": [ "# XGBoost is pinned because of https://github.com/ray-project/ray/issues/46476\n", - "%pip install -U comet_ml \"ray[air]>=2.1.0\" xgboost_ray \"pandas!=2.2.0\" \"xgboost!=2.1.0\"" + "%pip install -U \"comet_ml>=3.44.0\" \"ray[air]>=2.1.0\" xgboost_ray \"pandas!=2.2.0\" \"xgboost!=2.1.0\"" ] }, { @@ -65,7 +65,7 @@ "import comet_ml\n", "import comet_ml.integration.ray\n", "\n", - "comet_ml.init(project_name=\"comet-example-ray-train-xgboost\")" + "comet_ml.login(project_name=\"comet-example-ray-train-xgboost\")" ] }, { diff --git a/integrations/model-training/sagemaker/log_completed_sagemaker_runs/train_mnist.ipynb b/integrations/model-training/sagemaker/log_completed_sagemaker_runs/train_mnist.ipynb index 41fbd79d..ef597b45 100644 --- a/integrations/model-training/sagemaker/log_completed_sagemaker_runs/train_mnist.ipynb +++ b/integrations/model-training/sagemaker/log_completed_sagemaker_runs/train_mnist.ipynb @@ -29,7 +29,7 @@ }, "outputs": [], "source": [ - "!pip install comet_ml" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -75,7 +75,9 @@ "from torchvision.datasets import MNIST\n", "from torchvision import transforms\n", "\n", - "MNIST.mirrors = [\"https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/\"]\n", + "MNIST.mirrors = [\n", + " \"https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/\"\n", + "]\n", "\n", "MNIST(\n", " \"data\",\n", @@ -106,12 +108,7 @@ "AWS_INSTANCE_TYPE = \"ml.c5.2xlarge\"\n", "AWS_INSTANCE_COUNT = 2\n", "\n", - "HYPERPARAMETERS = {\n", - " \"epochs\": 5,\n", - " \"batch-size\": 32,\n", - " \"log-interval\": 1,\n", - " \"backend\": \"gloo\" \n", - "}" + "HYPERPARAMETERS = {\"epochs\": 5, \"batch-size\": 32, \"log-interval\": 1, \"backend\": \"gloo\"}" ] }, { @@ -140,10 +137,10 @@ " instance_type=AWS_INSTANCE_TYPE,\n", " hyperparameters=HYPERPARAMETERS,\n", " metric_definitions=[\n", - " {'Name':'train:loss', 'Regex':'Train Loss: (.*?);'},\n", - " {'Name':'test:loss', 'Regex':'Test Average Loss: (.*?);'},\n", - " {'Name':'test:accuracy', 'Regex':'Test Accuracy: (.*?)%;'}\n", - " ]\n", + " {\"Name\": \"train:loss\", \"Regex\": \"Train Loss: (.*?);\"},\n", + " {\"Name\": \"test:loss\", \"Regex\": \"Test Average Loss: (.*?);\"},\n", + " {\"Name\": \"test:accuracy\", \"Regex\": \"Test Accuracy: (.*?)%;\"},\n", + " ],\n", ")" ] }, @@ -185,7 +182,7 @@ "COMET_WORKSPACE = \"team-comet-ml\"\n", "COMET_PROJECT_NAME = \"sagemaker-pytorch-mnist\"\n", "\n", - "comet_ml.init(workspace=COMET_WORKSPACE, project_name=COMET_PROJECT_NAME)" + "comet_ml.login(workspace=COMET_WORKSPACE, project_name=COMET_PROJECT_NAME)" ] }, { @@ -203,17 +200,20 @@ }, "outputs": [], "source": [ - "from comet_ml.integration.sagemaker import log_sagemaker_training_job_v1, log_sagemaker_training_job_by_name_v1\n", + "from comet_ml.integration.sagemaker import (\n", + " log_sagemaker_training_job_v1,\n", + " log_sagemaker_training_job_by_name_v1,\n", + ")\n", "\n", "COMET_API_KEY = comet_ml.config.get_config()[\"comet.api_key\"]\n", "COMET_WORKSPACE = comet_ml.config.get_config()[\"comet.workspace\"]\n", - "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", + "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", "\n", "log_sagemaker_training_job_v1(\n", - " estimator, \n", - " api_key=COMET_API_KEY, \n", - " workspace=COMET_WORKSPACE, \n", - " project_name=COMET_PROJECT_NAME\n", + " estimator,\n", + " api_key=COMET_API_KEY,\n", + " workspace=COMET_WORKSPACE,\n", + " project_name=COMET_PROJECT_NAME,\n", ")" ] }, @@ -236,10 +236,10 @@ "outputs": [], "source": [ "log_sagemaker_training_job_by_name_v1(\n", - " estimator.latest_training_job.job_name, \n", - " api_key=COMET_API_KEY, \n", - " workspace=COMET_WORKSPACE, \n", - " project_name=COMET_PROJECT_NAME\n", + " estimator.latest_training_job.job_name,\n", + " api_key=COMET_API_KEY,\n", + " workspace=COMET_WORKSPACE,\n", + " project_name=COMET_PROJECT_NAME,\n", ")" ] } diff --git a/integrations/model-training/sagemaker/log_custom_scripts/huggingface-text-classification/train_text_classification.ipynb b/integrations/model-training/sagemaker/log_custom_scripts/huggingface-text-classification/train_text_classification.ipynb index d201662e..709a048a 100644 --- a/integrations/model-training/sagemaker/log_custom_scripts/huggingface-text-classification/train_text_classification.ipynb +++ b/integrations/model-training/sagemaker/log_custom_scripts/huggingface-text-classification/train_text_classification.ipynb @@ -29,18 +29,7 @@ }, "outputs": [], "source": [ - "!pip install comet_ml" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "!pip install \"sagemaker>=2.140.0\" \"transformers==4.26.1\" \"datasets[s3]\" \"boto3\" --upgrade" + "%pip install -U \"comet_ml>=3.44.0\" \"sagemaker>=2.140.0\" \"transformers==4.26.1\" \"datasets[s3]\" \"boto3\"" ] }, { @@ -62,7 +51,7 @@ "\n", "COMET_PROJECT_NAME = \"comet-example-sagemaker-custom-transformers-text-classification\"\n", "\n", - "comet_ml.init(project_name=COMET_PROJECT_NAME)" + "comet_ml.login(project_name=COMET_PROJECT_NAME)" ] }, { @@ -83,7 +72,7 @@ "import sagemaker\n", "\n", "sess = sagemaker.Session()\n", - "prefix = 'sagemaker/DEMO-huggingface-imdb'\n", + "prefix = \"sagemaker/DEMO-huggingface-imdb\"\n", "bucket = sess.default_bucket()\n", "role = sagemaker.get_execution_role()" ] @@ -107,40 +96,41 @@ "from transformers import AutoTokenizer\n", "\n", "# tokenizer used in preprocessing\n", - "tokenizer_name = 'distilbert-base-uncased'\n", + "tokenizer_name = \"distilbert-base-uncased\"\n", "\n", "# dataset used\n", - "dataset_name = 'imdb'\n", + "dataset_name = \"imdb\"\n", "\n", "# download tokenizer\n", "tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)\n", "\n", "# tokenizer helper function\n", "def tokenize(batch):\n", - " return tokenizer(batch['text'], padding='max_length', truncation=True)\n", + " return tokenizer(batch[\"text\"], padding=\"max_length\", truncation=True)\n", + "\n", "\n", "# load dataset\n", - "train_dataset, test_dataset = load_dataset('imdb', split=['train', 'test'])\n", + "train_dataset, test_dataset = load_dataset(\"imdb\", split=[\"train\", \"test\"])\n", "\n", "train_dataset = test_dataset.shuffle().select(range(1000))\n", - "test_dataset = test_dataset.shuffle().select(range(100)) \n", + "test_dataset = test_dataset.shuffle().select(range(100))\n", "\n", "# tokenize dataset\n", "train_dataset = train_dataset.map(tokenize, batched=True)\n", "test_dataset = test_dataset.map(tokenize, batched=True)\n", "\n", "# set format for pytorch\n", - "train_dataset = train_dataset.rename_column(\"label\", \"labels\")\n", - "train_dataset.set_format('torch', columns=['input_ids', 'attention_mask', 'labels'])\n", + "train_dataset = train_dataset.rename_column(\"label\", \"labels\")\n", + "train_dataset.set_format(\"torch\", columns=[\"input_ids\", \"attention_mask\", \"labels\"])\n", "test_dataset = test_dataset.rename_column(\"label\", \"labels\")\n", - "test_dataset.set_format('torch', columns=['input_ids', 'attention_mask', 'labels'])\n", + "test_dataset.set_format(\"torch\", columns=[\"input_ids\", \"attention_mask\", \"labels\"])\n", "\n", "# save train_dataset to s3\n", - "training_input_path = f's3://{sess.default_bucket()}/{prefix}/train'\n", + "training_input_path = f\"s3://{sess.default_bucket()}/{prefix}/train\"\n", "train_dataset.save_to_disk(training_input_path)\n", "\n", "# save test_dataset to s3\n", - "test_input_path = f's3://{sess.default_bucket()}/{prefix}/test'\n", + "test_input_path = f\"s3://{sess.default_bucket()}/{prefix}/test\"\n", "test_dataset.save_to_disk(test_input_path)" ] }, @@ -166,7 +156,7 @@ " \"epochs\": 1,\n", " \"train_batch_size\": 32,\n", " \"log-interval\": 1,\n", - " \"model_name\": \"distilbert-base-uncased\" \n", + " \"model_name\": \"distilbert-base-uncased\",\n", "}" ] }, @@ -188,22 +178,22 @@ "from sagemaker.huggingface import HuggingFace\n", "\n", "COMET_API_KEY = comet_ml.config.get_config()[\"comet.api_key\"]\n", - "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", + "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", "\n", "estimator = HuggingFace(\n", " source_dir=\"src\",\n", " entry_point=\"text_classification.py\",\n", " role=role,\n", - " transformers_version='4.26',\n", - " pytorch_version='1.13',\n", - " py_version='py39',\n", + " transformers_version=\"4.26\",\n", + " pytorch_version=\"1.13\",\n", + " py_version=\"py39\",\n", " instance_count=AWS_INSTANCE_COUNT,\n", " instance_type=AWS_INSTANCE_TYPE,\n", " hyperparameters=HYPERPARAMETERS,\n", " environment={\n", - " \"COMET_API_KEY\": COMET_API_KEY, \n", - " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME \n", - " }\n", + " \"COMET_API_KEY\": COMET_API_KEY,\n", + " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME,\n", + " },\n", ")" ] }, @@ -222,7 +212,7 @@ }, "outputs": [], "source": [ - "estimator.fit({'train': training_input_path, 'test': test_input_path})" + "estimator.fit({\"train\": training_input_path, \"test\": test_input_path})" ] } ], diff --git a/integrations/model-training/sagemaker/log_custom_scripts/pytorch-mnist/train_mnist.ipynb b/integrations/model-training/sagemaker/log_custom_scripts/pytorch-mnist/train_mnist.ipynb index ceb59653..f022056a 100644 --- a/integrations/model-training/sagemaker/log_custom_scripts/pytorch-mnist/train_mnist.ipynb +++ b/integrations/model-training/sagemaker/log_custom_scripts/pytorch-mnist/train_mnist.ipynb @@ -30,7 +30,7 @@ }, "outputs": [], "source": [ - "!pip install comet_ml" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -50,7 +50,7 @@ "import comet_ml\n", "\n", "COMET_PROJECT_NAME = \"comet-example-sagemaker-custom-pytorch-mnist\"\n", - "comet_ml.init(project_name=COMET_PROJECT_NAME)" + "comet_ml.login(project_name=COMET_PROJECT_NAME)" ] }, { @@ -96,7 +96,9 @@ "from torchvision.datasets import MNIST\n", "from torchvision import transforms\n", "\n", - "MNIST.mirrors = [\"https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/\"]\n", + "MNIST.mirrors = [\n", + " \"https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/\"\n", + "]\n", "\n", "MNIST(\n", " \"data\",\n", @@ -127,11 +129,7 @@ "AWS_INSTANCE_TYPE = \"ml.c5.2xlarge\"\n", "AWS_INSTANCE_COUNT = 1\n", "\n", - "HYPERPARAMETERS = {\n", - " \"epochs\": 5,\n", - " \"batch-size\": 32,\n", - " \"log-interval\": 1\n", - "}" + "HYPERPARAMETERS = {\"epochs\": 5, \"batch-size\": 32, \"log-interval\": 1}" ] }, { @@ -152,7 +150,7 @@ "from sagemaker.pytorch import PyTorch\n", "\n", "COMET_API_KEY = comet_ml.config.get_config()[\"comet.api_key\"]\n", - "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", + "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", "\n", "estimator = PyTorch(\n", " source_dir=\"src\",\n", @@ -164,14 +162,14 @@ " instance_type=AWS_INSTANCE_TYPE,\n", " hyperparameters=HYPERPARAMETERS,\n", " metric_definitions=[\n", - " {'Name':'train:loss', 'Regex':'Train Loss: (.*?);'},\n", - " {'Name':'test:loss', 'Regex':'Test Average Loss: (.*?);'},\n", - " {'Name':'test:accuracy', 'Regex':'Test Accuracy: (.*?)%;'}\n", + " {\"Name\": \"train:loss\", \"Regex\": \"Train Loss: (.*?);\"},\n", + " {\"Name\": \"test:loss\", \"Regex\": \"Test Average Loss: (.*?);\"},\n", + " {\"Name\": \"test:accuracy\", \"Regex\": \"Test Accuracy: (.*?)%;\"},\n", " ],\n", " environment={\n", - " \"COMET_API_KEY\": COMET_API_KEY, \n", - " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME\n", - " }\n", + " \"COMET_API_KEY\": COMET_API_KEY,\n", + " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME,\n", + " },\n", ")" ] }, diff --git a/integrations/model-training/sagemaker/log_custom_scripts/tensorflow-mnist/train_mnist.ipynb b/integrations/model-training/sagemaker/log_custom_scripts/tensorflow-mnist/train_mnist.ipynb index 2f44cea8..67abb47a 100644 --- a/integrations/model-training/sagemaker/log_custom_scripts/tensorflow-mnist/train_mnist.ipynb +++ b/integrations/model-training/sagemaker/log_custom_scripts/tensorflow-mnist/train_mnist.ipynb @@ -15,7 +15,7 @@ }, "outputs": [], "source": [ - "!pip install comet_ml" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -34,9 +34,9 @@ "outputs": [], "source": [ "import comet_ml\n", - " \n", + "\n", "PROJECT_NAME = \"comet-example-sagemaker-tensorflow-custom-mnist\"\n", - "comet_ml.init(project_name=PROJECT_NAME)" + "comet_ml.login(project_name=PROJECT_NAME)" ] }, { @@ -83,17 +83,22 @@ "import keras\n", "import numpy as np\n", "from keras.datasets import mnist\n", + "\n", "(x_train, y_train), (x_val, y_val) = mnist.load_data()\n", "\n", - "os.makedirs(\"./data\", exist_ok = True)\n", + "os.makedirs(\"./data\", exist_ok=True)\n", "\n", - "np.savez('./data/training', image=x_train, label=y_train)\n", - "np.savez('./data/validation', image=x_val, label=y_val)\n", + "np.savez(\"./data/training\", image=x_train, label=y_train)\n", + "np.savez(\"./data/validation\", image=x_val, label=y_val)\n", "\n", - "prefix = 'keras-mnist'\n", + "prefix = \"keras-mnist\"\n", "\n", - "training_input_path = sagemaker_session.upload_data('data/training.npz', key_prefix=prefix+'/training')\n", - "validation_input_path = sagemaker_session.upload_data('data/validation.npz', key_prefix=prefix+'/validation')" + "training_input_path = sagemaker_session.upload_data(\n", + " \"data/training.npz\", key_prefix=prefix + \"/training\"\n", + ")\n", + "validation_input_path = sagemaker_session.upload_data(\n", + " \"data/validation.npz\", key_prefix=prefix + \"/validation\"\n", + ")" ] }, { @@ -114,10 +119,7 @@ "AWS_INSTANCE_TYPE = \"ml.c5.2xlarge\"\n", "AWS_INSTANCE_COUNT = 1\n", "\n", - "HYPERPARAMETERS = {\n", - " \"epochs\": 1,\n", - " \"batch-size\": 32\n", - "}" + "HYPERPARAMETERS = {\"epochs\": 1, \"batch-size\": 32}" ] }, { @@ -138,7 +140,7 @@ "from sagemaker.tensorflow import TensorFlow\n", "\n", "COMET_API_KEY = comet_ml.config.get_config()[\"comet.api_key\"]\n", - "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", + "COMET_PROJECT_NAME = comet_ml.config.get_config()[\"comet.project_name\"]\n", "\n", "estimator = TensorFlow(\n", " source_dir=\"src\",\n", @@ -151,8 +153,8 @@ " py_version=\"py37\",\n", " environment={\n", " \"COMET_API_KEY\": COMET_API_KEY,\n", - " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME\n", - " }\n", + " \"COMET_PROJECT_NAME\": COMET_PROJECT_NAME,\n", + " },\n", ")" ] }, @@ -171,7 +173,7 @@ }, "outputs": [], "source": [ - "estimator.fit({'training': training_input_path, 'validation': validation_input_path})" + "estimator.fit({\"training\": training_input_path, \"validation\": validation_input_path})" ] } ], diff --git a/integrations/model-training/scikit-learn/notebooks/Comet_with_Scikit_Learn.ipynb b/integrations/model-training/scikit-learn/notebooks/Comet_with_Scikit_Learn.ipynb index 9ad0654e..6da30833 100644 --- a/integrations/model-training/scikit-learn/notebooks/Comet_with_Scikit_Learn.ipynb +++ b/integrations/model-training/scikit-learn/notebooks/Comet_with_Scikit_Learn.ipynb @@ -1,47 +1,33 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "# Install Comet" - ], "metadata": { "id": "DwWec6YKT28S" - } + }, + "source": [ + "# Install Comet" + ] }, { "cell_type": "code", - "source": [ - "!pip install comet_ml --quiet" - ], + "execution_count": null, "metadata": { "id": "V1sdPf1DT1VL" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "%pip install -U \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", - "source": [ - "# Initialize Comet" - ], "metadata": { "id": "86DWeNq3T7tb" - } + }, + "source": [ + "# Initialize Comet" + ] }, { "cell_type": "code", @@ -53,20 +39,25 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-sklearn-example\")" + "comet_ml.login(project_name=\"comet-sklearn-example\")" ] }, { "cell_type": "markdown", - "source": [ - "# Import Dependencies" - ], "metadata": { "id": "8C-q1JuiUItU" - } + }, + "source": [ + "# Import Dependencies" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5AIiw6rAUEWL" + }, + "outputs": [], "source": [ "import numpy as np\n", "from sklearn.datasets import load_breast_cancer\n", @@ -75,24 +66,24 @@ "from sklearn.metrics import f1_score, precision_score, recall_score, confusion_matrix\n", "\n", "random_state = 42" - ], - "metadata": { - "id": "5AIiw6rAUEWL" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Define Model Evaluation Function" - ], "metadata": { "id": "4MzBGJhdYP8T" - } + }, + "source": [ + "# Define Model Evaluation Function" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zk6C5CJqYVXS" + }, + "outputs": [], "source": [ "def evaluate(y_test, y_pred):\n", " return {\n", @@ -100,90 +91,83 @@ " \"precision\": precision_score(y_test, y_pred),\n", " \"recall\": recall_score(y_test, y_pred),\n", " }" - ], - "metadata": { - "id": "zk6C5CJqYVXS" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Create an Experiment" - ], "metadata": { "id": "1U-IL7ZvXEmy" - } + }, + "source": [ + "# Create an Experiment" + ] }, { "cell_type": "code", - "source": [ - "experiment = comet_ml.Experiment()" - ], + "execution_count": null, "metadata": { "id": "maCrhWVZXGLD" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "experiment = comet_ml.Experiment()" + ] }, { "cell_type": "markdown", - "source": [ - "# Load Data" - ], "metadata": { "id": "fpBNdj3rUOn2" - } + }, + "source": [ + "# Load Data" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "P59UYF7XUQmP" + }, + "outputs": [], "source": [ "cancer = load_breast_cancer()\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " cancer.data, cancer.target, stratify=cancer.target, random_state=random_state\n", ")" - ], - "metadata": { - "id": "P59UYF7XUQmP" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Initialize Model" - ], "metadata": { "id": "fmEAnOXpWmn7" - } + }, + "source": [ + "# Initialize Model" + ] }, { "cell_type": "code", - "source": [ - "clf = RandomForestClassifier()" - ], + "execution_count": null, "metadata": { "id": "6bf79F-ZWgfF" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "clf = RandomForestClassifier()" + ] }, { "cell_type": "markdown", - "source": [ - "# Fit Model" - ], "metadata": { "id": "vGUJ0peiWsUK" - } + }, + "source": [ + "# Fit Model" + ] }, { "cell_type": "code", - "source": [ - "clf.fit(X_train, y_train)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -191,86 +175,102 @@ "id": "pmLtGXIoWoYR", "outputId": "196ef4cb-cbd7-4608-9886-4473045239c5" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "LogisticRegression()" ] }, + "execution_count": 18, "metadata": {}, - "execution_count": 18 + "output_type": "execute_result" } + ], + "source": [ + "clf.fit(X_train, y_train)" ] }, { "cell_type": "markdown", - "source": [ - "# Log Train Metrics" - ], "metadata": { "id": "WvDfx8ADXSLr" - } + }, + "source": [ + "# Log Train Metrics" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "okjZN0L0XUQX" + }, + "outputs": [], "source": [ "y_train_pred = clf.predict(X_train)\n", "with experiment.train():\n", " metrics = evaluate(y_train, y_train_pred)\n", " experiment.log_metrics(metrics)" - ], - "metadata": { - "id": "okjZN0L0XUQX" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Log Test Metrics" - ], "metadata": { "id": "N3NMQxaZWx-A" - } + }, + "source": [ + "# Log Test Metrics" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ouaSnKKuWwFR" + }, + "outputs": [], "source": [ "y_test_pred = clf.predict(X_test)\n", "\n", "with experiment.test():\n", " metrics = evaluate(y_test, y_test_pred)\n", " experiment.log_metrics(metrics)" - ], - "metadata": { - "id": "ouaSnKKuWwFR" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# End Experiment" - ], "metadata": { "id": "RCPJqltgZAlg" - } + }, + "source": [ + "# End Experiment" + ] }, { "cell_type": "code", - "source": [ - "experiment.end()" - ], + "execution_count": null, "metadata": { "id": "lYzPnSz3ZBZV" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "experiment.end()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-training/scikit-learn/sklearn-classification-example/comet-scikit-classification-example.py b/integrations/model-training/scikit-learn/sklearn-classification-example/comet-scikit-classification-example.py index e1fe754b..680003d9 100644 --- a/integrations/model-training/scikit-learn/sklearn-classification-example/comet-scikit-classification-example.py +++ b/integrations/model-training/scikit-learn/sklearn-classification-example/comet-scikit-classification-example.py @@ -9,7 +9,7 @@ from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.preprocessing import StandardScaler -comet_ml.init() +comet_ml.login() experiment = comet_ml.Experiment( project_name="comet-example-scikit-learn-classification" diff --git a/integrations/model-training/scikit-learn/sklearn-classification-example/requirements.txt b/integrations/model-training/scikit-learn/sklearn-classification-example/requirements.txt index aa9d2002..38a16d3e 100644 --- a/integrations/model-training/scikit-learn/sklearn-classification-example/requirements.txt +++ b/integrations/model-training/scikit-learn/sklearn-classification-example/requirements.txt @@ -1,2 +1,2 @@ -comet_ml>=3.32.9 +comet_ml>=3.44.0 scikit-learn diff --git a/integrations/model-training/scikit-learn/sklearn-model-saving-example/requirements.txt b/integrations/model-training/scikit-learn/sklearn-model-saving-example/requirements.txt index 24da2ec6..18d2e1b7 100644 --- a/integrations/model-training/scikit-learn/sklearn-model-saving-example/requirements.txt +++ b/integrations/model-training/scikit-learn/sklearn-model-saving-example/requirements.txt @@ -1,3 +1,3 @@ cloudpickle -comet_ml>=3.32.9 +comet_ml>=3.44.0 scikit_learn diff --git a/integrations/model-training/scikit-learn/sklearn-model-saving-example/sklearn-model-saving-example.py b/integrations/model-training/scikit-learn/sklearn-model-saving-example/sklearn-model-saving-example.py index 85a88a89..6b406be8 100644 --- a/integrations/model-training/scikit-learn/sklearn-model-saving-example/sklearn-model-saving-example.py +++ b/integrations/model-training/scikit-learn/sklearn-model-saving-example/sklearn-model-saving-example.py @@ -14,7 +14,7 @@ # Login to comet and create an Experiment -comet_ml.init() +comet_ml.login() experiment = comet_ml.Experiment( project_name="comet-example-scikit-learn-model-saving-example" diff --git a/integrations/model-training/scikit-learn/sklearn-nlp-example/comet-scikit-nlp-example.py b/integrations/model-training/scikit-learn/sklearn-nlp-example/comet-scikit-nlp-example.py index 58f80cb4..79a66552 100644 --- a/integrations/model-training/scikit-learn/sklearn-nlp-example/comet-scikit-nlp-example.py +++ b/integrations/model-training/scikit-learn/sklearn-nlp-example/comet-scikit-nlp-example.py @@ -8,7 +8,7 @@ from sklearn.metrics import accuracy_score from sklearn.pipeline import Pipeline -comet_ml.init() +comet_ml.login() experiment = comet_ml.Experiment(project_name="comet-example-scikit-learn-nlp") diff --git a/integrations/model-training/scikit-learn/sklearn-nlp-example/requirements.txt b/integrations/model-training/scikit-learn/sklearn-nlp-example/requirements.txt index aa9d2002..38a16d3e 100644 --- a/integrations/model-training/scikit-learn/sklearn-nlp-example/requirements.txt +++ b/integrations/model-training/scikit-learn/sklearn-nlp-example/requirements.txt @@ -1,2 +1,2 @@ -comet_ml>=3.32.9 +comet_ml>=3.44.0 scikit-learn diff --git a/integrations/model-training/spark-nlp/notebooks/Comet_SparkNLP.ipynb b/integrations/model-training/spark-nlp/notebooks/Comet_SparkNLP.ipynb index 8a44c5f2..c0ef28e3 100644 --- a/integrations/model-training/spark-nlp/notebooks/Comet_SparkNLP.ipynb +++ b/integrations/model-training/spark-nlp/notebooks/Comet_SparkNLP.ipynb @@ -1,20 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "toc_visible": true, - "machine_shape": "hm" - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", @@ -50,39 +34,27 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "L2ye-bu7yeTJ" }, + "outputs": [], "source": [ "# This is only to setup PySpark and Spark NLP on Colab\n", "!wget http://setup.johnsnowlabs.com/colab.sh -O - | bash" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", - "source": [ - "# Install Spark NLP Display for visualization\n", - "%pip install spark-nlp-display" - ], + "execution_count": null, "metadata": { "id": "XKbZHYav_Ond" }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", + "outputs": [], "source": [ - "# Installing Comet\n", - "%pip install comet_ml" - ], - "metadata": { - "id": "sXCTHd9N_QWx" - }, - "execution_count": null, - "outputs": [] + "# Install Spark NLP Display for visualization and Comet for login\n", + "%pip install -U spark-nlp-display \"comet_ml>=3.44.0\"" + ] }, { "cell_type": "markdown", @@ -95,9 +67,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "hukcCcW17kIx" }, + "outputs": [], "source": [ "# Import Spark NLP\n", "import sparknlp\n", @@ -114,9 +88,7 @@ "# Import Comet\n", "import comet_ml\n", "from sparknlp.logging.comet import CometLogger" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -138,14 +110,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "W6uDqwwTzTNY" }, + "outputs": [], "source": [ - "comet_ml.init(project_name=\"comet-example-sparknlp\")" - ], - "execution_count": null, - "outputs": [] + "comet_ml.login(project_name=\"comet-example-sparknlp\")" + ] }, { "cell_type": "markdown", @@ -176,14 +148,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "6ogPNh7zLR4B" }, + "outputs": [], "source": [ "OUTPUT_LOG_PATH = \"./run\"" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -196,14 +168,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "i0dpw910rDkJ" }, + "outputs": [], "source": [ "logger = CometLogger()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -216,14 +188,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "SYr7ho0LRefi" }, + "outputs": [], "source": [ "!curl -O 'https://s3.amazonaws.com/auxdata.johnsnowlabs.com/public/resources/en/classifier-dl/toxic_comments/toxic_train.snappy.parquet'" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -236,14 +208,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "SuAnuxj5Rmee" }, + "outputs": [], "source": [ "trainDataset = spark.read.parquet(\"toxic_train.snappy.parquet\").repartition(120)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -256,9 +228,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "37B1olK_Iy_C" }, + "outputs": [], "source": [ "# Let's use shrink to remove new lines in the comments\n", "document = (\n", @@ -293,9 +267,7 @@ " .setOutputLogsPath(OUTPUT_LOG_PATH)\n", " .setValidationSplit(0.1)\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -328,25 +300,25 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "thz1LBc0ES0a" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"charts\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "EncrR31RHmtH" }, + "outputs": [], "source": [ "logger.monitor(OUTPUT_LOG_PATH, multiClassifier)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -359,15 +331,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "WFujeSMH44y5" }, + "outputs": [], "source": [ "pipeline = Pipeline(stages=[document, use, multiClassifier])\n", "model = pipeline.fit(trainDataset)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -389,40 +361,40 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "FecUrluUJxLT" }, + "outputs": [], "source": [ "!ls ./run" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "-oDkX9RtMo1f" }, + "outputs": [], "source": [ "import glob\n", "\n", "logger = CometLogger()\n", "log_file = glob.glob(\"./run/MultiClassifierDLApproach_*.log\")\n", "logger.log_completed_run(log_file[0])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "2s7O9e_IMvcg" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"charts\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -446,64 +418,66 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "egi4u_jTOp_I" }, + "outputs": [], "source": [ "logger = CometLogger()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nbayBf41Nd55" }, + "outputs": [], "source": [ "!curl -O 'https://s3.amazonaws.com/auxdata.johnsnowlabs.com/public/resources/en/classifier-dl/toxic_comments/toxic_test.snappy.parquet'" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nBXOhlgUN0ju" }, + "outputs": [], "source": [ "testDataset = spark.read.parquet(\"/content/toxic_test.snappy.parquet\").repartition(10)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "iIf9YDSt-QT9" }, + "outputs": [], "source": [ "prediction = model.transform(testDataset)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "4FerI_GeJT-Y" }, + "outputs": [], "source": [ "preds_df = prediction.select(\"labels\", \"category.result\").toPandas()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "GQ-o2FDwE9ba" }, + "outputs": [], "source": [ "from sklearn.preprocessing import MultiLabelBinarizer\n", "from sklearn.metrics import classification_report\n", @@ -512,43 +486,41 @@ "\n", "y_true = mlb.fit_transform(preds_df[\"labels\"])\n", "y_pred = mlb.fit_transform(preds_df[\"result\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "2y5ZvKJvMTJz" }, + "outputs": [], "source": [ "report = classification_report(y_true, y_pred, output_dict=True)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "EbIGJVJ4N3QL" }, + "outputs": [], "source": [ "for key, value in report.items():\n", " logger.log_metrics(value, prefix=key)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "2IJEqUR4Ova-" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"metrics\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -570,14 +542,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "MwP3EkXwsd5_" }, + "outputs": [], "source": [ "logger = CometLogger()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -590,9 +562,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "0bWqEYrJrkEB" }, + "outputs": [], "source": [ "# If you change the model, re-run all the cells below\n", "# Other applicable models: ner_dl, ner_dl_bert\n", @@ -635,9 +609,7 @@ "\n", "empty_df = spark.createDataFrame([[\"\"]]).toDF(\"text\")\n", "pipeline_model = nlp_pipeline.fit(empty_df)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -650,14 +622,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "ZjvdsaSy3gTC" }, + "outputs": [], "source": [ "logger.log_pipeline_parameters(pipeline_model)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -670,14 +642,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "MtF-0mec_54S" }, + "outputs": [], "source": [ "logger.log_parameters({\"run-type\": \"training\"})" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -690,15 +662,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "v4QbtImGrzxw" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"parameters\")\n", "logger.end()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -731,9 +703,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "1jEARtSE-XJY" }, + "outputs": [], "source": [ "# If you change the model, re-run all the cells below\n", "# Other applicable models: ner_dl, ner_dl_bert\n", @@ -776,9 +750,7 @@ "\n", "empty_df = spark.createDataFrame([[\"\"]]).toDF(\"text\")\n", "pipeline_model = nlp_pipeline.fit(empty_df)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -791,21 +763,23 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "bRq2rgCWCPpb" }, + "outputs": [], "source": [ "empty_df = spark.createDataFrame([[\"\"]]).toDF(\"text\")\n", "pipeline_model = nlp_pipeline.fit(empty_df)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "0jEqnP6JBlPK" }, + "outputs": [], "source": [ "text_list = [\n", " {\n", @@ -818,9 +792,7 @@ "\n", "df = spark.createDataFrame(text_list)\n", "results = pipeline_model.transform(df)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -833,9 +805,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "BBTfftcN3uIs" }, + "outputs": [], "source": [ "from sparknlp_display import NerVisualizer\n", "\n", @@ -846,9 +820,7 @@ " result=result, label_col=\"ner_chunk\", document_col=\"document\", return_html=True\n", " )\n", " logger.log_visualization(viz, name=f\"viz-{idx}.html\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -861,14 +833,30 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "x9saI2h6Cy5I" }, + "outputs": [], "source": [ "logger.experiment.display(tab=\"assets\")" - ], - "execution_count": null, - "outputs": [] + ] + } + ], + "metadata": { + "colab": { + "machine_shape": "hm", + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-training/tensorflow/notebooks/Comet_and_Tensorflow.ipynb b/integrations/model-training/tensorflow/notebooks/Comet_and_Tensorflow.ipynb index ee1a045b..a930eba9 100644 --- a/integrations/model-training/tensorflow/notebooks/Comet_and_Tensorflow.ipynb +++ b/integrations/model-training/tensorflow/notebooks/Comet_and_Tensorflow.ipynb @@ -26,7 +26,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml tensorflow tensorflow-datasets" + "%pip install -U \"comet_ml>=3.44.0\" tensorflow tensorflow-datasets" ] }, { @@ -48,7 +48,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-tensorboard\")" + "comet_ml.login(project_name=\"comet-example-tensorboard\")" ] }, { diff --git a/integrations/model-training/xgboost/notebooks/Comet_and_XGBoost.ipynb b/integrations/model-training/xgboost/notebooks/Comet_and_XGBoost.ipynb index 2d560195..ae4d1f86 100644 --- a/integrations/model-training/xgboost/notebooks/Comet_and_XGBoost.ipynb +++ b/integrations/model-training/xgboost/notebooks/Comet_and_XGBoost.ipynb @@ -1,18 +1,4 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", @@ -25,15 +11,14 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "ebD0DKSh6ZgZ" }, + "outputs": [], "source": [ - "!pip install comet_ml --quiet\n", - "!pip install xgboost --quiet" - ], - "execution_count": null, - "outputs": [] + "%pip install \"comet_ml>=3.44.0\" xgboost" + ] }, { "cell_type": "markdown", @@ -46,6 +31,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -53,12 +39,6 @@ "id": "g3B9EA3w6hQl", "outputId": "27003f0c-88da-4427-f641-7912738277d9" }, - "source": [ - "import comet_ml\n", - "\n", - "comet_ml.init(project_name=\"comet-xgboost\")" - ], - "execution_count": null, "outputs": [ { "name": "stdout", @@ -70,13 +50,18 @@ ] }, { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "COMET INFO: Comet API key is valid\n", "COMET INFO: Comet API key saved in /root/.comet.config\n" ] } + ], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-xgboost\")" ] }, { @@ -90,9 +75,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "uKMTsXPI8o3x" }, + "outputs": [], "source": [ "import os\n", "import pandas as pd\n", @@ -100,9 +87,7 @@ "\n", "from sklearn.datasets import fetch_california_housing\n", "from sklearn.model_selection import train_test_split" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -115,9 +100,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "6akH-3LA62pu" }, + "outputs": [], "source": [ "california = fetch_california_housing()\n", "data = pd.DataFrame(california.data)\n", @@ -128,9 +115,7 @@ "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.2, random_state=123\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -152,6 +137,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -159,14 +145,10 @@ "id": "D6TzQXLA-Uuo", "outputId": "e833775d-2e5a-49f1-bc70-d29b15f9432e" }, - "source": [ - "experiment = comet_ml.Experiment()" - ], - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "COMET WARNING: As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", "COMET INFO: Couldn't find a Git repository in '/content' nor in any parent directory. You can override where Comet is looking for a Git Patch by setting the configuration `COMET_GIT_DIRECTORY`\n", @@ -174,6 +156,9 @@ "\n" ] } + ], + "source": [ + "experiment = comet_ml.Experiment()" ] }, { @@ -187,9 +172,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "YNsILwyG86Iy" }, + "outputs": [], "source": [ "param = {\n", " \"objective\": \"reg:squarederror\",\n", @@ -199,9 +186,7 @@ " \"alpha\": 10,\n", " \"n_estimators\": 50,\n", "}" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -214,9 +199,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "bK7-MRj49Mp1" }, + "outputs": [], "source": [ "xg_reg = xgb.XGBRegressor(**param)\n", "xg_reg.fit(\n", @@ -225,9 +212,7 @@ " eval_set=[(X_train, y_train), (X_test, y_test)],\n", " eval_metric=\"rmse\",\n", ")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -240,14 +225,28 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "LSPvvlny9YYi" }, + "outputs": [], "source": [ "experiment.end()" - ], - "execution_count": null, - "outputs": [] + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/model-training/xgboost/notebooks/how_to_use_comet_with_xgboost_tutorial.ipynb b/integrations/model-training/xgboost/notebooks/how_to_use_comet_with_xgboost_tutorial.ipynb index ced9e84a..8e87e13a 100644 --- a/integrations/model-training/xgboost/notebooks/how_to_use_comet_with_xgboost_tutorial.ipynb +++ b/integrations/model-training/xgboost/notebooks/how_to_use_comet_with_xgboost_tutorial.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install xgboost comet_ml --quiet" + "%pip install -U \"comet_ml>=3.44.0\" comet_ml" ] }, { @@ -45,7 +45,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-xgboost-tutorial\")" + "comet_ml.login(project_name=\"comet-xgboost-tutorial\")" ] }, { @@ -61,9 +61,8 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "\n", "from xgboost import XGBClassifier\n", + "\n", "# read data\n", "from sklearn.datasets import load_iris\n", "from sklearn.model_selection import train_test_split\n", @@ -71,12 +70,20 @@ "experiment = comet_ml.Experiment()\n", "\n", "data = load_iris(as_frame=True)\n", - "X_train, X_test, y_train, y_test = train_test_split(data['data'], data['target'], test_size=.2)\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " data[\"data\"], data[\"target\"], test_size=0.2\n", + ")\n", "# create model instance\n", - "bst = XGBClassifier(n_estimators=10, max_depth=5, learning_rate=0.1, objective='binary:logistic')\n", + "bst = XGBClassifier(\n", + " n_estimators=10, max_depth=5, learning_rate=0.1, objective=\"binary:logistic\"\n", + ")\n", "# fit model\n", - "bst.fit(X_train, y_train, eval_set=[(X_test, y_test)],\n", - " eval_metric=\"merror\",)" + "bst.fit(\n", + " X_train,\n", + " y_train,\n", + " eval_set=[(X_test, y_test)],\n", + " eval_metric=\"merror\",\n", + ")" ] }, { @@ -94,9 +101,7 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "\n", - "experiment.display(\"charts\")\n" + "experiment.display(\"charts\")" ] }, { @@ -119,10 +124,10 @@ "\n", "debug_df = X_test.copy()\n", "\n", - "debug_df['pred'] = y_pred\n", - "debug_df['ground_truth'] = y_test\n", + "debug_df[\"pred\"] = y_pred\n", + "debug_df[\"ground_truth\"] = y_test\n", "\n", - "experiment.log_table('prediction_debug_table.csv', debug_df)" + "experiment.log_table(\"prediction_debug_table.csv\", debug_df)" ] }, { diff --git a/integrations/model-training/xgboost/notebooks/xg_comet.ipynb b/integrations/model-training/xgboost/notebooks/xg_comet.ipynb index f73e7b21..dd4985f3 100644 --- a/integrations/model-training/xgboost/notebooks/xg_comet.ipynb +++ b/integrations/model-training/xgboost/notebooks/xg_comet.ipynb @@ -31,7 +31,7 @@ }, "outputs": [], "source": [ - "%pip install xgboost comet_ml" + "%pip install -U xgboost \"comet_ml>=3.44.0\"" ] }, { @@ -55,7 +55,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-xgboost-tutorial\")" + "comet_ml.login(project_name=\"comet-xgboost-tutorial\")" ] }, { @@ -82,35 +82,40 @@ }, { "cell_type": "markdown", - "source": [ - "# Create a Comet Experiment" - ], "metadata": { "id": "3RJx33J7GUiE" - } + }, + "source": [ + "# Create a Comet Experiment" + ] }, { "cell_type": "code", - "source": [ - "experiment = comet_ml.Experiment()" - ], + "execution_count": null, "metadata": { "id": "4IUCQ21vGRZL" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "experiment = comet_ml.Experiment()" + ] }, { "cell_type": "markdown", - "source": [ - "# Train A Classification Model on the Iris Dataset" - ], "metadata": { "id": "sFKxD6L7GZdJ" - } + }, + "source": [ + "# Train A Classification Model on the Iris Dataset" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Xv51yx3eGY4B" + }, + "outputs": [], "source": [ "data = load_iris(as_frame=True)\n", "\n", @@ -129,12 +134,7 @@ "\n", "# fit model\n", "bst.fit(X_train, y_train, eval_set=[(X_test, y_test)])" - ], - "metadata": { - "id": "Xv51yx3eGY4B" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -210,6 +210,9 @@ } ], "metadata": { + "colab": { + "provenance": [] + }, "kernelspec": { "display_name": "Python 3.11.0 ('nb': venv)", "language": "python", @@ -232,11 +235,8 @@ "interpreter": { "hash": "8c9587381b2341d562742e36a89690be32a732b11830813473890249dd40a07d" } - }, - "colab": { - "provenance": [] } }, "nbformat": 4, "nbformat_minor": 0 -} \ No newline at end of file +} diff --git a/integrations/model-training/yolov5/notebooks/Comet_and_YOLOv5.ipynb b/integrations/model-training/yolov5/notebooks/Comet_and_YOLOv5.ipynb index f97b4542..a90e28a0 100644 --- a/integrations/model-training/yolov5/notebooks/Comet_and_YOLOv5.ipynb +++ b/integrations/model-training/yolov5/notebooks/Comet_and_YOLOv5.ipynb @@ -36,7 +36,7 @@ }, "outputs": [], "source": [ - "%pip install comet_ml" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -58,7 +58,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-yolov5\")" + "comet_ml.login(project_name=\"comet-example-yolov5\")" ] }, { diff --git a/integrations/model-training/yolov8/notebooks/YOLOv8_and_Comet.ipynb b/integrations/model-training/yolov8/notebooks/YOLOv8_and_Comet.ipynb index 1f99602d..4b93d364 100644 --- a/integrations/model-training/yolov8/notebooks/YOLOv8_and_Comet.ipynb +++ b/integrations/model-training/yolov8/notebooks/YOLOv8_and_Comet.ipynb @@ -1,291 +1,292 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU", - "gpuClass": "standard" + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "wXv4o8i8jJgP" + }, + "source": [ + "![logo_comet.png](data:image/png;base64,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)" + ] }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "![logo_comet.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK4AAABECAYAAAAY0w4KAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABRmSURBVHgB7V3PbxtJdn5VTWrs9S86QIAgQNbtQ5CZk+kgAYIAicnNHhLkYGkm2SSHrCggsb0nS5fsITsmZW+QoyUEQcaeBKLmskGys5KRS26idzZBgAAx/QcEagOb9cwmu6ItjWyL7Hp5r6qa7GZ3U6Qka8xlf0CL7Orq6mb316++eu9VS8AxYbNQKuSgU3RAXlIKiyhEUQgoACItUED6A4JrihYtnhDYAgVNKYXng3r8S60fNCBDBgsBrxE//PnfLCLKaTrIFSJoKTgck1REDo32VDB0WqZM0WfLAdiWCLtCNARC/auf/tsqZJhoHDlx2bK+dfLVrCLCGrKyJRWWk4aw2K0dEBaivEWEnZyALUcRWXmV/5gFuY4Sm2S9v1L+9D88yDCRODLibrqlwpR6OY8+3iRyFrjM0DJEzuCIGD8LtGUtB+EnOQRFZpkIKzRpFW8WbH419Ym4YJVFJbO+k4kjIe6P3F+bR5BV1qq6USG6RIzIABEwVPS2GV0LL0gDfEaEbSMLCclk1ZqCyauJywSmBtCQtkvkDojy732a6d9Jw6GI+8Nf/vWiQLFCNCUtawgZomRPqWq+oiZ0d6P9YD5+RpLg84gkMN9RBWXmk46FSnGzvXpEXm/7Zf7yTKvRggwTgxwcED96h6ysUncDogbDrrBxDRlUtqGAGNUIL8nK/pikQUd3/3EVIURvkBaYaiF7lZQpcU+99WqWvi1DhonByMTdLBYLJ32xopQ/rUkUkKtrWiHEM4CIJ8HW5U0tibjl0EafbCdXdVgGUG3Vs81IngShLS9C7yjGbOv2JBOeqksaCGbEnSiMJBWeFosufWzQ4gYERYxzN2nw1S0jsv1UKHhGbNV6VQU6Vhh5YAdjLAUUlwcywQ7QrMaNSAiu7+xO/Vw5kwsTg6Et7tPfINK2cYNI6OrBF4vNMGOBORn4EPhTmU8M6QUq/Sn5CbZpg1SWe8FOXFPZmpIJivapssfgegrDRt0M0NBsUyf3zkELMuJOCIYiLpOW+vQNqu2iNobEPIe3YJ/J7q13NW/o+0/Iyu5oHxfRTUpDwUDbEvlEQHIidUDeXtO8o7CyWe9hSW7rO9QLADyBDBOBfYn7tESkbbeNPCAw3wJraw1lyKKGYW2v1brPqeKu9mexMWbOKtSNgfkq2DQ7bDqR1YCWveZYRn4o6xIWlsw6lKGbYfJSo470IMPEYF/iSthbwzy6ZlhkJYBjuu/wmD8qbIOgrmHdNjHzOZpVba41mJ2WvNaSMnnZ8uoxl49BNTBG3nAezIDMyBLVFdjPfmfz3zNrO0EYSNynX327Riwp9mwpxkgaH92JSL0OLc98pbt3w0gdXxCBptUi1epUs24cBcIqCd2K6rkStPXVeld1HcP0ZR0yTBRSifvj3327Qta1Cn3ZBYywcg22BVkIGNqidW1HaW1qpKv2wxq3F5MPrOyQsjfiUjYBh8d8vhl+MYm1OpFmRBYQXVte7TVTdcgw1qjceL9Gd3rWrKFH93i5fv/bqQYp0R32dPpt1/HVBu3sRmrpUJexhtFYAiY29ZyIt+0D5xYYPqLUmhSCqJiSve+6bWnLuS367uumidsm7GuSbEz+AgZhNwX10n//5xxkGFtUblQr1P+u9JfnclPuP/zttxIlYKLFzYNfxZwhLVpHbYSWqHrh224qTaB5jcUkQwuf+1aDCq0OiG/Wo8C7STPk0iMxKXjAZpIQpJUayghZJrKUVi0gmFGbCo4JHvrtRcgw3lB4IcmEqr1XLqR4imLE3fpj1+10OhW9Yp2mwSCrG2QIS4KuL9cSXG8gt9crvSN7vZiugrp9tMTkLt5kJUjTMrKaMN4KKpcmR4c/dFQs8JKh8SDomIMmcRNle6bsNT3IMHGIEVdJWYWc6iXGcKEdAumvgRENSqw7LCAsw6cu/oX2Z9kAgTLygr0GSmhugg026ANIrWGV0b2BBkE0LjDr5wVriYnkLWL5sv/KXybSZgGHCUWEuFsV1/X9TsUEF6ztxmhOrckuhG7+gB3vh0guYKetyaiLjMsKdJaNCXxp0j6j9QZp2EZOSg/3sMlxhBdtOJ/PyXMkIIrUYom46qIjCnqQRhaWqN3o7MBq2fuvjLATjghxlfSrPa0Rj4oxupExp7sXGM9Dr15Hp9RK60Yw3b5OPEDw6M+S6qjVX214SeQL9MxDyJJmMgxAl7hbN9jatitdCRC4t2zmjMBQInhKVg3/3SNr63O0QOjggskJU1oT14r/upkNpDIcCbrE9aFdErlobkHgnQ2+h+eOQVAnNKuBu/tXL6XWuoKFq6/F7ZOOI2Yu/4vXhAwZjghd4sq8PxvdFLi4MJRia2VBIH/R5gkok4TA29pB1pjQFvlJ239Vvrz+qQdjAvIplui8r9Li0m9wTSm2yB3Soh/bID/dg/oHi95Qbc1XC/BCznL0EbRu56lN5FwH6ZGT+sEgB3vfObl0fDonvyAcx1v5u+pq7BioSnS+Rdt+k27Fctp52t84a87J/DbhyPVwu6Mgfs3QyEAUDVoe1D9cPJDRIjd/pXLtVim2QYpVTcGtb/6Ci3tqM+QrMIhYWNH3CdAfdCDOwv/9r6N9s0Rm79WePzaktU7wKthkokEgx8g6dS8LqcRgMr1U83QdboIw8/BS4Enp1AYRhklL57UZLcXG6r07ZX3OCu+mHMOjkfFC+OGo/Hm1SGHGNUj/jfueT9+5MWGrZLpKg+oRG+iBl3Op1+varSoN+mswNLDBvTv4HVXUMoHcYMCfedSfQq/bMnaRdcuwW6bL8+azg2hlgh681caHtO/XbOTGHaY+BVKmqf6GJmisLSLaC3xEzubqPqRluEr59dlr768ltaXhkyWNQZQq36hO63NOP4ZLjvI1Jqs+L64vcAMG/0Z9PpVrFH7dB/aabexHWgYxosQPH7U7D0cC4WriOifUlYCoIiAok9cJkZbWMRddZ8JqIjvm09fhYCavX3/nO/9zoG7nuGFugKjC6HDJWT0bbUtbx/3IEYcQ00T2jVF20ZZ2mHpS3dXn5Q8keXQfIaqVP/vLUtr2g14zavfu3DcWZ+HQQE8TFyRpHSZgPrC2TEbfWlnfkNgSOiBtYIkNgY0F1nPEOP3Ah7HwHhiiHYi0GuQtiWi3A5G2h2LlWnUoMlq4w1XT1m5tWNIGQEcmXhcjqRKuGfLsE1wiClR4oe/1pP2V7y+l9i6xNpFkjqj3LxSAmjODs7xfCqbZ9JwEopeBEMypgZDKFdZ7G0TOwMwXo0Fa451//MyDcQDpswEb6xLEusxNNan7dLHTuUjxax7QlGyF5sqHdx4Gta1GdhNbQqjl81N1Thghi3NFKQ6pi0qsnsB5uqmL9aXF4QIsRBZSZjVnamqdzzGtXUIx9N0jYtVkfqph9lE1SOzuSY6Q1a3//V81Ioc044B+eBT1LNc/uO2FylZJpiyTMXsUbZYeoF28Sd/2NW50nksr9xcfJm3Lbf11wTWzFHR0qkXUWxcm/HqBeFjiIG04QiYiSTfWTRYQmCWDA3UYE6TpM/ol8x/duxMOgHBghC9gnYlHMW0XvyQeRPZBfTOS27p/u9sWDXy4nYez16tsoeKab8ibyqB7dDk04NHn+PUbtzwmc8ouFAAS5ZV7kX3KX7/2LbZi8S7cIU8GQCNYpR5hmq6Z21+NH4RQm12wN6Fy41YN+86HeFUBOFyvTBa344IjPEdg5cxf7ETYzaSWDt6kk50P3F09stqT6AYkjGus7bcfwhiAuyvSlW58Czb6SBtBQLyEtoqjtCVOwiLu0g3s68LJ6pZgqJuK9T4Lp/HRB7cXZ6/dmk+SBmkEk19y5rFPr+sjoChFCgRcgQSs3L+dPp5R4nGQwxKCy9ds6J4lARJOYAtVuwwXd8TOx7Dy/GPY5GX7u7CR/5XWlXPffL5A2rbGAzPM+X0eBda3YL0NrG9V6516y4NxwF6yRqRHcHSf40soJrbFfswU6JsmwEvYy4UhIP30WR9kVRO3EREfQ9q5QMK5xMmf+Dv3gZtU6LTz5+AQyJ1f+Ly5/bE25dXApmpwggtCichcPP3ezsLzvznFIr9Ev/6RFr4Sit3kWqtz3zoLj2BcoFIGKyiOLYGHBFcLIW6NhtkXBI58ns5UfgteA2av38K0bQm/T8PPt5/BISB31vRTVE0/MMwTsau+g8vKVxfPfnn3K+fmdy+T92Ca+p6WCFld55QvIEOG/YDQPIxMYEgylsO4YObh5G4j/+WXpR2EzZ3vwab8xd2COIFLIu9j11XmIGTIMBDaEyLm4JBgd9gwuqUApzgSAzdBv/ZeLzVfQjknsaYnrdNT5JxO0mwZftYxwIvRq2M1NHtjDmttGTnA4RzTuRywmO4ekHNr9Wdeoe/LhbNn22MRKQvBSywVOJKjXkPSdfHhaIBv9GukEs+tfv/2sQecOEDrDVOx8wwed17BHNWv09NTpwu8mD/1skCW9t1zs+3lzxEe7SjY2v5nKME44ETyTcCDjJynkq+hdW0lQkftkvzIAg+USXVM8JIKB4WHXxckDbLq+1Visp6fg9b5PwHv7Hswd5oWlHCVlpWzf+qv2zr2beRwAcYAurtKtG4mYpS2H2dEVa4v3tSphuG2IMn1RW2lJayo5LGFRA5rvqEQ8CCpOC08HAb7bfm6hq9br10nuZcRwoUU5M7MwOL298hDgMmWhi2yvxd3iBOBF7ZWejKDrPFlJweXzvxh8o97E0H+zjomRK/QcTYq16t18DurpJE8XchZWhTy1S5B1gUI83QTykHkiqKNqyj7HPZgE1auVy9021J+kW7UzURrSw8StfHmBnBOkI97F1px/64ocYabkDKW6tlN8eSIoOPwvwfzwtfN7K4eJ3nNlIAaGYkCqI5xnbELUDpN3lfnKnQElMkhUBXsPQgDoeG3YY4tbaR4DQokC+bpWLMUrOCZDw1HwuLJmfEhrQZbEITEVDsiVoUudKU761gGUcMuXEDF4dkFXql/eKdOYdzZpLh/pK3wK9Vj9WBpdcgk9S8C3LNQD7JIDtB4b8EZbojTleu3mvS0enRt2Yq6RFh6UEUhlLrt2hyRnmch9YHgt4P6S+ba64PomAGdw4LODjs/Ay22oJ09uAicnyBgOncC3DN/AOV+0jJIz27QBxPdFbpxqHQUadx/OlBk5QsDPbkNuhhLcEAgRoMFJJP4ZnhwIGD9oy9gkDMq6vfvLCGq1IE4jxF0vjI9rLpXSQg9kw/KjbRJDwQ9z0PfB3pwqjJcwCQ98y48PPsuPDj5+/CEB1ocBqbl7os1c5PIwlYwWVYUSPOOkpb3RmD13uLCgcjL/kjqGsNF3IVxEguMTF5cWr1359C+zePCR/e/XRltxkIIfN1U9Lox6h/cXhz0QPRDpm3QYWAJG2xNOXpGYYYN1rRkYa+mtibGxKPQByavUDiCtcQGOdHLSVNRuGz13u2LQ95Ynl4zQ6RdSK3hyEbCeTVpQPQkdR+lknRyM+09XAyBGEsGIgNVT6vPyTzCEZeTB6VpoOvGGW0pc9D4gRjmPrCk0uLh+Xdhmrq5WXYSk8dAX0SOjvV3hawHqV6RyZzW6Jn3YKzDvnPXb11VWqdKnkjI3RwvLdZt1PU1HcRGOA93EPQImgZ1KORVO/HStMVzphSsD9tOcF7c04khj2+OjVe5qx55H9DzxJpD/049PQiv0EC0FPqdDH3d+PicMzzowUlqU0i80N+7B79FbNFAiyK2veQLIidp22XyNGwlBCdq6MMT4cBK4tFoMHfagZnttvZStM7+EaxDhgyvATGpIILoiIiLZRq8rZ79GnUfopdcHICscKtDHggORDCxRQ7W2GpDhgyvAZI9CmSOZ/TbDwHW29vGpcX+XdYSQOVsSVm/Bh4GGsCVyfLOMYHZz8v1yNd7OZfTqZBu0Dh/3xozT0OG8cCR6lFOkUQF/XOMSuypgAwZjhCpxOUgQ6BV81PQpOCCl1SPXWY8V+3018zMge01ci6r7oi6RoM17ZvsfEK+X7LAyoeZqfIBZhlkyBBCInF32FcryCcbGpwpihCdey+qe8MDu85zOM/5DLrchoKD9b0NKErHWGLyStSc3xqP6esZ3lzEiMuBhg4NsJLSHXMSLvZbXgpIsIdBR95gAPzvwwon4rR9WDhZzvJ2MxwOsTeSE7GKIuXlER1fBx+W259AidwRV/Y6sEokjER8Ot/XPuFLdpsXlDu/Ha2Hj/SgrUUubA8yZBgR8ciZGpBYToQmYlZI027ol1w49LnRq99+qKXEmt22yRIhqRkiLU+ffsQLfR89cTvDxCNGXD9PQQORnGTNflyIhnxdcOASf2ECC57aE27cgZspRw1ydhNJS2R2aZmGDBlSECMu+3VV8ru/auzHpW091xaC99I3r78XZU32COFFaJ2lAT6GKi2zZNUXQehciBJJhZYmapM0cJSsb/IUlgxfMFLdYVvfATeXt9ZVQjPsi+1skFzIwYV+HUvSYJ6srMkQI1K3FZR5OxNTS4PAwiIsEGG7HgraXqHtPMhriiJchgwZjhskGdx+bcvEJIuKoWWjb3uBLPHdTB5kGBb7/vf0USGsBbaDriJZ1gb0p6mJaACC5QLAYHdaANtuIfNGZDgweEDmfwI3Oz+AyAvTrGbd0tb1kZkaw9ZU69jHvbfmsOWlZZO2lWJtU5nWw/3lTfJa9FnsDBlGAgUVNsk9hrwQgXuEjEqDxPeJ6cFaUOdx/BVQvJ8lfr/scPvLMkweJBwQrGURIplgpdBmzsP1APQEuMRpMdTVN+22dfIyxKdsoPY8LOl60f28/rIMGUaC/xAedS3uwxSfrYWVDxvB4Ex7GuLb1+izNmD/tSxgkYFxYIurdyZ3lwMwTUvJubLPvzA17q6SXSvZ9TBcWqapPO3lEq5dMuJmOL75YWxp+8vIZxs5vtW6nrgEQ8/2zDCZOE7isiegFCryiLgXIUOGA+BQUmEkYORlGR7wdKEMGcYF2eAqw1Hg/wEgj6xxdislLwAAAABJRU5ErkJggg==)" - ], - "metadata": { - "id": "wXv4o8i8jJgP" - } - }, - { - "cell_type": "markdown", - "source": [ - "Ultralytics YOLOv8 is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLOv8 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.\n", - "\n", - "Data science and machine learning teams use [Comet](https://www.comet.com)’s ML platform to track, compare, explain, and optimize their models across the complete ML lifecycle – from managing experiments to monitoring models in production. \n", - "\n", - "Comet works with Jupyter Notebooks and Scripts and most importantly it is 100% free to [get started](https://www.comet.com/signup)!\n" - ], - "metadata": { - "id": "OorDXQbLiyTU" - } - }, - { - "cell_type": "markdown", - "source": [ - "# Install dependencies" - ], - "metadata": { - "id": "4tHdCdy1iXJJ" - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eLuCFhOhhThw" - }, - "outputs": [], - "source": [ - "%pip install ultralytics comet_ml torch torchvision -qU" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Initialize Comet\n", - "\n", - "This will prompt you to enter your API key. You can grab that over [here](https://www.comet.com/signup)" - ], - "metadata": { - "id": "PUusb44jhYIj" - } - }, - { - "cell_type": "code", - "source": [ - "import comet_ml\n", - "comet_ml.init(project_name=\"comet-example-yolov8-coco128\")" - ], - "metadata": { - "id": "RN08xGhPhZpH" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Run Training" - ], - "metadata": { - "id": "JIku-HkBhhVt" - } - }, - { - "cell_type": "code", - "source": [ - "from ultralytics import YOLO\n", - "\n", - "# Load a model\n", - "model = YOLO(\"yolov8n.pt\") # load a pretrained model (recommended for training)\n", - "\n", - "# train the model\n", - "results = model.train(\n", - " data=\"coco128.yaml\",\n", - " project=\"comet-example-yolov8-coco128\",\n", - " batch=32,\n", - " save_period=1,\n", - " save_json=True,\n", - " epochs=3\n", - ")\n" - ], - "metadata": { - "id": "T8yGloEChVzQ" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "# Configuring Comet \n", - "\n", - "You can further configure Comet's logging behaviour with YOLOv8 through Comet specific environment variables. " - ], - "metadata": { - "id": "jghV0NaXlON9" - } - }, - { - "cell_type": "markdown", - "source": [ - "## Changing the number of logged image predictions\n", - "\n", - "By default Comet will log 100 image predictions from the validation set. You can change this by setting the `COMET_MAX_IMAGE_PREDICTIONS` environment variable" - ], - "metadata": { - "id": "z62rGg9wlSDM" - } - }, - { - "cell_type": "code", - "source": [ - "import os\n", - "from ultralytics import YOLO\n", - "\n", - "os.environ[\"COMET_MAX_IMAGE_PREDICTIONS\"] = \"200\"\n", - "\n", - "# Load a model\n", - "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", - "\n", - "# train the model\n", - "results = model.train(\n", - " data=\"coco128.yaml\",\n", - " project=\"comet-example-yolov8-coco128\",\n", - " batch=32,\n", - " save_period=1,\n", - " save_json=True,\n", - " epochs=1,\n", - ")" - ], - "metadata": { - "id": "8xLFNI8XmXxZ" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Changing the frequency of Image Prediction Logging\n", - "\n", - "You may want to change how often batches of image predictions are logged to Comet. \n", - "\n", - "Set the `COMET_EVAL_BATCH_LOGGING_INTERVAL` environment variable to control this frequency. By default it is set to `1`, which corresponds to logging predictions from every validation batch. e.g. Setting it to `4` will log every fourth batch\n", - "\n", - "**Note:** YOLOv8 will use a batch size that is double your training batch size when running evaluation. " - ], - "metadata": { - "id": "NJgZvJ0Qt_lp" - } - }, - { - "cell_type": "code", - "source": [ - "import os\n", - "from ultralytics import YOLO\n", - "\n", - "os.environ['COMET_EVAL_BATCH_LOGGING_INTERVAL'] = \"4\"\n", - "\n", - "# Load a model\n", - "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", - "\n", - "# train the model\n", - "results = model.train(\n", - " data=\"coco128.yaml\",\n", - " project=\"comet-example-yolov8-coco128\",\n", - " batch=16,\n", - " save_period=1,\n", - " save_json=True,\n", - " epochs=2,\n", - ")" - ], - "metadata": { - "id": "oXx0yTCtr5Au" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Disabling Logging the Confusion Matrix after every Epoch\n", - "\n", - "In case you do not want to log the confusion matrix from your validation set after every epoch, disable it by setting `COMET_EVAL_LOG_CONFUSION_MATRIX` to `false`\n", - "\n", - "The Confusion Matrix will only be logged once, after training is completed. " - ], - "metadata": { - "id": "FvFi71QQrE0V" - } - }, - { - "cell_type": "code", - "source": [ - "import os\n", - "from ultralytics import YOLO\n", - "\n", - "os.environ[\"COMET_EVAL_LOG_CONFUSION_MATRIX\"] = \"false\"\n", - "\n", - "# Load a model\n", - "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", - "\n", - "# train the model\n", - "results = model.train(\n", - " data=\"coco128.yaml\",\n", - " project=\"comet-example-yolov8-coco128\",\n", - " batch=32,\n", - " save_period=1,\n", - " save_json=True,\n", - " epochs=2,\n", - ")" - ], - "metadata": { - "id": "bnkwt2KYF3oM" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging to an Offline Experiment\n", - "\n", - "In case you are in a situation where you are using a machine without public internet access you can still enable Comet logging by using an [OfflineExperiment](https://www.comet.com/docs/v2/api-and-sdk/python-sdk/advanced/running-offline/). \n", - "\n", - "Your run will be saved locally in a directory that you can upload to Comet. \n", - "\n", - "Set `COMET_MODE` to `offline` to enable this. " - ], - "metadata": { - "id": "vtIew6FtCtH5" - } - }, - { - "cell_type": "code", - "source": [ - "import os\n", - "from ultralytics import YOLO\n", - "\n", - "os.environ[\"COMET_MODE\"] = \"offline\"\n", - "\n", - "# Load a model\n", - "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", - "\n", - "# train the model\n", - "results = model.train(\n", - " data=\"coco128.yaml\",\n", - " project=\"comet-example-yolov8-coco128\",\n", - " batch=32,\n", - " save_period=1,\n", - " save_json=True,\n", - " epochs=1,\n", - ")" - ], - "metadata": { - "id": "TR7gEek_DPJN" - }, - "execution_count": null, - "outputs": [] - } - ] -} \ No newline at end of file + { + "cell_type": "markdown", + "metadata": { + "id": "OorDXQbLiyTU" + }, + "source": [ + "Ultralytics YOLOv8 is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLOv8 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.\n", + "\n", + "Data science and machine learning teams use [Comet](https://www.comet.com)’s ML platform to track, compare, explain, and optimize their models across the complete ML lifecycle – from managing experiments to monitoring models in production. \n", + "\n", + "Comet works with Jupyter Notebooks and Scripts and most importantly it is 100% free to [get started](https://www.comet.com/signup)!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4tHdCdy1iXJJ" + }, + "source": [ + "# Install dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eLuCFhOhhThw" + }, + "outputs": [], + "source": [ + "%pip install -U ultralytics \"comet_ml>=3.44.0\" torch torchvision -qU" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PUusb44jhYIj" + }, + "source": [ + "# Initialize Comet\n", + "\n", + "This will prompt you to enter your API key. You can grab that over [here](https://www.comet.com/signup)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RN08xGhPhZpH" + }, + "outputs": [], + "source": [ + "import comet_ml\n", + "\n", + "comet_ml.login(project_name=\"comet-example-yolov8-coco128\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JIku-HkBhhVt" + }, + "source": [ + "# Run Training" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "T8yGloEChVzQ" + }, + "outputs": [], + "source": [ + "from ultralytics import YOLO\n", + "\n", + "# Load a model\n", + "model = YOLO(\"yolov8n.pt\") # load a pretrained model (recommended for training)\n", + "\n", + "# train the model\n", + "results = model.train(\n", + " data=\"coco128.yaml\",\n", + " project=\"comet-example-yolov8-coco128\",\n", + " batch=32,\n", + " save_period=1,\n", + " save_json=True,\n", + " epochs=3,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jghV0NaXlON9" + }, + "source": [ + "# Configuring Comet \n", + "\n", + "You can further configure Comet's logging behaviour with YOLOv8 through Comet specific environment variables. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z62rGg9wlSDM" + }, + "source": [ + "## Changing the number of logged image predictions\n", + "\n", + "By default Comet will log 100 image predictions from the validation set. You can change this by setting the `COMET_MAX_IMAGE_PREDICTIONS` environment variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8xLFNI8XmXxZ" + }, + "outputs": [], + "source": [ + "import os\n", + "from ultralytics import YOLO\n", + "\n", + "os.environ[\"COMET_MAX_IMAGE_PREDICTIONS\"] = \"200\"\n", + "\n", + "# Load a model\n", + "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", + "\n", + "# train the model\n", + "results = model.train(\n", + " data=\"coco128.yaml\",\n", + " project=\"comet-example-yolov8-coco128\",\n", + " batch=32,\n", + " save_period=1,\n", + " save_json=True,\n", + " epochs=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NJgZvJ0Qt_lp" + }, + "source": [ + "## Changing the frequency of Image Prediction Logging\n", + "\n", + "You may want to change how often batches of image predictions are logged to Comet. \n", + "\n", + "Set the `COMET_EVAL_BATCH_LOGGING_INTERVAL` environment variable to control this frequency. By default it is set to `1`, which corresponds to logging predictions from every validation batch. e.g. Setting it to `4` will log every fourth batch\n", + "\n", + "**Note:** YOLOv8 will use a batch size that is double your training batch size when running evaluation. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oXx0yTCtr5Au" + }, + "outputs": [], + "source": [ + "import os\n", + "from ultralytics import YOLO\n", + "\n", + "os.environ[\"COMET_EVAL_BATCH_LOGGING_INTERVAL\"] = \"4\"\n", + "\n", + "# Load a model\n", + "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", + "\n", + "# train the model\n", + "results = model.train(\n", + " data=\"coco128.yaml\",\n", + " project=\"comet-example-yolov8-coco128\",\n", + " batch=16,\n", + " save_period=1,\n", + " save_json=True,\n", + " epochs=2,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FvFi71QQrE0V" + }, + "source": [ + "## Disabling Logging the Confusion Matrix after every Epoch\n", + "\n", + "In case you do not want to log the confusion matrix from your validation set after every epoch, disable it by setting `COMET_EVAL_LOG_CONFUSION_MATRIX` to `false`\n", + "\n", + "The Confusion Matrix will only be logged once, after training is completed. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bnkwt2KYF3oM" + }, + "outputs": [], + "source": [ + "import os\n", + "from ultralytics import YOLO\n", + "\n", + "os.environ[\"COMET_EVAL_LOG_CONFUSION_MATRIX\"] = \"false\"\n", + "\n", + "# Load a model\n", + "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", + "\n", + "# train the model\n", + "results = model.train(\n", + " data=\"coco128.yaml\",\n", + " project=\"comet-example-yolov8-coco128\",\n", + " batch=32,\n", + " save_period=1,\n", + " save_json=True,\n", + " epochs=2,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vtIew6FtCtH5" + }, + "source": [ + "## Logging to an Offline Experiment\n", + "\n", + "In case you are in a situation where you are using a machine without public internet access you can still enable Comet logging by using an [OfflineExperiment](https://www.comet.com/docs/v2/api-and-sdk/python-sdk/advanced/running-offline/). \n", + "\n", + "Your run will be saved locally in a directory that you can upload to Comet. \n", + "\n", + "Set `COMET_MODE` to `offline` to enable this. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TR7gEek_DPJN" + }, + "outputs": [], + "source": [ + "import os\n", + "from ultralytics import YOLO\n", + "\n", + "os.environ[\"COMET_MODE\"] = \"offline\"\n", + "\n", + "# Load a model\n", + "model = YOLO(\"yolov8s.pt\") # load a pretrained model (recommended for training)\n", + "\n", + "# train the model\n", + "results = model.train(\n", + " data=\"coco128.yaml\",\n", + " project=\"comet-example-yolov8-coco128\",\n", + " batch=32,\n", + " save_period=1,\n", + " save_json=True,\n", + " epochs=1,\n", + ")" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/integrations/reinforcement-learning/gymnasium/notebooks/comet_gymnasium_example.ipynb b/integrations/reinforcement-learning/gymnasium/notebooks/comet_gymnasium_example.ipynb index 130bf3eb..8c8303ec 100644 --- a/integrations/reinforcement-learning/gymnasium/notebooks/comet_gymnasium_example.ipynb +++ b/integrations/reinforcement-learning/gymnasium/notebooks/comet_gymnasium_example.ipynb @@ -33,7 +33,7 @@ }, "outputs": [], "source": [ - "%pip install 'gymnasium[classic-control]' comet_ml stable-baselines3 \"numpy<2.0.0\"" + "%pip install -U \"gymnasium[classic-control]\" \"comet_ml>=3.44.0\" stable-baselines3 \"numpy<2.0.0\"" ] }, { @@ -57,7 +57,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-examples-gymnasium-notebook\")" + "comet_ml.login(project_name=\"comet-examples-gymnasium-notebook\")" ] }, { diff --git a/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/metaflow-model-evaluation.py b/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/metaflow-model-evaluation.py index 457665a3..3b497e6a 100644 --- a/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/metaflow-model-evaluation.py +++ b/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/metaflow-model-evaluation.py @@ -249,6 +249,6 @@ def end(self): if __name__ == "__main__": - comet_ml.init() + comet_ml.login() ModelEvaluationFlow() diff --git a/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/requirements.txt b/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/requirements.txt index 4ee6790f..389225de 100644 --- a/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/requirements.txt +++ b/integrations/workflow-orchestration/metaflow/metaflow-model-evaluation/requirements.txt @@ -1,4 +1,4 @@ -comet_ml>=3.31.15 +comet_ml>=3.44.0 datasets metaflow metaflow-card-html diff --git a/integrations/workflow-orchestration/metaflow/notebooks/metaflow_hello_world.ipynb b/integrations/workflow-orchestration/metaflow/notebooks/metaflow_hello_world.ipynb index 93232dfb..e256365b 100644 --- a/integrations/workflow-orchestration/metaflow/notebooks/metaflow_hello_world.ipynb +++ b/integrations/workflow-orchestration/metaflow/notebooks/metaflow_hello_world.ipynb @@ -47,7 +47,7 @@ }, "outputs": [], "source": [ - "%pip install \"comet_ml>=3.31.15\" metaflow numpy" + "%pip install \"comet_ml>=3.44.0\" metaflow numpy" ] }, { @@ -73,7 +73,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-metaflow-hello-world-notebook\")" + "comet_ml.login(project_name=\"comet-example-metaflow-hello-world-notebook\")" ] }, { diff --git a/integrations/workflow-orchestration/metaflow/notebooks/metaflow_model_eval.ipynb b/integrations/workflow-orchestration/metaflow/notebooks/metaflow_model_eval.ipynb index 2f73512c..479e54e2 100644 --- a/integrations/workflow-orchestration/metaflow/notebooks/metaflow_model_eval.ipynb +++ b/integrations/workflow-orchestration/metaflow/notebooks/metaflow_model_eval.ipynb @@ -28,7 +28,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install \"comet_ml>=3.31.15\" datasets metaflow metaflow-card-html pandas plotly scikit-learn timm torch torchvision transformers" + "%pip install -U \"comet_ml>=3.44.0\" datasets metaflow metaflow-card-html pandas plotly scikit-learn timm torch torchvision transformers" ] }, { @@ -46,7 +46,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init(project_name=\"comet-example-metaflow-model-evaluation-notebook\")" + "comet_ml.login(project_name=\"comet-example-metaflow-model-evaluation-notebook\")" ] }, { @@ -349,7 +349,7 @@ "\n", "\n", "if __name__ == \"__main__\":\n", - " comet_ml.init()\n", + " comet_ml.login()\n", "\n", " ModelEvaluationFlow()\n" ] diff --git a/notebooks/Comet-Confusion-Matrix-Pytorch.ipynb b/notebooks/Comet-Confusion-Matrix-Pytorch.ipynb index da4a9c3c..0b36788e 100644 --- a/notebooks/Comet-Confusion-Matrix-Pytorch.ipynb +++ b/notebooks/Comet-Confusion-Matrix-Pytorch.ipynb @@ -1,756 +1,754 @@ { - "nbformat": 4, - "nbformat_minor": 5, - "metadata": { + "cells": [ + { + "cell_type": "markdown", + "id": "0ca5f47a-43c1-47ba-9322-c48f645b0908", + "metadata": { + "id": "0ca5f47a-43c1-47ba-9322-c48f645b0908" + }, + "source": [ + "# Pytorch Example with Confusion Matrix with Comet ML\n", + "\n", + "For this example, we will use Pytorch and create a interactive Confusion Matrix\n", + "in Comet ML. You'll need a Comet API key to log the Confusion Matrix, which is free for anyone.\n", + "\n", + "## Overview\n", + "\n", + "Our goal in this demonstration is to train a Pytorch model to categorize images of digits from the MNIST dataset, being able to see examples of each cell in a confusion matrix, like this:\n", + "\n", + "\n", + "\n", + "Comet provides a very easy way to make such confusion matrices. You can do that with a single command:\n", + "\n", + "```python\n", + "experiment.log_confusion_matrix(actual, predicted, images=images)\n", + "```\n", + "\n", + "where `actual` is the ground truth (given as vectors or labels), `predicted` is the ML's prediction (given as vectors or labels), and `images` is a list of image data.\n", + "\n", + "## End-to-End Example\n", + "\n", + "Let's explore a complete example from start to finish. \n", + "\n", + "First, we install the needed Python libraries:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "dec1NN24O_MH", + "metadata": { + "id": "dec1NN24O_MH" + }, + "outputs": [], + "source": [ + "%pip install \"comet_ml>=3.44.0\" torch torchvision" + ] + }, + { + "cell_type": "markdown", + "id": "9aY1iWM88iUa", + "metadata": { + "id": "9aY1iWM88iUa" + }, + "source": [ + "Now we import Comet:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "82048786-8d61-44c7-a6d2-0484a69779d0", + "metadata": { + "id": "82048786-8d61-44c7-a6d2-0484a69779d0" + }, + "outputs": [], + "source": [ + "import comet_ml" + ] + }, + { + "cell_type": "markdown", + "id": "65e82fc4-adda-4a7b-a84b-91d7cce363c4", + "metadata": { + "id": "65e82fc4-adda-4a7b-a84b-91d7cce363c4" + }, + "source": [ + "We can then make sure that our Comet API key is properly configured. The following command will give instructions if not:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "406fa63d-8854-4812-a082-e3ad011ed3fc", + "metadata": { "colab": { - "name": "PytorchConfusionMatrixSimple.ipynb", - "provenance": [], - "collapsed_sections": [] - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.5" + "base_uri": "https://localhost:8080/" + }, + "id": "406fa63d-8854-4812-a082-e3ad011ed3fc", + "outputId": "44a0adc9-12c7-4251-80ac-34bc8318644c" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET INFO: Comet API key is valid\n" + ] } + ], + "source": [ + "comet_ml.login()" + ] }, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "0ca5f47a-43c1-47ba-9322-c48f645b0908" - }, - "source": [ - "# Pytorch Example with Confusion Matrix with Comet ML\n", - "\n", - "For this example, we will use Pytorch and create a interactive Confusion Matrix\n", - "in Comet ML. You'll need a Comet API key to log the Confusion Matrix, which is free for anyone.\n", - "\n", - "## Overview\n", - "\n", - "Our goal in this demonstration is to train a Pytorch model to categorize images of digits from the MNIST dataset, being able to see examples of each cell in a confusion matrix, like this:\n", - "\n", - "\n", - "\n", - "Comet provides a very easy way to make such confusion matrices. You can do that with a single command:\n", - "\n", - "```python\n", - "experiment.log_confusion_matrix(actual, predicted, images=images)\n", - "```\n", - "\n", - "where `actual` is the ground truth (given as vectors or labels), `predicted` is the ML's prediction (given as vectors or labels), and `images` is a list of image data.\n", - "\n", - "## End-to-End Example\n", - "\n", - "Let's explore a complete example from start to finish. \n", - "\n", - "First, we install the needed Python libraries:" - ], - "id": "0ca5f47a-43c1-47ba-9322-c48f645b0908" - }, - { - "cell_type": "code", - "metadata": { - "id": "dec1NN24O_MH" - }, - "source": [ - "%pip install comet_ml>=3.10.0 torch torchvision --quiet" - ], - "id": "dec1NN24O_MH", - "execution_count": 1, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9aY1iWM88iUa" - }, - "source": [ - "Now we import Comet:" - ], - "id": "9aY1iWM88iUa" - }, - { - "cell_type": "code", - "metadata": { - "id": "82048786-8d61-44c7-a6d2-0484a69779d0" - }, - "source": [ - "import comet_ml" - ], - "id": "82048786-8d61-44c7-a6d2-0484a69779d0", - "execution_count": 2, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "65e82fc4-adda-4a7b-a84b-91d7cce363c4" - }, - "source": [ - "We can then make sure that our Comet API key is properly configured. The following command will give instructions if not:" - ], - "id": "65e82fc4-adda-4a7b-a84b-91d7cce363c4" - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "406fa63d-8854-4812-a082-e3ad011ed3fc", - "outputId": "44a0adc9-12c7-4251-80ac-34bc8318644c" - }, - "source": [ - "comet_ml.init()" - ], - "id": "406fa63d-8854-4812-a082-e3ad011ed3fc", - "execution_count": 3, - "outputs": [ - { - "output_type": "stream", - "text": [ - "COMET INFO: Comet API key is valid\n" - ], - "name": "stderr" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6cc97390-6fb2-45eb-9b81-47f25ae73cc7" - }, - "source": [ - "Now, we import the rest of the Python libraries that we will need:" - ], - "id": "6cc97390-6fb2-45eb-9b81-47f25ae73cc7" - }, - { - "cell_type": "code", - "metadata": { - "id": "f11f4599-c2d6-4356-9936-aab28ade436b" - }, - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "import torchvision.datasets as dsets\n", - "import torchvision.transforms as transforms\n", - "from torch.utils.data import SubsetRandomSampler\n", - "from torch.autograd import Variable" - ], - "id": "f11f4599-c2d6-4356-9936-aab28ade436b", - "execution_count": 4, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "32a480fb-f40e-48ec-b27b-12a0cbe72efb" - }, - "source": [ - "## MNIST Dataset\n", - "\n" - ], - "id": "32a480fb-f40e-48ec-b27b-12a0cbe72efb" - }, - { - "cell_type": "markdown", - "metadata": { - "id": "b5b7c632-760c-490b-9d14-8e0e7dcbd277" - }, - "source": [ - "The first time this runs may take a few minutes to download, and then a couple more minutes to process:" - ], - "id": "b5b7c632-760c-490b-9d14-8e0e7dcbd277" - }, - { - "cell_type": "code", - "metadata": { - "id": "0cbb42ca-f73e-4de5-bb4a-d05dc45d6b47" - }, - "source": [ - "train_dataset = dsets.MNIST(\n", - " root='./data/',\n", - " train=True,\n", - " transform=transforms.ToTensor(),\n", - " download=True)\n", - "\n", - "test_dataset = dsets.MNIST(\n", - " root='./data/',\n", - " train=False,\n", - " transform=transforms.ToTensor())" - ], - "id": "0cbb42ca-f73e-4de5-bb4a-d05dc45d6b47", - "execution_count": 5, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "563109fd-e169-4238-ac70-519a1c00c633" - }, - "source": [ - "## Create the Model\n", - "\n", - "We'll now write a function that will create the model.\n", - "\n", - "In this example, we'll take advantage of Comet's `Experiment` to get access to the hyperparameters via `experiment.get_parameter()`. This will be very handy when we later use Comet's Hyperparameter Optimizer to generate the Experiments.\n", - "\n", - "This function will actually return the three components of the model: the rnn, the criterion, and the optimizer." - ], - "id": "563109fd-e169-4238-ac70-519a1c00c633" - }, - { - "cell_type": "code", - "metadata": { - "id": "71cc8afc-0b6e-42e4-a0aa-f66a5b2fe006" - }, - "source": [ - "def build_model(experiment):\n", - " input_size = experiment.get_parameter(\"input_size\")\n", - " hidden_size = experiment.get_parameter(\"hidden_size\")\n", - " num_layers = experiment.get_parameter(\"num_layers\")\n", - " num_classes = experiment.get_parameter(\"num_classes\")\n", - " learning_rate = experiment.get_parameter(\"learning_rate\")\n", - "\n", - " class RNN(nn.Module):\n", - " def __init__(self, input_size, hidden_size, num_layers, num_classes):\n", - " super(RNN, self).__init__()\n", - " self.hidden_size = hidden_size\n", - " self.num_layers = num_layers\n", - " self.lstm = nn.LSTM(\n", - " input_size, \n", - " hidden_size, \n", - " num_layers, \n", - " batch_first=True)\n", - " self.fc = nn.Linear(hidden_size, num_classes)\n", - "\n", - " def forward(self, x):\n", - " # Set initial states\n", - " h0 = Variable(torch.zeros(self.num_layers, x.size(0), \n", - " self.hidden_size))\n", - " c0 = Variable(torch.zeros(self.num_layers, x.size(0), \n", - " self.hidden_size))\n", - "\n", - " # Forward propagate RNN\n", - " self.out, _ = self.lstm(x, (h0, c0))\n", - "\n", - " # Decode hidden state of last time step\n", - " out = self.fc(self.out[:, -1, :])\n", - " return out\n", - "\n", - " rnn = RNN(\n", - " input_size,\n", - " hidden_size,\n", - " num_layers,\n", - " num_classes,\n", - " )\n", - "\n", - " # Loss and Optimizer\n", - " criterion = nn.CrossEntropyLoss()\n", - " optimizer = torch.optim.Adam(rnn.parameters(), lr=learning_rate)\n", - "\n", - " return (rnn, criterion, optimizer)" - ], - "id": "71cc8afc-0b6e-42e4-a0aa-f66a5b2fe006", - "execution_count": 6, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "53886701-7210-4895-b946-cfd7d788662b" - }, - "source": [ - "We'll call this function below, once we create an `Experiment`." - ], - "id": "53886701-7210-4895-b946-cfd7d788662b" - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8114f369-7ba3-4783-93f4-c13ac1c70a4b" - }, - "source": [ - "## Train the Dataset on the Model\n", - "\n", - "Now we are ready to set up a Comet Experiment, and train the model.\n", - "\n", - "First, we can set all of the Hyperparameters of the model:" - ], - "id": "8114f369-7ba3-4783-93f4-c13ac1c70a4b" - }, - { - "cell_type": "code", - "metadata": { - "id": "c8b50453-3097-4a0b-9cf3-9b69f8b51df7" - }, - "source": [ - "hyper_params = {\n", - " \"epochs\": 10,\n", - " \"batch_size\": 120,\n", - " \"first_layer_units\": 128,\n", - " \"sequence_length\": 28,\n", - " \"input_size\": 28,\n", - " \"hidden_size\": 128,\n", - " \"num_layers\": 2,\n", - " \"num_classes\": 10,\n", - " \"learning_rate\": 0.01\n", - "}" - ], - "id": "c8b50453-3097-4a0b-9cf3-9b69f8b51df7", - "execution_count": 7, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "062c6192-5c29-41ca-8841-5ceb82b7d978" - }, - "source": [ - "Next we create the experiment, and log the Hyperparameters:" - ], - "id": "062c6192-5c29-41ca-8841-5ceb82b7d978" - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "174f3481-0798-4a11-acda-e651753a1caa", - "outputId": "b9038054-a7b9-483a-8a19-11eb7c2f114c" - }, - "source": [ - "experiment = comet_ml.Experiment(project_name=\"pytorch-confusion-matrix\")\n", - "experiment.log_parameters(hyper_params)" - ], - "id": "174f3481-0798-4a11-acda-e651753a1caa", - "execution_count": 8, - "outputs": [ - { - "output_type": "stream", - "text": [ - "COMET WARNING: As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", - "COMET INFO: Experiment is live on comet.ml https://www.comet.ml/dsblank/pytorch-confusion-matrix/819f19ee68ba4b91bab88421b795451d\n", - "\n" - ], - "name": "stderr" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4a5976cc-79e6-43ae-8301-8c39abf302a0" - }, - "source": [ - "We can now construct the model components:" - ], - "id": "4a5976cc-79e6-43ae-8301-8c39abf302a0" - }, - { - "cell_type": "code", - "metadata": { - "id": "8778542d-da44-4f7e-a01e-2e24d2dfec3e" - }, - "source": [ - "rnn, criterion, optimizer = build_model(experiment)" - ], - "id": "8778542d-da44-4f7e-a01e-2e24d2dfec3e", - "execution_count": 9, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "423e17c2-e9ef-473c-b2ee-055669033984" - }, - "source": [ - "To make this demonstration go a little faster, we'll just use a sample of the items from the training set:" - ], - "id": "423e17c2-e9ef-473c-b2ee-055669033984" - }, - { - "cell_type": "code", - "metadata": { - "id": "56724a82-9a93-4af8-b0d2-6492364d4be9" - }, - "source": [ - "SAMPLE_SIZE = 1000" - ], - "id": "56724a82-9a93-4af8-b0d2-6492364d4be9", - "execution_count": 10, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "acczEZl36Bml" - }, - "source": [ - "Now we can construct the loader:" - ], - "id": "acczEZl36Bml" - }, - { - "cell_type": "code", - "metadata": { - "id": "761fe054-c539-4883-a58f-ad46a0108fcb" - }, - "source": [ - "sampler = SubsetRandomSampler(list(range(SAMPLE_SIZE)))\n", - "train_loader = torch.utils.data.DataLoader(\n", - " dataset=train_dataset,\n", - " batch_size=experiment.get_parameter('batch_size'),\n", - " sampler=sampler,\n", - " #shuffle=True, # can't use shuffle with sampler\n", - ")" - ], - "id": "761fe054-c539-4883-a58f-ad46a0108fcb", - "execution_count": 11, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "EaVEhHpJC2nY" - }, - "source": [ - "Instead, if you would rather train on the entire dataset, you can:\n", - "\n", - "```python\n", - "train_loader = torch.utils.data.DataLoader(\n", - " dataset=train_dataset,\n", - " batch_size=experiment.get_parameter('batch_size'),\n", - " shuffle=True,\n", - ")\n", - "```" - ], - "id": "EaVEhHpJC2nY" - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RZvVJzzE6FgW" - }, - "source": [ - "Now we can train the model. Some items to note:\n", - "\n", - "1. We use `experiment.train()` to provide the context for logged metrics\n", - "2. We collect the actual, predicted, and images for each batch\n", - "3. At the end of the epoch, compute and log the confusion matrix" - ], - "id": "RZvVJzzE6FgW" - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "8548f3f5-e1ef-4c35-b383-3dbe01941025", - "tags": [], - "outputId": "5df2bd81-5202-46b4-bb09-d3af5f07d5d3" - }, - "source": [ - "with experiment.train():\n", - " step = 0\n", - " for epoch in range(experiment.get_parameter('epochs')):\n", - " print(\"\\nepoch:\", epoch)\n", - " correct = 0\n", - " total = 0\n", - " for batch_step, (images, labels) in enumerate(train_loader):\n", - " print(\".\", end=\"\")\n", - " images = Variable(images.view(\n", - " -1,\n", - " experiment.get_parameter('sequence_length'),\n", - " experiment.get_parameter(\"input_size\")))\n", - "\n", - " labels = Variable(labels)\n", - "\n", - " # Forward + Backward + Optimize\n", - " optimizer.zero_grad()\n", - " outputs = rnn(images)\n", - " loss = criterion(outputs, labels)\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " # Compute train accuracy\n", - " _, predicted = torch.max(outputs.data, 1)\n", - " batch_total = labels.size(0)\n", - " total += batch_total\n", - "\n", - " batch_correct = (predicted == labels.data).sum()\n", - " correct += batch_correct\n", - "\n", - " # Log batch_accuracy to Comet.ml; step is each batch\n", - " step += 1\n", - " experiment.log_metric(\"batch_accuracy\", \n", - " batch_correct / batch_total, step=step)\n", - "\n", - " if (batch_step + 1) % 100 == 0:\n", - " print('Epoch [%d/%d], Step [%d/%d], Loss: %.4f' % (\n", - " epoch + 1,\n", - " experiment.get_parameter('epochs'),\n", - " batch_step + 1,\n", - " len(train_dataset) // experiment.get_parameter('batch_size'),\n", - " loss.item()))\n", - "\n", - " # Log epoch accuracy to Comet.ml; step is each epoch\n", - " experiment.log_metric(\"batch_accuracy\", correct / total, \n", - " step=epoch, epoch=epoch)" - ], - "id": "8548f3f5-e1ef-4c35-b383-3dbe01941025", - "execution_count": 12, - "outputs": [ - { - "output_type": "stream", - "text": [ - "\n", - "epoch: 0\n", - ".........\n", - "epoch: 1\n", - ".........\n", - "epoch: 2\n", - ".........\n", - "epoch: 3\n", - ".........\n", - "epoch: 4\n", - ".........\n", - "epoch: 5\n", - ".........\n", - "epoch: 6\n", - ".........\n", - "epoch: 7\n", - ".........\n", - "epoch: 8\n", - ".........\n", - "epoch: 9\n", - "........." - ], - "name": "stdout" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "92436469-0313-46ca-817e-6f0ed4c6a663" - }, - "source": [ - "### Comet Confusion Matrix\n", - "\n", - "After the training loop, we can then test the test dataset with:\n", - "\n", - "```python\n", - "confusion_matrix = experiment.create_confusion_matrix()\n", - "for batch in batches:\n", - " ...\n", - " confusion_matrix.compute_matrix(actual, predicted, images=images)\n", - "experiment.log_confusion_matrix(matrix=confusion_matrix)\n", - "```\n", - "and that will create a nice Confusion Matrix visualization in Comet with image examples.\n", - "\n", - "Here is the actual code:" - ], - "id": "92436469-0313-46ca-817e-6f0ed4c6a663" - }, - { - "cell_type": "code", - "metadata": { - "id": "9d04c26b-94ad-4869-bbf7-7a817bad7dcb", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "9a3c00d9-ef1d-4b8a-9d36-137c834415ca" - }, - "source": [ - "test_loader = torch.utils.data.DataLoader(\n", - " dataset=test_dataset,\n", - " batch_size=32,\n", - " shuffle=False,\n", - ")\n", - "\n", - "confusion_matrix = experiment.create_confusion_matrix()\n", - "\n", - "for batch_step, (images, labels) in enumerate(test_loader):\n", - " print(\".\", end=\"\")\n", - " images = Variable(images.view(\n", - " -1,\n", - " experiment.get_parameter('sequence_length'),\n", - " experiment.get_parameter(\"input_size\")))\n", - " labels = Variable(labels)\n", - "\n", - " outputs = rnn(images)\n", - " _, predicted = torch.max(outputs.data, 1)\n", - " \n", - " confusion_matrix.compute_matrix(\n", - " labels.data, \n", - " predicted, \n", - " images=images)\n", - "\n", - "experiment.log_confusion_matrix(\n", - " matrix=confusion_matrix,\n", - " title=\"MNIST Confusion Matrix, Epoch #%d\" % (epoch + 1),\n", - " file_name=\"confusion-matrix-%03d.json\" % (epoch + 1),\n", - ");\n" - ], - "id": "9d04c26b-94ad-4869-bbf7-7a817bad7dcb", - "execution_count": 13, - "outputs": [ - { - "output_type": "stream", - "text": [ - "........................................................................................................................................................................................................................................................................................................................." - ], - "name": "stdout" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "B9Rl3sOHJt8u" - }, - "source": [ - "Now, because we are in a Jupyter Notebook, we signal that the experiment has completed:" - ], - "id": "B9Rl3sOHJt8u" - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "0d993454-6ea1-4b61-9cba-8425ba2c7eba", - "outputId": "5145f3dd-9e41-466c-ea56-923ea67306cd" - }, - "source": [ - "experiment.end()" - ], - "id": "0d993454-6ea1-4b61-9cba-8425ba2c7eba", - "execution_count": 14, - "outputs": [ - { - "output_type": "stream", - "text": [ - "COMET INFO: ---------------------------\n", - "COMET INFO: Comet.ml Experiment Summary\n", - "COMET INFO: ---------------------------\n", - "COMET INFO: Data:\n", - "COMET INFO: display_summary_level : 1\n", - "COMET INFO: url : https://www.comet.ml/dsblank/pytorch-confusion-matrix/819f19ee68ba4b91bab88421b795451d\n", - "COMET INFO: Metrics [count] (min, max):\n", - "COMET INFO: train_batch_accuracy [100] : (0.10000000149011612, 0.925000011920929)\n", - "COMET INFO: train_loss [9] : (0.4030756652355194, 2.309687614440918)\n", - "COMET INFO: Parameters:\n", - "COMET INFO: batch_size : 120\n", - "COMET INFO: epochs : 10\n", - "COMET INFO: first_layer_units : 128\n", - "COMET INFO: hidden_size : 128\n", - "COMET INFO: input_size : 28\n", - "COMET INFO: learning_rate : 0.01\n", - "COMET INFO: num_classes : 10\n", - "COMET INFO: num_layers : 2\n", - "COMET INFO: sequence_length : 28\n", - "COMET INFO: Uploads [count]:\n", - "COMET INFO: confusion-matrix : 1\n", - "COMET INFO: environment details : 1\n", - "COMET INFO: filename : 1\n", - "COMET INFO: images [1258] : 1258\n", - "COMET INFO: installed packages : 1\n", - "COMET INFO: model graph : 1\n", - "COMET INFO: notebook : 1\n", - "COMET INFO: os packages : 1\n", - "COMET INFO: source_code : 1\n", - "COMET INFO: ---------------------------\n", - "COMET INFO: Uploading metrics, params, and assets to Comet before program termination (may take several seconds)\n", - "COMET INFO: The Python SDK has 3600 seconds to finish before aborting...\n" - ], - "name": "stderr" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4JAptoP87RW1" - }, - "source": [ - "Finally, we can explore the Confusion Matrix in the Comet UI. You can select the epoch by selecting the \"Confusion Matrix Name\" and click on a cell to see examples of that type." - ], - "id": "4JAptoP87RW1" - }, - { - "cell_type": "code", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 821 - }, - "id": "6af03e15-bc30-4d26-b743-ff425d789137", - "outputId": "4f40a1ae-fd2f-4cba-f09f-6709216086b2" - }, - "source": [ - "experiment.display(tab=\"confusion-matrix\")" - ], - "id": "6af03e15-bc30-4d26-b743-ff425d789137", - "execution_count": 15, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": { - "tags": [] - } - } + { + "cell_type": "markdown", + "id": "6cc97390-6fb2-45eb-9b81-47f25ae73cc7", + "metadata": { + "id": "6cc97390-6fb2-45eb-9b81-47f25ae73cc7" + }, + "source": [ + "Now, we import the rest of the Python libraries that we will need:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f11f4599-c2d6-4356-9936-aab28ade436b", + "metadata": { + "id": "f11f4599-c2d6-4356-9936-aab28ade436b" + }, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torchvision.datasets as dsets\n", + "import torchvision.transforms as transforms\n", + "from torch.utils.data import SubsetRandomSampler\n", + "from torch.autograd import Variable" + ] + }, + { + "cell_type": "markdown", + "id": "32a480fb-f40e-48ec-b27b-12a0cbe72efb", + "metadata": { + "id": "32a480fb-f40e-48ec-b27b-12a0cbe72efb" + }, + "source": [ + "## MNIST Dataset\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "b5b7c632-760c-490b-9d14-8e0e7dcbd277", + "metadata": { + "id": "b5b7c632-760c-490b-9d14-8e0e7dcbd277" + }, + "source": [ + "The first time this runs may take a few minutes to download, and then a couple more minutes to process:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0cbb42ca-f73e-4de5-bb4a-d05dc45d6b47", + "metadata": { + "id": "0cbb42ca-f73e-4de5-bb4a-d05dc45d6b47" + }, + "outputs": [], + "source": [ + "train_dataset = dsets.MNIST(\n", + " root=\"./data/\", train=True, transform=transforms.ToTensor(), download=True\n", + ")\n", + "\n", + "test_dataset = dsets.MNIST(root=\"./data/\", train=False, transform=transforms.ToTensor())" + ] + }, + { + "cell_type": "markdown", + "id": "563109fd-e169-4238-ac70-519a1c00c633", + "metadata": { + "id": "563109fd-e169-4238-ac70-519a1c00c633" + }, + "source": [ + "## Create the Model\n", + "\n", + "We'll now write a function that will create the model.\n", + "\n", + "In this example, we'll take advantage of Comet's `Experiment` to get access to the hyperparameters via `experiment.get_parameter()`. This will be very handy when we later use Comet's Hyperparameter Optimizer to generate the Experiments.\n", + "\n", + "This function will actually return the three components of the model: the rnn, the criterion, and the optimizer." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "71cc8afc-0b6e-42e4-a0aa-f66a5b2fe006", + "metadata": { + "id": "71cc8afc-0b6e-42e4-a0aa-f66a5b2fe006" + }, + "outputs": [], + "source": [ + "def build_model(experiment):\n", + " input_size = experiment.get_parameter(\"input_size\")\n", + " hidden_size = experiment.get_parameter(\"hidden_size\")\n", + " num_layers = experiment.get_parameter(\"num_layers\")\n", + " num_classes = experiment.get_parameter(\"num_classes\")\n", + " learning_rate = experiment.get_parameter(\"learning_rate\")\n", + "\n", + " class RNN(nn.Module):\n", + " def __init__(self, input_size, hidden_size, num_layers, num_classes):\n", + " super(RNN, self).__init__()\n", + " self.hidden_size = hidden_size\n", + " self.num_layers = num_layers\n", + " self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)\n", + " self.fc = nn.Linear(hidden_size, num_classes)\n", + "\n", + " def forward(self, x):\n", + " # Set initial states\n", + " h0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))\n", + " c0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))\n", + "\n", + " # Forward propagate RNN\n", + " self.out, _ = self.lstm(x, (h0, c0))\n", + "\n", + " # Decode hidden state of last time step\n", + " out = self.fc(self.out[:, -1, :])\n", + " return out\n", + "\n", + " rnn = RNN(\n", + " input_size,\n", + " hidden_size,\n", + " num_layers,\n", + " num_classes,\n", + " )\n", + "\n", + " # Loss and Optimizer\n", + " criterion = nn.CrossEntropyLoss()\n", + " optimizer = torch.optim.Adam(rnn.parameters(), lr=learning_rate)\n", + "\n", + " return (rnn, criterion, optimizer)" + ] + }, + { + "cell_type": "markdown", + "id": "53886701-7210-4895-b946-cfd7d788662b", + "metadata": { + "id": "53886701-7210-4895-b946-cfd7d788662b" + }, + "source": [ + "We'll call this function below, once we create an `Experiment`." + ] + }, + { + "cell_type": "markdown", + "id": "8114f369-7ba3-4783-93f4-c13ac1c70a4b", + "metadata": { + "id": "8114f369-7ba3-4783-93f4-c13ac1c70a4b" + }, + "source": [ + "## Train the Dataset on the Model\n", + "\n", + "Now we are ready to set up a Comet Experiment, and train the model.\n", + "\n", + "First, we can set all of the Hyperparameters of the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c8b50453-3097-4a0b-9cf3-9b69f8b51df7", + "metadata": { + "id": "c8b50453-3097-4a0b-9cf3-9b69f8b51df7" + }, + "outputs": [], + "source": [ + "hyper_params = {\n", + " \"epochs\": 10,\n", + " \"batch_size\": 120,\n", + " \"first_layer_units\": 128,\n", + " \"sequence_length\": 28,\n", + " \"input_size\": 28,\n", + " \"hidden_size\": 128,\n", + " \"num_layers\": 2,\n", + " \"num_classes\": 10,\n", + " \"learning_rate\": 0.01,\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "062c6192-5c29-41ca-8841-5ceb82b7d978", + "metadata": { + "id": "062c6192-5c29-41ca-8841-5ceb82b7d978" + }, + "source": [ + "Next we create the experiment, and log the Hyperparameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "174f3481-0798-4a11-acda-e651753a1caa", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "174f3481-0798-4a11-acda-e651753a1caa", + "outputId": "b9038054-a7b9-483a-8a19-11eb7c2f114c" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET WARNING: As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", + "COMET INFO: Experiment is live on comet.ml https://www.comet.ml/dsblank/pytorch-confusion-matrix/819f19ee68ba4b91bab88421b795451d\n", + "\n" + ] + } + ], + "source": [ + "experiment = comet_ml.Experiment(project_name=\"pytorch-confusion-matrix\")\n", + "experiment.log_parameters(hyper_params)" + ] + }, + { + "cell_type": "markdown", + "id": "4a5976cc-79e6-43ae-8301-8c39abf302a0", + "metadata": { + "id": "4a5976cc-79e6-43ae-8301-8c39abf302a0" + }, + "source": [ + "We can now construct the model components:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8778542d-da44-4f7e-a01e-2e24d2dfec3e", + "metadata": { + "id": "8778542d-da44-4f7e-a01e-2e24d2dfec3e" + }, + "outputs": [], + "source": [ + "rnn, criterion, optimizer = build_model(experiment)" + ] + }, + { + "cell_type": "markdown", + "id": "423e17c2-e9ef-473c-b2ee-055669033984", + "metadata": { + "id": "423e17c2-e9ef-473c-b2ee-055669033984" + }, + "source": [ + "To make this demonstration go a little faster, we'll just use a sample of the items from the training set:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "56724a82-9a93-4af8-b0d2-6492364d4be9", + "metadata": { + "id": "56724a82-9a93-4af8-b0d2-6492364d4be9" + }, + "outputs": [], + "source": [ + "SAMPLE_SIZE = 1000" + ] + }, + { + "cell_type": "markdown", + "id": "acczEZl36Bml", + "metadata": { + "id": "acczEZl36Bml" + }, + "source": [ + "Now we can construct the loader:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "761fe054-c539-4883-a58f-ad46a0108fcb", + "metadata": { + "id": "761fe054-c539-4883-a58f-ad46a0108fcb" + }, + "outputs": [], + "source": [ + "sampler = SubsetRandomSampler(list(range(SAMPLE_SIZE)))\n", + "train_loader = torch.utils.data.DataLoader(\n", + " dataset=train_dataset,\n", + " batch_size=experiment.get_parameter(\"batch_size\"),\n", + " sampler=sampler,\n", + " # shuffle=True, # can't use shuffle with sampler\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "EaVEhHpJC2nY", + "metadata": { + "id": "EaVEhHpJC2nY" + }, + "source": [ + "Instead, if you would rather train on the entire dataset, you can:\n", + "\n", + "```python\n", + "train_loader = torch.utils.data.DataLoader(\n", + " dataset=train_dataset,\n", + " batch_size=experiment.get_parameter('batch_size'),\n", + " shuffle=True,\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "RZvVJzzE6FgW", + "metadata": { + "id": "RZvVJzzE6FgW" + }, + "source": [ + "Now we can train the model. Some items to note:\n", + "\n", + "1. We use `experiment.train()` to provide the context for logged metrics\n", + "2. We collect the actual, predicted, and images for each batch\n", + "3. At the end of the epoch, compute and log the confusion matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8548f3f5-e1ef-4c35-b383-3dbe01941025", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8548f3f5-e1ef-4c35-b383-3dbe01941025", + "outputId": "5df2bd81-5202-46b4-bb09-d3af5f07d5d3", + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "epoch: 0\n", + ".........\n", + "epoch: 1\n", + ".........\n", + "epoch: 2\n", + ".........\n", + "epoch: 3\n", + ".........\n", + "epoch: 4\n", + ".........\n", + "epoch: 5\n", + ".........\n", + "epoch: 6\n", + ".........\n", + "epoch: 7\n", + ".........\n", + "epoch: 8\n", + ".........\n", + "epoch: 9\n", + "........." + ] + } + ], + "source": [ + "with experiment.train():\n", + " step = 0\n", + " for epoch in range(experiment.get_parameter(\"epochs\")):\n", + " print(\"\\nepoch:\", epoch)\n", + " correct = 0\n", + " total = 0\n", + " for batch_step, (images, labels) in enumerate(train_loader):\n", + " print(\".\", end=\"\")\n", + " images = Variable(\n", + " images.view(\n", + " -1,\n", + " experiment.get_parameter(\"sequence_length\"),\n", + " experiment.get_parameter(\"input_size\"),\n", + " )\n", + " )\n", + "\n", + " labels = Variable(labels)\n", + "\n", + " # Forward + Backward + Optimize\n", + " optimizer.zero_grad()\n", + " outputs = rnn(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # Compute train accuracy\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " batch_total = labels.size(0)\n", + " total += batch_total\n", + "\n", + " batch_correct = (predicted == labels.data).sum()\n", + " correct += batch_correct\n", + "\n", + " # Log batch_accuracy to Comet.ml; step is each batch\n", + " step += 1\n", + " experiment.log_metric(\n", + " \"batch_accuracy\", batch_correct / batch_total, step=step\n", + " )\n", + "\n", + " if (batch_step + 1) % 100 == 0:\n", + " print(\n", + " \"Epoch [%d/%d], Step [%d/%d], Loss: %.4f\"\n", + " % (\n", + " epoch + 1,\n", + " experiment.get_parameter(\"epochs\"),\n", + " batch_step + 1,\n", + " len(train_dataset) // experiment.get_parameter(\"batch_size\"),\n", + " loss.item(),\n", + " )\n", + " )\n", + "\n", + " # Log epoch accuracy to Comet.ml; step is each epoch\n", + " experiment.log_metric(\n", + " \"batch_accuracy\", correct / total, step=epoch, epoch=epoch\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "92436469-0313-46ca-817e-6f0ed4c6a663", + "metadata": { + "id": "92436469-0313-46ca-817e-6f0ed4c6a663" + }, + "source": [ + "### Comet Confusion Matrix\n", + "\n", + "After the training loop, we can then test the test dataset with:\n", + "\n", + "```python\n", + "confusion_matrix = experiment.create_confusion_matrix()\n", + "for batch in batches:\n", + " ...\n", + " confusion_matrix.compute_matrix(actual, predicted, images=images)\n", + "experiment.log_confusion_matrix(matrix=confusion_matrix)\n", + "```\n", + "and that will create a nice Confusion Matrix visualization in Comet with image examples.\n", + "\n", + "Here is the actual code:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9d04c26b-94ad-4869-bbf7-7a817bad7dcb", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9d04c26b-94ad-4869-bbf7-7a817bad7dcb", + "outputId": "9a3c00d9-ef1d-4b8a-9d36-137c834415ca" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "........................................................................................................................................................................................................................................................................................................................." + ] + } + ], + "source": [ + "test_loader = torch.utils.data.DataLoader(\n", + " dataset=test_dataset,\n", + " batch_size=32,\n", + " shuffle=False,\n", + ")\n", + "\n", + "confusion_matrix = experiment.create_confusion_matrix()\n", + "\n", + "for batch_step, (images, labels) in enumerate(test_loader):\n", + " print(\".\", end=\"\")\n", + " images = Variable(\n", + " images.view(\n", + " -1,\n", + " experiment.get_parameter(\"sequence_length\"),\n", + " experiment.get_parameter(\"input_size\"),\n", + " )\n", + " )\n", + " labels = Variable(labels)\n", + "\n", + " outputs = rnn(images)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " confusion_matrix.compute_matrix(labels.data, predicted, images=images)\n", + "\n", + "experiment.log_confusion_matrix(\n", + " matrix=confusion_matrix,\n", + " title=\"MNIST Confusion Matrix, Epoch #%d\" % (epoch + 1),\n", + " file_name=\"confusion-matrix-%03d.json\" % (epoch + 1),\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "B9Rl3sOHJt8u", + "metadata": { + "id": "B9Rl3sOHJt8u" + }, + "source": [ + "Now, because we are in a Jupyter Notebook, we signal that the experiment has completed:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0d993454-6ea1-4b61-9cba-8425ba2c7eba", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0d993454-6ea1-4b61-9cba-8425ba2c7eba", + "outputId": "5145f3dd-9e41-466c-ea56-923ea67306cd" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "COMET INFO: ---------------------------\n", + "COMET INFO: Comet.ml Experiment Summary\n", + "COMET INFO: ---------------------------\n", + "COMET INFO: Data:\n", + "COMET INFO: display_summary_level : 1\n", + "COMET INFO: url : https://www.comet.ml/dsblank/pytorch-confusion-matrix/819f19ee68ba4b91bab88421b795451d\n", + "COMET INFO: Metrics [count] (min, max):\n", + "COMET INFO: train_batch_accuracy [100] : (0.10000000149011612, 0.925000011920929)\n", + "COMET INFO: train_loss [9] : (0.4030756652355194, 2.309687614440918)\n", + "COMET INFO: Parameters:\n", + "COMET INFO: batch_size : 120\n", + "COMET INFO: epochs : 10\n", + "COMET INFO: first_layer_units : 128\n", + "COMET INFO: hidden_size : 128\n", + "COMET INFO: input_size : 28\n", + "COMET INFO: learning_rate : 0.01\n", + "COMET INFO: num_classes : 10\n", + "COMET INFO: num_layers : 2\n", + "COMET INFO: sequence_length : 28\n", + "COMET INFO: Uploads [count]:\n", + "COMET INFO: confusion-matrix : 1\n", + "COMET INFO: environment details : 1\n", + "COMET INFO: filename : 1\n", + "COMET INFO: images [1258] : 1258\n", + "COMET INFO: installed packages : 1\n", + "COMET INFO: model graph : 1\n", + "COMET INFO: notebook : 1\n", + "COMET INFO: os packages : 1\n", + "COMET INFO: source_code : 1\n", + "COMET INFO: ---------------------------\n", + "COMET INFO: Uploading metrics, params, and assets to Comet before program termination (may take several seconds)\n", + "COMET INFO: The Python SDK has 3600 seconds to finish before aborting...\n" + ] + } + ], + "source": [ + "experiment.end()" + ] + }, + { + "cell_type": "markdown", + "id": "4JAptoP87RW1", + "metadata": { + "id": "4JAptoP87RW1" + }, + "source": [ + "Finally, we can explore the Confusion Matrix in the Comet UI. You can select the epoch by selecting the \"Confusion Matrix Name\" and click on a cell to see examples of that type." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "6af03e15-bc30-4d26-b743-ff425d789137", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 821 + }, + "id": "6af03e15-bc30-4d26-b743-ff425d789137", + "outputId": "4f40a1ae-fd2f-4cba-f09f-6709216086b2" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fkZRIi8CJ7-G" - }, - "source": [ - "Clicking on a cell in the matrix should show up to 25 examples of that type of confusion or correct classification.\n", - "\n", - "For more information about Comet ML, please see:\n", - "\n", - "1. [Getting started in 30 seconds](https://www.comet.ml/docs/python-sdk/getting-started/)\n", - "2. [Experiments](https://www.comet.ml/docs/python-sdk/experiment-overview/)\n", - "3. [Working with Jupyter Notebooks](https://www.comet.ml/docs/python-sdk/JupyterNotebooks/)\n", - "4. [Confusion Matrix](https://www.comet.ml/docs/python-sdk/Comet-Confusion-Matrix/)" - ], - "id": "fkZRIi8CJ7-G" + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" } - ] -} \ No newline at end of file + ], + "source": [ + "experiment.display(tab=\"confusion-matrix\")" + ] + }, + { + "cell_type": "markdown", + "id": "fkZRIi8CJ7-G", + "metadata": { + "id": "fkZRIi8CJ7-G" + }, + "source": [ + "Clicking on a cell in the matrix should show up to 25 examples of that type of confusion or correct classification.\n", + "\n", + "For more information about Comet ML, please see:\n", + "\n", + "1. [Getting started in 30 seconds](https://www.comet.ml/docs/python-sdk/getting-started/)\n", + "2. [Experiments](https://www.comet.ml/docs/python-sdk/experiment-overview/)\n", + "3. [Working with Jupyter Notebooks](https://www.comet.ml/docs/python-sdk/JupyterNotebooks/)\n", + "4. [Confusion Matrix](https://www.comet.ml/docs/python-sdk/Comet-Confusion-Matrix/)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "PytorchConfusionMatrixSimple.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Comet-Confusion-Matrix.ipynb b/notebooks/Comet-Confusion-Matrix.ipynb index 9f7e4034..469d2ad3 100644 --- a/notebooks/Comet-Confusion-Matrix.ipynb +++ b/notebooks/Comet-Confusion-Matrix.ipynb @@ -37,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install --upgrade comet_ml>=3.10.0" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { @@ -100,7 +100,7 @@ } ], "source": [ - "comet_ml.init()" + "comet_ml.login()" ] }, { @@ -129,7 +129,7 @@ ], "source": [ "experiment = comet_ml.Experiment(\n", - " project_name=\"confusion-matrix\", \n", + " project_name=\"confusion-matrix\",\n", ")" ] }, @@ -184,7 +184,7 @@ " [0.3, 0.8, 0.3],\n", " [0.0, 0.5, 0.3],\n", " [0.1, 0.5, 0.5],\n", - " ]" + "]" ] }, { @@ -307,7 +307,7 @@ "from tensorflow.keras.optimizers import RMSprop\n", "from tensorflow.keras.utils import to_categorical\n", "\n", - "from keras.datasets import mnist\n" + "from keras.datasets import mnist" ] }, { @@ -418,7 +418,7 @@ ], "source": [ "experiment = comet_ml.Experiment(\n", - " project_name=\"confusion-matrix\", \n", + " project_name=\"confusion-matrix\",\n", ")" ] }, @@ -658,7 +658,7 @@ ], "source": [ "experiment = comet_ml.Experiment(\n", - " project_name=\"confusion-matrix\", \n", + " project_name=\"confusion-matrix\",\n", ")" ] }, @@ -897,7 +897,9 @@ "\n", " def on_epoch_end(self, epoch, logs={}):\n", " predicted = self.model.predict(self.inputs)\n", - " self.confusion_matrix.compute_matrix(self.targets, predicted, images=self.inputs)\n", + " self.confusion_matrix.compute_matrix(\n", + " self.targets, predicted, images=self.inputs\n", + " )\n", " self.experiment.log_confusion_matrix(\n", " matrix=self.confusion_matrix,\n", " title=\"Confusion Matrix, Epoch #%d\" % (epoch + 1),\n", @@ -929,7 +931,7 @@ ], "source": [ "experiment = comet_ml.Experiment(\n", - " project_name=\"confusion-matrix\", \n", + " project_name=\"confusion-matrix\",\n", ")" ] }, @@ -995,7 +997,9 @@ "metadata": {}, "outputs": [], "source": [ - "confusion_matrix.compute_matrix(y_test, y_predicted, images=x_test, image_shape=(28,28))" + "confusion_matrix.compute_matrix(\n", + " y_test, y_predicted, images=x_test, image_shape=(28, 28)\n", + ")" ] }, { @@ -1096,7 +1100,9 @@ } ], "source": [ - "callback = ConfusionMatrixCallbackReuseImages(experiment, x_test, y_test, confusion_matrix)\n", + "callback = ConfusionMatrixCallbackReuseImages(\n", + " experiment, x_test, y_test, confusion_matrix\n", + ")\n", "\n", "model.fit(\n", " x_train,\n", @@ -1301,7 +1307,7 @@ ], "source": [ "experiment = comet_ml.Experiment(\n", - " project_name=\"confusion-matrix\", \n", + " project_name=\"confusion-matrix\",\n", ")" ] }, @@ -1367,7 +1373,9 @@ "metadata": {}, "outputs": [], "source": [ - "confusion_matrix.compute_matrix(y_test, y_predicted, images=x_test, image_shape=(28, 28))" + "confusion_matrix.compute_matrix(\n", + " y_test, y_predicted, images=x_test, image_shape=(28, 28)\n", + ")" ] }, { @@ -1468,7 +1476,9 @@ } ], "source": [ - "callback = ConfusionMatrixCallbackReuseImages(experiment, x_test, y_test, confusion_matrix)\n", + "callback = ConfusionMatrixCallbackReuseImages(\n", + " experiment, x_test, y_test, confusion_matrix\n", + ")\n", "\n", "model.fit(\n", " x_train,\n", diff --git a/notebooks/Comet-Python-API.ipynb b/notebooks/Comet-Python-API.ipynb index 496897a6..4118b35c 100644 --- a/notebooks/Comet-Python-API.ipynb +++ b/notebooks/Comet-Python-API.ipynb @@ -31,14 +31,14 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install comet_ml --quiet" + "%pip install -U \"comet_ml>=3.44.0\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To run the following experiments, you'll need to set your COMET_API_KEY. The easiest way to to this is to use the `comet_ml.init()` function:" + "To run the following experiments, you'll need to set your COMET_API_KEY. The easiest way to to this is to use the `comet_ml.login()` function:" ] }, { @@ -49,7 +49,7 @@ "source": [ "import comet_ml\n", "\n", - "comet_ml.init()" + "comet_ml.login()" ] }, { @@ -86,6 +86,7 @@ "import comet_ml\n", "\n", "import matplotlib.pyplot as plt\n", + "\n", "%matplotlib inline" ] }, @@ -301,7 +302,7 @@ } ], "source": [ - "comet_api.get(\"cometpublic\", \"fasttext\", 'e64c5915920f481bab8f4cb4dbd615be')" + "comet_api.get(\"cometpublic\", \"fasttext\", \"e64c5915920f481bab8f4cb4dbd615be\")" ] }, { @@ -626,7 +627,7 @@ "metadata": {}, "outputs": [], "source": [ - "steps, acc = zip(*steps_acc[:100]) # just the first 100 for now" + "steps, acc = zip(*steps_acc[:100]) # just the first 100 for now" ] }, { @@ -636,7 +637,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD5CAYAAAA3Os7hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAe4UlEQVR4nO3de3Rc5Xnv8e8zMxpdbUm25ZtksA3mYsAGYwgpIRASuoAk0CY5p5C2adoE2pOS9JZzDjk5K01ZTbu6TlaTZh2aU9qkuTUQQpLGSUgot1xIAlg2xsZ3g7El+SLJ1l2a+3P+mLGrCBnJ9oy2Zs/vs5aWZ+95rXn2bOk3r9797r3N3RERkfIXCboAEREpDgW6iEhIKNBFREJCgS4iEhIKdBGRkFCgi4iERGyqBmb2ReAdQLe7XzrJ8wb8A3ArMAq83903T/V9FyxY4MuXLz/tgkVEKtmmTZt63b1lsuemDHTgS8D/Bb5yiudvAVYVvt4AfL7w7+tavnw57e3t03h5ERE5wcwOnOq5KYdc3P2nwPHXaXI78BXPexZoMrMlp1+miIicjWKMobcCHeOWOwvrRERkBs3oQVEzu9vM2s2svaenZyZfWkQk9IoR6F3AsnHLbYV1r+HuD7j7endf39Iy6Zi+iIicoWIE+gbgfZZ3DTDg7oeL8H1FROQ0TGfa4oPADcACM+sE/hKoAnD3/wc8Sn7K4j7y0xZ/v1TFiojIqU0Z6O5+5xTPO/DHRatIRETOyHTmoYuURDKTpW8kzcBYmv7RFEOJDIlMlkQ6RzaXY159NS1zqmmuq+L4SIqjg0l6h5PUVEVprK2isbaKeCxCxCBiRjKTZTiZZSSZIRoxmmqraKyrojoWJZvLkc462ZyTcyfnkMnmGE1lGU1lSWVzxKNGPBYhFomQzuZIZXKkc04sYsSjEWJRYziZoW8kRf9omoaaGK1NtSxtqmV+Q5yG6hj18RiRiL3udnvh9aNTtBM5XQp0KZrhZIbeoSTDyQwjyQwjqczJgO0eTNLRN0rH8VGODiY4NpxiKJkJuuSSiEcjWOFDJhY1qmNRaqry64YSGYYSGbI5Z359nEVza2iur2I0lWUokWE4kcHJ33TGMJrqqmiZU82ChmpS2RyDY/kPQHeoqYpQUxUlFjEiZpgZEct/UETMyOac0XSWsVSGVCZ3sj4HTtzXpqE6xv2/vY65NTH+z3/s5thwimzOyeTyDU58WA4lMhwbSXJsOEXEoLk+zry6ODVV0cIHZL59LJL/4MvmnIGxNINjaYaTGWKRCNFI/v0Y/zEWj+W3oToWJRrJ124Y6WyORCZHIp3FCu1OvK+ZXP6D2QsfilVRwx2ShfaZnFNbFaUuHqUqGmEklWEwkf+ZPHFDHzOjpaGa1uZaljbWMJzMcnQoQfdggmzOqYpGiMciVMciJx+7QyKdJZnJkfNCm2j+MORQMs3gWIZEOjtum/LbfGK/5Dz/YZ7NOX9w7QretnpR0X/2FOhyWkaSGV442E/EoKEmRiwS4bn9x3h8x1Ge33/8ZBBMZtHcapY113FpayMLGqpZ0BCnuT5OU22cxtoq5tTEqI1HqYlFiUTg+EiK7sEk/WNp5tVXsXBODS1zqkmmc/le/ViKzLhedzwWyfeSq2MnA2VgLE0yk80HTcSIRIyoWT70IkZdPEptVT5wUxknnc2RyeWIRfK/xFVRI5PzfG89m6Ohuorm+iqaauMMJdJ09Y/R1TdG32iakWSG4WSGVDb/C+8OqUyOZCZHMp0l586cmirm1ubft+6hJN2DCfpGUzRUx1jSWEN9PHay555zp280Tc9Qkv29I8SjERrrqmiuixMxSKRzDCczZLJ+8vVOhGvOwSC/ffEoTXVxbFySGnB8NM0vXznGyz3DVMci/NNPXmF+fZz66lghWCFb+H4N1VUsaIhzzrw6cg59IykODyRIZXMnQ98dMrkc2ZxjZsytraKxLk5rcy25XP658T8fJ96f4WSG3uEUuZN/PeXDsroQik6+s3DiQykWsZPv0fgPnxMhWhsxEukshwfSpLM56qtjNNZW0dpUgxXehFzO6R5K8szeXo4OJaitirJ4bv7nq6Y6SjKTYyiR4fiJv9Syuf98jaooEYNMNv9z4eT36/yGOLVVUVKZHIlMlmQ6d3JfuPvJYI+YkS3RneIU6DKl3uEkP9x2mMd3dvPsy8dIZXOvabNqYQN3vXkl57c0UF8do6E6RkNNjIbqKPXVMZoLvbnT0dZcV6xNKIn5DdXMb6hmTVtT0KWckWf29vI7X3gOgMMDCQC+9PtXc1lbY5BlzbhszokYJ8O+nCnQZVIDo2me2dfLtzd38uM9PWRzzvL5dfzuG8/lzRe0EI9GGElmGEtnubS1kRUL6oMuWc7C0cF8oC9qrA64kpkXpmMZCvQKls05n//xPp7a1U1TXZzmujjZXI6tnQO80jsC5IdJPnjdCt51RRsXLGoIRS9GXuvwQIJYxFhQX3mBHiYK9ArVN5LiT7+xhZ/s6WFtWyNHBxPsOjxIzuGytkbefWUbV57bzFXL54WqByOTOzqQYNHcmiln6MjspkCvQC91DfCHX91Ez1CST/3mpbz36nPU865wRwYTLJqr3nm5U6BXmG9t6uRj39nGgvo4D//RG7l8WXke0JPiOjKQ4OIlc4MuQ86SAr1CpLM5PvWDnXzpF69yzcp53P/edcxvUI9M8tMHjwwmuOHChUGXImdJgR5iL3b08/OXe9lxaJAtHf109o3xwTet4N5bLiIW1e1kJW8okWY0lWVxBc5wCRsFegiNJDP87Q938rVnDwLQ1lzL6iVz+fitF3PLZbqZlPyqI4Upi4sbawOuRM6WAj1knt9/nI9+80U6+kb54JtWcM+N59NUFw+6LJnFjhZOKlo8tybgSuRsKdBDIp3N8dkn9vCPP36ZZc11fOPuN3L1inlBlyVl4MRZoksaFejlToEeAgeOjfCRh7bwYkc/v7V+GZ9452rqq7VrZXpODLks1LTFsqff+jLm7jyyqZNPbthONGLc/951vH2Nxsjl9BwdTDCvPk517PSutSOzjwK9TPWNpPjYt7fxo+1HeMOKefz9b11Oa5MOasnpOzyQYNksvxCaTI8CvQx1HB/l3Z//BX2jKe695SLuum6lTs+XMzaUyLBY4+ehoEAvQ3/9gx0MJzN850PXcmlrZV3qVEpjkWa4hILOLikzv3i5l8e2H+VDN5ynMJei0QyXcFCgl5FMNsd939tBa1MtH7xuZdDlSIhoDno4KNDLyEMbO9h1ZIiPv/3i0777j8jrWaQeeihoDL0MJNJZtnUN8PeP7+HqFfO45dLFQZckIaMhl3BQoM9i2zoH+KvvbWdr5wCpbI6aqgh/+c7Vuna5FJ0OioaDAn2WGklm+NDXN5FM53j/tcu58txm1p/brEveStHVxaPMrVEUhIH24iz1N4/upLNvjIf/8I1ctVzXZJHSWTy3Rn/1hYQOis5CP93Tw789d5C7rlupMJeS03BLeCjQZ5mBsTT/81tbOX9hA39+0wVBlyMVQAdEw0NDLrPMpx/bTfdQkm//zpWamigzQlMWw0M99Fmk4/goD208yB1XLWOtbt4sM0QnFYWHAn0W+dyTezEzPnzjqqBLkQqiC3OFhwJ9lni5Z5hvbe7kd685V79gMiOWL6hj1cIG1rTpmkBhMa1AN7ObzWy3me0zs3snef5cM3vSzLaa2Y/NrK34pYbbZ5/YS01VlP92w3lBlyIVoq25jsf//HqW6ObQoTFloJtZFLgfuAVYDdxpZqsnNPs08BV3XwPcB/xtsQsNs52HB/nei4f4/WuXs0AnDonIGZpOD/1qYJ+7v+LuKeAh4PYJbVYDTxUePz3J83IKx4aTfPSbLzKnJsbd16l3LiJnbjqB3gp0jFvuLKwb70XgXYXHvwnMMbP5Z19euHX1j/Ff/umX7Ose5nN3XEFjXVXQJYlIGSvWQdGPAteb2QvA9UAXkJ3YyMzuNrN2M2vv6ekp0kuXp33dw7zn87+gZzDJVz/wBt5y0cKgSxKRMjedE4u6gGXjltsK605y90MUeuhm1gC82937J34jd38AeABg/fr1foY1lz13556vbyadzfHQH17DJUs1y0BEzt50eugbgVVmtsLM4sAdwIbxDcxsgZmd+F4fA75Y3DLDZfPBfnYdGeKjv36hwlxEimbKQHf3DHAP8BiwE3jY3beb2X1mdluh2Q3AbjPbAywCPlWiekPhwecPUh+P8s61S4MuRURCZFrXcnH3R4FHJ6z7xLjHjwCPFLe0cBoYS/P9rYd417o26qt1KR0RKR6dKTrDvruli0Q6x3uvPifoUkQkZBToM8jd+fpzB7mstZFLWzV2LiLFpUCfQVs68gdD71TvXERKQIE+gx58/iB18Si3Xa6DoSJSfAr0GdJxfJR/f+EQv3lFKw06GCoiJaBAnyGf/o/dRCJwz43nB12KiISUAn0GbO3s57tbDvGBN63QpUpFpGQU6CXm7nzqBzuZXx/nj67X1RRFpHQU6CX25M5untt/nD952yrm1OhqiiJSOgr0EsrlnL/70S5WLqjXVEURKTkFegn9/OVe9nYP8+G3nk9VVG+1iJSWUqaEvv7cQZrrqrj1siVBlyIiFUCBXiLdQwke33GU91zZRnUsGnQ5IlIBFOgl8s32TjI519i5iMwYBXoJZHPOg88f5NfOm8/KloagyxGRCqFAL4Gf7u2hs2+M975BvXMRmTkK9BL4+nMHWdAQ59dXLw66FBGpIAr0IuseSvDUrm7ec+Uy4jG9vSIyc5Q4RfbDbUfI5px3rWsNuhQRqTAK9CL7/tZDXLCogQsWzQm6FBGpMAr0Ijo8MMbGV/t4xxrdwEJEZp4CvYh+sPUwAO9YozNDRWTmKdCL6PtbD7N6yVzNPReRQCjQi6Tj+ChbOvp5x1r1zkUkGAr0Inl0W2G45TKNn4tIMBToRfL9rYdZ29bIOfPrgi5FRCqUAr0IXu4ZZlvXgGa3iEigFOhF8K8/3088GuH2KxToIhIcBfpZ6htJ8cimTn7jiqUsnFMTdDkiUsEU6Gfpa88eIJHO8cHrVgZdiohUOAX6WUiks3z5l69y/QUtOtVfRAKnQD8L393SRe9wirvUOxeRWWBagW5mN5vZbjPbZ2b3TvL8OWb2tJm9YGZbzezW4pc6u7g7//Kz/Vy0eA7Xnj8/6HJERKYOdDOLAvcDtwCrgTvNbPWEZv8beNjdrwDuAP6x2IXONj/Z08Pe7mHuum4lZhZ0OSIi0+qhXw3sc/dX3D0FPATcPqGNA3MLjxuBQ8UrcXb6wjP7WTinmneu1VRFEZkdphPorUDHuOXOwrrxPgn8jpl1Ao8CHy5KdbPU7iND/GxvL7/3a8t1VyIRmTWKlUZ3Al9y9zbgVuCrZvaa721md5tZu5m19/T0FOmlZ94Xn9lPTVWE916tm0CLyOwxnUDvApaNW24rrBvvA8DDAO7+S6AGWDDxG7n7A+6+3t3Xt7S0nFnFAesdTvKdLV28e10bzfXxoMsRETlpOoG+EVhlZivMLE7+oOeGCW0OAm8FMLOLyQd6+XbBX8fXnj1AKpPjD960IuhSRER+xZSB7u4Z4B7gMWAn+dks283sPjO7rdDsL4C7zOxF4EHg/e7upSo6KIl0lq89e4C3XNjCebqJhYjMMrHpNHL3R8kf7By/7hPjHu8Ari1uabPPj146Qu9wig+8SScSicjsoykap+GJnUdpmVOtE4lEZFZSoE9TNuf8bG8vb17VohOJRGRWUqBP04ud/QyMpbnhwvKcnSMi4adAn6Yf7+4hYnDdqtfMxhQRmRUU6NP0kz09XL6siaY6zT0XkdlJgT4Nx4aTbO3s5/oLFgZdiojIKSnQp+GZfb24w/UaPxeRWUyBPg0/2d3DvPo4a1obgy5FROSUFOhTyOWcn+zp4bpVC4hENF1RRGYvBfoUth8a5NhIStMVRWTWU6BP4end3QBct0qBLiKzmwJ9Co9tP8K6c5pY0FAddCkiIq9Lgf46Dh4bZfuhQW65dEnQpYiITEmB/joe234EgJsvXRxwJSIiU1Ogv44fvnSYS5bOZdm8uqBLERGZkgL9FI4OJth8sJ+bL1HvXETKgwL9FP6jMNxyy2UKdBEpDwr0U/jhS0c4r6We8xfOCboUEZFpUaBP4vhIiuf2H9fBUBEpKwr0STyx8yjZnGu6ooiUFQX6JH68u5sljTVcsnRu0KWIiEybAn0Smw/0c9Xyebp3qIiUFQX6BIf6xzgymGDdOU1BlyIicloU6BNsPtgHwLpzmwOuRETk9CjQJ9h8oJ/qWISLFmv8XETKiwJ9ghc6+ljT1kg8prdGRMqLUmucZCbL9q5B1p2j4RYRKT8K9HFe6hoklc1xhQJdRMqQAn2cF04eENUMFxEpPwr0cTYf7KOtuZaFc2qCLkVE5LQp0Md54WC/xs9FpGwp0AsOD4xxeCDBFTqhSETK1LQC3cxuNrPdZrbPzO6d5PnPmNmWwtceM+svfqmltflAvmT10EWkXMWmamBmUeB+4CagE9hoZhvcfceJNu7+Z+Pafxi4ogS1ltTmg31UxyJcvEQnFIlIeZpOD/1qYJ+7v+LuKeAh4PbXaX8n8GAxipsp/aMpvrvlEFctn6cTikSkbE0nvVqBjnHLnYV1r2Fm5wIrgKdO8fzdZtZuZu09PT2nW2vJ/PUPdtI3muJjt14UdCkiImes2N3RO4BH3D072ZPu/oC7r3f39S0tLUV+6TPz0z09PLKpkz+6fiWXLG0MuhwRkTM2nUDvApaNW24rrJvMHZTRcMtIMsP/+s42VrbU8+EbVwVdjojIWZlOoG8EVpnZCjOLkw/tDRMbmdlFQDPwy+KWWDqfeXwPnX1j/N2711BTFQ26HBGRszJloLt7BrgHeAzYCTzs7tvN7D4zu21c0zuAh9zdS1Nqcbk733mhi3esWcJVy+cFXY6IyFmbctoigLs/Cjw6Yd0nJix/snhlld6hgQTHRlK8YeX8oEsRESmKip2jt60zfyLRmlYdCBWRcKjYQN/aOUBV1LhoyZygSxERKYqKDfRtXQNcuHgO1TEdDBWRcKjIQHd3tnYOcFmrLsQlIuFRkYHecXyMgbE0a9o0fi4i4VGRgf5i4YDoZTogKiIhUpGBvq1rgHgswgWLdEBURMKjIgN9a2c/Fy+ZqysrikioVFyi5XLOS12Dmn8uIqFTcYG+/9gIw8kMl+mAqIiETMUF+rbOAQDNcBGR0Km4QN/aOUBNVYTzWxqCLkVEpKgqLtC3dfVzydJGYtGK23QRCbmKSrVs4YCo5p+LSBhVVKDv7R5iLJ3l8mU65V9EwqeiAv3FjsIlc3VAVERCqKICfUvHAHNrYiyfXx90KSIiRVdRgf5iRz9rlzURiVjQpYiIFF3FBPpYKsvuo0OsbdP4uYiEU8UE+o7DA2RzzlodEBWRkKqYQN/SkT9DdK0OiIpISFVMoL/Y0c/SxhoWzq0JuhQRkZKonEDv7GeNxs9FJMQqItD7RlIcODaq8XMRCbWKCPQTt5xbu0zj5yISXpUR6B0DmOkeoiISbpUR6J39nN/SwJyaqqBLEREpmdAHuruztbNf4+ciEnqhD/Q9R4fpHU5x5bnNQZciIlJSoQ/0J3YeBeDGixYGXImISGmFPtAf33GUtW2NLNIJRSIScqEO9O7BBFs6+rlp9aKgSxERKblpBbqZ3Wxmu81sn5nde4o2/9XMdpjZdjP7enHLPDNP7uoG4G0KdBGpALGpGphZFLgfuAnoBDaa2QZ33zGuzSrgY8C17t5nZrNiwPqJHUdpa67lwkVzgi5FRKTkptNDvxrY5+6vuHsKeAi4fUKbu4D73b0PwN27i1vm6RtNZXhmXy83rV6EmW5oISLhN51AbwU6xi13FtaNdwFwgZn93MyeNbObJ/tGZna3mbWbWXtPT8+ZVTxNz+ztJZnJcdPFGm4RkcpQrIOiMWAVcANwJ/DPZvaaM3nc/QF3X+/u61taWor00pN7fMdR5tbEuGrFvJK+jojIbDGdQO8Clo1bbiusG68T2ODuaXffD+whH/CByOacp3Z185aLFlIVDfVEHhGRk6aTdhuBVWa2wsziwB3Ahglt/p187xwzW0B+COaVItZ5WnYeHuTYSEonE4lIRZky0N09A9wDPAbsBB529+1mdp+Z3VZo9hhwzMx2AE8D/93dj5Wq6KlsOtAHwFXLNdwiIpVjymmLAO7+KPDohHWfGPfYgT8vfAVu04E+ljTWsLSpNuhSRERmTCgHmDcd6GOdLsYlIhUmdIF+ZCBBV/8YV56jQBeRyhK6QN98MD9+rsvlikilCV2gbzrQR01VhNVL5wZdiojIjAploK9pbdL8cxGpOKFKvUQ6y/ZDAzogKiIVKVSBvq1rgHTWNX4uIhUpVIF+4oSidefohtAiUnlCF+grFtQzv6E66FJERGZcaALd3XnhYB/rNP9cRCpUaAL9wLFReodTGj8XkYoVmkB/Zl8vAFevUKCLSGUKTaA/vaubZfNqOa+lIehSREQCEYpAT6Sz/PzlXm68cKHuHyoiFSsUgf7sK8dIpHPcoBtaiEgFC0WgP72rm5qqCG9cOT/oUkREAlP2ge7uPLW7m2vPW0BNVTTockREAlP2gf5yzzAdx8d4i4ZbRKTClX2gP7WrG0CBLiIVr+wD/eldPVy4aA6tun+oiFS4sg70wUSaja8eV+9cRIQyD/Rf7Oslk3PecmFL0KWIiASurAP9uf3HqamKcIUuyCUiUt6B3v5qH5cvayIeK+vNEBEpirJNwuFkhu2HBrhq+bygSxERmRXKNtC3HOwn57BegS4iApRxoD//6nEiptvNiYicULaB3v7qcS5eMpc5NVVBlyIiMiuUZaCnszleONiv8XMRkXHKMtB3HBpkLJ1l/XJNVxQROaEsA33jq8cB1EMXERlnWoFuZjeb2W4z22dm907y/PvNrMfMthS+Plj8Uv9T+6t9nDOvjkVza0r5MiIiZSU2VQMziwL3AzcBncBGM9vg7jsmNP2Gu99Tghp/hbuz8dXjXK/T/UVEfsV0euhXA/vc/RV3TwEPAbeXtqxT2987wrGRlIZbREQmmE6gtwId45Y7C+smereZbTWzR8xsWVGqm0T7q30AXKUDoiIiv6JYB0W/Byx39zXA48CXJ2tkZnebWbuZtff09JzRCzXVVXHT6kWc19Jw5tWKiITQdAK9Cxjf424rrDvJ3Y+5e7Kw+C/AlZN9I3d/wN3Xu/v6lpYzGwP/9UsW88/vW4+ZndH/FxEJq+kE+kZglZmtMLM4cAewYXwDM1sybvE2YGfxShQRkemYcpaLu2fM7B7gMSAKfNHdt5vZfUC7u28APmJmtwEZ4Djw/hLWLCIikzB3D+SF169f7+3t7YG8tohIuTKzTe6+frLnyvJMUREReS0FuohISCjQRURCQoEuIhISCnQRkZAIbJaLmfUAB07jvywAektUzmym7a48lbrt2u7pOdfdJz0zM7BAP11m1n6qqTphpu2uPJW67drus6chFxGRkFCgi4iERDkF+gNBFxAQbXflqdRt13afpbIZQxcRkddXTj10ERF5HWUR6FPdpDoszGyZmT1tZjvMbLuZ/Ulh/Twze9zM9hb+DeXtmswsamYvmNn3C8srzOy5wn7/RuHyzaFiZk2Fu3ztMrOdZvbGStjfZvZnhZ/xl8zsQTOrCeP+NrMvmlm3mb00bt2k+9fyPlfY/q1mtu50X2/WB/q4m1TfAqwG7jSz1cFWVTIZ4C/cfTVwDfDHhW29F3jS3VcBTxaWw+hP+NVr6f8d8Bl3Px/oAz4QSFWl9Q/Aj9z9ImAt+e0P9f42s1bgI8B6d7+U/GW57yCc+/tLwM0T1p1q/94CrCp83Q18/nRfbNYHOrPsJtWl5O6H3X1z4fEQ+V/uVvLbe+K2fl8GfiOYCkvHzNqAt5O/4xWWvyXVjcAjhSah224zawTeDHwBwN1T7t5PBexv8vdiqDWzGFAHHCaE+9vdf0r+HhHjnWr/3g58xfOeBZom3DxoSuUQ6NO9SXWomNly4ArgOWCRux8uPHUEWBRQWaX0WeB/ALnC8nyg390zheUw7vcVQA/wr4Whpn8xs3pCvr/dvQv4NHCQfJAPAJsI//4+4VT796yzrhwCveKYWQPwLeBP3X1w/HOen5YUqqlJZvYOoNvdNwVdywyLAeuAz7v7FcAIE4ZXQrq/m8n3RlcAS4F6XjssURGKvX/LIdCnvEl1mJhZFfkw/zd3/3Zh9dETf3oV/u0Oqr4SuRa4zcxeJT+kdiP5seWmwp/kEM793gl0uvtzheVHyAd82Pf324D97t7j7mng2+R/BsK+v0841f4966wrh0Cf8ibVYVEYN/4CsNPd/37cUxuA3ys8/j3guzNdWym5+8fcvc3dl5Pfv0+5+28DTwPvKTQL43YfATrM7MLCqrcCOwj5/iY/1HKNmdUVfuZPbHeo9/c4p9q/G4D3FWa7XAMMjBuamR53n/VfwK3AHuBl4ONB11PC7XwT+T+/tgJbCl+3kh9PfhLYCzwBzAu61hK+BzcA3y88Xgk8D+wDvglUB11fCbb3cqC9sM//HWiuhP0N/BWwC3gJ+CpQHcb9DTxI/jhBmvxfZB841f4FjPyMvpeBbeRnAZ3W6+lMURGRkCiHIRcREZkGBbqISEgo0EVEQkKBLiISEgp0EZGQUKCLiISEAl1EJCQU6CIiIfH/AYDU7d+v19hvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -790,7 +791,7 @@ "source": [ "project = comet_api.get(\"cometpublic\", \"comet-notebooks\")\n", "## OR:\n", - "#project = comet_api.get(\"cometpublic/comet-notebooks\")" + "# project = comet_api.get(\"cometpublic/comet-notebooks\")" ] }, { @@ -908,7 +909,9 @@ } ], "source": [ - "exp = comet_api.get(\"cometpublic\", \"comet-notebooks\", 'd21f94a1c71841d2961da1e6ddb5ab20')\n", + "exp = comet_api.get(\n", + " \"cometpublic\", \"comet-notebooks\", \"d21f94a1c71841d2961da1e6ddb5ab20\"\n", + ")\n", "## OR\n", "# exp = comet_api.get(\"cometpublic/comet-notebooks/d21f94a1c71841d2961da1e6ddb5ab20\")\n", "exp" @@ -931,7 +934,7 @@ } ], "source": [ - "exp = comet_api.get(\"cometpublic\", \"comet-notebooks\", 'example 001')\n", + "exp = comet_api.get(\"cometpublic\", \"comet-notebooks\", \"example 001\")\n", "## OR\n", "## exp = comet_api.get(\"cometpublic/comet-notebooks/example 001\")\n", "exp" @@ -1399,7 +1402,7 @@ "metadata": {}, "outputs": [], "source": [ - "api_experiment = comet_api.get(\"cometpublic\", \"comet-notebooks\", 'example 001')" + "api_experiment = comet_api.get(\"cometpublic\", \"comet-notebooks\", \"example 001\")" ] }, { @@ -1649,7 +1652,9 @@ } ], "source": [ - "comet_api.get('cometpublic/ludwig/02a0ed902ce2481fb6e2fc9009ee593c').get_asset_list(asset_type=\"image\")" + "comet_api.get(\"cometpublic/ludwig/02a0ed902ce2481fb6e2fc9009ee593c\").get_asset_list(\n", + " asset_type=\"image\"\n", + ")" ] }, { @@ -1676,7 +1681,9 @@ } ], "source": [ - "asset_list = comet_api.get('cometpublic/ludwig/02a0ed902ce2481fb6e2fc9009ee593c').get_asset_list(asset_type=\"image\")\n", + "asset_list = comet_api.get(\n", + " \"cometpublic/ludwig/02a0ed902ce2481fb6e2fc9009ee593c\"\n", + ").get_asset_list(asset_type=\"image\")\n", "url = asset_list[0][\"link\"]\n", "url" ] @@ -1793,7 +1800,10 @@ } ], "source": [ - "[[p[\"valueCurrent\"] for p in exp.get_parameters_summary()] for exp in comet_api.get(\"dsblank/pytorch\")]" + "[\n", + " [p[\"valueCurrent\"] for p in exp.get_parameters_summary()]\n", + " for exp in comet_api.get(\"dsblank/pytorch\")\n", + "]" ] }, { @@ -1802,10 +1812,14 @@ "metadata": {}, "outputs": [], "source": [ - "experiments = [[(exp, \"hidden_size\", int(param[\"valueCurrent\"])) \n", - " for param in exp.get_parameters_summary() \n", - " if param[\"name\"] == \"hidden_size\"]\n", - " for exp in comet_api.get(\"dsblank/pytorch\")]\n", + "experiments = [\n", + " [\n", + " (exp, \"hidden_size\", int(param[\"valueCurrent\"]))\n", + " for param in exp.get_parameters_summary()\n", + " if param[\"name\"] == \"hidden_size\"\n", + " ]\n", + " for exp in comet_api.get(\"dsblank/pytorch\")\n", + "]\n", "experiments = [e[0] for e in experiments if len(e) > 0]" ] }, @@ -1852,6 +1866,8 @@ " for exp in comet_api.get(ws, pj):\n", " if exp.get_asset_list() != []:\n", " return (exp, exp.get_asset_list())\n", + "\n", + "\n", "exp, elist = find_asset([\"cometpublic\"])" ] }, diff --git a/notebooks/ExpiringDataExample.ipynb b/notebooks/ExpiringDataExample.ipynb index 0c991d18..29fd6a4b 100644 --- a/notebooks/ExpiringDataExample.ipynb +++ b/notebooks/ExpiringDataExample.ipynb @@ -25,7 +25,7 @@ } ], "source": [ - "%pip install --quiet comet_ml aitk.utils Pillow" + "%pip install -U \"comet_ml>=3.44.0\" aitk.utils Pillow" ] }, { @@ -81,7 +81,7 @@ " with open(filename, \"wb\") as f:\n", " f.write(g.read())\n", " if ext == \".zip\":\n", - " with zipfile.ZipFile(filename, 'r') as zip_ref:\n", + " with zipfile.ZipFile(filename, \"r\") as zip_ref:\n", " zip_ref.extractall(basename)" ] }, @@ -122,7 +122,7 @@ "metadata": {}, "outputs": [], "source": [ - "comet_ml.init()" + "comet_ml.login()" ] }, { @@ -144,7 +144,10 @@ " bg_color = random.choice([(120, 150, 180), (255, 225, 150)])\n", " image = Image.new(\"RGBA\", (24, 24), bg_color)\n", " for layer, probability in [\n", - " (\"0_face\", 1.0), (\"1_eye\", 1.0), (\"2_hair\", 0.8), (\"3_accessory\", 0.15)\n", + " (\"0_face\", 1.0),\n", + " (\"1_eye\", 1.0),\n", + " (\"2_hair\", 0.8),\n", + " (\"3_accessory\", 0.15),\n", " ]:\n", " if random.random() > probability:\n", " continue\n", @@ -285,12 +288,14 @@ " today = datetime.date.today()\n", " return add_days(today, random.randint(1, n))\n", "\n", + "\n", "def add_days(day, n):\n", " \"\"\"\n", " Method to do some date math.\n", " \"\"\"\n", " return day + datetime.timedelta(days=n)\n", - " \n", + "\n", + "\n", "def day_to_timestamp(day):\n", " \"\"\"\n", " Turn a day into an integer timestamp\n", @@ -298,6 +303,7 @@ " date = datetime.datetime(day.year, day.month, day.day)\n", " return date.timestamp()\n", "\n", + "\n", "def timestamp_to_day(timestamp):\n", " \"\"\"\n", " Turn a timestamp into a day\n", @@ -323,12 +329,7 @@ "outputs": [], "source": [ "for image in images:\n", - " experiment.log_image(\n", - " image, \n", - " metadata={\n", - " \"expires_on\": day_to_timestamp(random_day())\n", - " }\n", - " )" + " experiment.log_image(image, metadata={\"expires_on\": day_to_timestamp(random_day())})" ] }, { @@ -482,9 +483,7 @@ "outputs": [], "source": [ "# A date 90 days in the future:\n", - "expires_on = day_to_timestamp(\n", - " add_days(datetime.date.today(), 90)\n", - ")" + "expires_on = day_to_timestamp(add_days(datetime.date.today(), 90))" ] }, {