From d6deff0602beef19f3848fca093b3bf6be7b99b1 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Tue, 2 Jul 2024 23:08:54 -0400 Subject: [PATCH 01/13] Adds comet-ml plugin example Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/README.md | 36 ++++ .../comet_ml_plugin/__init__.py | 0 .../comet_ml_plugin/comet_ml_example.py | 158 ++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 examples/comet_ml_plugin/README.md create mode 100644 examples/comet_ml_plugin/comet_ml_plugin/__init__.py create mode 100644 examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py diff --git a/examples/comet_ml_plugin/README.md b/examples/comet_ml_plugin/README.md new file mode 100644 index 000000000..4dcd33d4a --- /dev/null +++ b/examples/comet_ml_plugin/README.md @@ -0,0 +1,36 @@ +(comet_ml)= + +# Comet ML + +```{eval-rst} +.. tags:: Integration, Data, Metrics, Intermediate +``` + +Comet’s machine learning platform integrates with your existing infrastructure and tools so you can manage, visualize, and optimize models—from training runs to production monitoring. This plugin integrates Flyte with Comet by configuring links between the two platforms. + +To install the plugin, run: + +```bash +pip install flytekitplugins-comet-ml +``` + +Comet requires an API key to authenticate with their platform. In the above example, a secret is created using +[Flyte's Secrets manager](https://docs.flyte.org/en/latest/user_guide/productionizing/secrets.html). + +To enable linking from the Flyte side panel to Comet.ml, add the following to Flyte's configuration: + +```yaml +plugins: + logs: + dynamic-log-links: + - comet-ml-execution-id: + displayName: Comet + templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .executionName }}{{ .nodeId }}{{ .taskRetryAttempt }}{{ .taskConfig.link_suffix }} + - comet-ml-custom-id: + displayName: Comet + templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .taskConfig.experiment_key }} +``` + +```{auto-examples-toc} +comet_ml_example +``` diff --git a/examples/comet_ml_plugin/comet_ml_plugin/__init__.py b/examples/comet_ml_plugin/comet_ml_plugin/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py new file mode 100644 index 000000000..18e310dca --- /dev/null +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -0,0 +1,158 @@ +# %% [markdown] +# (comet_ml_example)= +# +# # Comet Example +# Comet’s machine learning platform integrates with your existing infrastructure and +# tools so you can manage, visualize, and optimize models—from training runs to +# production monitoring. This plugin integrates Flyte with Comet by configuring +# links between the two platforms. +import os.path + +from flytekit import ( + ImageSpec, + Secret, + current_context, + task, + workflow, +) +from flytekit.types.directory import FlyteDirectory +from flytekitplugins.comet_ml import comet_ml_init + +# %% [markdown] +# First, we specify the project and workspace that we will use with Comet's platform +# Please update `PROJECT_NAME` and `WORKSPACE` to the value associated with your account. +# %% +PROJECT_NAME = "flytekit-comet-ml-v1" +WORKSPACE = "thomas-unionai" + +# %% [markdown] +# W&B requires an API key to authenticate with Comet. In the above example, +# the secret is created using +# [Flyte's Secrets manager](https://docs.flyte.org/en/latest/user_guide/productionizing/secrets.html). +# %% +secret = Secret(key="comet-ml-key", group="comet-ml-group") + +# %% [markdown] +# Next, we use `ImageSpec` to construct a container that contains the dependencies for this +# task: +# %% + +REGISTRY = "localhost:30000" +image = ImageSpec( + builder="fast-builder", + name="unionai", + apt_packages=["git"], + packages=[ + "torch==2.3.1", + "comet-ml==3.43.2", + "lightning==2.3.0", + "flytekitplugins-comet-ml", + "unionai==0.1.43", + "torchvision", + ], + registry=REGISTRY, +) + + +# %% [markdown] +# Here, we use a Flyte task to download the dataset and cache it: +# %% +@task(cache=True, cache_version="2", container_image=image) +def get_dataset() -> FlyteDirectory: + from torchvision.datasets import MNIST + + ctx = current_context() + dataset_dir = os.path.join(ctx.working_directory, "datasetset") + os.makedirs(dataset_dir, exist_ok=True) + + # Download training and evaluation dataset + MNIST(dataset_dir, train=True, download=True) + MNIST(dataset_dir, train=False, download=True) + + return dataset_dir + + +# %% +# The `comet_ml_init` decorator calls `comet_ml.init` and configures it to use Flyte's +# execution id as the Comet's experiment key. The body of the task is PyTorch Lightning +# training code, where we pass `CometLogger` into the `Trainer`'s `logger`. +@task( + secret_requests=[secret], + container_image=image, +) +@comet_ml_init( + project_name=PROJECT_NAME, + workspace=WORKSPACE, + secret=secret, +) +def train_lightning(dataset: FlyteDirectory, hidden_layer_size: int): + import pytorch_lightning as pl + import torch + import torch.nn.functional as F + from pytorch_lightning import Trainer + from pytorch_lightning.loggers import CometLogger + from torch.utils.data import DataLoader + from torchvision import transforms + from torchvision.datasets import MNIST + + class Model(pl.LightningModule): + def __init__(self, layer_size=784, hidden_layer_size=256): + super().__init__() + self.save_hyperparameters() + self.layers = torch.nn.Sequential( + torch.nn.Linear(layer_size, hidden_layer_size), + torch.nn.Linear(hidden_layer_size, 10), + ) + + def forward(self, x): + return torch.relu(self.layers(x.view(x.size(0), -1))) + + def training_step(self, batch, batch_nb): + x, y = batch + loss = F.cross_entropy(self(x), y) + self.logger.log_metrics({"train_loss": loss}, step=batch_nb) + return loss + + def validation_step(self, batch, batch_nb): + x, y = batch + y_hat = self.forward(x) + loss = F.cross_entropy(y_hat, y) + self.logger.log_metrics({"val_loss": loss}, step=batch_nb) + return loss + + def configure_optimizers(self): + return torch.optim.Adam(self.parameters(), lr=0.02) + + dataset.download() + train_ds = MNIST(dataset, train=True, download=False, transform=transforms.ToTensor()) + eval_ds = MNIST(dataset, train=False, download=False, transform=transforms.ToTensor()) + train_loader = DataLoader(train_ds, batch_size=32) + eval_loader = DataLoader(eval_ds, batch_size=32) + + comet_logger = CometLogger() + comet_logger.log_hyperparams({"batch_size": 32}) + + model = Model(hidden_layer_size=hidden_layer_size) + trainer = Trainer(max_epochs=1, fast_dev_run=True, logger=comet_logger) + trainer.fit(model, train_loader, eval_loader) + + +@workflow +def main(hidden_layer_size: int = 32): + dataset = get_dataset() + train_lightning(dataset=dataset, hidden_layer_size=hidden_layer_size) + + +# %% [markdown] +# To enable dynamic log links, add plugin to Flyte's configuration file: +# ```yaml +# plugins: +# logs: +# dynamic-log-links: +# - comet-ml-execution-id: +# displayName: Comet +# templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .executionName }}{{ .nodeId }}{{ .taskRetryAttempt }}{{ .taskConfig.link_suffix }} +# - comet-ml-custom-id: +# displayName: Comet +# templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .taskConfig.experiment_key }} +# ``` From 8d22818fea88ab19002e6390d545fff04b26fa9f Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Tue, 2 Jul 2024 23:12:01 -0400 Subject: [PATCH 02/13] Remove unneeded arguments Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index 18e310dca..c754f4af9 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -39,9 +39,7 @@ REGISTRY = "localhost:30000" image = ImageSpec( - builder="fast-builder", name="unionai", - apt_packages=["git"], packages=[ "torch==2.3.1", "comet-ml==3.43.2", From bcb5cfffc50fc4b70f31e2f78c2dbdd2102b149f Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 17 Jul 2024 12:44:12 -0400 Subject: [PATCH 03/13] Use new comet-ml name Signed-off-by: Thomas J. Fan --- .../comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index c754f4af9..dba62e683 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -16,7 +16,7 @@ workflow, ) from flytekit.types.directory import FlyteDirectory -from flytekitplugins.comet_ml import comet_ml_init +from flytekitplugins.comet_ml import comet_ml_login # %% [markdown] # First, we specify the project and workspace that we will use with Comet's platform @@ -71,14 +71,14 @@ def get_dataset() -> FlyteDirectory: # %% -# The `comet_ml_init` decorator calls `comet_ml.init` and configures it to use Flyte's +# The `comet_ml_login` decorator calls `comet_ml.init` and configures it to use Flyte's # execution id as the Comet's experiment key. The body of the task is PyTorch Lightning # training code, where we pass `CometLogger` into the `Trainer`'s `logger`. @task( secret_requests=[secret], container_image=image, ) -@comet_ml_init( +@comet_ml_login( project_name=PROJECT_NAME, workspace=WORKSPACE, secret=secret, From 0c90ad7cd6e6d0ced1f6f83a43f02d65062faaf9 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 17 Jul 2024 14:14:37 -0400 Subject: [PATCH 04/13] Use environment variable Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index dba62e683..22c5d9164 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -6,6 +6,7 @@ # tools so you can manage, visualize, and optimize models—from training runs to # production monitoring. This plugin integrates Flyte with Comet by configuring # links between the two platforms. +import os import os.path from flytekit import ( @@ -37,7 +38,7 @@ # task: # %% -REGISTRY = "localhost:30000" +REGISTRY = os.getenv("REGISTRY", "localhost:30000") image = ImageSpec( name="unionai", packages=[ @@ -45,7 +46,6 @@ "comet-ml==3.43.2", "lightning==2.3.0", "flytekitplugins-comet-ml", - "unionai==0.1.43", "torchvision", ], registry=REGISTRY, From 8adb29d08847e8c7792b7ea2c9eb3a67847ccb76 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 17 Jul 2024 14:22:44 -0400 Subject: [PATCH 05/13] Use double quotes Signed-off-by: Thomas J. Fan --- examples/wandb_plugin/wandb_plugin/wandb_example.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/wandb_plugin/wandb_plugin/wandb_example.py b/examples/wandb_plugin/wandb_plugin/wandb_example.py index 8873a7105..07d4017a3 100644 --- a/examples/wandb_plugin/wandb_plugin/wandb_example.py +++ b/examples/wandb_plugin/wandb_plugin/wandb_example.py @@ -82,8 +82,8 @@ def wf() -> float: # dynamic-log-links: # - wandb-execution-id: # displayName: Weights & Biases -# templateUris: '{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .executionName }}-{{ .nodeId }}-{{ .taskRetryAttempt }}' +# templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .executionName }}-{{ .nodeId }}-{{ .taskRetryAttempt }}" # - wandb-custom-id: # displayName: Weights & Biases -# templateUris: '{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .taskConfig.id }}' +# templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .taskConfig.id }}" # ``` From e54796e30f00dabd371bf82fe72b3c28981e7966 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 17 Jul 2024 15:52:53 -0400 Subject: [PATCH 06/13] Use flyte name Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index 22c5d9164..34301c028 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -40,7 +40,7 @@ REGISTRY = os.getenv("REGISTRY", "localhost:30000") image = ImageSpec( - name="unionai", + name="comet-ml", packages=[ "torch==2.3.1", "comet-ml==3.43.2", From 066bf9ef233a7dea64b81833819506ba8fbcbfb6 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Thu, 18 Jul 2024 15:50:16 -0400 Subject: [PATCH 07/13] Use quotes Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/README.md | 4 ++-- examples/wandb_plugin/wandb_plugin/wandb_example.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/comet_ml_plugin/README.md b/examples/comet_ml_plugin/README.md index 4dcd33d4a..943bb829b 100644 --- a/examples/comet_ml_plugin/README.md +++ b/examples/comet_ml_plugin/README.md @@ -25,10 +25,10 @@ plugins: dynamic-log-links: - comet-ml-execution-id: displayName: Comet - templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .executionName }}{{ .nodeId }}{{ .taskRetryAttempt }}{{ .taskConfig.link_suffix }} + templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .executionName }}{{ .nodeId }}{{ .taskRetryAttempt }}{{ .taskConfig.link_suffix }}" - comet-ml-custom-id: displayName: Comet - templateUris: {{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .taskConfig.experiment_key }} + templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.workspace }}/{{ .taskConfig.project_name }}/{{ .taskConfig.experiment_key }}" ``` ```{auto-examples-toc} diff --git a/examples/wandb_plugin/wandb_plugin/wandb_example.py b/examples/wandb_plugin/wandb_plugin/wandb_example.py index 07d4017a3..8873a7105 100644 --- a/examples/wandb_plugin/wandb_plugin/wandb_example.py +++ b/examples/wandb_plugin/wandb_plugin/wandb_example.py @@ -82,8 +82,8 @@ def wf() -> float: # dynamic-log-links: # - wandb-execution-id: # displayName: Weights & Biases -# templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .executionName }}-{{ .nodeId }}-{{ .taskRetryAttempt }}" +# templateUris: '{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .executionName }}-{{ .nodeId }}-{{ .taskRetryAttempt }}' # - wandb-custom-id: # displayName: Weights & Biases -# templateUris: "{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .taskConfig.id }}" +# templateUris: '{{ .taskConfig.host }}/{{ .taskConfig.entity }}/{{ .taskConfig.project }}/runs/{{ .taskConfig.id }}' # ``` From 8dbc6bf4b613932a079a237510e582ba635eab9e Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 24 Jul 2024 09:45:02 -0400 Subject: [PATCH 08/13] Add to toc Signed-off-by: Thomas J. Fan --- docs/integrations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/integrations.md b/docs/integrations.md index 60d68ed1d..c16717e28 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -42,6 +42,8 @@ Flytekit functionality. These plugins can be anything and for comparison can be - Run analytical queries using DuckDB. * - {doc}`Weights and Biases ` - `wandb`: Machine learning platform to build better models faster. +* - {doc}`Comet ` + - `comet-ml`: Comet’s machine learning platform. ``` :::{dropdown} {fa}`info-circle` Using flytekit plugins From acbbe8a58df1e0cb4f860b977410a9a8ec56c0fa Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 24 Jul 2024 09:45:44 -0400 Subject: [PATCH 09/13] Address comments Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/README.md | 2 +- examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/comet_ml_plugin/README.md b/examples/comet_ml_plugin/README.md index 943bb829b..40a962a52 100644 --- a/examples/comet_ml_plugin/README.md +++ b/examples/comet_ml_plugin/README.md @@ -6,7 +6,7 @@ .. tags:: Integration, Data, Metrics, Intermediate ``` -Comet’s machine learning platform integrates with your existing infrastructure and tools so you can manage, visualize, and optimize models—from training runs to production monitoring. This plugin integrates Flyte with Comet by configuring links between the two platforms. +Comet’s machine learning platform integrates with your existing infrastructure and tools so you can manage, visualize, and optimize models from training runs to production monitoring. This plugin integrates Flyte with Comet by configuring links between the two platforms. To install the plugin, run: diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index 34301c028..c9eefb937 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -3,7 +3,7 @@ # # # Comet Example # Comet’s machine learning platform integrates with your existing infrastructure and -# tools so you can manage, visualize, and optimize models—from training runs to +# tools so you can manage, visualize, and optimize models from training runs to # production monitoring. This plugin integrates Flyte with Comet by configuring # links between the two platforms. import os @@ -21,7 +21,7 @@ # %% [markdown] # First, we specify the project and workspace that we will use with Comet's platform -# Please update `PROJECT_NAME` and `WORKSPACE` to the value associated with your account. +# Please update `PROJECT_NAME` and `WORKSPACE` to the values associated with your account. # %% PROJECT_NAME = "flytekit-comet-ml-v1" WORKSPACE = "thomas-unionai" From 82639e5f778124b39efd474baff7f0788788de95 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Thu, 25 Jul 2024 10:53:49 -0400 Subject: [PATCH 10/13] Adds comet-ml dockerfile Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/Dockerfile | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 examples/comet_ml_plugin/Dockerfile diff --git a/examples/comet_ml_plugin/Dockerfile b/examples/comet_ml_plugin/Dockerfile new file mode 100644 index 000000000..4e04f77bd --- /dev/null +++ b/examples/comet_ml_plugin/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.11-slim-bookworm +LABEL org.opencontainers.image.source https://github.com/flyteorg/flytesnacks + +WORKDIR /root +ENV VENV /opt/venv +ENV LANG C.UTF-8 +ENV LC_ALL C.UTF-8 +ENV PYTHONPATH /root + +WORKDIR /root + +ENV VENV /opt/venv +# Virtual environment +RUN python3 -m venv ${VENV} +ENV PATH="${VENV}/bin:$PATH" + +# Install Python dependencies +COPY requirements.in /root +RUN pip install -r /root/requirements.in + +# Copy the actual code +COPY . /root + +# This tag is supplied by the build script and will be used to determine the version +# when registering tasks, workflows, and launch plans +ARG tag +ENV FLYTE_INTERNAL_IMAGE $tag From bdb39f76b28925c8a8bde69ba50926e228d5e4f7 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Wed, 31 Jul 2024 10:49:20 -0400 Subject: [PATCH 11/13] Fixes docker image Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/requirements.in | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/comet_ml_plugin/requirements.in diff --git a/examples/comet_ml_plugin/requirements.in b/examples/comet_ml_plugin/requirements.in new file mode 100644 index 000000000..bfadcb009 --- /dev/null +++ b/examples/comet_ml_plugin/requirements.in @@ -0,0 +1 @@ +flytekitplugins-comet-ml From b61f903acffb8b73119aa4b89f6e46b1f63bc3c7 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Mon, 5 Aug 2024 12:20:55 -0400 Subject: [PATCH 12/13] Fix merge Signed-off-by: Thomas J. Fan --- docs/integrations.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/integrations.md b/docs/integrations.md index 7220d41cd..7ec751597 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -42,13 +42,10 @@ Flytekit functionality. These plugins can be anything and for comparison can be - Run analytical queries using DuckDB. * - {doc}`Weights and Biases ` - `wandb`: Machine learning platform to build better models faster. -<<<<<<< HEAD -* - {doc}`Comet ` - - `comet-ml`: Comet’s machine learning platform. -======= * - {doc}`NIM ` - Serve optimized model containers with NIM. ->>>>>>> upstream/master +* - {doc}`Comet ` + - `comet-ml`: Comet’s machine learning platform. ``` :::{dropdown} {fa}`info-circle` Using flytekit plugins From 2486869bc58912494fe46a3f13b1a72127688137 Mon Sep 17 00:00:00 2001 From: "Thomas J. Fan" Date: Tue, 13 Aug 2024 16:42:15 -0400 Subject: [PATCH 13/13] Use default image builder Signed-off-by: Thomas J. Fan --- examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py index c9eefb937..2731e109b 100644 --- a/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py +++ b/examples/comet_ml_plugin/comet_ml_plugin/comet_ml_example.py @@ -48,6 +48,7 @@ "flytekitplugins-comet-ml", "torchvision", ], + builder="default", registry=REGISTRY, )