Comet
zenml.integrations.comet
special
Initialization for the Comet integration.
The CometML integrations currently enables you to use Comet tracking as a convenient way to visualize your experiment runs within the Comet ui.
CometIntegration (Integration)
Definition of Comet integration for ZenML.
Source code in zenml/integrations/comet/__init__.py
class CometIntegration(Integration):
"""Definition of Comet integration for ZenML."""
NAME = COMET
REQUIREMENTS = ["comet-ml>=3.0.0"]
@classmethod
def flavors(cls) -> List[Type[Flavor]]:
"""Declare the stack component flavors for the Comet integration.
Returns:
List of stack component flavors for this integration.
"""
from zenml.integrations.comet.flavors import (
CometExperimentTrackerFlavor,
)
return [CometExperimentTrackerFlavor]
flavors()
classmethod
Declare the stack component flavors for the Comet integration.
Returns:
Type | Description |
---|---|
List[Type[zenml.stack.flavor.Flavor]] |
List of stack component flavors for this integration. |
Source code in zenml/integrations/comet/__init__.py
@classmethod
def flavors(cls) -> List[Type[Flavor]]:
"""Declare the stack component flavors for the Comet integration.
Returns:
List of stack component flavors for this integration.
"""
from zenml.integrations.comet.flavors import (
CometExperimentTrackerFlavor,
)
return [CometExperimentTrackerFlavor]
experiment_trackers
special
Initialization for the comet experiment tracker.
comet_experiment_tracker
Implementation for the Comet experiment tracker.
CometExperimentTracker (BaseExperimentTracker)
Track experiment using Comet.
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
class CometExperimentTracker(BaseExperimentTracker):
"""Track experiment using Comet."""
@property
def config(self) -> CometExperimentTrackerConfig:
"""Returns the `CometExperimentTrackerConfig` config.
Returns:
The configuration.
"""
return cast(CometExperimentTrackerConfig, self._config)
@property
def settings_class(self) -> Type[CometExperimentTrackerSettings]:
"""Settings class for the Comet experiment tracker.
Returns:
The settings class.
"""
return CometExperimentTrackerSettings
def prepare_step_run(self, info: "StepRunInfo") -> None:
"""Configures a Comet experiment.
Args:
info: Info about the step that will be executed.
"""
os.environ[COMET_API_KEY] = self.config.api_key
settings = cast(
CometExperimentTrackerSettings, self.get_settings(info)
)
tags = settings.tags + [info.run_name, info.pipeline.name]
comet_exp_name = (
settings.run_name or f"{info.run_name}_{info.pipeline_step_name}"
)
self._initialize_comet(
run_name=comet_exp_name, tags=tags, settings=settings.settings
)
def get_step_run_metadata(
self, info: "StepRunInfo"
) -> Dict[str, "MetadataType"]:
"""Get component- and step-specific metadata after a step ran.
Args:
info: Info about the step that was executed.
Returns:
A dictionary of metadata.
"""
exp_url: Optional[str] = None
exp_name: Optional[str] = None
if self.experiment:
exp_url = self.experiment.url
exp_name = self.experiment.name
# If the URL cannot be retrieved, use the default experiment URL
default_exp_url = (
f"https://www.comet.com/{self.config.workspace}/"
f"{self.config.project_name}/experiments/"
)
exp_url = exp_url or default_exp_url
# If the experiment name cannot be retrieved, use the default name
default_exp_name = f"{info.run_name}_{info.pipeline_step_name}"
settings = cast(
CometExperimentTrackerSettings, self.get_settings(info)
)
exp_name = exp_name or settings.run_name or default_exp_name
return {
METADATA_EXPERIMENT_TRACKER_URL: Uri(exp_url),
"comet_experiment_name": exp_name,
}
def cleanup_step_run(self, info: "StepRunInfo", step_failed: bool) -> None:
"""Stops the Comet experiment.
Args:
info: Info about the step that was executed.
step_failed: Whether the step failed or not.
"""
if self.experiment:
self.experiment.end()
os.environ.pop(COMET_API_KEY, None)
def log_metrics(
self,
metrics: Dict[str, Any],
step: Optional[int] = None,
) -> None:
"""Logs metrics to the Comet experiment.
Args:
metrics: Dictionary of metrics to log.
step: Optional step number associated with the metrics.
"""
if self.experiment:
self.experiment.log_metrics(metrics, step=step)
def log_params(self, params: Dict[str, Any]) -> None:
"""Logs parameters to the Comet experiment.
Args:
params: Dictionary of parameters to log.
"""
if self.experiment:
self.experiment.log_parameters(params)
def _initialize_comet(
self,
run_name: str,
tags: List[str],
settings: Union[Dict[str, Any], None] = None,
) -> None:
"""Initializes a Comet experiment.
Args:
run_name: Name of the Comet experiment.
tags: Tags to attach to the Comet experiment.
settings: Additional settings for the Comet experiment.
"""
logger.info(
f"Initializing Comet with workspace {self.config.workspace}, project "
f"name: {self.config.project_name}, run_name: {run_name}."
)
self.experiment = Experiment(
workspace=self.config.workspace,
project_name=self.config.project_name,
**settings or {},
)
self.experiment.set_name(run_name)
self.experiment.add_tags(tags)
config: CometExperimentTrackerConfig
property
readonly
Returns the CometExperimentTrackerConfig
config.
Returns:
Type | Description |
---|---|
CometExperimentTrackerConfig |
The configuration. |
settings_class: Type[zenml.integrations.comet.flavors.comet_experiment_tracker_flavor.CometExperimentTrackerSettings]
property
readonly
Settings class for the Comet experiment tracker.
Returns:
Type | Description |
---|---|
Type[zenml.integrations.comet.flavors.comet_experiment_tracker_flavor.CometExperimentTrackerSettings] |
The settings class. |
cleanup_step_run(self, info, step_failed)
Stops the Comet experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
info |
StepRunInfo |
Info about the step that was executed. |
required |
step_failed |
bool |
Whether the step failed or not. |
required |
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
def cleanup_step_run(self, info: "StepRunInfo", step_failed: bool) -> None:
"""Stops the Comet experiment.
Args:
info: Info about the step that was executed.
step_failed: Whether the step failed or not.
"""
if self.experiment:
self.experiment.end()
os.environ.pop(COMET_API_KEY, None)
get_step_run_metadata(self, info)
Get component- and step-specific metadata after a step ran.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
info |
StepRunInfo |
Info about the step that was executed. |
required |
Returns:
Type | Description |
---|---|
Dict[str, MetadataType] |
A dictionary of metadata. |
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
def get_step_run_metadata(
self, info: "StepRunInfo"
) -> Dict[str, "MetadataType"]:
"""Get component- and step-specific metadata after a step ran.
Args:
info: Info about the step that was executed.
Returns:
A dictionary of metadata.
"""
exp_url: Optional[str] = None
exp_name: Optional[str] = None
if self.experiment:
exp_url = self.experiment.url
exp_name = self.experiment.name
# If the URL cannot be retrieved, use the default experiment URL
default_exp_url = (
f"https://www.comet.com/{self.config.workspace}/"
f"{self.config.project_name}/experiments/"
)
exp_url = exp_url or default_exp_url
# If the experiment name cannot be retrieved, use the default name
default_exp_name = f"{info.run_name}_{info.pipeline_step_name}"
settings = cast(
CometExperimentTrackerSettings, self.get_settings(info)
)
exp_name = exp_name or settings.run_name or default_exp_name
return {
METADATA_EXPERIMENT_TRACKER_URL: Uri(exp_url),
"comet_experiment_name": exp_name,
}
log_metrics(self, metrics, step=None)
Logs metrics to the Comet experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
metrics |
Dict[str, Any] |
Dictionary of metrics to log. |
required |
step |
Optional[int] |
Optional step number associated with the metrics. |
None |
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
def log_metrics(
self,
metrics: Dict[str, Any],
step: Optional[int] = None,
) -> None:
"""Logs metrics to the Comet experiment.
Args:
metrics: Dictionary of metrics to log.
step: Optional step number associated with the metrics.
"""
if self.experiment:
self.experiment.log_metrics(metrics, step=step)
log_params(self, params)
Logs parameters to the Comet experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
params |
Dict[str, Any] |
Dictionary of parameters to log. |
required |
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
def log_params(self, params: Dict[str, Any]) -> None:
"""Logs parameters to the Comet experiment.
Args:
params: Dictionary of parameters to log.
"""
if self.experiment:
self.experiment.log_parameters(params)
prepare_step_run(self, info)
Configures a Comet experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
info |
StepRunInfo |
Info about the step that will be executed. |
required |
Source code in zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py
def prepare_step_run(self, info: "StepRunInfo") -> None:
"""Configures a Comet experiment.
Args:
info: Info about the step that will be executed.
"""
os.environ[COMET_API_KEY] = self.config.api_key
settings = cast(
CometExperimentTrackerSettings, self.get_settings(info)
)
tags = settings.tags + [info.run_name, info.pipeline.name]
comet_exp_name = (
settings.run_name or f"{info.run_name}_{info.pipeline_step_name}"
)
self._initialize_comet(
run_name=comet_exp_name, tags=tags, settings=settings.settings
)
flavors
special
Comet integration flavors.
comet_experiment_tracker_flavor
Comet experiment tracker flavor.
CometExperimentTrackerConfig (BaseExperimentTrackerConfig, CometExperimentTrackerSettings)
Config for the Comet experiment tracker.
Attributes:
Name | Type | Description |
---|---|---|
workspace |
Optional[str] |
Name of an existing Comet workspace. |
project_name |
Optional[str] |
Name of an existing Comet project to log to. |
api_key |
str |
API key that should be authorized to log to the configured Comet workspace and project. |
Source code in zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py
class CometExperimentTrackerConfig(
BaseExperimentTrackerConfig, CometExperimentTrackerSettings
):
"""Config for the Comet experiment tracker.
Attributes:
workspace: Name of an existing Comet workspace.
project_name: Name of an existing Comet project to log to.
api_key: API key that should be authorized to log to the configured Comet
workspace and project.
"""
api_key: str = SecretField()
workspace: Optional[str] = None
project_name: Optional[str] = None
CometExperimentTrackerFlavor (BaseExperimentTrackerFlavor)
Flavor for the Comet experiment tracker.
Source code in zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py
class CometExperimentTrackerFlavor(BaseExperimentTrackerFlavor):
"""Flavor for the Comet experiment tracker."""
@property
def name(self) -> str:
"""Name of the flavor.
Returns:
The name of the flavor.
"""
return COMET_EXPERIMENT_TRACKER_FLAVOR
@property
def docs_url(self) -> Optional[str]:
"""A url to point at docs explaining this flavor.
Returns:
A flavor docs url.
"""
return self.generate_default_docs_url()
@property
def sdk_docs_url(self) -> Optional[str]:
"""A url to point at SDK docs explaining this flavor.
Returns:
A flavor SDK docs url.
"""
return self.generate_default_sdk_docs_url()
@property
def logo_url(self) -> str:
"""A url to represent the flavor in the dashboard.
Returns:
The flavor logo.
"""
return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/experiment_tracker/comet.png"
@property
def config_class(self) -> Type[CometExperimentTrackerConfig]:
"""Returns `CometExperimentTrackerConfig` config class.
Returns:
The config class.
"""
return CometExperimentTrackerConfig
@property
def implementation_class(self) -> Type["CometExperimentTracker"]:
"""Implementation class for this flavor.
Returns:
The implementation class.
"""
from zenml.integrations.comet.experiment_trackers import (
CometExperimentTracker,
)
return CometExperimentTracker
config_class: Type[zenml.integrations.comet.flavors.comet_experiment_tracker_flavor.CometExperimentTrackerConfig]
property
readonly
Returns CometExperimentTrackerConfig
config class.
Returns:
Type | Description |
---|---|
Type[zenml.integrations.comet.flavors.comet_experiment_tracker_flavor.CometExperimentTrackerConfig] |
The config class. |
docs_url: Optional[str]
property
readonly
A url to point at docs explaining this flavor.
Returns:
Type | Description |
---|---|
Optional[str] |
A flavor docs url. |
implementation_class: Type[CometExperimentTracker]
property
readonly
Implementation class for this flavor.
Returns:
Type | Description |
---|---|
Type[CometExperimentTracker] |
The implementation class. |
logo_url: str
property
readonly
A url to represent the flavor in the dashboard.
Returns:
Type | Description |
---|---|
str |
The flavor logo. |
name: str
property
readonly
Name of the flavor.
Returns:
Type | Description |
---|---|
str |
The name of the flavor. |
sdk_docs_url: Optional[str]
property
readonly
A url to point at SDK docs explaining this flavor.
Returns:
Type | Description |
---|---|
Optional[str] |
A flavor SDK docs url. |
CometExperimentTrackerSettings (BaseSettings)
Settings for the Comet experiment tracker.
Attributes:
Name | Type | Description |
---|---|---|
run_name |
Optional[str] |
The Comet experiment name. |
tags |
List[str] |
Tags for the Comet experiment. |
settings |
Dict[str, Any] |
Settings for the Comet experiment. |
Source code in zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py
class CometExperimentTrackerSettings(BaseSettings):
"""Settings for the Comet experiment tracker.
Attributes:
run_name: The Comet experiment name.
tags: Tags for the Comet experiment.
settings: Settings for the Comet experiment.
"""
run_name: Optional[str] = None
tags: List[str] = []
settings: Dict[str, Any] = {}