From ad7c782e80c3527da5257197b62ca78c5b0bce86 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Thu, 2 Mar 2023 18:42:46 -0800 Subject: [PATCH 01/23] Add queue settings to command job --- sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py | 2 +- .../ml/_schema/job/parameterized_command.py | 2 ++ .../azure/ai/ml/_schema/queue_settings.py | 19 ++++++++++++ .../azure/ai/ml/entities/__init__.py | 1 + .../azure/ai/ml/entities/_builders/command.py | 29 ++++++++++++++++--- .../entities/_component/command_component.py | 3 ++ .../azure/ai/ml/entities/_job/command_job.py | 16 ++++------ .../azure/ai/ml/entities/_job/job.py | 7 +++-- .../ml/entities/_job/parameterized_command.py | 5 +++- .../ai/ml/entities/_job/queue_settings.py | 24 +++++++++++++++ .../azure/ai/ml/operations/_job_operations.py | 8 ++--- 11 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py create mode 100644 sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py index d38596bb310c..8cd2abaa8298 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py @@ -465,7 +465,7 @@ def __init__( self._jobs = JobOperations( self._operation_scope, self._operation_config, - self._service_client_12_2022_preview, + self._service_client_02_2023_preview, self._operation_container, self._credential, _service_client_kwargs=kwargs, diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py index 58334e8bf36d..91eb582e0d20 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py @@ -7,6 +7,7 @@ from azure.ai.ml._schema.core.fields import CodeField, DistributionField, NestedField from azure.ai.ml._schema.core.schema import PathAwareSchema from azure.ai.ml._schema.job_resource_configuration import JobResourceConfigurationSchema +from azure.ai.ml._schema.queue_settings import QueueSettingsSchema from azure.ai.ml.constants._common import AzureMLResourceType from azure.ai.ml._schema.job.input_output_entry import InputLiteralValueSchema @@ -40,3 +41,4 @@ class ParameterizedCommandSchema(PathAwareSchema): ) resources = NestedField(JobResourceConfigurationSchema) distribution = DistributionField() + queue_settings = NestedField(QueueSettingsSchema) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py new file mode 100644 index 000000000000..c7b87f56a05d --- /dev/null +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -0,0 +1,19 @@ +# --------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# --------------------------------------------------------- + +# pylint: disable=unused-argument,no-self-use + +from marshmallow import fields, post_load + +from azure.ai.ml._schema.core.schema_meta import PatchedSchemaMeta + + +class QueueSettingsSchema(metaclass=PatchedSchemaMeta): + job_tier = fields.Str(metadata={"description": "Dedicated/Spot."}) + + @post_load + def make(self, data, **kwargs): + from azure.ai.ml.entities import QueueSettings + + return QueueSettings(**data) \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py index 41fec95f10b4..f5c4c0cfd458 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py @@ -87,6 +87,7 @@ # Pipeline related entities goes behind component since it depends on component from ._job.pipeline.pipeline_job import PipelineJob, PipelineJobSettings +from ._job.queue_settings import QueueSettings from ._job.resource_configuration import ResourceConfiguration from ._job.service_instance import ServiceInstance from ._job.spark_job import SparkJob diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index e539da721970..80d6ef05157f 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -13,10 +13,11 @@ from marshmallow import INCLUDE, Schema -from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJob as RestCommandJob -from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJobLimits as RestCommandJobLimits -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration +from azure.ai.ml._restclient.v2023_02_01_preview.models import CommandJob as RestCommandJob +from azure.ai.ml._restclient.v2023_02_01_preview.models import CommandJobLimits as RestCommandJobLimits +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings as RestQueueSettings from azure.ai.ml._schema.core.fields import NestedField, UnionField from azure.ai.ml._schema.job.command_job import CommandJobSchema from azure.ai.ml._schema.job.identity import AMLTokenIdentitySchema, ManagedIdentitySchema, UserIdentitySchema @@ -51,6 +52,7 @@ TensorBoardJobService, VsCodeJobService, ) +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.entities._job.sweep.early_termination_policy import EarlyTerminationPolicy from azure.ai.ml.entities._job.sweep.objective import Objective from azure.ai.ml.entities._job.sweep.search_space import ( @@ -165,6 +167,7 @@ def __init__( services: Optional[ Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] ] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type @@ -195,10 +198,12 @@ def __init__( self.environment = environment self._resources = resources self._services = services + self._queue_settings = queue_settings if isinstance(self.component, CommandComponent): self.resources = self.resources or self.component.resources self.distribution = self.distribution or self.component.distribution + self._queue_settings = self._queue_settings or self.component.queue_settings self._swept = False self._init = False @@ -256,6 +261,16 @@ def resources(self, value: Union[Dict, JobResourceConfiguration]): value = JobResourceConfiguration(**value) self._resources = value + @property + def queue_settings(self) -> QueueSettings: + return self._queue_settings + + @queue_settings.setter + def queue_settings(self, value: Union[Dict, QueueSettings]): + if isinstance(value, dict): + value = QueueSettings(**value) + self._queue_settings = value + @property def identity( self, @@ -504,6 +519,7 @@ def _to_job(self) -> CommandJob: services=self.services, creation_context=self.creation_context, parameters=self.parameters, + queue_settings=self.queue_settings ) @classmethod @@ -568,6 +584,10 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: if "identity" in obj and obj["identity"]: obj["identity"] = _BaseJobIdentityConfiguration._load(obj["identity"]) + if "queue_settings" in obj and obj["queue_settings"]: + queue_settings = RestQueueSettings.from_dict(obj["queue_settings"]) + obj["queue_settings"] = QueueSettings._from_rest_object(queue_settings) + return obj @classmethod @@ -602,6 +622,7 @@ def _load_from_rest_job(cls, obj: JobBase) -> "Command": command_job._id = obj.id command_job.resources = JobResourceConfiguration._from_rest_object(rest_command_job.resources) command_job.limits = CommandJobLimits._from_rest_object(rest_command_job.limits) + command_job.queue_settings = QueueSettings._from_rest_object(rest_command_job.queue_settings) command_job.component._source = ( ComponentSource.REMOTE_WORKSPACE_JOB ) # This is used by pipeline job telemetries. diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py index 905b673fbbab..3d1056e75824 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py @@ -19,6 +19,7 @@ ) from azure.ai.ml.entities._job.job_resource_configuration import JobResourceConfiguration from azure.ai.ml.entities._job.parameterized_command import ParameterizedCommand +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationException from ..._restclient.v2022_05_01.models import ComponentVersionData @@ -87,6 +88,7 @@ def __init__( instance_count: Optional[int] = None, # promoted property from resources.instance_count is_deterministic: bool = True, properties: Optional[Dict] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type @@ -122,6 +124,7 @@ def __init__( self.environment = environment self.resources = resources self.distribution = distribution + self.queue_settings = queue_settings # check mutual exclusivity of promoted properties if self.resources is not None and instance_count is not None: diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py index 1bc997e50967..fd74472bb7fe 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py @@ -9,8 +9,8 @@ from pathlib import Path from typing import Dict, Optional, Union -from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJob as RestCommandJob -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase +from azure.ai.ml._restclient.v2023_02_01_preview.models import CommandJob as RestCommandJob +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase from azure.ai.ml._schema.job.command_job import CommandJobSchema from azure.ai.ml._utils.utils import map_single_brackets_and_warn from azure.ai.ml.constants import JobType @@ -47,6 +47,7 @@ from .job_limits import CommandJobLimits from .job_resource_configuration import JobResourceConfiguration from .parameterized_command import ParameterizedCommand +from .queue_settings import QueueSettings module_logger = logging.getLogger(__name__) @@ -173,6 +174,7 @@ def _to_rest_object(self) -> JobBase: resources=resources._to_rest_object() if resources else None, limits=self.limits._to_rest_object() if self.limits else None, services=JobServiceBase._to_rest_job_services(self.services), + queue_settings=self.queue_settings._to_rest_object() if self.queue_settings else None, ) result = JobBase(properties=properties) result.name = self.name @@ -212,6 +214,7 @@ def _load_from_rest(cls, obj: JobBase) -> "CommandJob": limits=CommandJobLimits._from_rest_object(rest_command_job.limits), inputs=from_rest_inputs_to_dataset_literal(rest_command_job.inputs), outputs=from_rest_data_outputs(rest_command_job.outputs), + queue_settings=QueueSettings._from_rest_object(rest_command_job.queue_settings), ) # Handle special case of local job if ( @@ -278,15 +281,6 @@ def _to_node(self, context: Optional[Dict] = None, **kwargs): ) def _validate(self) -> None: - if self.compute is None: - msg = "compute is required" - raise ValidationException( - message=msg, - no_personal_data_message=msg, - target=ErrorTarget.JOB, - error_category=ErrorCategory.USER_ERROR, - error_type=ValidationErrorType.MISSING_FIELD, - ) if self.command is None: msg = "command is required" raise ValidationException( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py index 98eee626494d..86bea201cd31 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py @@ -14,8 +14,9 @@ from typing import IO, AnyStr, Dict, Optional, Type, Union from azure.ai.ml._restclient.runhistory.models import Run -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase, JobService -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobType as RestJobType +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, JobService +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobType as RestJobType +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings from azure.ai.ml._utils._html_utils import make_link, to_html from azure.ai.ml._utils.utils import dump_yaml_to_file from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY, CommonYamlFields @@ -295,7 +296,7 @@ def _from_rest_object(cls, obj: Union[JobBase, Run]) -> "Job": # pylint: disabl if obj.properties.job_type == RestJobType.COMMAND: # PrP only until new import job type is ready on MFE in PuP # compute type 'DataFactory' is reserved compute name for 'clusterless' ADF jobs - if obj.properties.compute_id.endswith("/" + ComputeType.ADF): + if obj.properties.compute_id and obj.properties.compute_id.endswith("/" + ComputeType.ADF): return ImportJob._load_from_rest(obj) return Command._load_from_rest_job(obj) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py index a1d53f2562b8..ea8cc592b7ef 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py @@ -9,13 +9,14 @@ from marshmallow import INCLUDE -from azure.ai.ml._restclient.v2022_02_01_preview.models import SweepJob +from azure.ai.ml._restclient.v2023_02_01_preview.models import SweepJob from azure.ai.ml.entities._assets import Environment from ..._schema import NestedField, UnionField from ..._schema.job.distribution import MPIDistributionSchema, PyTorchDistributionSchema, TensorFlowDistributionSchema from .distribution import DistributionConfiguration, MpiDistribution, PyTorchDistribution, TensorFlowDistribution from .job_resource_configuration import JobResourceConfiguration +from .queue_settings import QueueSettings module_logger = logging.getLogger(__name__) @@ -50,6 +51,7 @@ def __init__( environment_variables: Optional[Dict] = None, distribution: Optional[Union[dict, MpiDistribution, TensorFlowDistribution, PyTorchDistribution]] = None, environment: Optional[Union[Environment, str]] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): super().__init__(**kwargs) @@ -59,6 +61,7 @@ def __init__( self.environment = environment self.distribution: Union[MpiDistribution, TensorFlowDistribution, PyTorchDistribution] = distribution self.resources = resources + self.queue_settings = queue_settings @property def distribution( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py new file mode 100644 index 000000000000..004647223bfb --- /dev/null +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -0,0 +1,24 @@ +# --------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# --------------------------------------------------------- + +import logging +from typing import Optional + +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings as RestQueueSettings +from azure.ai.ml.entities._mixins import DictMixin, RestTranslatableMixin + +module_logger = logging.getLogger(__name__) + +class QueueSettings(RestTranslatableMixin, DictMixin): + def __init__(self, *, job_tier: Optional[str] = None): + self.job_tier = job_tier + + def _to_rest_object(self) -> RestQueueSettings: + return RestQueueSettings(job_tier=self.job_tier) + + @classmethod + def _from_rest_object(cls, obj: Optional[RestQueueSettings]) -> Optional["QueueSettings"]: + if obj is None: + return None + return QueueSettings(job_tier=obj.job_tier,) \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_job_operations.py b/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_job_operations.py index bf4f656f9df3..d1237de46f63 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_job_operations.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_job_operations.py @@ -26,10 +26,10 @@ from azure.ai.ml._restclient.dataset_dataplane import AzureMachineLearningWorkspaces as ServiceClientDatasetDataplane from azure.ai.ml._restclient.model_dataplane import AzureMachineLearningWorkspaces as ServiceClientModelDataplane from azure.ai.ml._restclient.runhistory import AzureMachineLearningWorkspaces as ServiceClientRunHistory -from azure.ai.ml._restclient.v2022_12_01_preview import AzureMachineLearningWorkspaces as ServiceClient122022Preview -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase -from azure.ai.ml._restclient.v2022_12_01_preview.models import JobType as RestJobType -from azure.ai.ml._restclient.v2022_12_01_preview.models import ListViewType, UserIdentity +from azure.ai.ml._restclient.v2023_02_01_preview import AzureMachineLearningWorkspaces as ServiceClient122022Preview +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobType as RestJobType +from azure.ai.ml._restclient.v2023_02_01_preview.models import ListViewType, UserIdentity from azure.ai.ml._scope_dependent_operations import ( OperationConfig, OperationsContainer, From 1ef4d6a7e230abb23a767ef67c372f9003d03bb4 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 09:22:42 -0800 Subject: [PATCH 02/23] Add unit tests for queue_settings --- .../azure/ai/ml/entities/_builders/command.py | 2 ++ .../unittests/test_command_job_entity.py | 5 +++- .../test_command_component_entity.py | 4 ++- .../dsl/unittests/test_command_builder.py | 25 ++++++++++++++++++- .../dsl/unittests/test_component_func.py | 4 ++- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 80d6ef05157f..e291803e3cd2 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -535,6 +535,7 @@ def _to_rest_object(self, **kwargs) -> dict: "resources": get_rest_dict_for_node_attrs(self.resources, clear_empty_value=True), "services": get_rest_dict_for_node_attrs(self.services), "identity": self.identity._to_dict() if self.identity else None, + "queue_settings": get_rest_dict_for_node_attrs(self.queue_settings, clear_empty_value=True) }.items(): if value is not None: rest_obj[key] = value @@ -681,6 +682,7 @@ def __call__(self, *args, **kwargs) -> "Command": node.limits = copy.deepcopy(self.limits) node.distribution = copy.deepcopy(self.distribution) node.resources = copy.deepcopy(self.resources) + node.queue_settings = copy.deepcopy(self.queue_settings) node.services = copy.deepcopy(self.services) node.identity = copy.deepcopy(self.identity) return node diff --git a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py index 286326d4b010..47be8ba62241 100644 --- a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py +++ b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py @@ -4,7 +4,7 @@ import pytest from azure.ai.ml import Input, MpiDistribution -from azure.ai.ml._restclient.v2022_10_01_preview.models import AmlToken, JobBase +from azure.ai.ml._restclient.v2023_02_01_preview.models import AmlToken, JobBase from azure.ai.ml._scope_dependent_operations import OperationScope from azure.ai.ml.constants._common import AssetTypes from azure.ai.ml.entities import CommandJob, Environment, Job @@ -13,6 +13,7 @@ from azure.ai.ml.entities._job.job_limits import CommandJobLimits from azure.ai.ml.entities._job.job_name_generator import generate_job_name from azure.ai.ml.entities._job.job_resource_configuration import JobResourceConfiguration +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.entities._job.to_rest_functions import to_rest_job_object from azure.ai.ml.exceptions import ValidationException @@ -134,6 +135,7 @@ def test_command_job_builder_serialization(self) -> None: instance_type="STANDARD_BLA", timeout=300, code="./", + queue_settings=QueueSettings(job_tier="standard") ) expected_job = CommandJob( @@ -153,6 +155,7 @@ def test_command_job_builder_serialization(self) -> None: outputs={"best_model": {}}, limits=CommandJobLimits(timeout=300), resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_BLA"), + queue_settings=QueueSettings(job_tier="standard"), code="./", ) diff --git a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py index 0d644016488b..3502522b161d 100644 --- a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py +++ b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py @@ -15,7 +15,7 @@ from azure.ai.ml import Input, MpiDistribution, Output, TensorFlowDistribution, command, load_component from azure.ai.ml._utils.utils import load_yaml from azure.ai.ml.constants._common import AZUREML_PRIVATE_FEATURES_ENV_VAR, AzureMLResourceType -from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration +from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._assets import Code from azure.ai.ml.entities._builders import Command, Sweep from azure.ai.ml.entities._job.pipeline._io import PipelineInput @@ -326,6 +326,7 @@ def test_command_help_function(self): environment_variables=dict(foo="bar"), # Customers can still do this: resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_D2"), + queue_settings=QueueSettings(job_tier='standard'), limits=CommandJobLimits(timeout=300), inputs={ "float": 0.01, @@ -346,6 +347,7 @@ def test_command_help_function(self): "environment: azureml:my-env:1\n", "code: azureml:./src\n", "resources:\n instance_count: 2", + "queue_settings:\n job_tier: standard" ]: assert piece in outstr diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py index 3354de51df05..494ef690a835 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py @@ -18,7 +18,7 @@ spark, ) from azure.ai.ml.dsl import pipeline -from azure.ai.ml.entities import CommandJobLimits, JobResourceConfiguration +from azure.ai.ml.entities import CommandJobLimits, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._builders import Command from azure.ai.ml.entities._job.job_service import ( JobService, @@ -680,6 +680,29 @@ def test_resources_from_dict(self, test_command_params): rest_dict = command_node._to_rest_object() assert rest_dict["resources"] == {"instance_type": "STANDARD_D2"} + def test_queue_settings(self, test_command_params): + expected_queue_settings = {"job_tier": "standard"} + test_command_params.update( + { + "queue_settings": QueueSettings(job_tier="standard"), + } + ) + command_node = command(**test_command_params) + print("-----------------------") + print(command_node.queue_settings) + rest_dict = command_node._to_rest_object() + assert rest_dict["queue_settings"] == expected_queue_settings + + test_command_params.update( + { + "queue_settings": dict(job_tier="standard"), + } + ) + command_node = command(**test_command_params) + rest_dict = command_node._to_rest_object() + assert rest_dict["queue_settings"] == expected_queue_settings + + def test_to_component_input(self): # test literal input literal_input_2_expected_type = { diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py index 277888516ec0..09c79d575664 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py @@ -6,7 +6,7 @@ from marshmallow import ValidationError from azure.ai.ml import PyTorchDistribution, load_component -from azure.ai.ml.entities import Data, JobResourceConfiguration +from azure.ai.ml.entities import Data, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._builders import Command from azure.ai.ml.entities._inputs_outputs import Input, Output from azure.ai.ml.entities._job.pipeline._io import PipelineInput, PipelineOutput @@ -253,6 +253,7 @@ def test_component_static_dynamic_fields(self): component.distribution = PyTorchDistribution() component.distribution.process_count_per_instance = 2 component.environment_variables["key"] = "val" + component.queue_settings = QueueSettings(job_tier='standard') # user can set these fields but we won't pass to backend # TODO: Agree on if we should allow this # component.command = "new command" @@ -276,6 +277,7 @@ def test_component_static_dynamic_fields(self): "component_in_path": {"job_input_type": "literal", "value": "${{parent.inputs.pipeline_input}}"}, }, "resources": {"instance_count": 2}, + "queue_settings": {"job_tier": "standard"} } def test_component_func_dict_distribution(self): From 575544069a13460d7c57b68276938269a1cef5bf Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 11:49:47 -0800 Subject: [PATCH 03/23] Add queue settings to command job --- .../ml/_schema/job/parameterized_command.py | 2 ++ .../azure/ai/ml/_schema/queue_settings.py | 19 +++++++++++++++ .../azure/ai/ml/entities/__init__.py | 1 + .../azure/ai/ml/entities/_builders/command.py | 21 ++++++++++++++++ .../entities/_component/command_component.py | 3 +++ .../azure/ai/ml/entities/_job/command_job.py | 12 +++------- .../azure/ai/ml/entities/_job/job.py | 3 ++- .../ml/entities/_job/parameterized_command.py | 5 +++- .../ai/ml/entities/_job/queue_settings.py | 24 +++++++++++++++++++ 9 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py create mode 100644 sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py index 58334e8bf36d..91eb582e0d20 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py @@ -7,6 +7,7 @@ from azure.ai.ml._schema.core.fields import CodeField, DistributionField, NestedField from azure.ai.ml._schema.core.schema import PathAwareSchema from azure.ai.ml._schema.job_resource_configuration import JobResourceConfigurationSchema +from azure.ai.ml._schema.queue_settings import QueueSettingsSchema from azure.ai.ml.constants._common import AzureMLResourceType from azure.ai.ml._schema.job.input_output_entry import InputLiteralValueSchema @@ -40,3 +41,4 @@ class ParameterizedCommandSchema(PathAwareSchema): ) resources = NestedField(JobResourceConfigurationSchema) distribution = DistributionField() + queue_settings = NestedField(QueueSettingsSchema) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py new file mode 100644 index 000000000000..c7b87f56a05d --- /dev/null +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -0,0 +1,19 @@ +# --------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# --------------------------------------------------------- + +# pylint: disable=unused-argument,no-self-use + +from marshmallow import fields, post_load + +from azure.ai.ml._schema.core.schema_meta import PatchedSchemaMeta + + +class QueueSettingsSchema(metaclass=PatchedSchemaMeta): + job_tier = fields.Str(metadata={"description": "Dedicated/Spot."}) + + @post_load + def make(self, data, **kwargs): + from azure.ai.ml.entities import QueueSettings + + return QueueSettings(**data) \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py index 158cd3eb041f..ac5175e1dc55 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py @@ -88,6 +88,7 @@ # Pipeline related entities goes behind component since it depends on component from ._job.pipeline.pipeline_job import PipelineJob, PipelineJobSettings +from ._job.queue_settings import QueueSettings from ._job.resource_configuration import ResourceConfiguration from ._job.service_instance import ServiceInstance from ._job.spark_job import SparkJob diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index e794e5acab81..618bb1bd01c1 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -17,6 +17,7 @@ from azure.ai.ml._restclient.v2023_02_01_preview.models import CommandJobLimits as RestCommandJobLimits from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase from azure.ai.ml._restclient.v2023_02_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings as RestQueueSettings from azure.ai.ml._schema.core.fields import NestedField, UnionField from azure.ai.ml._schema.job.command_job import CommandJobSchema from azure.ai.ml._schema.job.identity import AMLTokenIdentitySchema, ManagedIdentitySchema, UserIdentitySchema @@ -51,6 +52,7 @@ TensorBoardJobService, VsCodeJobService, ) +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.entities._job.sweep.early_termination_policy import EarlyTerminationPolicy from azure.ai.ml.entities._job.sweep.objective import Objective from azure.ai.ml.entities._job.sweep.search_space import ( @@ -164,6 +166,7 @@ def __init__( services: Optional[ Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] ] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type @@ -194,10 +197,12 @@ def __init__( self.environment = environment self._resources = resources self._services = services + self._queue_settings = queue_settings if isinstance(self.component, CommandComponent): self.resources = self.resources or self.component.resources self.distribution = self.distribution or self.component.distribution + self._queue_settings = self._queue_settings or self.component.queue_settings self._swept = False self._init = False @@ -255,6 +260,16 @@ def resources(self, value: Union[Dict, JobResourceConfiguration]): value = JobResourceConfiguration(**value) self._resources = value + @property + def queue_settings(self) -> QueueSettings: + return self._queue_settings + + @queue_settings.setter + def queue_settings(self, value: Union[Dict, QueueSettings]): + if isinstance(value, dict): + value = QueueSettings(**value) + self._queue_settings = value + @property def identity( self, @@ -500,6 +515,7 @@ def _to_job(self) -> CommandJob: services=self.services, creation_context=self.creation_context, parameters=self.parameters, + queue_settings=self.queue_settings ) @classmethod @@ -564,6 +580,10 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: if "identity" in obj and obj["identity"]: obj["identity"] = _BaseJobIdentityConfiguration._load(obj["identity"]) + if "queue_settings" in obj and obj["queue_settings"]: + queue_settings = RestQueueSettings.from_dict(obj["queue_settings"]) + obj["queue_settings"] = QueueSettings._from_rest_object(queue_settings) + return obj @classmethod @@ -598,6 +618,7 @@ def _load_from_rest_job(cls, obj: JobBase) -> "Command": command_job._id = obj.id command_job.resources = JobResourceConfiguration._from_rest_object(rest_command_job.resources) command_job.limits = CommandJobLimits._from_rest_object(rest_command_job.limits) + command_job.queue_settings = QueueSettings._from_rest_object(rest_command_job.queue_settings) command_job.component._source = ( ComponentSource.REMOTE_WORKSPACE_JOB ) # This is used by pipeline job telemetries. diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py index 905b673fbbab..3d1056e75824 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py @@ -19,6 +19,7 @@ ) from azure.ai.ml.entities._job.job_resource_configuration import JobResourceConfiguration from azure.ai.ml.entities._job.parameterized_command import ParameterizedCommand +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationException from ..._restclient.v2022_05_01.models import ComponentVersionData @@ -87,6 +88,7 @@ def __init__( instance_count: Optional[int] = None, # promoted property from resources.instance_count is_deterministic: bool = True, properties: Optional[Dict] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type @@ -122,6 +124,7 @@ def __init__( self.environment = environment self.resources = resources self.distribution = distribution + self.queue_settings = queue_settings # check mutual exclusivity of promoted properties if self.resources is not None and instance_count is not None: diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py index 8b7b31435f93..fd74472bb7fe 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py @@ -47,6 +47,7 @@ from .job_limits import CommandJobLimits from .job_resource_configuration import JobResourceConfiguration from .parameterized_command import ParameterizedCommand +from .queue_settings import QueueSettings module_logger = logging.getLogger(__name__) @@ -173,6 +174,7 @@ def _to_rest_object(self) -> JobBase: resources=resources._to_rest_object() if resources else None, limits=self.limits._to_rest_object() if self.limits else None, services=JobServiceBase._to_rest_job_services(self.services), + queue_settings=self.queue_settings._to_rest_object() if self.queue_settings else None, ) result = JobBase(properties=properties) result.name = self.name @@ -212,6 +214,7 @@ def _load_from_rest(cls, obj: JobBase) -> "CommandJob": limits=CommandJobLimits._from_rest_object(rest_command_job.limits), inputs=from_rest_inputs_to_dataset_literal(rest_command_job.inputs), outputs=from_rest_data_outputs(rest_command_job.outputs), + queue_settings=QueueSettings._from_rest_object(rest_command_job.queue_settings), ) # Handle special case of local job if ( @@ -278,15 +281,6 @@ def _to_node(self, context: Optional[Dict] = None, **kwargs): ) def _validate(self) -> None: - if self.compute is None: - msg = "compute is required" - raise ValidationException( - message=msg, - no_personal_data_message=msg, - target=ErrorTarget.JOB, - error_category=ErrorCategory.USER_ERROR, - error_type=ValidationErrorType.MISSING_FIELD, - ) if self.command is None: msg = "command is required" raise ValidationException( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py index c04a102a0f8f..86bea201cd31 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py @@ -16,6 +16,7 @@ from azure.ai.ml._restclient.runhistory.models import Run from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, JobService from azure.ai.ml._restclient.v2023_02_01_preview.models import JobType as RestJobType +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings from azure.ai.ml._utils._html_utils import make_link, to_html from azure.ai.ml._utils.utils import dump_yaml_to_file from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY, CommonYamlFields @@ -295,7 +296,7 @@ def _from_rest_object(cls, obj: Union[JobBase, Run]) -> "Job": # pylint: disabl if obj.properties.job_type == RestJobType.COMMAND: # PrP only until new import job type is ready on MFE in PuP # compute type 'DataFactory' is reserved compute name for 'clusterless' ADF jobs - if obj.properties.compute_id.endswith("/" + ComputeType.ADF): + if obj.properties.compute_id and obj.properties.compute_id.endswith("/" + ComputeType.ADF): return ImportJob._load_from_rest(obj) return Command._load_from_rest_job(obj) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py index 93bd8a670c97..18df47ae72be 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py @@ -9,13 +9,14 @@ from marshmallow import INCLUDE -from azure.ai.ml._restclient.v2022_02_01_preview.models import SweepJob +from azure.ai.ml._restclient.v2023_02_01_preview.models import SweepJob from azure.ai.ml.entities._assets import Environment from ..._schema import NestedField, UnionField from ..._schema.job.distribution import MPIDistributionSchema, PyTorchDistributionSchema, TensorFlowDistributionSchema from .distribution import DistributionConfiguration, MpiDistribution, PyTorchDistribution, TensorFlowDistribution from .job_resource_configuration import JobResourceConfiguration +from .queue_settings import QueueSettings module_logger = logging.getLogger(__name__) @@ -49,6 +50,7 @@ def __init__( environment_variables: Optional[Dict] = None, distribution: Optional[Union[dict, MpiDistribution, TensorFlowDistribution, PyTorchDistribution]] = None, environment: Optional[Union[Environment, str]] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): super().__init__(**kwargs) @@ -58,6 +60,7 @@ def __init__( self.environment = environment self.distribution: Union[MpiDistribution, TensorFlowDistribution, PyTorchDistribution] = distribution self.resources = resources + self.queue_settings = queue_settings @property def distribution( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py new file mode 100644 index 000000000000..004647223bfb --- /dev/null +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -0,0 +1,24 @@ +# --------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# --------------------------------------------------------- + +import logging +from typing import Optional + +from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings as RestQueueSettings +from azure.ai.ml.entities._mixins import DictMixin, RestTranslatableMixin + +module_logger = logging.getLogger(__name__) + +class QueueSettings(RestTranslatableMixin, DictMixin): + def __init__(self, *, job_tier: Optional[str] = None): + self.job_tier = job_tier + + def _to_rest_object(self) -> RestQueueSettings: + return RestQueueSettings(job_tier=self.job_tier) + + @classmethod + def _from_rest_object(cls, obj: Optional[RestQueueSettings]) -> Optional["QueueSettings"]: + if obj is None: + return None + return QueueSettings(job_tier=obj.job_tier,) \ No newline at end of file From d583d026350083b0c4a2f8602422ee3ee6656919 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 09:22:42 -0800 Subject: [PATCH 04/23] Add unit tests for queue_settings --- .../azure/ai/ml/entities/_builders/command.py | 2 ++ .../unittests/test_command_job_entity.py | 5 +++- .../test_command_component_entity.py | 4 ++- .../dsl/unittests/test_command_builder.py | 25 ++++++++++++++++++- .../dsl/unittests/test_component_func.py | 4 ++- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 618bb1bd01c1..29742a68cc1a 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -531,6 +531,7 @@ def _to_rest_object(self, **kwargs) -> dict: "resources": get_rest_dict_for_node_attrs(self.resources, clear_empty_value=True), "services": get_rest_dict_for_node_attrs(self.services), "identity": self.identity._to_dict() if self.identity else None, + "queue_settings": get_rest_dict_for_node_attrs(self.queue_settings, clear_empty_value=True) }.items(): if value is not None: rest_obj[key] = value @@ -677,6 +678,7 @@ def __call__(self, *args, **kwargs) -> "Command": node.limits = copy.deepcopy(self.limits) node.distribution = copy.deepcopy(self.distribution) node.resources = copy.deepcopy(self.resources) + node.queue_settings = copy.deepcopy(self.queue_settings) node.services = copy.deepcopy(self.services) node.identity = copy.deepcopy(self.identity) return node diff --git a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py index 286326d4b010..47be8ba62241 100644 --- a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py +++ b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py @@ -4,7 +4,7 @@ import pytest from azure.ai.ml import Input, MpiDistribution -from azure.ai.ml._restclient.v2022_10_01_preview.models import AmlToken, JobBase +from azure.ai.ml._restclient.v2023_02_01_preview.models import AmlToken, JobBase from azure.ai.ml._scope_dependent_operations import OperationScope from azure.ai.ml.constants._common import AssetTypes from azure.ai.ml.entities import CommandJob, Environment, Job @@ -13,6 +13,7 @@ from azure.ai.ml.entities._job.job_limits import CommandJobLimits from azure.ai.ml.entities._job.job_name_generator import generate_job_name from azure.ai.ml.entities._job.job_resource_configuration import JobResourceConfiguration +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.entities._job.to_rest_functions import to_rest_job_object from azure.ai.ml.exceptions import ValidationException @@ -134,6 +135,7 @@ def test_command_job_builder_serialization(self) -> None: instance_type="STANDARD_BLA", timeout=300, code="./", + queue_settings=QueueSettings(job_tier="standard") ) expected_job = CommandJob( @@ -153,6 +155,7 @@ def test_command_job_builder_serialization(self) -> None: outputs={"best_model": {}}, limits=CommandJobLimits(timeout=300), resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_BLA"), + queue_settings=QueueSettings(job_tier="standard"), code="./", ) diff --git a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py index 0d644016488b..3502522b161d 100644 --- a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py +++ b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py @@ -15,7 +15,7 @@ from azure.ai.ml import Input, MpiDistribution, Output, TensorFlowDistribution, command, load_component from azure.ai.ml._utils.utils import load_yaml from azure.ai.ml.constants._common import AZUREML_PRIVATE_FEATURES_ENV_VAR, AzureMLResourceType -from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration +from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._assets import Code from azure.ai.ml.entities._builders import Command, Sweep from azure.ai.ml.entities._job.pipeline._io import PipelineInput @@ -326,6 +326,7 @@ def test_command_help_function(self): environment_variables=dict(foo="bar"), # Customers can still do this: resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_D2"), + queue_settings=QueueSettings(job_tier='standard'), limits=CommandJobLimits(timeout=300), inputs={ "float": 0.01, @@ -346,6 +347,7 @@ def test_command_help_function(self): "environment: azureml:my-env:1\n", "code: azureml:./src\n", "resources:\n instance_count: 2", + "queue_settings:\n job_tier: standard" ]: assert piece in outstr diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py index 3354de51df05..494ef690a835 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py @@ -18,7 +18,7 @@ spark, ) from azure.ai.ml.dsl import pipeline -from azure.ai.ml.entities import CommandJobLimits, JobResourceConfiguration +from azure.ai.ml.entities import CommandJobLimits, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._builders import Command from azure.ai.ml.entities._job.job_service import ( JobService, @@ -680,6 +680,29 @@ def test_resources_from_dict(self, test_command_params): rest_dict = command_node._to_rest_object() assert rest_dict["resources"] == {"instance_type": "STANDARD_D2"} + def test_queue_settings(self, test_command_params): + expected_queue_settings = {"job_tier": "standard"} + test_command_params.update( + { + "queue_settings": QueueSettings(job_tier="standard"), + } + ) + command_node = command(**test_command_params) + print("-----------------------") + print(command_node.queue_settings) + rest_dict = command_node._to_rest_object() + assert rest_dict["queue_settings"] == expected_queue_settings + + test_command_params.update( + { + "queue_settings": dict(job_tier="standard"), + } + ) + command_node = command(**test_command_params) + rest_dict = command_node._to_rest_object() + assert rest_dict["queue_settings"] == expected_queue_settings + + def test_to_component_input(self): # test literal input literal_input_2_expected_type = { diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py index 277888516ec0..09c79d575664 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py @@ -6,7 +6,7 @@ from marshmallow import ValidationError from azure.ai.ml import PyTorchDistribution, load_component -from azure.ai.ml.entities import Data, JobResourceConfiguration +from azure.ai.ml.entities import Data, JobResourceConfiguration, QueueSettings from azure.ai.ml.entities._builders import Command from azure.ai.ml.entities._inputs_outputs import Input, Output from azure.ai.ml.entities._job.pipeline._io import PipelineInput, PipelineOutput @@ -253,6 +253,7 @@ def test_component_static_dynamic_fields(self): component.distribution = PyTorchDistribution() component.distribution.process_count_per_instance = 2 component.environment_variables["key"] = "val" + component.queue_settings = QueueSettings(job_tier='standard') # user can set these fields but we won't pass to backend # TODO: Agree on if we should allow this # component.command = "new command" @@ -276,6 +277,7 @@ def test_component_static_dynamic_fields(self): "component_in_path": {"job_input_type": "literal", "value": "${{parent.inputs.pipeline_input}}"}, }, "resources": {"instance_count": 2}, + "queue_settings": {"job_tier": "standard"} } def test_component_func_dict_distribution(self): From 2e7b44810a7705dc423588483eae9679a9c9920f Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 11:47:44 -0800 Subject: [PATCH 05/23] Make ComputeField optional --- sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/base_job.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/base_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/base_job.py index ded2f6a5643a..852d39210ef2 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/base_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/base_job.py @@ -59,7 +59,7 @@ class BaseJobSchema(ResourceSchema): ) }, ) - compute = ComputeField(required=True) + compute = ComputeField(required=False) identity = UnionField( [ NestedField(ManagedIdentitySchema), From cd225a925ade9af2aab61a144f47a51b85450d93 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 13:34:18 -0800 Subject: [PATCH 06/23] Update queue settings entity --- .../azure/ai/ml/_schema/queue_settings.py | 19 +++--- .../azure/ai/ml/constants/_job/job.py | 48 +++++++++++++++ .../azure/ai/ml/entities/__init__.py | 1 + .../azure/ai/ml/entities/_builders/command.py | 1 - .../entities/_component/command_component.py | 3 - .../ai/ml/entities/_job/queue_settings.py | 61 +++++++++++++++++-- .../test_command_component_entity.py | 4 +- .../dsl/unittests/test_component_func.py | 4 +- 8 files changed, 119 insertions(+), 22 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py index c7b87f56a05d..3fcf231472b4 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -2,15 +2,20 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # --------------------------------------------------------- -# pylint: disable=unused-argument,no-self-use - from marshmallow import fields, post_load +from azure.ai.ml.constants._job.job import JobPriorityValues, JobTierNames +from azure.ai.ml._schema.core.fields import StringTransformedEnum +from ..core.schema import PathAwareSchema -from azure.ai.ml._schema.core.schema_meta import PatchedSchemaMeta - - -class QueueSettingsSchema(metaclass=PatchedSchemaMeta): - job_tier = fields.Str(metadata={"description": "Dedicated/Spot."}) +class QueueSettingsSchema(PathAwareSchema): + job_tier = StringTransformedEnum( + allowed_values=JobTierNames.EntityNames, + pass_original=True, + ) + priority = StringTransformedEnum( + allowed_values=JobPriorityValues.EntityValues, + pass_original=True, + ) @post_load def make(self, data, **kwargs): diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py index 6fdf6376246e..db842dc9c795 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py @@ -107,3 +107,51 @@ class RestNames: REST_TO_ENTITY = {v: k for k, v in ENTITY_TO_REST.items()} NAMES_ALLOWED_FOR_PUBLIC = [EntityNames.JUPYTER_LAB, EntityNames.SSH, EntityNames.TENSOR_BOARD, EntityNames.VS_CODE] + + +class JobTierNames: + class EntityNames: + Spot = "spot" + Basic = "basic" + Standard = "standard" + Premium = "premium" + + class RestNames: + Spot = "Spot" + Basic = "Basic" + Standard = "Standard" + Premium = "Premium" + + ENTITY_TO_REST = { + EntityNames.Spot: RestNames.Spot, + EntityNames.Basic: RestNames.Basic, + EntityNames.Standard: RestNames.Standard, + EntityNames.Premium: RestNames.Premium, + } + + REST_TO_ENTITY = {v: k for k, v in ENTITY_TO_REST.items()} + + ALLOWED_NAMES = [EntityNames.Spot, EntityNames.Basic, EntityNames.Standard, EntityNames.Premium] + + + +class JobPriorityValues: + class EntityValues: + LOW = "low" + MEDIUM = "medium" + HIGH = "high" + + class RestValues: + LOW = 1 + MEDIUM = 2 + HIGH = 3 + + ENTITY_TO_REST = { + EntityValues.LOW: RestValues.LOW, + EntityValues.MEDIUM: RestValues.MEDIUM, + EntityValues.HIGH: RestValues.HIGH, + } + + REST_TO_ENTITY = {v: k for k, v in ENTITY_TO_REST.items()} + + ALLOWED_VALUES = [EntityValues.LOW, EntityValues.MEDIUM, EntityValues.HIGH] \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py index ac5175e1dc55..3c1565a26882 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/__init__.py @@ -162,6 +162,7 @@ "CreatedByType", "ResourceConfiguration", "JobResourceConfiguration", + "QueueSettings", "JobService", "SshJobService", "TensorBoardJobService", diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 29742a68cc1a..343769044c9e 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -202,7 +202,6 @@ def __init__( if isinstance(self.component, CommandComponent): self.resources = self.resources or self.component.resources self.distribution = self.distribution or self.component.distribution - self._queue_settings = self._queue_settings or self.component.queue_settings self._swept = False self._init = False diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py index 3d1056e75824..905b673fbbab 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_component/command_component.py @@ -19,7 +19,6 @@ ) from azure.ai.ml.entities._job.job_resource_configuration import JobResourceConfiguration from azure.ai.ml.entities._job.parameterized_command import ParameterizedCommand -from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationException from ..._restclient.v2022_05_01.models import ComponentVersionData @@ -88,7 +87,6 @@ def __init__( instance_count: Optional[int] = None, # promoted property from resources.instance_count is_deterministic: bool = True, properties: Optional[Dict] = None, - queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type @@ -124,7 +122,6 @@ def __init__( self.environment = environment self.resources = resources self.distribution = distribution - self.queue_settings = queue_settings # check mutual exclusivity of promoted properties if self.resources is not None and instance_count is not None: diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py index 004647223bfb..67fc70311e7a 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -2,23 +2,74 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # --------------------------------------------------------- +# pylint: disable=protected-access + import logging -from typing import Optional +from typing import Dict, Optional +from typing_extensions import Literal +from azure.ai.ml.constants._job.job import JobPriorityValues, JobTierNames from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings as RestQueueSettings +from azure.ai.ml._utils._experimental import experimental from azure.ai.ml.entities._mixins import DictMixin, RestTranslatableMixin +from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationErrorType, ValidationException module_logger = logging.getLogger(__name__) + +@experimental class QueueSettings(RestTranslatableMixin, DictMixin): - def __init__(self, *, job_tier: Optional[str] = None): + """QueueSettings. + :ivar job_tier: Enum to determine the job tier. Possible values include: "Spot", "Basic", + "Standard", "Premium". + :vartype job_tier: str or ~azure.mgmt.machinelearningservices.models.JobTier + :ivar priority: Controls the priority of the job on a compute. + :vartype priority: int + """ + + def __init__( + self, + *, + job_tier: Optional[Literal["spot", "basic", "standard", "premium"]] = None, + priority: Optional[Literal["low", "medium", "high"]] = None, + **kwargs, # pylint: disable=unused-argument + ): self.job_tier = job_tier + self.priority = priority + self._validate_job_tier_name() + self._validate_job_priority_name() def _to_rest_object(self) -> RestQueueSettings: - return RestQueueSettings(job_tier=self.job_tier) + job_tier = JobTierNames.ENTITY_TO_REST.get(self.job_tier, None) if self.job_tier else None + priority = JobPriorityValues.ENTITY_TO_REST.get(self.priority, None) if self.priority else None + return RestQueueSettings(job_tier=job_tier, priority=priority) @classmethod - def _from_rest_object(cls, obj: Optional[RestQueueSettings]) -> Optional["QueueSettings"]: + def _from_rest_object(cls, obj: RestQueueSettings) -> "QueueSettings": if obj is None: return None - return QueueSettings(job_tier=obj.job_tier,) \ No newline at end of file + job_tier = JobTierNames.REST_TO_ENTITY.get(obj.job_tier, None) if obj.job_tier else None + priority = JobPriorityValues.REST_TO_ENTITY.get(obj.priority, None) if obj.priority else None + return cls(job_tier=job_tier, priority=priority) + + def _validate_job_tier_name(self): + if self.job_tier and not self.job_tier in JobTierNames.ENTITY_TO_REST.keys(): + msg = f"job_tier should be one of " f"{JobTierNames.ALLOWED_NAMES}, but received '{self.job_tier}'." + raise ValidationException( + message=msg, + no_personal_data_message=msg, + target=ErrorTarget.JOB, + error_category=ErrorCategory.USER_ERROR, + error_type=ValidationErrorType.INVALID_VALUE, + ) + + def _validate_job_priority_name(self): + if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): + msg = f"priority should be one of " f"{JobPriorityValues.ALLOWED_VALUES}, but received '{self.priority}'." + raise ValidationException( + message=msg, + no_personal_data_message=msg, + target=ErrorTarget.JOB, + error_category=ErrorCategory.USER_ERROR, + error_type=ValidationErrorType.INVALID_VALUE, + ) \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py index 3502522b161d..0d644016488b 100644 --- a/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py +++ b/sdk/ml/azure-ai-ml/tests/component/unittests/test_command_component_entity.py @@ -15,7 +15,7 @@ from azure.ai.ml import Input, MpiDistribution, Output, TensorFlowDistribution, command, load_component from azure.ai.ml._utils.utils import load_yaml from azure.ai.ml.constants._common import AZUREML_PRIVATE_FEATURES_ENV_VAR, AzureMLResourceType -from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration, QueueSettings +from azure.ai.ml.entities import CommandComponent, CommandJobLimits, JobResourceConfiguration from azure.ai.ml.entities._assets import Code from azure.ai.ml.entities._builders import Command, Sweep from azure.ai.ml.entities._job.pipeline._io import PipelineInput @@ -326,7 +326,6 @@ def test_command_help_function(self): environment_variables=dict(foo="bar"), # Customers can still do this: resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_D2"), - queue_settings=QueueSettings(job_tier='standard'), limits=CommandJobLimits(timeout=300), inputs={ "float": 0.01, @@ -347,7 +346,6 @@ def test_command_help_function(self): "environment: azureml:my-env:1\n", "code: azureml:./src\n", "resources:\n instance_count: 2", - "queue_settings:\n job_tier: standard" ]: assert piece in outstr diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py index 09c79d575664..277888516ec0 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_component_func.py @@ -6,7 +6,7 @@ from marshmallow import ValidationError from azure.ai.ml import PyTorchDistribution, load_component -from azure.ai.ml.entities import Data, JobResourceConfiguration, QueueSettings +from azure.ai.ml.entities import Data, JobResourceConfiguration from azure.ai.ml.entities._builders import Command from azure.ai.ml.entities._inputs_outputs import Input, Output from azure.ai.ml.entities._job.pipeline._io import PipelineInput, PipelineOutput @@ -253,7 +253,6 @@ def test_component_static_dynamic_fields(self): component.distribution = PyTorchDistribution() component.distribution.process_count_per_instance = 2 component.environment_variables["key"] = "val" - component.queue_settings = QueueSettings(job_tier='standard') # user can set these fields but we won't pass to backend # TODO: Agree on if we should allow this # component.command = "new command" @@ -277,7 +276,6 @@ def test_component_static_dynamic_fields(self): "component_in_path": {"job_input_type": "literal", "value": "${{parent.inputs.pipeline_input}}"}, }, "resources": {"instance_count": 2}, - "queue_settings": {"job_tier": "standard"} } def test_component_func_dict_distribution(self): From 8c642a2088f9f3edc9cfa4cc05226c073193a649 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 13:54:24 -0800 Subject: [PATCH 07/23] Add queue_settings validation and flattened properties --- .../azure/ai/ml/entities/_builders/command_func.py | 5 +++++ .../azure/ai/ml/entities/_job/queue_settings.py | 10 ++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command_func.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command_func.py index 5036de78c456..922377d238e8 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command_func.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command_func.py @@ -133,6 +133,8 @@ def command( services: Optional[ Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] ] = None, + job_tier: Optional[str] = None, + priority: Optional[str] = None, **kwargs, ) -> Command: """Create a Command object which can be used inside dsl.pipeline as a function and can also be created as a @@ -250,4 +252,7 @@ def command( if timeout is not None: command_obj.set_limits(timeout=timeout) + if job_tier is not None or priority is not None: + command_obj.set_queue_settings(job_tier=job_tier, priority=priority) + return command_obj diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py index 67fc70311e7a..088dd1462ae8 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -36,10 +36,9 @@ def __init__( ): self.job_tier = job_tier self.priority = priority - self._validate_job_tier_name() - self._validate_job_priority_name() def _to_rest_object(self) -> RestQueueSettings: + self._validate() job_tier = JobTierNames.ENTITY_TO_REST.get(self.job_tier, None) if self.job_tier else None priority = JobPriorityValues.ENTITY_TO_REST.get(self.priority, None) if self.priority else None return RestQueueSettings(job_tier=job_tier, priority=priority) @@ -52,7 +51,7 @@ def _from_rest_object(cls, obj: RestQueueSettings) -> "QueueSettings": priority = JobPriorityValues.REST_TO_ENTITY.get(obj.priority, None) if obj.priority else None return cls(job_tier=job_tier, priority=priority) - def _validate_job_tier_name(self): + def _validate(self): if self.job_tier and not self.job_tier in JobTierNames.ENTITY_TO_REST.keys(): msg = f"job_tier should be one of " f"{JobTierNames.ALLOWED_NAMES}, but received '{self.job_tier}'." raise ValidationException( @@ -62,9 +61,8 @@ def _validate_job_tier_name(self): error_category=ErrorCategory.USER_ERROR, error_type=ValidationErrorType.INVALID_VALUE, ) - - def _validate_job_priority_name(self): - if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): + + if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): msg = f"priority should be one of " f"{JobPriorityValues.ALLOWED_VALUES}, but received '{self.priority}'." raise ValidationException( message=msg, From f01df55edd0fe057785c0f575cf0ebdfca51943a Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 13:59:34 -0800 Subject: [PATCH 08/23] Remove print --- sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py index 494ef690a835..dd32cab23127 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py @@ -688,8 +688,6 @@ def test_queue_settings(self, test_command_params): } ) command_node = command(**test_command_params) - print("-----------------------") - print(command_node.queue_settings) rest_dict = command_node._to_rest_object() assert rest_dict["queue_settings"] == expected_queue_settings From 3a3b02b6452bda0f61aa6b30a3d45dc05cc44ff1 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 14:08:56 -0800 Subject: [PATCH 09/23] Add method to set queue_settings --- .../azure-ai-ml/azure/ai/ml/entities/_builders/command.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 343769044c9e..254d3c22e338 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -386,6 +386,14 @@ def set_limits(self, *, timeout: int, **kwargs): # pylint: disable=unused-argum else: self.limits = CommandJobLimits(timeout=timeout) + def set_queue_settings(self, *, job_tier: Optional[str] = None, priority: Optional[str] = None): + if isinstance(self.queue_settings, QueueSettings): + self.queue_settings.job_tier = job_tier + self.queue_settings.priority = priority + else: + self.queue_settings = QueueSettings(job_tier=job_tier, priority=priority) + + def sweep( self, *, From 406df5380230bc56b24d1ceefe17321c20a6f8eb Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 14:55:08 -0800 Subject: [PATCH 10/23] Fix failure --- sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py | 8 ++++---- .../azure/ai/ml/entities/_job/queue_settings.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py index 3fcf231472b4..361d1a52543d 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -5,15 +5,15 @@ from marshmallow import fields, post_load from azure.ai.ml.constants._job.job import JobPriorityValues, JobTierNames from azure.ai.ml._schema.core.fields import StringTransformedEnum -from ..core.schema import PathAwareSchema +from azure.ai.ml._schema.core.schema import PatchedSchemaMeta -class QueueSettingsSchema(PathAwareSchema): +class QueueSettingsSchema(metaclass=PatchedSchemaMeta): job_tier = StringTransformedEnum( - allowed_values=JobTierNames.EntityNames, + allowed_values=JobTierNames.ALLOWED_NAMES, pass_original=True, ) priority = StringTransformedEnum( - allowed_values=JobPriorityValues.EntityValues, + allowed_values=JobPriorityValues.ALLOWED_VALUES, pass_original=True, ) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py index 088dd1462ae8..41006a273418 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -62,7 +62,7 @@ def _validate(self): error_type=ValidationErrorType.INVALID_VALUE, ) - if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): + if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): msg = f"priority should be one of " f"{JobPriorityValues.ALLOWED_VALUES}, but received '{self.priority}'." raise ValidationException( message=msg, From b7a1b9a10feba2cb5fbdb839386d03459c0be38e Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 15:34:49 -0800 Subject: [PATCH 11/23] Add e2e test --- .../command_job/e2etests/test_command_job.py | 23 + ...CommandJobtest_command_job_serverless.json | 435 ++++++++++++++++++ 2 files changed, 458 insertions(+) create mode 100644 sdk/ml/azure-ai-ml/tests/recordings/command_job/e2etests/test_command_job.pyTestCommandJobtest_command_job_serverless.json diff --git a/sdk/ml/azure-ai-ml/tests/command_job/e2etests/test_command_job.py b/sdk/ml/azure-ai-ml/tests/command_job/e2etests/test_command_job.py index ae8beb152ea6..ebacbf8d4b68 100644 --- a/sdk/ml/azure-ai-ml/tests/command_job/e2etests/test_command_job.py +++ b/sdk/ml/azure-ai-ml/tests/command_job/e2etests/test_command_job.py @@ -103,6 +103,29 @@ def test_command_job_with_dataset(self, randstr: Callable[[], str], client: MLCl assert command_job_2.compute == "testCompute" check_tid_in_url(client, command_job_2) + @pytest.mark.e2etest + def test_command_job_serverless(self, randstr: Callable[[], str], client: MLClient) -> None: + # TODO: need to create a workspace under a e2e-testing-only subscription and resource group + + job_name = randstr("job_name") + params_override = [{"name": job_name}] + job = load_job( + source="./tests/test_configs/command_job/command_job_test_serverless.yml", + params_override=params_override, + ) + command_job: CommandJob = client.jobs.create_or_update(job=job) + + assert command_job.status in RunHistoryConstants.IN_PROGRESS_STATUSES + assert command_job.environment == "azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33" + assert command_job.queue_settings.job_tier == "standard" + check_tid_in_url(client, command_job) + + command_job_2 = client.jobs.get(job_name) + assert command_job.name == command_job_2.name + assert command_job.identity.type == command_job_2.identity.type + assert command_job_2.environment == "azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33" + check_tid_in_url(client, command_job_2) + @pytest.mark.e2etest def test_command_job_with_dataset_short_uri(self, randstr: Callable[[], str], client: MLClient) -> None: # TODO: need to create a workspace under a e2e-testing-only subscription and resource group diff --git a/sdk/ml/azure-ai-ml/tests/recordings/command_job/e2etests/test_command_job.pyTestCommandJobtest_command_job_serverless.json b/sdk/ml/azure-ai-ml/tests/recordings/command_job/e2etests/test_command_job.pyTestCommandJobtest_command_job_serverless.json new file mode 100644 index 000000000000..652083bc3afc --- /dev/null +++ b/sdk/ml/azure-ai-ml/tests/recordings/command_job/e2etests/test_command_job.pyTestCommandJobtest_command_job_serverless.json @@ -0,0 +1,435 @@ +{ + "Entries": [ + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-10-01", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 21 Feb 2023 20:33:17 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-f243a1fd891f87f5ab79d3457f8e4944-ef7c700c4bf22e53-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-eastus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "753f44f0-5589-469a-b816-c7241f96c368", + "x-ms-ratelimit-remaining-subscription-reads": "11986", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "CANADACENTRAL:20230221T203317Z:753f44f0-5589-469a-b816-c7241f96c368", + "x-request-time": "0.092" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", + "name": "workspaceblobstore", + "type": "Microsoft.MachineLearningServices/workspaces/datastores", + "properties": { + "description": null, + "tags": null, + "properties": null, + "isDefault": true, + "credentials": { + "credentialsType": "AccountKey" + }, + "datastoreType": "AzureBlob", + "accountName": "samcw32zcnpjldw", + "containerName": "azureml-blobstore-3bd2018e-4b43-401e-ad49-85df181c9e0a", + "endpoint": "core.windows.net", + "protocol": "https", + "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" + }, + "systemData": { + "createdAt": "2023-02-18T09:22:33.5645164\u002B00:00", + "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "createdByType": "Application", + "lastModifiedAt": "2023-02-18T09:22:34.1712214\u002B00:00", + "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "lastModifiedByType": "Application" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-10-01", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "0", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 21 Feb 2023 20:33:17 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-ae13f138c265e5ac1bfbe40aed272b39-cd7e48456e9553aa-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": "Accept-Encoding", + "x-aml-cluster": "vienna-eastus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "e6aaded1-6ff2-44ef-8ee3-e254800fad06", + "x-ms-ratelimit-remaining-subscription-writes": "1197", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "CANADACENTRAL:20230221T203317Z:e6aaded1-6ff2-44ef-8ee3-e254800fad06", + "x-request-time": "0.100" + }, + "ResponseBody": { + "secretsType": "AccountKey", + "key": "dGhpcyBpcyBmYWtlIGtleQ==" + } + }, + { + "RequestUri": "https://samcw32zcnpjldw.blob.core.windows.net/azureml-blobstore-3bd2018e-4b43-401e-ad49-85df181c9e0a/LocalUpload/00000000000000000000000000000000/data/sample1.csv", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.14.1 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)", + "x-ms-date": "Tue, 21 Feb 2023 20:33:17 GMT", + "x-ms-version": "2021-08-06" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "499", + "Content-MD5": "kD7N5\u002BygjTfbYTFhyEo7RA==", + "Content-Type": "application/octet-stream", + "Date": "Tue, 21 Feb 2023 20:33:17 GMT", + "ETag": "\u00220x8DB1193117B1888\u0022", + "Last-Modified": "Sat, 18 Feb 2023 09:32:35 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-creation-time": "Sat, 18 Feb 2023 09:32:35 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-name": "d7054f82-1901-4d02-a1db-9705dc75a231", + "x-ms-meta-upload_status": "completed", + "x-ms-meta-version": "1b5ecf13-7ad8-4217-a535-a2f4e8977ef2", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-08-06" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://samcw32zcnpjldw.blob.core.windows.net/azureml-blobstore-3bd2018e-4b43-401e-ad49-85df181c9e0a/az-ml-artifacts/00000000000000000000000000000000/data/sample1.csv", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.14.1 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)", + "x-ms-date": "Tue, 21 Feb 2023 20:33:17 GMT", + "x-ms-version": "2021-08-06" + }, + "RequestBody": null, + "StatusCode": 404, + "ResponseHeaders": { + "Date": "Tue, 21 Feb 2023 20:33:17 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "Vary": "Origin", + "x-ms-error-code": "BlobNotFound", + "x-ms-version": "2021-08-06" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/test_589279419362?api-version=2022-12-01-preview", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "714", + "Content-Type": "application/json", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)" + }, + "RequestBody": { + "properties": { + "properties": {}, + "tags": {}, + "displayName": "test_dataset_display_name1", + "experimentName": "mfe-test1-dataset", + "identity": { + "identityType": "AMLToken" + }, + "isArchived": false, + "jobType": "Command", + "command": "pip freeze", + "environmentId": "azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33", + "environmentVariables": {}, + "inputs": { + "testdataset": { + "mode": "ReadOnlyMount", + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/data/", + "jobInputType": "uri_folder" + } + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard" + } + } + }, + "StatusCode": 201, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "2147", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 21 Feb 2023 20:33:22 GMT", + "Expires": "-1", + "Location": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/test_589279419362?api-version=2022-12-01-preview", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-944cbb8a6098568df76747233234220c-138a176d152865c0-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "x-aml-cluster": "vienna-eastus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "4409c27e-9bc3-4196-a384-510d6a4ccf57", + "x-ms-ratelimit-remaining-subscription-writes": "1195", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "CANADACENTRAL:20230221T203322Z:4409c27e-9bc3-4196-a384-510d6a4ccf57", + "x-request-time": "1.705" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/test_589279419362", + "name": "test_589279419362", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": {}, + "properties": { + "_azureml.ComputeTargetType": "amlctrain" + }, + "displayName": "test_dataset_display_name1", + "status": "Starting", + "experimentName": "mfe-test1-dataset", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://eastus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/test_589279419362?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": null, + "isArchived": false, + "identity": { + "identityType": "AMLToken" + }, + "componentId": null, + "jobType": "Command", + "resources": { + "instanceCount": 1, + "instanceType": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "queueSettings": { + "jobTier": "Standard", + "priority": null + }, + "codeId": null, + "command": "pip freeze", + "environmentId": "azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33", + "inputs": { + "testdataset": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/data/", + "mode": "ReadOnlyMount", + "jobInputType": "uri_folder" + } + }, + "outputs": { + "default": { + "description": null, + "uri": "azureml://datastores/workspaceartifactstore/ExperimentRun/dcid.test_589279419362", + "assetName": null, + "assetVersion": null, + "mode": "ReadWriteMount", + "jobOutputType": "uri_folder" + } + }, + "distribution": null, + "autologgerSettings": null, + "limits": null, + "environmentVariables": {}, + "parameters": {} + }, + "systemData": { + "createdAt": "2023-02-21T20:33:22.211468\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/test_589279419362?api-version=2022-12-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.10.6 (Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 21 Feb 2023 20:33:26 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-ece9d0d6c54e63d430608776ed76713a-ec5c806a4a2cfeec-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-eastus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "9904a812-3db8-4b94-b704-fd821552f592", + "x-ms-ratelimit-remaining-subscription-reads": "11985", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "CANADACENTRAL:20230221T203326Z:9904a812-3db8-4b94-b704-fd821552f592", + "x-request-time": "0.033" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/test_589279419362", + "name": "test_589279419362", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_ComputeTargetStatus": "{\u0022AllocationState\u0022:\u0022steady\u0022,\u0022PreparingNodeCount\u0022:0,\u0022RunningNodeCount\u0022:0,\u0022CurrentNodeCount\u0022:0}" + }, + "properties": { + "_azureml.ComputeTargetType": "amlctrain", + "ProcessInfoFile": "azureml-logs/process_info.json", + "ProcessStatusFile": "azureml-logs/process_status.json" + }, + "displayName": "test_dataset_display_name1", + "status": "Queued", + "experimentName": "mfe-test1-dataset", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://eastus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/test_589279419362?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/testCompute", + "isArchived": false, + "identity": { + "identityType": "AMLToken" + }, + "componentId": null, + "jobType": "Command", + "resources": { + "instanceCount": 1, + "instanceType": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "codeId": null, + "command": "pip freeze", + "environmentId": "azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33", + "inputs": { + "testdataset": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/data/", + "mode": "ReadOnlyMount", + "jobInputType": "uri_folder" + } + }, + "outputs": { + "default": { + "description": null, + "uri": "azureml://datastores/workspaceartifactstore/ExperimentRun/dcid.test_589279419362", + "assetName": null, + "assetVersion": null, + "mode": "ReadWriteMount", + "jobOutputType": "uri_folder" + } + }, + "distribution": null, + "autologgerSettings": null, + "limits": null, + "environmentVariables": {}, + "parameters": {} + }, + "systemData": { + "createdAt": "2023-02-21T20:33:22.211468\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + } + ], + "Variables": { + "job_name": "test_589279419362" + } +} \ No newline at end of file From d0c4b270518e8e4902365a4c5ef13bc87b6274dc Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 17:04:43 -0800 Subject: [PATCH 12/23] Fix pylint and add priority to unittests --- sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py | 6 +++--- sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py | 2 +- .../azure-ai-ml/azure/ai/ml/entities/_builders/command.py | 2 +- sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py | 1 - .../azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py | 6 +++--- .../tests/command_job/unittests/test_command_job_entity.py | 4 ++-- .../azure-ai-ml/tests/dsl/unittests/test_command_builder.py | 6 +++--- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py index 361d1a52543d..ac0cfbc57737 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -2,7 +2,7 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # --------------------------------------------------------- -from marshmallow import fields, post_load +from marshmallow import post_load from azure.ai.ml.constants._job.job import JobPriorityValues, JobTierNames from azure.ai.ml._schema.core.fields import StringTransformedEnum from azure.ai.ml._schema.core.schema import PatchedSchemaMeta @@ -18,7 +18,7 @@ class QueueSettingsSchema(metaclass=PatchedSchemaMeta): ) @post_load - def make(self, data, **kwargs): + def make(self, data, **kwargs): # pylint: disable=unused-argument, disable=no-self-use from azure.ai.ml.entities import QueueSettings - return QueueSettings(**data) \ No newline at end of file + return QueueSettings(**data) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py index db842dc9c795..bf2a7e912a86 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py @@ -154,4 +154,4 @@ class RestValues: REST_TO_ENTITY = {v: k for k, v in ENTITY_TO_REST.items()} - ALLOWED_VALUES = [EntityValues.LOW, EntityValues.MEDIUM, EntityValues.HIGH] \ No newline at end of file + ALLOWED_VALUES = [EntityValues.LOW, EntityValues.MEDIUM, EntityValues.HIGH] diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 254d3c22e338..f38f19f23fb5 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -197,7 +197,7 @@ def __init__( self.environment = environment self._resources = resources self._services = services - self._queue_settings = queue_settings + self.queue_settings = queue_settings if isinstance(self.component, CommandComponent): self.resources = self.resources or self.component.resources diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py index 86bea201cd31..1f8580c7a2e4 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/job.py @@ -16,7 +16,6 @@ from azure.ai.ml._restclient.runhistory.models import Run from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, JobService from azure.ai.ml._restclient.v2023_02_01_preview.models import JobType as RestJobType -from azure.ai.ml._restclient.v2023_02_01_preview.models import QueueSettings from azure.ai.ml._utils._html_utils import make_link, to_html from azure.ai.ml._utils.utils import dump_yaml_to_file from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY, CommonYamlFields diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py index 41006a273418..ebb85ae6532d 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/queue_settings.py @@ -5,7 +5,7 @@ # pylint: disable=protected-access import logging -from typing import Dict, Optional +from typing import Optional from typing_extensions import Literal from azure.ai.ml.constants._job.job import JobPriorityValues, JobTierNames @@ -61,7 +61,7 @@ def _validate(self): error_category=ErrorCategory.USER_ERROR, error_type=ValidationErrorType.INVALID_VALUE, ) - + if self.priority and not self.priority in JobPriorityValues.ENTITY_TO_REST.keys(): msg = f"priority should be one of " f"{JobPriorityValues.ALLOWED_VALUES}, but received '{self.priority}'." raise ValidationException( @@ -70,4 +70,4 @@ def _validate(self): target=ErrorTarget.JOB, error_category=ErrorCategory.USER_ERROR, error_type=ValidationErrorType.INVALID_VALUE, - ) \ No newline at end of file + ) diff --git a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py index 47be8ba62241..c5dae879baca 100644 --- a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py +++ b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py @@ -135,7 +135,7 @@ def test_command_job_builder_serialization(self) -> None: instance_type="STANDARD_BLA", timeout=300, code="./", - queue_settings=QueueSettings(job_tier="standard") + queue_settings=QueueSettings(job_tier="standard", priorty="medium") ) expected_job = CommandJob( @@ -155,7 +155,7 @@ def test_command_job_builder_serialization(self) -> None: outputs={"best_model": {}}, limits=CommandJobLimits(timeout=300), resources=JobResourceConfiguration(instance_count=2, instance_type="STANDARD_BLA"), - queue_settings=QueueSettings(job_tier="standard"), + queue_settings=QueueSettings(job_tier="standard", priorty="medium"), code="./", ) diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py index dd32cab23127..5dc8528f58a5 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py @@ -681,10 +681,10 @@ def test_resources_from_dict(self, test_command_params): assert rest_dict["resources"] == {"instance_type": "STANDARD_D2"} def test_queue_settings(self, test_command_params): - expected_queue_settings = {"job_tier": "standard"} + expected_queue_settings = {"job_tier": "Standard", "priority": 2} test_command_params.update( { - "queue_settings": QueueSettings(job_tier="standard"), + "queue_settings": QueueSettings(job_tier="standard", priority="medium"), } ) command_node = command(**test_command_params) @@ -693,7 +693,7 @@ def test_queue_settings(self, test_command_params): test_command_params.update( { - "queue_settings": dict(job_tier="standard"), + "queue_settings": dict(job_tier="standard", priority="medium"), } ) command_node = command(**test_command_params) From eae8d0372ac3a9fbdfd4d3b4d78491250e2db523 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 17:48:07 -0800 Subject: [PATCH 13/23] Add missing file, update schedule operations with new API version --- sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py | 2 +- .../azure/ai/ml/operations/_schedule_operations.py | 6 +++--- .../command_job/command_job_test_serverless.yml | 13 +++++++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 sdk/ml/azure-ai-ml/tests/test_configs/command_job/command_job_test_serverless.yml diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py index 51b2f3bf1666..541ab3df3184 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py @@ -488,7 +488,7 @@ def __init__( self._schedules = ScheduleOperations( self._operation_scope, self._operation_config, - self._service_client_12_2022_preview, + self._service_client_02_2023_preview, self._operation_container, self._credential, _service_client_kwargs=kwargs, diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_schedule_operations.py b/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_schedule_operations.py index c42e1015f395..6846b27393d9 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_schedule_operations.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/operations/_schedule_operations.py @@ -4,7 +4,7 @@ # pylint: disable=protected-access from typing import Any, Iterable -from azure.ai.ml._restclient.v2022_10_01 import AzureMachineLearningWorkspaces as ServiceClient102022 +from azure.ai.ml._restclient.v2023_02_01_preview import AzureMachineLearningWorkspaces as ServiceClient022023Preview from azure.ai.ml._scope_dependent_operations import ( OperationConfig, OperationsContainer, @@ -43,14 +43,14 @@ def __init__( self, operation_scope: OperationScope, operation_config: OperationConfig, - service_client_10_2022: ServiceClient102022, + service_client_02_2023_preview: ServiceClient022023Preview, all_operations: OperationsContainer, credential: TokenCredential, **kwargs: Any, ): super(ScheduleOperations, self).__init__(operation_scope, operation_config) # ops_logger.update_info(kwargs) - self.service_client = service_client_10_2022.schedules + self.service_client = service_client_02_2023_preview.schedules self._all_operations = all_operations self._stream_logs_until_completion = stream_logs_until_completion # Dataplane service clients are lazily created as they are needed diff --git a/sdk/ml/azure-ai-ml/tests/test_configs/command_job/command_job_test_serverless.yml b/sdk/ml/azure-ai-ml/tests/test_configs/command_job/command_job_test_serverless.yml new file mode 100644 index 000000000000..1c532c3b72a8 --- /dev/null +++ b/sdk/ml/azure-ai-ml/tests/test_configs/command_job/command_job_test_serverless.yml @@ -0,0 +1,13 @@ +command: pip freeze +environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33 +name: "testdataset1" +display_name: "test_dataset_display_name1" +experiment_name: mfe-test1-dataset +identity: + type: AMLToken +inputs: + "testdataset": + mode: ro_mount + path: ../data +queue_settings: + job_tier: standard From 926074642bd5f6c80c0518ae1142fcf1c4a653ae Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Mon, 6 Mar 2023 22:50:29 -0800 Subject: [PATCH 14/23] Update _to_node() --- sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py index fd74472bb7fe..73c787dceafc 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py @@ -278,6 +278,7 @@ def _to_node(self, context: Optional[Dict] = None, **kwargs): services=self.services, properties=self.properties, identity=self.identity, + queue_settings=self.queue_settings ) def _validate(self) -> None: From 555c98110ebea4c42a89a2a73a8dfced2684a477 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Tue, 7 Mar 2023 09:52:32 -0800 Subject: [PATCH 15/23] fix black errors --- sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py | 1 + sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py | 1 - sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py | 5 ++--- sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py | 2 +- .../tests/command_job/unittests/test_command_job_entity.py | 2 +- .../azure-ai-ml/tests/dsl/unittests/test_command_builder.py | 1 - 6 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py index ac0cfbc57737..2cd2786c36d6 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/queue_settings.py @@ -7,6 +7,7 @@ from azure.ai.ml._schema.core.fields import StringTransformedEnum from azure.ai.ml._schema.core.schema import PatchedSchemaMeta + class QueueSettingsSchema(metaclass=PatchedSchemaMeta): job_tier = StringTransformedEnum( allowed_values=JobTierNames.ALLOWED_NAMES, diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py index bf2a7e912a86..79bcf59ae6a7 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/constants/_job/job.py @@ -134,7 +134,6 @@ class RestNames: ALLOWED_NAMES = [EntityNames.Spot, EntityNames.Basic, EntityNames.Standard, EntityNames.Premium] - class JobPriorityValues: class EntityValues: LOW = "low" diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index f38f19f23fb5..2e25306e21c5 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -393,7 +393,6 @@ def set_queue_settings(self, *, job_tier: Optional[str] = None, priority: Option else: self.queue_settings = QueueSettings(job_tier=job_tier, priority=priority) - def sweep( self, *, @@ -522,7 +521,7 @@ def _to_job(self) -> CommandJob: services=self.services, creation_context=self.creation_context, parameters=self.parameters, - queue_settings=self.queue_settings + queue_settings=self.queue_settings, ) @classmethod @@ -538,7 +537,7 @@ def _to_rest_object(self, **kwargs) -> dict: "resources": get_rest_dict_for_node_attrs(self.resources, clear_empty_value=True), "services": get_rest_dict_for_node_attrs(self.services), "identity": self.identity._to_dict() if self.identity else None, - "queue_settings": get_rest_dict_for_node_attrs(self.queue_settings, clear_empty_value=True) + "queue_settings": get_rest_dict_for_node_attrs(self.queue_settings, clear_empty_value=True), }.items(): if value is not None: rest_obj[key] = value diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py index 73c787dceafc..07076f4c945a 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/command_job.py @@ -278,7 +278,7 @@ def _to_node(self, context: Optional[Dict] = None, **kwargs): services=self.services, properties=self.properties, identity=self.identity, - queue_settings=self.queue_settings + queue_settings=self.queue_settings, ) def _validate(self) -> None: diff --git a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py index c5dae879baca..08f8a431022f 100644 --- a/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py +++ b/sdk/ml/azure-ai-ml/tests/command_job/unittests/test_command_job_entity.py @@ -135,7 +135,7 @@ def test_command_job_builder_serialization(self) -> None: instance_type="STANDARD_BLA", timeout=300, code="./", - queue_settings=QueueSettings(job_tier="standard", priorty="medium") + queue_settings=QueueSettings(job_tier="standard", priorty="medium"), ) expected_job = CommandJob( diff --git a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py index 5dc8528f58a5..2bcabb60f733 100644 --- a/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py +++ b/sdk/ml/azure-ai-ml/tests/dsl/unittests/test_command_builder.py @@ -700,7 +700,6 @@ def test_queue_settings(self, test_command_params): rest_dict = command_node._to_rest_object() assert rest_dict["queue_settings"] == expected_queue_settings - def test_to_component_input(self): # test literal input literal_input_2_expected_type = { From a1f46e71aa0f0a8fde05f0ddc0f904475512e57f Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Tue, 7 Mar 2023 09:56:05 -0800 Subject: [PATCH 16/23] Wrap in experimental field --- .../azure/ai/ml/_schema/job/parameterized_command.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py index 91eb582e0d20..65bdb4885d5e 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/parameterized_command.py @@ -4,7 +4,7 @@ from marshmallow import fields -from azure.ai.ml._schema.core.fields import CodeField, DistributionField, NestedField +from azure.ai.ml._schema.core.fields import CodeField, DistributionField, ExperimentalField, NestedField from azure.ai.ml._schema.core.schema import PathAwareSchema from azure.ai.ml._schema.job_resource_configuration import JobResourceConfigurationSchema from azure.ai.ml._schema.queue_settings import QueueSettingsSchema @@ -41,4 +41,4 @@ class ParameterizedCommandSchema(PathAwareSchema): ) resources = NestedField(JobResourceConfigurationSchema) distribution = DistributionField() - queue_settings = NestedField(QueueSettingsSchema) + queue_settings = ExperimentalField(NestedField(QueueSettingsSchema)) From 1a2ebbe0c1bf736503a2b929ff44153d7774f55c Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Tue, 7 Mar 2023 16:01:29 -0800 Subject: [PATCH 17/23] Add queue settings to AutoML jobs --- .../azure/ai/ml/_schema/_sweep/parameterized_sweep.py | 4 +++- sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py | 4 +++- sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py | 1 + sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py | 4 ++++ .../azure/ai/ml/entities/_job/automl/automl_job.py | 4 +++- .../entities/_job/automl/image/image_classification_job.py | 2 ++ .../_job/automl/image/image_classification_multilabel_job.py | 2 ++ .../_job/automl/image/image_instance_segmentation_job.py | 2 ++ .../entities/_job/automl/image/image_object_detection_job.py | 2 ++ .../ml/entities/_job/automl/nlp/text_classification_job.py | 2 ++ .../_job/automl/nlp/text_classification_multilabel_job.py | 2 ++ .../azure/ai/ml/entities/_job/automl/nlp/text_ner_job.py | 2 ++ .../ai/ml/entities/_job/automl/tabular/classification_job.py | 2 ++ .../ai/ml/entities/_job/automl/tabular/forecasting_job.py | 2 ++ .../ai/ml/entities/_job/automl/tabular/regression_job.py | 2 ++ .../azure/ai/ml/entities/_job/parameterized_command.py | 1 + .../azure/ai/ml/entities/_job/sweep/parameterized_sweep.py | 3 +++ .../azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py | 5 +++++ 18 files changed, 43 insertions(+), 3 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/_sweep/parameterized_sweep.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/_sweep/parameterized_sweep.py index 054ee503c82a..f935c9cbf582 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/_sweep/parameterized_sweep.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/_sweep/parameterized_sweep.py @@ -4,9 +4,10 @@ # pylint: disable=unused-argument,no-self-use -from azure.ai.ml._schema.core.fields import NestedField, PathAwareSchema +from azure.ai.ml._schema.core.fields import ExperimentalField, NestedField, PathAwareSchema from ..job.job_limits import SweepJobLimitsSchema +from ..queue_settings import QueueSettingsSchema from .sweep_fields_provider import EarlyTerminationField, SamplingAlgorithmField, SearchSpaceField from .sweep_objective import SweepObjectiveSchema @@ -26,3 +27,4 @@ class ParameterizedSweepSchema(PathAwareSchema): SweepJobLimitsSchema, required=True, ) + queue_settings = ExperimentalField(NestedField(QueueSettingsSchema)) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py index 9509128cc513..4082c83bf14c 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py @@ -4,10 +4,11 @@ from marshmallow import fields -from azure.ai.ml._schema.core.fields import NestedField, StringTransformedEnum +from azure.ai.ml._schema.core.fields import ExperimentalField, NestedField, StringTransformedEnum from azure.ai.ml._schema.job import BaseJobSchema from azure.ai.ml._schema.job.input_output_fields_provider import OutputsField from azure.ai.ml._schema.job_resource_configuration import JobResourceConfigurationSchema +from azure.ai.ml._schema.queue_settings import QueueSettingsSchema from azure.ai.ml.constants import JobType @@ -17,3 +18,4 @@ class AutoMLJobSchema(BaseJobSchema): environment_variables = fields.Dict(keys=fields.Str(), values=fields.Str()) outputs = OutputsField() resources = NestedField(JobResourceConfigurationSchema()) + queue_settings = ExperimentalField(NestedField(QueueSettingsSchema)) \ No newline at end of file diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 2e25306e21c5..250b8bcef091 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -477,6 +477,7 @@ def sweep( experiment_name=self.experiment_name, identity=self.identity if not identity else identity, _from_component_func=True, + queue_settings=self.queue_settings, ) sweep_node.set_limits( max_total_trials=max_total_trials, diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py index 3d76a039a58e..74ee00615013 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py @@ -22,6 +22,7 @@ from azure.ai.ml.entities._inputs_outputs import Input, Output from azure.ai.ml.entities._job.job_limits import SweepJobLimits from azure.ai.ml.entities._job.pipeline._io import NodeInput +from azure.ai.ml.entities._job.queue_settings import QueueSettings from azure.ai.ml.entities._job.sweep.early_termination_policy import ( BanditPolicy, EarlyTerminationPolicy, @@ -121,6 +122,7 @@ def __init__( identity: Optional[ Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs, ): # TODO: get rid of self._job_inputs, self._job_outputs once we have general Input @@ -145,6 +147,7 @@ def __init__( limits=limits, early_termination=early_termination, search_space=search_space, + queue_settings=queue_settings, ) self.identity = identity @@ -293,6 +296,7 @@ def _to_job(self) -> SweepJob: inputs=self._job_inputs, outputs=self._job_outputs, identity=self.identity, + queue_settings=self.queue_settings, ) @classmethod diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py index 30c8a9ec042d..1270e277f875 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py @@ -8,7 +8,7 @@ from abc import ABC, abstractmethod from typing import Any, Dict, Optional, Union -from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, MLTableJobInput, ResourceConfiguration, TaskType +from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, MLTableJobInput, QueueSettings, ResourceConfiguration, TaskType from azure.ai.ml._utils.utils import camel_to_snake from azure.ai.ml.constants import JobType from azure.ai.ml.constants._common import TYPE, AssetTypes @@ -37,6 +37,7 @@ def __init__( identity: Optional[ Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs: Any, ) -> None: """Initialize an AutoML job entity. @@ -56,6 +57,7 @@ def __init__( self.resources = resources self.identity = identity + self.queue_settings = queue_settings @property @abstractmethod diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_job.py index d6c7e1be2368..b91a61634a5a 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_job.py @@ -104,6 +104,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=image_classification_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -132,6 +133,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ImageClassificationJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } image_classification_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_multilabel_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_multilabel_job.py index 31a7463217c2..04ecc26971f3 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_multilabel_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_classification_multilabel_job.py @@ -106,6 +106,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=image_classification_multilabel_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -134,6 +135,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ImageClassificationMultilabelJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } image_classification_multilabel_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_instance_segmentation_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_instance_segmentation_job.py index 4f87d63bdd0b..a362a5c5d685 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_instance_segmentation_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_instance_segmentation_job.py @@ -104,6 +104,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=image_instance_segmentation_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -132,6 +133,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ImageInstanceSegmentationJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } image_instance_segmentation_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_object_detection_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_object_detection_job.py index 150c2347a6a3..1d33a38794ba 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_object_detection_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/image/image_object_detection_job.py @@ -103,6 +103,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=image_object_detection_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -131,6 +132,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ImageObjectDetectionJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } image_object_detection_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_job.py index d2d7941aebd5..71c6d2dd73bb 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_job.py @@ -107,6 +107,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=text_classification, identity=self.identity._to_ob_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -162,6 +163,7 @@ def _from_rest_object(cls, obj: JobBase) -> "TextClassificationJob": identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + queue_settings=properties.queue_settings, ) text_classification_job._restore_data_inputs() diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py index 226536d5e95e..a3631d4d7563 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py @@ -106,6 +106,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=text_classification_multilabel, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings ) result = JobBase(properties=properties) @@ -161,6 +162,7 @@ def _from_rest_object(cls, obj: JobBase) -> "TextClassificationMultilabelJob": identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + queue_settings=properties.queue_settings, ) text_classification_multilabel_job._restore_data_inputs() diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_ner_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_ner_job.py index 53ce6badc8fc..fc124a6bec82 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_ner_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_ner_job.py @@ -103,6 +103,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=text_ner, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -158,6 +159,7 @@ def _from_rest_object(cls, obj: JobBase) -> "TextNerJob": identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + queue_settings=properties.queue_settings, ) text_ner_job._restore_data_inputs() diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/classification_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/classification_job.py index 9f5b77c02ac1..33e0ddf2dbb8 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/classification_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/classification_job.py @@ -113,6 +113,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=classification_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -141,6 +142,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ClassificationJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } classification_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/forecasting_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/forecasting_job.py index b92330a7569e..7a76aee88957 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/forecasting_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/forecasting_job.py @@ -404,6 +404,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=forecasting_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -432,6 +433,7 @@ def _from_rest_object(cls, obj: JobBase) -> "ForecastingJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } forecasting_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/regression_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/regression_job.py index 457e47418b53..8eaaf4a10723 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/regression_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/tabular/regression_job.py @@ -107,6 +107,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=regression_task, identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) @@ -135,6 +136,7 @@ def _from_rest_object(cls, obj: JobBase) -> "RegressionJob": "identity": _BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + "queue_settings": properties.queue_settings, } regression_job = cls( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py index 18df47ae72be..89c7b06eea01 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/parameterized_command.py @@ -100,5 +100,6 @@ def _load_from_sweep_job(cls, sweep_job: SweepJob) -> "ParameterizedCommand": environment=sweep_job.trial.environment_id, distribution=DistributionConfiguration._from_rest_object(sweep_job.trial.distribution), resources=JobResourceConfiguration._from_rest_object(sweep_job.trial.resources), + queue_settings=QueueSettings._from_rest_object(sweep_job.queue_settings), ) return parameterized_command diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/parameterized_sweep.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/parameterized_sweep.py index 4c12f15e8ac1..d1b9e385c00b 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/parameterized_sweep.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/parameterized_sweep.py @@ -6,6 +6,7 @@ from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationErrorType, ValidationException from ..job_limits import SweepJobLimits +from ..queue_settings import QueueSettings from .early_termination_policy import ( BanditPolicy, EarlyTerminationPolicy, @@ -70,11 +71,13 @@ def __init__( ], ] ] = None, + queue_settings: Optional[QueueSettings] = None, ): self.sampling_algorithm = sampling_algorithm self.early_termination = early_termination self._limits = limits self.search_space = search_space + self.queue_settings = queue_settings if isinstance(objective, Dict): self.objective = Objective(**objective) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py index eb49f8463cf2..9f59ed75d1ed 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py @@ -41,6 +41,7 @@ # from ..identity import AmlToken, Identity, ManagedIdentity, UserIdentity from ..job_limits import SweepJobLimits from ..parameterized_command import ParameterizedCommand +from ..queue_settings import QueueSettings from .early_termination_policy import ( BanditPolicy, EarlyTerminationPolicy, @@ -143,6 +144,7 @@ def __init__( objective: Optional[Objective] = None, trial: Optional[Union[CommandJob, CommandComponent]] = None, early_termination: Optional[Union[BanditPolicy, MedianStoppingPolicy, TruncationSelectionPolicy]] = None, + queue_settings: Optional[QueueSettings] = None, **kwargs: Any, ): kwargs[TYPE] = JobType.SWEEP @@ -169,6 +171,7 @@ def __init__( objective=objective, early_termination=early_termination, search_space=search_space, + queue_settings=queue_settings, ) def _to_dict(self) -> Dict: @@ -208,6 +211,7 @@ def _to_rest_object(self) -> JobBase: inputs=to_rest_dataset_literal_inputs(self.inputs, job_type=self.type), outputs=to_rest_data_outputs(self.outputs), identity=self.identity._to_job_rest_object() if self.identity else None, + queue_settings=self.queue_settings._to_rest_object() if self.queue_settings else None, ) sweep_job_resource = JobBase(properties=sweep_job) sweep_job_resource.name = self.name @@ -268,6 +272,7 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, + queue_settings=properties.queue_settings ) def _override_missing_properties_from_trial(self): From b446cfc2ad3c850f43ace353043234379fad83ab Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Wed, 8 Mar 2023 13:56:46 -0800 Subject: [PATCH 18/23] Add tests --- .../e2etests/test_remote_classification.py | 5 +- .../e2etests/test_remote_regression.py | 5 +- .../unittests/test_job_operations.py | 53 +- ...classification_with_training_settings.json | 2387 ----------------- ...ion_with_training_settings_serverless.json | 1846 +++++++++++++ ...est_regression_with_training_settings.json | 4 - 6 files changed, 1889 insertions(+), 2411 deletions(-) delete mode 100644 sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings.json create mode 100644 sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings_serverless.json delete mode 100644 sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings.json diff --git a/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_classification.py b/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_classification.py index 7d6e27f3e50e..1388ecc6e222 100644 --- a/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_classification.py +++ b/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_classification.py @@ -10,6 +10,7 @@ from azure.ai.ml import MLClient from azure.ai.ml.automl import ColumnTransformer, classification +from azure.ai.ml.entities import QueueSettings from azure.ai.ml.entities._inputs_outputs import Input from azure.ai.ml.entities._job.automl.tabular.classification_job import ClassificationJob from azure.ai.ml.operations._run_history_constants import JobStatus @@ -99,13 +100,15 @@ def test_classification_fail_without_featurization( # Assert Failure without featurization assert_final_job_status(created_job, client, ClassificationJob, JobStatus.FAILED) - def test_classification_with_training_settings( + def test_classification_with_training_settings_serverless( self, bankmarketing_dataset: Tuple[Input, Input, str], client: MLClient ) -> None: # get classification task with validation data classification_task = self.get_classification_task( bankmarketing_dataset, "DPv2-classification-training-settings", add_validation=True ) + classification_task.compute = None + classification_task.queue_settings = QueueSettings(job_tier="standard") # Featurization set to auto by default # Set training # blocked models diff --git a/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_regression.py b/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_regression.py index 9e6e77807cd7..ac96610bb733 100644 --- a/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_regression.py +++ b/sdk/ml/azure-ai-ml/tests/automl_job/e2etests/test_remote_regression.py @@ -10,6 +10,7 @@ from azure.ai.ml import MLClient from azure.ai.ml.automl import ColumnTransformer, regression +from azure.ai.ml.entities import QueueSettings from azure.ai.ml.entities._inputs_outputs import Input from azure.ai.ml.entities._job.automl.tabular.regression_job import RegressionJob from azure.ai.ml.operations._run_history_constants import JobStatus @@ -102,7 +103,7 @@ def test_regression_fail_without_featurization( created_job = client.jobs.create_or_update(regression_task) assert_final_job_status(created_job, client, RegressionJob, JobStatus.FAILED) - def test_regression_with_training_settings( + def test_regression_with_training_settings_serverless( self, machinedata_dataset: Tuple[Input, str], client: MLClient, @@ -111,6 +112,8 @@ def test_regression_with_training_settings( regression_task = self.get_regression_task( machinedata_dataset, "DPv2-regression-training-settings", add_validation=True ) + regression_task.compute = None + regression_task.queue_settings = QueueSettings(job_tier="standard") # Featurization set to auto by default # Set training blocked_models = ["ElasticNet", "XGBoostRegressor", "LightGBM"] diff --git a/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py b/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py index 62150dca0ca9..3593011ff9ba 100644 --- a/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py +++ b/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py @@ -14,7 +14,7 @@ from pytest_mock import MockFixture from azure.ai.ml import MLClient, load_job -from azure.ai.ml._restclient.v2022_10_01 import models +from azure.ai.ml._restclient.v2023_02_01_preview import models from azure.ai.ml._scope_dependent_operations import OperationConfig, OperationScope from azure.ai.ml.constants._common import AZUREML_PRIVATE_FEATURES_ENV_VAR, AzureMLResourceType from azure.ai.ml.entities._builders import Command @@ -111,11 +111,16 @@ def mock_job_operation( mock_environment_operation: Mock, mock_runs_operation: Mock, ) -> JobOperations: - mock_machinelearning_client._operation_container.add(AzureMLResourceType.CODE, mock_code_operation) - mock_machinelearning_client._operation_container.add(AzureMLResourceType.ENVIRONMENT, mock_environment_operation) - mock_machinelearning_client._operation_container.add(AzureMLResourceType.WORKSPACE, mock_workspace_operation) - mock_machinelearning_client._operation_container.add(AzureMLResourceType.DATASTORE, mock_datastore_operation) - mock_machinelearning_client._operation_container.add("run", mock_runs_operation) + mock_machinelearning_client._operation_container.add( + AzureMLResourceType.CODE, mock_code_operation) + mock_machinelearning_client._operation_container.add( + AzureMLResourceType.ENVIRONMENT, mock_environment_operation) + mock_machinelearning_client._operation_container.add( + AzureMLResourceType.WORKSPACE, mock_workspace_operation) + mock_machinelearning_client._operation_container.add( + AzureMLResourceType.DATASTORE, mock_datastore_operation) + mock_machinelearning_client._operation_container.add( + "run", mock_runs_operation) yield JobOperations( operation_scope=mock_workspace_scope, operation_config=mock_operation_config, @@ -132,13 +137,15 @@ def mock_job_operation( class TestJobOperations: def test_list(self, mock_job_operation: JobOperations) -> None: mock_job_operation.list() - expected = (mock_job_operation._resource_group_name, mock_job_operation._workspace_name) + expected = (mock_job_operation._resource_group_name, + mock_job_operation._workspace_name) assert expected in mock_job_operation._operation_2023_02_preview.list.call_args @patch.dict(os.environ, {AZUREML_PRIVATE_FEATURES_ENV_VAR: "True"}) def test_list_private_preview(self, mock_job_operation: JobOperations) -> None: mock_job_operation.list() - expected = (mock_job_operation._resource_group_name, mock_job_operation._workspace_name) + expected = (mock_job_operation._resource_group_name, + mock_job_operation._workspace_name) assert expected in mock_job_operation._operation_2023_02_preview.list.call_args @patch.object(Job, "_from_rest_object") @@ -151,8 +158,10 @@ def test_get(self, mock_method, mock_job_operation: JobOperations) -> None: def test_get_job(self, mock_method, mock_job_operation: JobOperations) -> None: from azure.ai.ml import Input, dsl, load_component - component = load_component(source="./tests/test_configs/components/helloworld_component.yml") - component_input = Input(type="uri_file", path="https://dprepdata.blob.core.windows.net/demo/Titanic.csv") + component = load_component( + source="./tests/test_configs/components/helloworld_component.yml") + component_input = Input( + type="uri_file", path="https://dprepdata.blob.core.windows.net/demo/Titanic.csv") @dsl.pipeline() def sub_pipeline(): @@ -182,7 +191,8 @@ def test_get_private_preview_flag_returns_latest(self, mock_method, mock_job_ope def test_stream_command_job(self, mock_job_operation: JobOperations) -> None: # setup - mock_job_operation._get_workspace_url = Mock(return_value="TheWorkSpaceUrl") + mock_job_operation._get_workspace_url = Mock( + return_value="TheWorkSpaceUrl") mock_job_operation._stream_logs_until_completion = Mock() # go @@ -198,17 +208,20 @@ def test_stream_command_job(self, mock_job_operation: JobOperations) -> None: @patch.object(Job, "_from_rest_object") def test_submit_command_job(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job(source="./tests/test_configs/command_job/command_job_test.yml") + job = load_job( + source="./tests/test_configs/command_job/command_job_test.yml") mock_job_operation.create_or_update(job=job) git_props = get_git_properties() assert git_props.items() <= job.properties.items() mock_job_operation._operation_2023_02_preview.create_or_update.assert_called_once() - mock_job_operation._credential.get_token.assert_called_once_with("https://ml.azure.com/.default") + mock_job_operation._credential.get_token.assert_called_once_with( + "https://ml.azure.com/.default") @patch.object(Job, "_from_rest_object") def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job(source="./tests/test_configs/command_job/command_job_test_user_identity.yml") + job = load_job( + source="./tests/test_configs/command_job/command_job_test_user_identity.yml") aml_resource_id = _get_aml_resource_id_from_metadata() azure_ml_scopes = _resource_to_scopes(aml_resource_id) @@ -219,7 +232,8 @@ def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobO ) mock_job_operation.create_or_update(job=job) mock_job_operation._operation_2023_02_preview.create_or_update.assert_called_once() - mock_job_operation._credential.get_token.assert_called_once_with(azure_ml_scopes[0]) + mock_job_operation._credential.get_token.assert_called_once_with( + azure_ml_scopes[0]) with patch.object(mock_job_operation._credential, "get_token") as mock_get_token: mock_get_token.return_value = AccessToken( @@ -231,11 +245,13 @@ def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobO @pytest.mark.skip(reason="Function under test no longer returns Job as output") def test_command_job_resolver_with_virtual_cluster(self, mock_job_operation: JobOperations) -> None: expected = "/subscriptions/test_subscription/resourceGroups/test_resource_group/providers/Microsoft.MachineLearningServices/virtualclusters/testvcinmaster" - job = load_job(source="tests/test_configs/command_job/command_job_with_virtualcluster.yaml") + job = load_job( + source="tests/test_configs/command_job/command_job_with_virtualcluster.yaml") mock_job_operation._resolve_arm_id_or_upload_dependencies(job) assert job.compute == expected - job = load_job(source="tests/test_configs/command_job/command_job_with_virtualcluster_2.yaml") + job = load_job( + source="tests/test_configs/command_job/command_job_with_virtualcluster_2.yaml") mock_job_operation._resolve_arm_id_or_upload_dependencies(job) assert job.compute == expected @@ -270,7 +286,8 @@ def test_parse_corrupt_job_data(self, mocker: MockFixture, corrupt_job_data: str @patch.object(Job, "_from_rest_object") def test_job_create_skip_validation(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job("./tests/test_configs/command_job/simple_train_test.yml") + job = load_job( + "./tests/test_configs/command_job/simple_train_test.yml") with patch.object(JobOperations, "_validate") as mock_thing, patch.object( JobOperations, "_resolve_arm_id_or_upload_dependencies" ): diff --git a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings.json b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings.json deleted file mode 100644 index 79173ed5cb5b..000000000000 --- a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings.json +++ /dev/null @@ -1,2387 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/v2.0/.well-known/openid-configuration", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "*/*", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azsdk-python-identity/1.11.0b4 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Access-Control-Allow-Methods": "GET, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Cache-Control": "max-age=86400, private", - "Content-Length": "1753", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:32 GMT", - "P3P": "CP=\u0022DSP CUR OTPi IND OTRi ONL FIN\u0022", - "Set-Cookie": [ - "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAB3tntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; expires=Wed, 28-Sep-2022 17:31:33 GMT; path=/; secure; HttpOnly; SameSite=None", - "x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly", - "stsservicecookie=estsfd; path=/; secure; samesite=none; httponly" - ], - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "X-Content-Type-Options": "nosniff", - "x-ms-ests-server": "2.1.13562.12 - WUS2 ProdSlices", - "X-XSS-Protection": "0" - }, - "ResponseBody": { - "token_endpoint": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/token", - "token_endpoint_auth_methods_supported": [ - "client_secret_post", - "private_key_jwt", - "client_secret_basic" - ], - "jwks_uri": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/discovery/v2.0/keys", - "response_modes_supported": [ - "query", - "fragment", - "form_post" - ], - "subject_types_supported": [ - "pairwise" - ], - "id_token_signing_alg_values_supported": [ - "RS256" - ], - "response_types_supported": [ - "code", - "id_token", - "code id_token", - "id_token token" - ], - "scopes_supported": [ - "openid", - "profile", - "email", - "offline_access" - ], - "issuer": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/v2.0", - "request_uri_parameter_supported": false, - "userinfo_endpoint": "https://graph.microsoft.com/oidc/userinfo", - "authorization_endpoint": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/authorize", - "device_authorization_endpoint": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/devicecode", - "http_logout_supported": true, - "frontchannel_logout_supported": true, - "end_session_endpoint": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/logout", - "claims_supported": [ - "sub", - "iss", - "cloud_instance_name", - "cloud_instance_host_name", - "cloud_graph_host_name", - "msgraph_host", - "aud", - "exp", - "iat", - "auth_time", - "acr", - "nonce", - "preferred_username", - "name", - "tid", - "ver", - "at_hash", - "c_hash", - "email" - ], - "kerberos_endpoint": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/kerberos", - "tenant_region_scope": "WW", - "cloud_instance_name": "microsoftonline.com", - "cloud_graph_host_name": "graph.windows.net", - "msgraph_host": "graph.microsoft.com", - "rbac_url": "https://pas.windows.net" - } - }, - { - "RequestUri": "https://login.microsoftonline.com/common/discovery/instance?api-version=1.1\u0026authorization_endpoint=https://login.microsoftonline.com/common/oauth2/authorize", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Cookie": "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAB3tntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd", - "User-Agent": "azsdk-python-identity/1.11.0b4 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Access-Control-Allow-Methods": "GET, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Cache-Control": "max-age=86400, private", - "Content-Length": "945", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:32 GMT", - "P3P": "CP=\u0022DSP CUR OTPi IND OTRi ONL FIN\u0022", - "Set-Cookie": [ - "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAB3tntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; expires=Wed, 28-Sep-2022 17:31:33 GMT; path=/; secure; HttpOnly; SameSite=None", - "x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly", - "stsservicecookie=estsfd; path=/; secure; samesite=none; httponly" - ], - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "X-Content-Type-Options": "nosniff", - "x-ms-ests-server": "2.1.13481.13 - WUS2 ProdSlices", - "X-XSS-Protection": "0" - }, - "ResponseBody": { - "tenant_discovery_endpoint": "https://login.microsoftonline.com/common/.well-known/openid-configuration", - "api-version": "1.1", - "metadata": [ - { - "preferred_network": "login.microsoftonline.com", - "preferred_cache": "login.windows.net", - "aliases": [ - "login.microsoftonline.com", - "login.windows.net", - "login.microsoft.com", - "sts.windows.net" - ] - }, - { - "preferred_network": "login.partner.microsoftonline.cn", - "preferred_cache": "login.partner.microsoftonline.cn", - "aliases": [ - "login.partner.microsoftonline.cn", - "login.chinacloudapi.cn" - ] - }, - { - "preferred_network": "login.microsoftonline.de", - "preferred_cache": "login.microsoftonline.de", - "aliases": [ - "login.microsoftonline.de" - ] - }, - { - "preferred_network": "login.microsoftonline.us", - "preferred_cache": "login.microsoftonline.us", - "aliases": [ - "login.microsoftonline.us", - "login.usgovcloudapi.net" - ] - }, - { - "preferred_network": "login-us.microsoftonline.com", - "preferred_cache": "login-us.microsoftonline.com", - "aliases": [ - "login-us.microsoftonline.com" - ] - } - ] - } - }, - { - "RequestUri": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/token", - "RequestMethod": "POST", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "client-request-id": "0c4830e3-c9e2-4e6b-8941-c8ecb981819f", - "Connection": "keep-alive", - "Content-Length": "292", - "Content-Type": "application/x-www-form-urlencoded", - "Cookie": "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAB3tntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd", - "User-Agent": "azsdk-python-identity/1.11.0b4 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-client-cpu": "x64", - "x-client-current-telemetry": "4|730,0|", - "x-client-last-telemetry": "4|0|||", - "x-client-os": "win32", - "x-client-sku": "MSAL.Python", - "x-client-ver": "1.18.0", - "x-ms-lib-capability": "retry-after, h429" - }, - "RequestBody": "client_id=5019366a-3f7a-4d18-adae-d2483c23e1ee\u0026grant_type=client_credentials\u0026client_info=1\u0026client_secret=5FL8Q~~BBdJpY_y.KpA94zzLZv2Czg.uYQAmfaMZ\u0026claims=%7B%22access_token%22%3A\u002B%7B%22xms_cc%22%3A\u002B%7B%22values%22%3A\u002B%5B%22CP1%22%5D%7D%7D%7D\u0026scope=https%3A%2F%2Fmanagement.azure.com%2F.default", - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-store, no-cache", - "client-request-id": "0c4830e3-c9e2-4e6b-8941-c8ecb981819f", - "Content-Length": "111", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:33 GMT", - "Expires": "-1", - "P3P": "CP=\u0022DSP CUR OTPi IND OTRi ONL FIN\u0022", - "Pragma": "no-cache", - "Set-Cookie": [ - "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAEnuntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; expires=Wed, 28-Sep-2022 17:31:33 GMT; path=/; secure; HttpOnly; SameSite=None", - "x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly", - "stsservicecookie=estsfd; path=/; secure; samesite=none; httponly" - ], - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "X-Content-Type-Options": "nosniff", - "x-ms-clitelem": "1,0,0,,", - "x-ms-ests-server": "2.1.13562.12 - WUS2 ProdSlices", - "X-XSS-Protection": "0" - }, - "ResponseBody": { - "token_type": "Bearer", - "expires_in": 86399, - "ext_expires_in": 86399, - "refresh_in": 43199, - "access_token": "Sanitized" - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-05-01", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:33 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-fa1f5de1a1a74e621557a745aa58d2ef-aa38a6523cd880d1-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "ac66cc8c-e5ae-4f4b-8f55-8392b92811a6", - "x-ms-ratelimit-remaining-subscription-reads": "11945", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173134Z:ac66cc8c-e5ae-4f4b-8f55-8392b92811a6", - "x-request-time": "0.104" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", - "name": "workspaceblobstore", - "type": "Microsoft.MachineLearningServices/workspaces/datastores", - "properties": { - "description": null, - "tags": null, - "properties": null, - "isDefault": true, - "credentials": { - "credentialsType": "AccountKey" - }, - "datastoreType": "AzureBlob", - "accountName": "saevqdskf66m6am", - "containerName": "azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "endpoint": "core.windows.net", - "protocol": "https", - "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" - }, - "systemData": { - "createdAt": "2022-08-29T15:37:29.1934448\u002B00:00", - "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", - "createdByType": "Application", - "lastModifiedAt": "2022-08-29T15:37:29.7910205\u002B00:00", - "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", - "lastModifiedByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-05-01", - "RequestMethod": "POST", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Content-Length": "0", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:34 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-0d02a6081025f5a6d566a29401309a66-e04ad7dbc1ae4c1a-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": "Accept-Encoding", - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "b601fe9b-6ee4-4754-a272-267451ed5e63", - "x-ms-ratelimit-remaining-subscription-writes": "1176", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173134Z:b601fe9b-6ee4-4754-a272-267451ed5e63", - "x-request-time": "0.182" - }, - "ResponseBody": { - "secretsType": "AccountKey", - "key": "dGhpcyBpcyBmYWtlIGtleQ==" - } - }, - { - "RequestUri": "https://saevqdskf66m6am.blob.core.windows.net/azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/MLTable", - "RequestMethod": "HEAD", - "RequestHeaders": { - "Accept": "application/xml", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azsdk-python-storage-blob/12.12.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-ms-date": "Mon, 29 Aug 2022 17:31:35 GMT", - "x-ms-version": "2021-06-08" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Accept-Ranges": "bytes", - "Content-Length": "242", - "Content-MD5": "kmRcIQnGyx1Tyt/S3D45Mw==", - "Content-Type": "application/octet-stream", - "Date": "Mon, 29 Aug 2022 17:31:34 GMT", - "ETag": "\u00220x8DA89E0C0AB778C\u0022", - "Last-Modified": "Mon, 29 Aug 2022 17:06:02 GMT", - "Server": [ - "Windows-Azure-Blob/1.0", - "Microsoft-HTTPAPI/2.0" - ], - "Vary": "Origin", - "x-ms-access-tier": "Hot", - "x-ms-access-tier-inferred": "true", - "x-ms-blob-type": "BlockBlob", - "x-ms-creation-time": "Mon, 29 Aug 2022 17:06:02 GMT", - "x-ms-lease-state": "available", - "x-ms-lease-status": "unlocked", - "x-ms-meta-upload_status": "completed", - "x-ms-server-encrypted": "true", - "x-ms-version": "2021-06-08" - }, - "ResponseBody": null - }, - { - "RequestUri": "https://saevqdskf66m6am.blob.core.windows.net/azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/az-ml-artifacts/3830f9c213f347e0f56793f991a91f2c/train/MLTable", - "RequestMethod": "HEAD", - "RequestHeaders": { - "Accept": "application/xml", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azsdk-python-storage-blob/12.12.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-ms-date": "Mon, 29 Aug 2022 17:31:36 GMT", - "x-ms-version": "2021-06-08" - }, - "RequestBody": null, - "StatusCode": 404, - "ResponseHeaders": { - "Date": "Mon, 29 Aug 2022 17:31:34 GMT", - "Server": [ - "Windows-Azure-Blob/1.0", - "Microsoft-HTTPAPI/2.0" - ], - "Transfer-Encoding": "chunked", - "Vary": "Origin", - "x-ms-error-code": "BlobNotFound", - "x-ms-version": "2021-06-08" - }, - "ResponseBody": null - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-05-01", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:35 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-03254fa097611521499c287c1bedefa0-18c7c1ee060f99dd-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "2c2c77dc-68c9-4386-b05b-ee53c89e34c4", - "x-ms-ratelimit-remaining-subscription-reads": "11944", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173135Z:2c2c77dc-68c9-4386-b05b-ee53c89e34c4", - "x-request-time": "0.084" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", - "name": "workspaceblobstore", - "type": "Microsoft.MachineLearningServices/workspaces/datastores", - "properties": { - "description": null, - "tags": null, - "properties": null, - "isDefault": true, - "credentials": { - "credentialsType": "AccountKey" - }, - "datastoreType": "AzureBlob", - "accountName": "saevqdskf66m6am", - "containerName": "azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "endpoint": "core.windows.net", - "protocol": "https", - "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" - }, - "systemData": { - "createdAt": "2022-08-29T15:37:29.1934448\u002B00:00", - "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", - "createdByType": "Application", - "lastModifiedAt": "2022-08-29T15:37:29.7910205\u002B00:00", - "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", - "lastModifiedByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-05-01", - "RequestMethod": "POST", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Content-Length": "0", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:37 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-f8f3792155072301a0c50b16e70215dd-7b1d65b4587ddc98-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": "Accept-Encoding", - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "c0244bd9-6ad1-4e3c-a7de-c98a00e99647", - "x-ms-ratelimit-remaining-subscription-writes": "1175", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173137Z:c0244bd9-6ad1-4e3c-a7de-c98a00e99647", - "x-request-time": "0.121" - }, - "ResponseBody": { - "secretsType": "AccountKey", - "key": "dGhpcyBpcyBmYWtlIGtleQ==" - } - }, - { - "RequestUri": "https://saevqdskf66m6am.blob.core.windows.net/azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/MLTable", - "RequestMethod": "HEAD", - "RequestHeaders": { - "Accept": "application/xml", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azsdk-python-storage-blob/12.12.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-ms-date": "Mon, 29 Aug 2022 17:31:38 GMT", - "x-ms-version": "2021-06-08" - }, - "RequestBody": null, - "StatusCode": 404, - "ResponseHeaders": { - "Date": "Mon, 29 Aug 2022 17:31:37 GMT", - "Server": [ - "Windows-Azure-Blob/1.0", - "Microsoft-HTTPAPI/2.0" - ], - "Transfer-Encoding": "chunked", - "Vary": "Origin", - "x-ms-error-code": "BlobNotFound", - "x-ms-version": "2021-06-08" - }, - "ResponseBody": null - }, - { - "RequestUri": "https://saevqdskf66m6am.blob.core.windows.net/azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/MLTable", - "RequestMethod": "PUT", - "RequestHeaders": { - "Accept": "application/xml", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Content-Length": "245", - "Content-MD5": "7GKuyqO9jeUS5UVRWrgMSw==", - "Content-Type": "application/octet-stream", - "If-None-Match": "*", - "User-Agent": "azsdk-python-storage-blob/12.12.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-ms-blob-type": "BlockBlob", - "x-ms-date": "Mon, 29 Aug 2022 17:31:39 GMT", - "x-ms-version": "2021-06-08" - }, - "RequestBody": "cGF0aHM6DQogIC0gZmlsZTogaHR0cHM6Ly9hdXRvbWxzYW1wbGVub3RlYm9va2RhdGEuYmxvYi5jb3JlLndpbmRvd3MubmV0L2F1dG9tbC1zYW1wbGUtbm90ZWJvb2stZGF0YS9iYW5rbWFya2V0aW5nX3ZhbGlkYXRlLmNzdg0KdHJhbnNmb3JtYXRpb25zOg0KICAtIHJlYWRfZGVsaW1pdGVkOg0KICAgICAgZGVsaW1pdGVyOiAnLCcNCiAgICAgIGVuY29kaW5nOiAnYXNjaWknDQogICAgICBlbXB0eV9hc19zdHJpbmc6IGZhbHNlDQo=", - "StatusCode": 201, - "ResponseHeaders": { - "Content-Length": "0", - "Content-MD5": "7GKuyqO9jeUS5UVRWrgMSw==", - "Date": "Mon, 29 Aug 2022 17:31:37 GMT", - "ETag": "\u00220x8DA89E453C549F7\u0022", - "Last-Modified": "Mon, 29 Aug 2022 17:31:37 GMT", - "Server": [ - "Windows-Azure-Blob/1.0", - "Microsoft-HTTPAPI/2.0" - ], - "x-ms-content-crc64": "nnb9CrTPOhs=", - "x-ms-request-server-encrypted": "true", - "x-ms-version": "2021-06-08" - }, - "ResponseBody": null - }, - { - "RequestUri": "https://saevqdskf66m6am.blob.core.windows.net/azureml-blobstore-b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/MLTable?comp=metadata", - "RequestMethod": "PUT", - "RequestHeaders": { - "Accept": "application/xml", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Content-Length": "0", - "User-Agent": "azsdk-python-storage-blob/12.12.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-ms-date": "Mon, 29 Aug 2022 17:31:39 GMT", - "x-ms-meta-upload_status": "completed", - "x-ms-version": "2021-06-08" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Content-Length": "0", - "Date": "Mon, 29 Aug 2022 17:31:37 GMT", - "ETag": "\u00220x8DA89E453D4FF25\u0022", - "Last-Modified": "Mon, 29 Aug 2022 17:31:37 GMT", - "Server": [ - "Windows-Azure-Blob/1.0", - "Microsoft-HTTPAPI/2.0" - ], - "x-ms-request-server-encrypted": "true", - "x-ms-version": "2021-06-08" - }, - "ResponseBody": null - }, - { - "RequestUri": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/v2.0/token", - "RequestMethod": "POST", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "client-request-id": "a9a41abc-bcce-4ca2-aec4-f16da0a34df8", - "Connection": "keep-alive", - "Content-Length": "284", - "Content-Type": "application/x-www-form-urlencoded", - "Cookie": "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAEnuntoOAAAARUxcfQEAAAAk7Z7aDgAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd", - "User-Agent": "azsdk-python-identity/1.11.0b4 Python/3.8.6 (Windows-10-10.0.22000-SP0)", - "x-client-cpu": "x64", - "x-client-current-telemetry": "4|730,0|", - "x-client-last-telemetry": "4|0|||", - "x-client-os": "win32", - "x-client-sku": "MSAL.Python", - "x-client-ver": "1.18.0", - "x-ms-lib-capability": "retry-after, h429" - }, - "RequestBody": "client_id=5019366a-3f7a-4d18-adae-d2483c23e1ee\u0026grant_type=client_credentials\u0026client_info=1\u0026client_secret=5FL8Q~~BBdJpY_y.KpA94zzLZv2Czg.uYQAmfaMZ\u0026claims=%7B%22access_token%22%3A\u002B%7B%22xms_cc%22%3A\u002B%7B%22values%22%3A\u002B%5B%22CP1%22%5D%7D%7D%7D\u0026scope=https%3A%2F%2Fml.azure.com%2F.default", - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-store, no-cache", - "client-request-id": "a9a41abc-bcce-4ca2-aec4-f16da0a34df8", - "Content-Length": "111", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:37 GMT", - "Expires": "-1", - "P3P": "CP=\u0022DSP CUR OTPi IND OTRi ONL FIN\u0022", - "Pragma": "no-cache", - "Set-Cookie": [ - "fpc=Aser1I3GvXdBrR8IAqIi-LDwQhvHAQAAAEnuntoOAAAARUxcfQEAAABQ7p7aDgAAAA; expires=Wed, 28-Sep-2022 17:31:38 GMT; path=/; secure; HttpOnly; SameSite=None", - "x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly", - "stsservicecookie=estsfd; path=/; secure; samesite=none; httponly" - ], - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "X-Content-Type-Options": "nosniff", - "x-ms-clitelem": "1,0,0,,", - "x-ms-ests-server": "2.1.13562.12 - EUS ProdSlices", - "X-XSS-Protection": "0" - }, - "ResponseBody": { - "token_type": "Bearer", - "expires_in": 86399, - "ext_expires_in": 86399, - "refresh_in": 43199, - "access_token": "Sanitized" - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "PUT", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "Content-Length": "1340", - "Content-Type": "application/json", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": { - "properties": { - "properties": { - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True" - }, - "tags": {}, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "displayName": "000000000000000000000", - "experimentName": "DPv2-classification-training-settings", - "isArchived": false, - "jobType": "AutoML", - "outputs": {}, - "taskDetails": { - "limitSettings": { - "enableEarlyTermination": true, - "maxConcurrentTrials": 1, - "maxTrials": 1, - "timeout": "PT10H", - "trialTimeout": "PT10M" - }, - "validationData": { - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "jobInputType": "mltable" - }, - "logVerbosity": "Info", - "targetColumnName": "y", - "taskType": "Classification", - "trainingData": { - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "jobInputType": "mltable" - }, - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableModelExplainability": true, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - } - } - } - }, - "StatusCode": 201, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Length": "3741", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:31:41 GMT", - "Expires": "-1", - "Location": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-4287371794f22c3d3b45b9f73f4fa646-54e11d7f4cb50c86-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "7a28c75b-efef-4895-804d-377649092abb", - "x-ms-ratelimit-remaining-subscription-writes": "1184", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173142Z:7a28c75b-efef-4895-804d-377649092abb", - "x-request-time": "1.507" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": {}, - "properties": { - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True" - }, - "displayName": "000000000000000000000", - "status": "NotStarted", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:32:42 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-fd99816034ff3054f348f936fe485934-ef919ecd758ebcc8-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "bc1180fc-f090-4fe6-9ad6-bda8d1589efa", - "x-ms-ratelimit-remaining-subscription-reads": "11943", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173242Z:bc1180fc-f090-4fe6-9ad6-bda8d1589efa", - "x-request-time": "0.035" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:33:42 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-99030f6937d91fce212afd1fa955017f-79fa10c2a823c2a1-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-01", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "2088734a-e6fd-4521-a1c6-f34401777a97", - "x-ms-ratelimit-remaining-subscription-reads": "11942", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173343Z:2088734a-e6fd-4521-a1c6-f34401777a97", - "x-request-time": "0.080" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:34:43 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-e6f35f59d570696a2a7793b35c3cb9ad-cb3a50dc96fa8bbf-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "b89f77d0-dd10-44dc-a3de-e243b98a3c56", - "x-ms-ratelimit-remaining-subscription-reads": "11941", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173443Z:b89f77d0-dd10-44dc-a3de-e243b98a3c56", - "x-request-time": "0.033" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:35:43 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-9ee57e0dd921f0555173b94988024e67-6ab1eecd5fc2deef-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-01", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "910f0465-fcdf-4919-aa37-dfe375682aa5", - "x-ms-ratelimit-remaining-subscription-reads": "11940", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173544Z:910f0465-fcdf-4919-aa37-dfe375682aa5", - "x-request-time": "0.040" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:36:44 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-7c7328a7566d2c697ac3878883d3d2f7-47b3099cf9c259e3-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "c78d546e-bbaf-40a4-946b-eeb2f09eb6d6", - "x-ms-ratelimit-remaining-subscription-reads": "11939", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173645Z:c78d546e-bbaf-40a4-946b-eeb2f09eb6d6", - "x-request-time": "0.063" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup", - "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", - "FeaturizationRunJsonPath": "featurizer_container.json", - "FeaturizationRunId": "000000000000000000000_featurize" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:37:45 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-140c7ccd5c8f09a3ed38d84936c22e42-54b61800a97c25fd-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "c032f60e-d55d-4adb-a729-3e9e01edf7ff", - "x-ms-ratelimit-remaining-subscription-reads": "11938", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173745Z:c032f60e-d55d-4adb-a729-3e9e01edf7ff", - "x-request-time": "0.052" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup", - "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", - "FeaturizationRunJsonPath": "featurizer_container.json", - "FeaturizationRunId": "000000000000000000000_featurize" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:38:45 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-67dd6be237080090c0d95c37b8bcc048-dabc550d189250a4-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-01", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "bf199dcc-f51a-41eb-8b48-b8acd3f181ed", - "x-ms-ratelimit-remaining-subscription-reads": "11937", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173846Z:bf199dcc-f51a-41eb-8b48-b8acd3f181ed", - "x-request-time": "0.050" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup", - "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", - "FeaturizationRunJsonPath": "featurizer_container.json", - "FeaturizationRunId": "000000000000000000000_featurize" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:39:46 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-c79de3bca3773051bb053ba9983c67ca-5448347ffae5bf86-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-02", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "c7e5ddbe-f9f4-45c3-bca2-17256c48bee3", - "x-ms-ratelimit-remaining-subscription-reads": "11936", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T173946Z:c7e5ddbe-f9f4-45c3-bca2-17256c48bee3", - "x-request-time": "0.038" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup", - "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", - "FeaturizationRunJsonPath": "featurizer_container.json", - "FeaturizationRunId": "000000000000000000000_featurize" - }, - "displayName": "000000000000000000000", - "status": "Running", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - }, - { - "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2022-06-01-preview", - "RequestMethod": "GET", - "RequestHeaders": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate", - "Connection": "keep-alive", - "User-Agent": "azure-ai-ml/0.0.139 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.6 (Windows-10-10.0.22000-SP0)" - }, - "RequestBody": null, - "StatusCode": 200, - "ResponseHeaders": { - "Cache-Control": "no-cache", - "Content-Encoding": "gzip", - "Content-Type": "application/json; charset=utf-8", - "Date": "Mon, 29 Aug 2022 17:40:47 GMT", - "Expires": "-1", - "Pragma": "no-cache", - "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", - "Server-Timing": "traceparent;desc=\u002200-62c3038ce2780d93728ba5ffbe981235-cf5f054a579d9541-00\u0022", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains", - "Transfer-Encoding": "chunked", - "Vary": [ - "Accept-Encoding", - "Accept-Encoding" - ], - "x-aml-cluster": "vienna-westus-01", - "X-Content-Type-Options": "nosniff", - "x-ms-correlation-request-id": "24f77e68-01de-4a78-8c11-517f6b6f3b84", - "x-ms-ratelimit-remaining-subscription-reads": "11935", - "x-ms-response-type": "standard", - "x-ms-routing-request-id": "CANADACENTRAL:20220829T174047Z:24f77e68-01de-4a78-8c11-517f6b6f3b84", - "x-request-time": "0.034" - }, - "ResponseBody": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", - "name": "000000000000000000000", - "type": "Microsoft.MachineLearningServices/workspaces/jobs", - "properties": { - "description": null, - "tags": { - "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", - "model_explain_run": "best_run", - "_aml_system_automl_run_workspace_id": "b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe", - "_aml_system_azureml.automlComponent": "AutoML", - "pipeline_id": "\u003Cc7af0367625be6ac5c2fecbfc72ed444cb7a2111\u003E;", - "score": "\u003C0.9174356483729966\u003E;", - "predicted_cost": "\u003C0\u003E;", - "fit_time": "\u003C2.2920309999999997\u003E;", - "training_percent": "\u003C100\u003E;", - "iteration": "\u003C0\u003E;", - "run_preprocessor": "\u003CMaxAbsScaler\u003E;", - "run_algorithm": "\u003CXGBoostClassifier\u003E;", - "automl_best_child_run_id": "000000000000000000000_0" - }, - "properties": { - "num_iterations": "1", - "training_type": "TrainFull", - "acquisition_function": "EI", - "primary_metric": "accuracy", - "train_split": "0", - "acquisition_parameter": "0", - "num_cross_validation": "", - "target": "automl-cpu-cluster", - "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022compute_target\u0022:\u0022automl-cpu-cluster\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:false,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022start_auxiliary_runs_before_parent_complete\u0022:false,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:null,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", - "DataPrepJsonString": null, - "EnableSubsampling": "False", - "runTemplate": "AutoML", - "azureml.runsource": "automl", - "mlflow.source.git.repoURL": "https://github.com/needuv/azure-sdk-for-python.git", - "mlflow.source.git.branch": "needuv/add-live-tests", - "mlflow.source.git.commit": "503b47d5d4f264e9b6a7703e0eb6a3d36726ad7d", - "azureml.git.dirty": "True", - "ClientType": "Mfe", - "_aml_system_scenario_identification": "Remote.Parent", - "environment_cpu_name": "AzureML-AutoML", - "environment_cpu_label": "prod", - "environment_gpu_name": "AzureML-AutoML-GPU", - "environment_gpu_label": "prod", - "root_attribution": "automl", - "attribution": "AutoML", - "Orchestrator": "AutoML", - "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/8cbbacc5-0dd2-4ad9-8b17-1537dde3a093/cancel/000000000000000000000", - "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/b9f0b19d-eb9d-4a88-b05a-7e4f07a80cbe/data/azureml_000000000000000000000_input_data_ValidData/versions/1\u0022}}", - "ClientSdkVersion": "1.44.0", - "snapshotId": "00000000-0000-0000-0000-000000000000", - "SetupRunId": "000000000000000000000_setup", - "SetupRunContainerId": "dcid.000000000000000000000_setup", - "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", - "FeaturizationRunJsonPath": "featurizer_container.json", - "FeaturizationRunId": "000000000000000000000_featurize", - "ModelExplainRunId": "000000000000000000000_ModelExplain" - }, - "displayName": "000000000000000000000", - "status": "Completed", - "experimentName": "DPv2-classification-training-settings", - "services": { - "Tracking": { - "jobServiceType": "Tracking", - "port": null, - "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", - "status": null, - "errorMessage": null, - "properties": null - }, - "Studio": { - "jobServiceType": "Studio", - "port": null, - "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", - "status": null, - "errorMessage": null, - "properties": null - } - }, - "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/automl-cpu-cluster", - "isArchived": false, - "identity": null, - "componentId": null, - "jobType": "AutoML", - "resources": { - "instanceCount": 1, - "instanceType": null, - "properties": null, - "shmSize": "2g", - "dockerArgs": null - }, - "environmentId": null, - "environmentVariables": null, - "taskDetails": { - "logVerbosity": "Info", - "trainingData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3830f9c213f347e0f56793f991a91f2c/train", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "targetColumnName": "y", - "limitSettings": { - "maxTrials": 1, - "trialTimeout": "PT10M", - "timeout": "PT10H", - "maxConcurrentTrials": 1, - "maxCoresPerTrial": -1, - "exitScore": null, - "enableEarlyTermination": true - }, - "nCrossValidations": null, - "cvSplitColumnNames": null, - "weightColumnName": null, - "validationData": { - "description": null, - "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/3a09c6a2805181d917288494a5453c65/valid", - "mode": "ReadOnlyMount", - "jobInputType": "mltable" - }, - "testData": null, - "validationDataSize": null, - "testDataSize": null, - "featurizationSettings": null, - "taskType": "Classification", - "primaryMetric": "Accuracy", - "trainingSettings": { - "enableOnnxCompatibleModels": false, - "stackEnsembleSettings": null, - "enableStackEnsemble": false, - "enableVoteEnsemble": false, - "ensembleModelDownloadTimeout": "PT5M", - "enableModelExplainability": true, - "enableDnnTraining": false, - "allowedTrainingAlgorithms": null, - "blockedTrainingAlgorithms": [ - "LightGBM" - ] - }, - "positiveLabel": null - }, - "outputs": {} - }, - "systemData": { - "createdAt": "2022-08-29T17:31:41.8028031\u002B00:00", - "createdBy": "5019366a-3f7a-4d18-adae-d2483c23e1ee", - "createdByType": "Application" - } - } - } - ], - "Variables": {} -} diff --git a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings_serverless.json b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings_serverless.json new file mode 100644 index 000000000000..a0f5e6cf0af1 --- /dev/null +++ b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_classification.pyTestAutoMLClassificationtest_classification_with_training_settings_serverless.json @@ -0,0 +1,1846 @@ +{ + "Entries": [ + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-10-01", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:07:34 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-1ce60cf980b99307992e022b0ce7ac0a-0e64e285a3261649-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "2e22f6f1-1695-4738-821f-169ee2dadef8", + "x-ms-ratelimit-remaining-subscription-reads": "11997", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170735Z:2e22f6f1-1695-4738-821f-169ee2dadef8", + "x-request-time": "0.084" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", + "name": "workspaceblobstore", + "type": "Microsoft.MachineLearningServices/workspaces/datastores", + "properties": { + "description": null, + "tags": null, + "properties": null, + "isDefault": true, + "credentials": { + "credentialsType": "AccountKey" + }, + "datastoreType": "AzureBlob", + "accountName": "sak65tvu5h6h3hs", + "containerName": "azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d", + "endpoint": "core.windows.net", + "protocol": "https", + "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" + }, + "systemData": { + "createdAt": "2023-03-08T16:13:19.8717119\u002B00:00", + "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "createdByType": "Application", + "lastModifiedAt": "2023-03-08T16:13:20.4448089\u002B00:00", + "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "lastModifiedByType": "Application" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-10-01", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "0", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:07:34 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-e3e7534cd2093063dd83b03108253bd0-308256ea0318cb8c-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": "Accept-Encoding", + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "1b284a10-3ffa-4680-a436-a34f12e2c273", + "x-ms-ratelimit-remaining-subscription-writes": "1197", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170735Z:1b284a10-3ffa-4680-a436-a34f12e2c273", + "x-request-time": "0.102" + }, + "ResponseBody": { + "secretsType": "AccountKey", + "key": "dGhpcyBpcyBmYWtlIGtleQ==" + } + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/LocalUpload/00000000000000000000000000000000/train/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:07:34 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "242", + "Content-MD5": "kmRcIQnGyx1Tyt/S3D45Mw==", + "Content-Type": "application/octet-stream", + "Date": "Wed, 08 Mar 2023 17:07:35 GMT", + "ETag": "\u00220x8DB1FF0D69325F6\u0022", + "Last-Modified": "Wed, 08 Mar 2023 16:19:05 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-creation-time": "Wed, 08 Mar 2023 16:19:05 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-name": "7d8a1060-923a-415f-af01-2065fd8cc205", + "x-ms-meta-upload_status": "completed", + "x-ms-meta-version": "7d658b44-6572-475d-8804-2adcdcf2f906", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/az-ml-artifacts/00000000000000000000000000000000/train/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:07:34 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 404, + "ResponseHeaders": { + "Date": "Wed, 08 Mar 2023 17:07:35 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "Vary": "Origin", + "x-ms-error-code": "BlobNotFound", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-10-01", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:07:34 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-5b6cb38423ac2c54e37243cb5aae298d-5690258a8776a771-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "491246f2-dba1-49ef-a2de-03181651fe74", + "x-ms-ratelimit-remaining-subscription-reads": "11996", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170735Z:491246f2-dba1-49ef-a2de-03181651fe74", + "x-request-time": "0.087" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", + "name": "workspaceblobstore", + "type": "Microsoft.MachineLearningServices/workspaces/datastores", + "properties": { + "description": null, + "tags": null, + "properties": null, + "isDefault": true, + "credentials": { + "credentialsType": "AccountKey" + }, + "datastoreType": "AzureBlob", + "accountName": "sak65tvu5h6h3hs", + "containerName": "azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d", + "endpoint": "core.windows.net", + "protocol": "https", + "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" + }, + "systemData": { + "createdAt": "2023-03-08T16:13:19.8717119\u002B00:00", + "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "createdByType": "Application", + "lastModifiedAt": "2023-03-08T16:13:20.4448089\u002B00:00", + "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "lastModifiedByType": "Application" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-10-01", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "0", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:07:35 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-9d22017c2b59673c9c56923c180b074f-98e4536bbaba77f8-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": "Accept-Encoding", + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "9713e6dd-c9d3-41b4-8902-f12d5714567b", + "x-ms-ratelimit-remaining-subscription-writes": "1196", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170736Z:9713e6dd-c9d3-41b4-8902-f12d5714567b", + "x-request-time": "0.093" + }, + "ResponseBody": { + "secretsType": "AccountKey", + "key": "dGhpcyBpcyBmYWtlIGtleQ==" + } + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/LocalUpload/00000000000000000000000000000000/valid/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:07:35 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "245", + "Content-MD5": "7GKuyqO9jeUS5UVRWrgMSw==", + "Content-Type": "application/octet-stream", + "Date": "Wed, 08 Mar 2023 17:07:35 GMT", + "ETag": "\u00220x8DB1FF0D70C89D9\u0022", + "Last-Modified": "Wed, 08 Mar 2023 16:19:06 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-creation-time": "Wed, 08 Mar 2023 16:19:06 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-name": "5a76342b-330a-4a44-9fe7-5d6f5792b8a7", + "x-ms-meta-upload_status": "completed", + "x-ms-meta-version": "e5081a86-1d67-40ec-9b92-0280cb8ca229", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/az-ml-artifacts/00000000000000000000000000000000/valid/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:07:35 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 404, + "ResponseHeaders": { + "Date": "Wed, 08 Mar 2023 17:07:35 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "Vary": "Origin", + "x-ms-error-code": "BlobNotFound", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "1033", + "Content-Type": "application/json", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": { + "properties": { + "properties": {}, + "tags": {}, + "displayName": "000000000000000000000", + "experimentName": "DPv2-classification-training-settings", + "isArchived": false, + "jobType": "AutoML", + "outputs": {}, + "queueSettings": { + "jobTier": "standard" + }, + "taskDetails": { + "limitSettings": { + "enableEarlyTermination": true, + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxTrials": 1, + "sweepConcurrentTrials": 0, + "sweepTrials": 0, + "timeout": "PT10H", + "trialTimeout": "PT10M" + }, + "validationData": { + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "jobInputType": "mltable" + }, + "logVerbosity": "Info", + "targetColumnName": "y", + "taskType": "Classification", + "trainingData": { + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "jobInputType": "mltable" + }, + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableModelExplainability": true, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + } + } + } + }, + "StatusCode": 201, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "2929", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:07:38 GMT", + "Expires": "-1", + "Location": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-d3a1f523896295e67d5b11e04e8ebac4-be0a314634f838a1-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "95525679-8c5d-4b1d-b2fd-44c6aa4996ac", + "x-ms-ratelimit-remaining-subscription-writes": "1198", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170739Z:95525679-8c5d-4b1d-b2fd-44c6aa4996ac", + "x-request-time": "0.610" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": {}, + "properties": {}, + "displayName": "000000000000000000000", + "status": "NotStarted", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:08:41 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-c1bafaf10018bf57f3c8a8d361cb4e76-310a50db3de47c36-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-01", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "e0477b60-31aa-473c-84a0-f58243df3628", + "x-ms-ratelimit-remaining-subscription-reads": "11995", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170841Z:e0477b60-31aa-473c-84a0-f58243df3628", + "x-request-time": "0.043" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:09:41 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-d1f6f2585480c11ff873beeb98fc1a35-2ee83639e83e11ab-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "b806cbc7-4b0d-4589-b525-1f6fc418d10f", + "x-ms-ratelimit-remaining-subscription-reads": "11994", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T170942Z:b806cbc7-4b0d-4589-b525-1f6fc418d10f", + "x-request-time": "0.046" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:10:41 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-a33611e84fc651b7d201ca956b8dd92d-cb0193aa73cf9ab2-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "6da51a54-a9a9-4d06-9a5d-5e58e1e40c99", + "x-ms-ratelimit-remaining-subscription-reads": "11993", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171042Z:6da51a54-a9a9-4d06-9a5d-5e58e1e40c99", + "x-request-time": "0.070" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:11:42 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-6d35804051de4daa34b3802dd8886618-c7d5e3fb4a51d09b-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "8536e418-3795-408a-8311-5923ce578285", + "x-ms-ratelimit-remaining-subscription-reads": "11992", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171142Z:8536e418-3795-408a-8311-5923ce578285", + "x-request-time": "0.045" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:12:42 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-f6365978b548ae0069208e446cc9fec2-2e0298c91c64102f-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-01", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "66c38b28-9824-43aa-a3c9-c2cae702fe24", + "x-ms-ratelimit-remaining-subscription-reads": "11991", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171242Z:66c38b28-9824-43aa-a3c9-c2cae702fe24", + "x-request-time": "0.064" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:13:43 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-b38ed203d1bdbb49b2e33191f7b16078-cec579f184e03fa7-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "d50f0c37-7c55-44c8-a809-b8eee9562928", + "x-ms-ratelimit-remaining-subscription-reads": "11990", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171343Z:d50f0c37-7c55-44c8-a809-b8eee9562928", + "x-request-time": "0.061" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:14:42 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-6dfea94292f6783bfa117c7e26b3d7f3-1e4cc4a5d0e6ae24-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "d058460f-0219-48bb-92eb-52c050170f97", + "x-ms-ratelimit-remaining-subscription-reads": "11989", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171443Z:d058460f-0219-48bb-92eb-52c050170f97", + "x-request-time": "0.045" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null}}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "", + "pipeline_id_000": "c7af0367625be6ac5c2fecbfc72ed444cb7a2111", + "score": "\u003C0.9174356483729966\u003E;", + "predicted_cost": "\u003C0\u003E;", + "fit_time": "\u003C1.749562\u003E;", + "training_percent": "\u003C100\u003E;", + "iteration": "\u003C0\u003E;", + "run_preprocessor": "\u003CMaxAbsScaler\u003E;", + "run_algorithm": "\u003CXGBoostClassifier\u003E;", + "automl_best_child_run_id": "000000000000000000000_0" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "accuracy", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022accuracy\u0022,\u0022task_type\u0022:\u0022classification\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:null,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022LightGBM\u0022,\u0022TensorFlowLinearClassifier\u0022,\u0022TensorFlowDNN\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022y\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/22188b48-2ffd-4809-b60f-746a48c96c16/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_tidy_stem_z9j4czckgy_input_data_ValidData/versions/1\u0022}}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 2, \u0022dataset_features\u0022: 132, \u0022dataset_samples\u0022: 32950, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize", + "ModelExplainRunId": "000000000000000000000_ModelExplain" + }, + "displayName": "000000000000000000000", + "status": "Completed", + "experimentName": "DPv2-classification-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "y", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": null, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/valid", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Classification", + "primaryMetric": "Accuracy", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "LightGBM" + ] + }, + "positiveLabel": null + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:07:38.826897\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + } + ], + "Variables": {} +} diff --git a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings.json b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings.json deleted file mode 100644 index f721723386d8..000000000000 --- a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Entries": [], - "Variables": {} -} From edc96ac209f1033a8191c1392c73ba7920cf9b0b Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Wed, 8 Mar 2023 14:03:04 -0800 Subject: [PATCH 19/23] Add recording --- ...ion_with_training_settings_serverless.json | 948 ++++++++++++++++++ 1 file changed, 948 insertions(+) create mode 100644 sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings_serverless.json diff --git a/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings_serverless.json b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings_serverless.json new file mode 100644 index 000000000000..9201ee49fa5d --- /dev/null +++ b/sdk/ml/azure-ai-ml/tests/recordings/automl_job/e2etests/test_remote_regression.pyTestAutoMLRegressiontest_regression_with_training_settings_serverless.json @@ -0,0 +1,948 @@ +{ + "Entries": [ + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore?api-version=2022-10-01", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:14:46 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-1dde78fe6b9ad9244f24b403d74356e0-a450004aa0709822-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "a99f3082-cc02-4287-99fe-e4eaedce8925", + "x-ms-ratelimit-remaining-subscription-reads": "11988", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171446Z:a99f3082-cc02-4287-99fe-e4eaedce8925", + "x-request-time": "0.128" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore", + "name": "workspaceblobstore", + "type": "Microsoft.MachineLearningServices/workspaces/datastores", + "properties": { + "description": null, + "tags": null, + "properties": null, + "isDefault": true, + "credentials": { + "credentialsType": "AccountKey" + }, + "datastoreType": "AzureBlob", + "accountName": "sak65tvu5h6h3hs", + "containerName": "azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d", + "endpoint": "core.windows.net", + "protocol": "https", + "serviceDataAccessAuthIdentity": "WorkspaceSystemAssignedIdentity" + }, + "systemData": { + "createdAt": "2023-03-08T16:13:19.8717119\u002B00:00", + "createdBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "createdByType": "Application", + "lastModifiedAt": "2023-03-08T16:13:20.4448089\u002B00:00", + "lastModifiedBy": "779301c0-18b2-4cdc-801b-a0a3368fee0a", + "lastModifiedByType": "Application" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/datastores/workspaceblobstore/listSecrets?api-version=2022-10-01", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "0", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:14:46 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-997d2e987937e011bede5a1f36c502eb-53bb166ddfaea10d-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": "Accept-Encoding", + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "3a059302-333e-49c3-8d5d-1abcf0966bdd", + "x-ms-ratelimit-remaining-subscription-writes": "1195", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171447Z:3a059302-333e-49c3-8d5d-1abcf0966bdd", + "x-request-time": "0.149" + }, + "ResponseBody": { + "secretsType": "AccountKey", + "key": "dGhpcyBpcyBmYWtlIGtleQ==" + } + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/LocalUpload/00000000000000000000000000000000/train/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:14:46 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "234", + "Content-MD5": "FA\u002B3GvjhmFfSmdNQpxc/PA==", + "Content-Type": "application/octet-stream", + "Date": "Wed, 08 Mar 2023 17:14:47 GMT", + "ETag": "\u00220x8DB1FF1DD8379A8\u0022", + "Last-Modified": "Wed, 08 Mar 2023 16:26:26 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-creation-time": "Wed, 08 Mar 2023 16:26:26 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-name": "3eb967c3-b83a-424d-8f14-5324a28995ae", + "x-ms-meta-upload_status": "completed", + "x-ms-meta-version": "6247dbee-aa79-4f9d-b84b-e960471fac02", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://sak65tvu5h6h3hs.blob.core.windows.net/azureml-blobstore-437aaf8a-7a56-41be-872b-b78f182a9e8d/az-ml-artifacts/00000000000000000000000000000000/train/MLTable", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azsdk-python-storage-blob/12.15.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)", + "x-ms-date": "Wed, 08 Mar 2023 17:14:46 GMT", + "x-ms-version": "2021-12-02" + }, + "RequestBody": null, + "StatusCode": 404, + "ResponseHeaders": { + "Date": "Wed, 08 Mar 2023 17:14:47 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "Vary": "Origin", + "x-ms-error-code": "BlobNotFound", + "x-ms-version": "2021-12-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Content-Length": "959", + "Content-Type": "application/json", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": { + "properties": { + "properties": {}, + "tags": {}, + "displayName": "000000000000000000000", + "experimentName": "DPv2-regression-training-settings", + "isArchived": false, + "jobType": "AutoML", + "outputs": {}, + "queueSettings": { + "jobTier": "standard" + }, + "taskDetails": { + "limitSettings": { + "enableEarlyTermination": true, + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxTrials": 1, + "sweepConcurrentTrials": 0, + "sweepTrials": 0, + "timeout": "PT10H", + "trialTimeout": "PT10M" + }, + "nCrossValidations": { + "mode": "Custom", + "value": 2 + }, + "logVerbosity": "Info", + "targetColumnName": "ERP", + "taskType": "Regression", + "trainingData": { + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "jobInputType": "mltable" + }, + "primaryMetric": "R2Score", + "trainingSettings": { + "enableModelExplainability": true, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "blockedTrainingAlgorithms": [ + "ElasticNet", + "XGBoostRegressor", + "LightGBM" + ] + } + } + } + }, + "StatusCode": 201, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "2852", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:14:51 GMT", + "Expires": "-1", + "Location": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-8167ee6242abc0da3024d82e727ae397-e4978aa601fcafeb-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "23f6b3de-5d4a-41ca-a04f-636d0b8454bc", + "x-ms-ratelimit-remaining-subscription-writes": "1197", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171451Z:23f6b3de-5d4a-41ca-a04f-636d0b8454bc", + "x-request-time": "1.594" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": {}, + "properties": {}, + "displayName": "000000000000000000000", + "status": "NotStarted", + "experimentName": "DPv2-regression-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "ERP", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": { + "mode": "Custom", + "value": 2 + }, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Regression", + "primaryMetric": "R2Score", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "ElasticNet", + "XGBoostRegressor", + "LightGBM" + ] + } + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:14:50.7047989\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:15:53 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-64fdb592449ad342b8a3a7fa60530780-681119046ed5d4ea-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-01", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "5858194a-c15f-4abe-adfb-db1d5890c1fa", + "x-ms-ratelimit-remaining-subscription-reads": "11987", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171554Z:5858194a-c15f-4abe-adfb-db1d5890c1fa", + "x-request-time": "0.172" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "r2_score", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "2", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022r2_score\u0022,\u0022task_type\u0022:\u0022regression\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:2,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022,\u0022TensorFlowDNN\u0022,\u0022TensorFlowLinearRegressor\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022ERP\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/5132709e-7b44-4396-a7e1-54d2da1ab21d/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_salmon_knot_klwcwpgy8t_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-regression-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "ERP", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": { + "mode": "Custom", + "value": 2 + }, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Regression", + "primaryMetric": "R2Score", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "ElasticNet", + "XGBoostRegressor", + "LightGBM" + ] + } + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:14:50.7047989\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:16:54 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-abea28d2740bed20b38d6a64990f247f-4d965b0d8a3f20a6-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-01", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "38cf127d-5338-4c41-a609-0f15bddf62a7", + "x-ms-ratelimit-remaining-subscription-reads": "11986", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171654Z:38cf127d-5338-4c41-a609-0f15bddf62a7", + "x-request-time": "0.084" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "r2_score", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "2", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022r2_score\u0022,\u0022task_type\u0022:\u0022regression\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:2,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022,\u0022TensorFlowDNN\u0022,\u0022TensorFlowLinearRegressor\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022ERP\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/5132709e-7b44-4396-a7e1-54d2da1ab21d/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_salmon_knot_klwcwpgy8t_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 104, \u0022dataset_features\u0022: 23, \u0022dataset_samples\u0022: 209, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize" + }, + "displayName": "000000000000000000000", + "status": "Running", + "experimentName": "DPv2-regression-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "ERP", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": { + "mode": "Custom", + "value": 2 + }, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Regression", + "primaryMetric": "R2Score", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "ElasticNet", + "XGBoostRegressor", + "LightGBM" + ] + } + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:14:50.7047989\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + }, + { + "RequestUri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000?api-version=2023-02-01-preview", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "User-Agent": "azure-ai-ml/1.5.0 azsdk-python-mgmt-machinelearningservices/0.1.0 Python/3.8.16 (Windows-10-10.0.22621-SP0)" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Encoding": "gzip", + "Content-Type": "application/json; charset=utf-8", + "Date": "Wed, 08 Mar 2023 17:17:54 GMT", + "Expires": "-1", + "Pragma": "no-cache", + "Request-Context": "appId=cid-v1:2d2e8e63-272e-4b3c-8598-4ee570a0e70d", + "Server-Timing": "traceparent;desc=\u002200-833aa08b805c603cc7352770cb44ee6f-d7066332e790218b-01\u0022", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Vary": [ + "Accept-Encoding", + "Accept-Encoding" + ], + "x-aml-cluster": "vienna-westus-02", + "X-Content-Type-Options": "nosniff", + "x-ms-correlation-request-id": "e2371e3d-49a6-4aac-b259-8d1c14833b8f", + "x-ms-ratelimit-remaining-subscription-reads": "11985", + "x-ms-response-type": "standard", + "x-ms-routing-request-id": "WESTUS2:20230308T171754Z:e2371e3d-49a6-4aac-b259-8d1c14833b8f", + "x-request-time": "0.062" + }, + "ResponseBody": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/jobs/000000000000000000000", + "name": "000000000000000000000", + "type": "Microsoft.MachineLearningServices/workspaces/jobs", + "properties": { + "description": null, + "tags": { + "_aml_system_automl_mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:null,\u0022AssetId\u0022:null},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "model_explain_run": "best_run", + "_aml_system_automl_run_workspace_id": "437aaf8a-7a56-41be-872b-b78f182a9e8d", + "_aml_system_azureml.automlComponent": "AutoML", + "_azureml.ComputeTargetType": "", + "pipeline_id_000": "be29dd8ef9fe83f67909ad067b2ee360837567fa", + "score": "\u003C0.9081248991232083\u003E;", + "predicted_cost": "\u003C0.5\u003E;", + "fit_time": "\u003C0.109979\u003E;", + "training_percent": "\u003C100\u003E;", + "iteration": "\u003C0\u003E;", + "run_preprocessor": "\u003CMaxAbsScaler\u003E;", + "run_algorithm": "\u003CRandomForest\u003E;", + "automl_best_child_run_id": "000000000000000000000_0" + }, + "properties": { + "num_iterations": "1", + "training_type": "TrainFull", + "acquisition_function": "EI", + "primary_metric": "r2_score", + "train_split": "0", + "acquisition_parameter": "0", + "num_cross_validation": "2", + "target": null, + "AMLSettingsJsonString": "{\u0022path\u0022:\u0022./sample_projects/\u0022,\u0022subscription_id\u0022:\u002200000000-0000-0000-0000-000000000\u0022,\u0022resource_group\u0022:\u002200000\u0022,\u0022workspace_name\u0022:\u002200000\u0022,\u0022iterations\u0022:1,\u0022primary_metric\u0022:\u0022r2_score\u0022,\u0022task_type\u0022:\u0022regression\u0022,\u0022IsImageTask\u0022:false,\u0022IsTextDNNTask\u0022:false,\u0022n_cross_validations\u0022:2,\u0022preprocess\u0022:true,\u0022is_timeseries\u0022:false,\u0022time_column_name\u0022:null,\u0022grain_column_names\u0022:null,\u0022max_cores_per_iteration\u0022:-1,\u0022max_concurrent_iterations\u0022:1,\u0022max_nodes\u0022:1,\u0022iteration_timeout_minutes\u0022:10,\u0022enforce_time_on_windows\u0022:false,\u0022experiment_timeout_minutes\u0022:600,\u0022exit_score\u0022:\u0022NaN\u0022,\u0022experiment_exit_score\u0022:\u0022NaN\u0022,\u0022blacklist_models\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022],\u0022blacklist_algos\u0022:[\u0022ElasticNet\u0022,\u0022XGBoostRegressor\u0022,\u0022LightGBM\u0022,\u0022TensorFlowDNN\u0022,\u0022TensorFlowLinearRegressor\u0022],\u0022auto_blacklist\u0022:false,\u0022blacklist_samples_reached\u0022:false,\u0022exclude_nan_labels\u0022:false,\u0022verbosity\u0022:20,\u0022model_explainability\u0022:true,\u0022enable_onnx_compatible_models\u0022:false,\u0022enable_feature_sweeping\u0022:false,\u0022send_telemetry\u0022:true,\u0022enable_early_stopping\u0022:true,\u0022early_stopping_n_iters\u0022:20,\u0022distributed_dnn_max_node_check\u0022:false,\u0022enable_distributed_featurization\u0022:false,\u0022enable_distributed_dnn_training\u0022:true,\u0022enable_distributed_dnn_training_ort_ds\u0022:false,\u0022ensemble_iterations\u0022:1,\u0022enable_tf\u0022:false,\u0022enable_cache\u0022:false,\u0022enable_subsampling\u0022:false,\u0022metric_operation\u0022:\u0022maximize\u0022,\u0022enable_streaming\u0022:false,\u0022use_incremental_learning_override\u0022:false,\u0022force_streaming\u0022:false,\u0022enable_dnn\u0022:false,\u0022is_gpu_tmp\u0022:false,\u0022enable_run_restructure\u0022:false,\u0022featurization\u0022:\u0022auto\u0022,\u0022vm_priority\u0022:\u0022dedicated\u0022,\u0022label_column_name\u0022:\u0022ERP\u0022,\u0022weight_column_name\u0022:null,\u0022miro_flight\u0022:\u0022default\u0022,\u0022many_models\u0022:false,\u0022many_models_process_count_per_node\u0022:0,\u0022automl_many_models_scenario\u0022:null,\u0022enable_batch_run\u0022:true,\u0022save_mlflow\u0022:true,\u0022track_child_runs\u0022:true,\u0022test_include_predictions_only\u0022:false,\u0022enable_mltable_quick_profile\u0022:\u0022True\u0022,\u0022has_multiple_series\u0022:false,\u0022enable_ensembling\u0022:false,\u0022enable_stack_ensembling\u0022:false,\u0022ensemble_download_models_timeout_sec\u0022:300.0,\u0022stack_meta_learner_train_percentage\u0022:0.2}", + "DataPrepJsonString": null, + "EnableSubsampling": "False", + "runTemplate": "AutoML", + "azureml.runsource": "automl", + "ClientType": "Mfe", + "_aml_system_scenario_identification": "Remote.Parent", + "PlatformVersion": "DPV2", + "environment_cpu_name": "AzureML-AutoML", + "environment_cpu_label": "prod", + "environment_gpu_name": "AzureML-AutoML-GPU", + "environment_gpu_label": "prod", + "root_attribution": "automl", + "attribution": "AutoML", + "Orchestrator": "AutoML", + "CancelUri": "https://westus.api.azureml.ms/jasmine/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/experimentids/5132709e-7b44-4396-a7e1-54d2da1ab21d/cancel/000000000000000000000", + "mltable_data_json": "{\u0022Type\u0022:\u0022MLTable\u0022,\u0022TrainData\u0022:{\u0022Uri\u0022:\u0022azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train\u0022,\u0022ResolvedUri\u0022:\u0022azureml://subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000/datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train/\u0022,\u0022AssetId\u0022:\u0022azureml://locations/westus/workspaces/437aaf8a-7a56-41be-872b-b78f182a9e8d/data/azureml_salmon_knot_klwcwpgy8t_input_data_TrainData/versions/1\u0022},\u0022TestData\u0022:null,\u0022ValidData\u0022:null}", + "ClientSdkVersion": "1.48.0.post2", + "snapshotId": "00000000-0000-0000-0000-000000000000", + "SetupRunId": "000000000000000000000_setup", + "SetupRunContainerId": "dcid.000000000000000000000_setup", + "ProblemInfoJsonString": "{\u0022dataset_num_categorical\u0022: 0, \u0022is_sparse\u0022: true, \u0022subsampling\u0022: false, \u0022has_extra_col\u0022: true, \u0022dataset_classes\u0022: 104, \u0022dataset_features\u0022: 23, \u0022dataset_samples\u0022: 209, \u0022single_frequency_class_detected\u0022: false}", + "FeaturizationRunJsonPath": "featurizer_container.json", + "FeaturizationRunId": "000000000000000000000_featurize", + "ModelExplainRunId": "000000000000000000000_ModelExplain" + }, + "displayName": "000000000000000000000", + "status": "Completed", + "experimentName": "DPv2-regression-training-settings", + "services": { + "Tracking": { + "jobServiceType": "Tracking", + "port": null, + "endpoint": "azureml://westus.api.azureml.ms/mlflow/v1.0/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000?", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + }, + "Studio": { + "jobServiceType": "Studio", + "port": null, + "endpoint": "https://ml.azure.com/runs/000000000000000000000?wsid=/subscriptions/00000000-0000-0000-0000-000000000/resourcegroups/00000/workspaces/00000", + "status": null, + "errorMessage": null, + "properties": null, + "nodes": null + } + }, + "computeId": "/subscriptions/00000000-0000-0000-0000-000000000/resourceGroups/00000/providers/Microsoft.MachineLearningServices/workspaces/00000/computes/", + "isArchived": false, + "identity": null, + "componentId": null, + "notificationSetting": null, + "jobType": "AutoML", + "resources": { + "instanceCount": 1, + "instanceType": null, + "locations": null, + "properties": null, + "shmSize": "2g", + "dockerArgs": null + }, + "environmentId": null, + "environmentVariables": null, + "taskDetails": { + "logVerbosity": "Info", + "trainingData": { + "description": null, + "uri": "azureml://datastores/workspaceblobstore/paths/LocalUpload/00000000000000000000000000000000/train", + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "targetColumnName": "ERP", + "limitSettings": { + "maxTrials": 1, + "trialTimeout": "PT10M", + "timeout": "PT10H", + "maxConcurrentTrials": 1, + "maxNodes": 1, + "maxCoresPerTrial": -1, + "exitScore": null, + "enableEarlyTermination": true, + "sweepTrials": 0, + "sweepConcurrentTrials": 0 + }, + "sweepSettings": null, + "fixedParameters": null, + "searchSpace": null, + "nCrossValidations": { + "mode": "Custom", + "value": 2 + }, + "cvSplitColumnNames": null, + "weightColumnName": null, + "validationData": { + "description": null, + "mode": "ReadOnlyMount", + "jobInputType": "mltable" + }, + "testData": null, + "validationDataSize": null, + "testDataSize": null, + "featurizationSettings": null, + "taskType": "Regression", + "primaryMetric": "R2Score", + "trainingSettings": { + "enableOnnxCompatibleModels": false, + "stackEnsembleSettings": null, + "enableStackEnsemble": false, + "enableVoteEnsemble": false, + "ensembleModelDownloadTimeout": "PT5M", + "enableModelExplainability": true, + "enableDnnTraining": false, + "trainingMode": "Auto", + "allowedTrainingAlgorithms": null, + "blockedTrainingAlgorithms": [ + "ElasticNet", + "XGBoostRegressor", + "LightGBM" + ] + } + }, + "outputs": {}, + "queueSettings": { + "jobTier": "Standard", + "priority": null + } + }, + "systemData": { + "createdAt": "2023-03-08T17:14:50.7047989\u002B00:00", + "createdBy": "Firstname Lastname", + "createdByType": "User" + } + } + } + ], + "Variables": {} +} From 4964806c76f54b928e150184265fbc195ff8fed2 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Wed, 8 Mar 2023 15:28:26 -0800 Subject: [PATCH 20/23] Fix pylint --- .../azure/ai/ml/_schema/automl/automl_job.py | 2 +- .../azure/ai/ml/entities/_builders/command.py | 3 +- .../ai/ml/entities/_job/automl/automl_job.py | 8 ++- .../nlp/text_classification_multilabel_job.py | 2 +- .../ai/ml/entities/_job/sweep/sweep_job.py | 2 +- .../unittests/test_job_operations.py | 51 +++++++------------ 6 files changed, 29 insertions(+), 39 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py index 4082c83bf14c..ebec82c75434 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/_schema/automl/automl_job.py @@ -18,4 +18,4 @@ class AutoMLJobSchema(BaseJobSchema): environment_variables = fields.Dict(keys=fields.Str(), values=fields.Str()) outputs = OutputsField() resources = NestedField(JobResourceConfigurationSchema()) - queue_settings = ExperimentalField(NestedField(QueueSettingsSchema)) \ No newline at end of file + queue_settings = ExperimentalField(NestedField(QueueSettingsSchema)) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 250b8bcef091..9bc5ea8b6719 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -416,6 +416,7 @@ def sweep( identity: Optional[ Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, + queue_settings: Optional[QueueSettings] = None, ) -> Sweep: """Turn the command into a sweep node with extra sweep run setting. The command component in current Command node will be used as its trial component. A command node can sweep for multiple times, and the generated sweep @@ -477,7 +478,7 @@ def sweep( experiment_name=self.experiment_name, identity=self.identity if not identity else identity, _from_component_func=True, - queue_settings=self.queue_settings, + queue_settings=self.queue_settings if queue_settings is None else queue_settings, ) sweep_node.set_limits( max_total_trials=max_total_trials, diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py index 1270e277f875..eb82a0036dc6 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py @@ -8,7 +8,13 @@ from abc import ABC, abstractmethod from typing import Any, Dict, Optional, Union -from azure.ai.ml._restclient.v2023_02_01_preview.models import JobBase, MLTableJobInput, QueueSettings, ResourceConfiguration, TaskType +from azure.ai.ml._restclient.v2023_02_01_preview.models import ( + JobBase, + MLTableJobInput, + QueueSettings, + ResourceConfiguration, + TaskType, +) from azure.ai.ml._utils.utils import camel_to_snake from azure.ai.ml.constants import JobType from azure.ai.ml.constants._common import TYPE, AssetTypes diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py index a3631d4d7563..2955a778c10f 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/nlp/text_classification_multilabel_job.py @@ -106,7 +106,7 @@ def _to_rest_object(self) -> JobBase: resources=self.resources, task_details=text_classification_multilabel, identity=self.identity._to_job_rest_object() if self.identity else None, - queue_settings=self.queue_settings + queue_settings=self.queue_settings, ) result = JobBase(properties=properties) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py index 9f59ed75d1ed..35b49f5a0981 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py @@ -272,7 +272,7 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, - queue_settings=properties.queue_settings + queue_settings=properties.queue_settings, ) def _override_missing_properties_from_trial(self): diff --git a/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py b/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py index 3593011ff9ba..dcc10b599794 100644 --- a/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py +++ b/sdk/ml/azure-ai-ml/tests/job_common/unittests/test_job_operations.py @@ -111,16 +111,11 @@ def mock_job_operation( mock_environment_operation: Mock, mock_runs_operation: Mock, ) -> JobOperations: - mock_machinelearning_client._operation_container.add( - AzureMLResourceType.CODE, mock_code_operation) - mock_machinelearning_client._operation_container.add( - AzureMLResourceType.ENVIRONMENT, mock_environment_operation) - mock_machinelearning_client._operation_container.add( - AzureMLResourceType.WORKSPACE, mock_workspace_operation) - mock_machinelearning_client._operation_container.add( - AzureMLResourceType.DATASTORE, mock_datastore_operation) - mock_machinelearning_client._operation_container.add( - "run", mock_runs_operation) + mock_machinelearning_client._operation_container.add(AzureMLResourceType.CODE, mock_code_operation) + mock_machinelearning_client._operation_container.add(AzureMLResourceType.ENVIRONMENT, mock_environment_operation) + mock_machinelearning_client._operation_container.add(AzureMLResourceType.WORKSPACE, mock_workspace_operation) + mock_machinelearning_client._operation_container.add(AzureMLResourceType.DATASTORE, mock_datastore_operation) + mock_machinelearning_client._operation_container.add("run", mock_runs_operation) yield JobOperations( operation_scope=mock_workspace_scope, operation_config=mock_operation_config, @@ -137,15 +132,13 @@ def mock_job_operation( class TestJobOperations: def test_list(self, mock_job_operation: JobOperations) -> None: mock_job_operation.list() - expected = (mock_job_operation._resource_group_name, - mock_job_operation._workspace_name) + expected = (mock_job_operation._resource_group_name, mock_job_operation._workspace_name) assert expected in mock_job_operation._operation_2023_02_preview.list.call_args @patch.dict(os.environ, {AZUREML_PRIVATE_FEATURES_ENV_VAR: "True"}) def test_list_private_preview(self, mock_job_operation: JobOperations) -> None: mock_job_operation.list() - expected = (mock_job_operation._resource_group_name, - mock_job_operation._workspace_name) + expected = (mock_job_operation._resource_group_name, mock_job_operation._workspace_name) assert expected in mock_job_operation._operation_2023_02_preview.list.call_args @patch.object(Job, "_from_rest_object") @@ -158,10 +151,8 @@ def test_get(self, mock_method, mock_job_operation: JobOperations) -> None: def test_get_job(self, mock_method, mock_job_operation: JobOperations) -> None: from azure.ai.ml import Input, dsl, load_component - component = load_component( - source="./tests/test_configs/components/helloworld_component.yml") - component_input = Input( - type="uri_file", path="https://dprepdata.blob.core.windows.net/demo/Titanic.csv") + component = load_component(source="./tests/test_configs/components/helloworld_component.yml") + component_input = Input(type="uri_file", path="https://dprepdata.blob.core.windows.net/demo/Titanic.csv") @dsl.pipeline() def sub_pipeline(): @@ -191,8 +182,7 @@ def test_get_private_preview_flag_returns_latest(self, mock_method, mock_job_ope def test_stream_command_job(self, mock_job_operation: JobOperations) -> None: # setup - mock_job_operation._get_workspace_url = Mock( - return_value="TheWorkSpaceUrl") + mock_job_operation._get_workspace_url = Mock(return_value="TheWorkSpaceUrl") mock_job_operation._stream_logs_until_completion = Mock() # go @@ -208,20 +198,17 @@ def test_stream_command_job(self, mock_job_operation: JobOperations) -> None: @patch.object(Job, "_from_rest_object") def test_submit_command_job(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job( - source="./tests/test_configs/command_job/command_job_test.yml") + job = load_job(source="./tests/test_configs/command_job/command_job_test.yml") mock_job_operation.create_or_update(job=job) git_props = get_git_properties() assert git_props.items() <= job.properties.items() mock_job_operation._operation_2023_02_preview.create_or_update.assert_called_once() - mock_job_operation._credential.get_token.assert_called_once_with( - "https://ml.azure.com/.default") + mock_job_operation._credential.get_token.assert_called_once_with("https://ml.azure.com/.default") @patch.object(Job, "_from_rest_object") def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job( - source="./tests/test_configs/command_job/command_job_test_user_identity.yml") + job = load_job(source="./tests/test_configs/command_job/command_job_test_user_identity.yml") aml_resource_id = _get_aml_resource_id_from_metadata() azure_ml_scopes = _resource_to_scopes(aml_resource_id) @@ -232,8 +219,7 @@ def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobO ) mock_job_operation.create_or_update(job=job) mock_job_operation._operation_2023_02_preview.create_or_update.assert_called_once() - mock_job_operation._credential.get_token.assert_called_once_with( - azure_ml_scopes[0]) + mock_job_operation._credential.get_token.assert_called_once_with(azure_ml_scopes[0]) with patch.object(mock_job_operation._credential, "get_token") as mock_get_token: mock_get_token.return_value = AccessToken( @@ -245,13 +231,11 @@ def test_user_identity_get_aml_token(self, mock_method, mock_job_operation: JobO @pytest.mark.skip(reason="Function under test no longer returns Job as output") def test_command_job_resolver_with_virtual_cluster(self, mock_job_operation: JobOperations) -> None: expected = "/subscriptions/test_subscription/resourceGroups/test_resource_group/providers/Microsoft.MachineLearningServices/virtualclusters/testvcinmaster" - job = load_job( - source="tests/test_configs/command_job/command_job_with_virtualcluster.yaml") + job = load_job(source="tests/test_configs/command_job/command_job_with_virtualcluster.yaml") mock_job_operation._resolve_arm_id_or_upload_dependencies(job) assert job.compute == expected - job = load_job( - source="tests/test_configs/command_job/command_job_with_virtualcluster_2.yaml") + job = load_job(source="tests/test_configs/command_job/command_job_with_virtualcluster_2.yaml") mock_job_operation._resolve_arm_id_or_upload_dependencies(job) assert job.compute == expected @@ -286,8 +270,7 @@ def test_parse_corrupt_job_data(self, mocker: MockFixture, corrupt_job_data: str @patch.object(Job, "_from_rest_object") def test_job_create_skip_validation(self, mock_method, mock_job_operation: JobOperations) -> None: mock_method.return_value = Command(component=None) - job = load_job( - "./tests/test_configs/command_job/simple_train_test.yml") + job = load_job("./tests/test_configs/command_job/simple_train_test.yml") with patch.object(JobOperations, "_validate") as mock_thing, patch.object( JobOperations, "_resolve_arm_id_or_upload_dependencies" ): From eedefef914e86cb60cfcedadc4186b9cf2fccecb Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Wed, 8 Mar 2023 15:37:10 -0800 Subject: [PATCH 21/23] Update docstrings and CHANGELOG --- sdk/ml/azure-ai-ml/CHANGELOG.md | 1 + .../azure/ai/ml/entities/_builders/command.py | 85 +++++++++++++------ .../azure/ai/ml/entities/_builders/sweep.py | 44 +++++++--- .../ai/ml/entities/_job/automl/automl_job.py | 17 ++-- .../ai/ml/entities/_job/sweep/sweep_job.py | 50 +++++++---- 5 files changed, 135 insertions(+), 62 deletions(-) diff --git a/sdk/ml/azure-ai-ml/CHANGELOG.md b/sdk/ml/azure-ai-ml/CHANGELOG.md index 317eb6f3879f..07e6a1e6b6d0 100644 --- a/sdk/ml/azure-ai-ml/CHANGELOG.md +++ b/sdk/ml/azure-ai-ml/CHANGELOG.md @@ -10,6 +10,7 @@ - Removed Experimental Tag from Image Metadata on Compute Instances. - Added support for data binding on outputs inside dynamic arguments for dsl pipeline - Added support for serverless compute in pipeline job +- Added support ofr serverless compute in command, automl and sweep job ### Bugs Fixed diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 9bc5ea8b6719..30011cc9a5e6 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -131,6 +131,8 @@ class Command(BaseNode): Please see https://aka.ms/azuremlexperimental for more information. :type services: Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] + :param queue_settings: Queue settings for the job. + :type queue_settings: QueueSettings :raises ~azure.ai.ml.exceptions.ValidationException: Raised if Command cannot be successfully validated. Details will be provided in the error message. """ @@ -157,20 +159,24 @@ def __init__( outputs: Optional[Dict[str, Union[str, Output]]] = None, limits: Optional[CommandJobLimits] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, + AmlTokenConfiguration, UserIdentityConfiguration] ] = None, - distribution: Optional[Union[Dict, MpiDistribution, TensorFlowDistribution, PyTorchDistribution]] = None, + distribution: Optional[Union[Dict, MpiDistribution, + TensorFlowDistribution, PyTorchDistribution]] = None, environment: Optional[Union[Environment, str]] = None, environment_variables: Optional[Dict] = None, resources: Optional[JobResourceConfiguration] = None, services: Optional[ - Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] + Dict[str, Union[JobService, JupyterLabJobService, + SshJobService, TensorBoardJobService, VsCodeJobService]] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type - validate_attribute_type(attrs_to_check=locals(), attr_type_map=self._attr_type_map()) + validate_attribute_type(attrs_to_check=locals(), + attr_type_map=self._attr_type_map()) # resolve normal dict to dict[str, JobService] services = _resolve_job_services(services) @@ -291,7 +297,8 @@ def identity( NestedField(UserIdentitySchema, unknown=INCLUDE), ] ) - value = identity_schema._deserialize(value=value, attr=None, data=None) + value = identity_schema._deserialize( + value=value, attr=None, data=None) self._identity = value @property @@ -391,7 +398,8 @@ def set_queue_settings(self, *, job_tier: Optional[str] = None, priority: Option self.queue_settings.job_tier = job_tier self.queue_settings.priority = priority else: - self.queue_settings = QueueSettings(job_tier=job_tier, priority=priority) + self.queue_settings = QueueSettings( + job_tier=job_tier, priority=priority) def sweep( self, @@ -414,7 +422,8 @@ def sweep( ] ] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, + AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, ) -> Sweep: @@ -449,13 +458,16 @@ def sweep( ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + :param queue_settings: Queue settings for the job. + :type queue_settings: QueueSettings :return: A sweep node with component from current Command node as its trial component. :rtype: Sweep """ self._swept = True # inputs & outputs are already built in source Command obj # pylint: disable=abstract-class-instantiated - inputs, inputs_search_space = Sweep._get_origin_inputs_and_search_space(self.inputs) + inputs, inputs_search_space = Sweep._get_origin_inputs_and_search_space( + self.inputs) if search_space: inputs_search_space.update(search_space) @@ -549,13 +561,15 @@ def _to_rest_object(self, **kwargs) -> dict: def _load_from_dict(cls, data: Dict, context: Dict, additional_message: str, **kwargs) -> "Command": from .command_func import command - loaded_data = load_from_dict(CommandJobSchema, data, context, additional_message, **kwargs) + loaded_data = load_from_dict( + CommandJobSchema, data, context, additional_message, **kwargs) # resources a limits properties are flatten in command() function, exact them and set separately resources = loaded_data.pop("resources", None) limits = loaded_data.pop("limits", None) - command_job = command(base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_data) + command_job = command( + base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_data) command_job.resources = resources command_job.limits = limits @@ -566,8 +580,10 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: obj = BaseNode._from_rest_object_to_init_params(obj) if "resources" in obj and obj["resources"]: - resources = RestJobResourceConfiguration.from_dict(obj["resources"]) - obj["resources"] = JobResourceConfiguration._from_rest_object(resources) + resources = RestJobResourceConfiguration.from_dict( + obj["resources"]) + obj["resources"] = JobResourceConfiguration._from_rest_object( + resources) # services, sweep won't have services if "services" in obj and obj["services"]: @@ -578,7 +594,8 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: # it's attributes of a node, but JobService._from_rest_object expect a # RestJobService, so we need to convert it back. Here we convert the dict to a # dummy rest object which may work as a RestJobService instead. - services[service_name] = from_rest_dict_to_dummy_rest_object(service) + services[service_name] = from_rest_dict_to_dummy_rest_object( + service) obj["services"] = JobServiceBase._from_rest_job_services(services) # handle limits @@ -587,11 +604,13 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: obj["limits"] = CommandJobLimits()._from_rest_object(rest_limits) if "identity" in obj and obj["identity"]: - obj["identity"] = _BaseJobIdentityConfiguration._load(obj["identity"]) + obj["identity"] = _BaseJobIdentityConfiguration._load( + obj["identity"]) if "queue_settings" in obj and obj["queue_settings"]: queue_settings = RestQueueSettings.from_dict(obj["queue_settings"]) - obj["queue_settings"] = QueueSettings._from_rest_object(queue_settings) + obj["queue_settings"] = QueueSettings._from_rest_object( + queue_settings) return obj @@ -609,25 +628,33 @@ def _load_from_rest_job(cls, obj: JobBase) -> "Command": properties=rest_command_job.properties, command=rest_command_job.command, experiment_name=rest_command_job.experiment_name, - services=JobServiceBase._from_rest_job_services(rest_command_job.services), + services=JobServiceBase._from_rest_job_services( + rest_command_job.services), status=rest_command_job.status, - creation_context=SystemData._from_rest_object(obj.system_data) if obj.system_data else None, + creation_context=SystemData._from_rest_object( + obj.system_data) if obj.system_data else None, code=rest_command_job.code_id, compute=rest_command_job.compute_id, environment=rest_command_job.environment_id, - distribution=DistributionConfiguration._from_rest_object(rest_command_job.distribution), + distribution=DistributionConfiguration._from_rest_object( + rest_command_job.distribution), parameters=rest_command_job.parameters, - identity=_BaseJobIdentityConfiguration._from_rest_object(rest_command_job.identity) + identity=_BaseJobIdentityConfiguration._from_rest_object( + rest_command_job.identity) if rest_command_job.identity else None, environment_variables=rest_command_job.environment_variables, - inputs=from_rest_inputs_to_dataset_literal(rest_command_job.inputs), + inputs=from_rest_inputs_to_dataset_literal( + rest_command_job.inputs), outputs=from_rest_data_outputs(rest_command_job.outputs), ) command_job._id = obj.id - command_job.resources = JobResourceConfiguration._from_rest_object(rest_command_job.resources) - command_job.limits = CommandJobLimits._from_rest_object(rest_command_job.limits) - command_job.queue_settings = QueueSettings._from_rest_object(rest_command_job.queue_settings) + command_job.resources = JobResourceConfiguration._from_rest_object( + rest_command_job.resources) + command_job.limits = CommandJobLimits._from_rest_object( + rest_command_job.limits) + command_job.queue_settings = QueueSettings._from_rest_object( + rest_command_job.queue_settings) command_job.component._source = ( ComponentSource.REMOTE_WORKSPACE_JOB ) # This is used by pipeline job telemetries. @@ -682,7 +709,8 @@ def __call__(self, *args, **kwargs) -> "Command": node.display_name = self.display_name if self.display_name != self.name else None node.environment = copy.deepcopy(self.environment) # deep copy for complex object - node.environment_variables = copy.deepcopy(self.environment_variables) + node.environment_variables = copy.deepcopy( + self.environment_variables) node.limits = copy.deepcopy(self.limits) node.distribution = copy.deepcopy(self.distribution) node.resources = copy.deepcopy(self.resources) @@ -693,7 +721,8 @@ def __call__(self, *args, **kwargs) -> "Command": msg = "Command can be called as a function only when referenced component is {}, currently got {}." raise ValidationException( message=msg.format(type(Component), self._component), - no_personal_data_message=msg.format(type(Component), "self._component"), + no_personal_data_message=msg.format( + type(Component), "self._component"), target=ErrorTarget.COMMAND_JOB, error_type=ValidationErrorType.INVALID_VALUE, ) @@ -718,9 +747,11 @@ def _resolve_job_services( result = {} for name, service in services.items(): if isinstance(service, dict): - service = load_from_dict(JobServiceSchema, service, context={BASE_PATH_CONTEXT_KEY: "."}) + service = load_from_dict(JobServiceSchema, service, context={ + BASE_PATH_CONTEXT_KEY: "."}) elif not isinstance( - service, (JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService) + service, (JobService, JupyterLabJobService, SshJobService, + TensorBoardJobService, VsCodeJobService) ): msg = f"Service value for key {name!r} must be a dict or JobService object, got {type(service)} instead." raise ValidationException( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py index 74ee00615013..8e8e47aedb6e 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py @@ -98,6 +98,8 @@ class Sweep(ParameterizedSweep, BaseNode): ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + :param queue_settings: Queue settings for the job. + :type queue_settings: QueueSettings """ def __init__( @@ -108,7 +110,8 @@ def __init__( limits: Optional[SweepJobLimits] = None, sampling_algorithm: Optional[Union[str, SamplingAlgorithm]] = None, objective: Optional[Objective] = None, - early_termination: Optional[Union[BanditPolicy, MedianStoppingPolicy, TruncationSelectionPolicy]] = None, + early_termination: Optional[Union[BanditPolicy, + MedianStoppingPolicy, TruncationSelectionPolicy]] = None, search_space: Optional[ Dict[ str, @@ -117,10 +120,12 @@ def __init__( ], ] ] = None, - inputs: Optional[Dict[str, Union[Input, str, bool, int, float]]] = None, + inputs: Optional[Dict[str, + Union[Input, str, bool, int, float]]] = None, outputs: Optional[Dict[str, Union[str, Output]]] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, + AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs, @@ -170,7 +175,8 @@ def search_space(self, values: Dict[str, Dict[str, Union[str, int, float, dict]] search_space = {} for name, value in values.items(): # If value is a SearchSpace object, directly pass it to job.search_space[name] - search_space[name] = self._value_type_to_class(value) if isinstance(value, dict) else value + search_space[name] = self._value_type_to_class( + value) if isinstance(value, dict) else value self._search_space = search_space @classmethod @@ -222,7 +228,8 @@ def _to_rest_object(self, **kwargs) -> dict: # hack: only early termination policy does not follow yaml schema now, should be removed after server-side made # the change if "early_termination" in rest_obj: - rest_obj["early_termination"] = self.early_termination._to_rest_object().as_dict() + rest_obj["early_termination"] = self.early_termination._to_rest_object( + ).as_dict() rest_obj.update( dict( @@ -240,15 +247,19 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: # the change if "early_termination" in obj and "policy_type" in obj["early_termination"]: # can't use _from_rest_object here, because obj is a dict instead of an EarlyTerminationPolicy rest object - obj["early_termination"]["type"] = camel_to_snake(obj["early_termination"].pop("policy_type")) + obj["early_termination"]["type"] = camel_to_snake( + obj["early_termination"].pop("policy_type")) # TODO: use cls._get_schema() to load from rest object from azure.ai.ml._schema._sweep.parameterized_sweep import ParameterizedSweepSchema - schema = ParameterizedSweepSchema(context={BASE_PATH_CONTEXT_KEY: "./"}) - support_data_binding_expression_for_fields(schema, ["type", "component", "trial"]) + schema = ParameterizedSweepSchema( + context={BASE_PATH_CONTEXT_KEY: "./"}) + support_data_binding_expression_for_fields( + schema, ["type", "component", "trial"]) - base_sweep = schema.load(obj, unknown=EXCLUDE, partial=True) # pylint: disable=no-member + base_sweep = schema.load(obj, unknown=EXCLUDE, + partial=True) # pylint: disable=no-member for key, value in base_sweep.items(): obj[key] = value @@ -267,13 +278,15 @@ def _get_trial_component_rest_obj(self): return dict(componentId=trial_component_id) if isinstance(trial_component_id, CommandComponent): return trial_component_id._to_rest_object() - raise UserErrorException(f"invalid trial in sweep node {self.name}: {str(self.trial)}") + raise UserErrorException( + f"invalid trial in sweep node {self.name}: {str(self.trial)}") def _to_job(self) -> SweepJob: command = self.trial.command for key, _ in self.search_space.items(): # Double curly brackets to escape - command = command.replace(f"${{{{inputs.{key}}}}}", f"${{{{search_space.{key}}}}}") + command = command.replace( + f"${{{{inputs.{key}}}}}", f"${{{{search_space.{key}}}}}") # TODO: raise exception when the trial is a pre-registered component if command != self.trial.command and isinstance(self.trial, CommandComponent): @@ -328,7 +341,8 @@ def _get_origin_inputs_and_search_space(cls, built_inputs: Dict[str, NodeInput]) """ search_space: Dict[ str, - Union[Choice, LogNormal, LogUniform, Normal, QLogNormal, QLogUniform, QNormal, QUniform, Randint, Uniform], + Union[Choice, LogNormal, LogUniform, Normal, QLogNormal, + QLogUniform, QNormal, QUniform, Randint, Uniform], ] = {} inputs: Dict[str, Union[Input, str, bool, int, float]] = {} if built_inputs is not None: @@ -342,7 +356,8 @@ def _get_origin_inputs_and_search_space(cls, built_inputs: Dict[str, NodeInput]) msg = "unsupported built input type: {}: {}" raise ValidationException( message=msg.format(input_name, type(input_obj)), - no_personal_data_message=msg.format("[input_name]", type(input_obj)), + no_personal_data_message=msg.format( + "[input_name]", type(input_obj)), target=ErrorTarget.SWEEP_JOB, error_type=ValidationErrorType.INVALID_VALUE, ) @@ -371,5 +386,6 @@ def early_termination(self) -> Union[str, EarlyTerminationPolicy]: def early_termination(self, value: Union[EarlyTerminationPolicy, Dict[str, Union[str, float, int, bool]]]): if isinstance(value, dict): early_termination_schema = EarlyTerminationField() - value = early_termination_schema._deserialize(value=value, attr=None, data=None) + value = early_termination_schema._deserialize( + value=value, attr=None, data=None) self._early_termination = value diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py index eb82a0036dc6..1183487cf9de 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py @@ -41,7 +41,8 @@ def __init__( *, resources: Optional[ResourceConfiguration] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, + AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs: Any, @@ -52,6 +53,8 @@ def __init__( :param resources: Resource configuration for the job. :param identity: Identity that training job will use while running on compute. :type identity: Union[ManagedIdentity, AmlToken, UserIdentity] + :param queue_settings: Queue settings for the job. + :type queue_settings: QueueSettings :param kwargs: """ kwargs[TYPE] = JobType.AUTOML @@ -83,7 +86,8 @@ def test_data(self) -> Input: @classmethod def _load_from_rest(cls, obj: JobBase) -> "AutoMLJob": task_type = ( - camel_to_snake(obj.properties.task_details.task_type) if obj.properties.task_details.task_type else None + camel_to_snake( + obj.properties.task_details.task_type) if obj.properties.task_details.task_type else None ) class_type = cls._get_task_mapping().get(task_type, None) if class_type: @@ -165,9 +169,11 @@ def _get_task_mapping(cls): def _resolve_data_inputs(self, rest_job): # pylint: disable=no-self-use """Resolve JobInputs to MLTableJobInputs within data_settings.""" if isinstance(rest_job.training_data, Input): - rest_job.training_data = MLTableJobInput(uri=rest_job.training_data.path) + rest_job.training_data = MLTableJobInput( + uri=rest_job.training_data.path) if isinstance(rest_job.validation_data, Input): - rest_job.validation_data = MLTableJobInput(uri=rest_job.validation_data.path) + rest_job.validation_data = MLTableJobInput( + uri=rest_job.validation_data.path) if hasattr(rest_job, "test_data") and isinstance(rest_job.test_data, Input): rest_job.test_data = MLTableJobInput(uri=rest_job.test_data.path) @@ -182,4 +188,5 @@ def _restore_data_inputs(self): type=AssetTypes.MLTABLE, path=self.validation_data.uri # pylint: disable=no-member ) if hasattr(self, "test_data") and isinstance(self.test_data, MLTableJobInput): - self.test_data = Input(type=AssetTypes.MLTABLE, path=self.test_data.uri) # pylint: disable=no-member + self.test_data = Input( + type=AssetTypes.MLTABLE, path=self.test_data.uri) # pylint: disable=no-member diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py index 35b49f5a0981..d6f43a59599a 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py @@ -113,6 +113,8 @@ class SweepJob(Job, ParameterizedSweep, JobIOMixin): ~azure.mgmt.machinelearningservices.models.TruncationSelectionPolicy] :param limits: Limits for the sweep job. :type limits: ~azure.ai.ml.entities.SweepJobLimits + :param queue_settings: Queue settings for the job. + :type queue_settings: QueueSettings :param kwargs: A dictionary of additional configuration parameters. :type kwargs: dict """ @@ -126,9 +128,11 @@ def __init__( display_name: Optional[str] = None, experiment_name: Optional[str] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, + AmlTokenConfiguration, UserIdentityConfiguration] ] = None, - inputs: Optional[Dict[str, Union[Input, str, bool, int, float]]] = None, + inputs: Optional[Dict[str, + Union[Input, str, bool, int, float]]] = None, outputs: Optional[Dict[str, Output]] = None, compute: Optional[str] = None, limits: Optional[SweepJobLimits] = None, @@ -143,7 +147,8 @@ def __init__( ] = None, objective: Optional[Objective] = None, trial: Optional[Union[CommandJob, CommandComponent]] = None, - early_termination: Optional[Union[BanditPolicy, MedianStoppingPolicy, TruncationSelectionPolicy]] = None, + early_termination: Optional[Union[BanditPolicy, + MedianStoppingPolicy, TruncationSelectionPolicy]] = None, queue_settings: Optional[QueueSettings] = None, **kwargs: Any, ): @@ -180,7 +185,8 @@ def _to_dict(self) -> Dict: def _to_rest_object(self) -> JobBase: self._override_missing_properties_from_trial() self.trial.command = map_single_brackets_and_warn(self.trial.command) - search_space = {param: space._to_rest_object() for (param, space) in self.search_space.items()} + search_space = {param: space._to_rest_object() + for (param, space) in self.search_space.items()} validate_inputs_for_command(self.trial.command, self.inputs) for key in search_space.keys(): @@ -188,7 +194,8 @@ def _to_rest_object(self) -> JobBase: trial_component = TrialComponent( code_id=self.trial.code, - distribution=self.trial.distribution._to_rest_object() if self.trial.distribution else None, + distribution=self.trial.distribution._to_rest_object( + ) if self.trial.distribution else None, environment_id=self.trial.environment, command=self.trial.command, environment_variables=self.trial.environment_variables, @@ -200,15 +207,18 @@ def _to_rest_object(self) -> JobBase: description=self.description, experiment_name=self.experiment_name, search_space=search_space, - sampling_algorithm=self._get_rest_sampling_algorithm() if self.sampling_algorithm else None, + sampling_algorithm=self._get_rest_sampling_algorithm( + ) if self.sampling_algorithm else None, limits=self.limits._to_rest_object() if self.limits else None, - early_termination=self.early_termination._to_rest_object() if self.early_termination else None, + early_termination=self.early_termination._to_rest_object( + ) if self.early_termination else None, properties=self.properties, compute_id=self.compute, objective=self.objective._to_rest_object() if self.objective else None, trial=trial_component, tags=self.tags, - inputs=to_rest_dataset_literal_inputs(self.inputs, job_type=self.type), + inputs=to_rest_dataset_literal_inputs( + self.inputs, job_type=self.type), outputs=to_rest_data_outputs(self.outputs), identity=self.identity._to_job_rest_object() if self.identity else None, queue_settings=self.queue_settings._to_rest_object() if self.queue_settings else None, @@ -228,9 +238,12 @@ def _to_component(self, context: Optional[Dict] = None, **kwargs): @classmethod def _load_from_dict(cls, data: Dict, context: Dict, additional_message: str, **kwargs) -> "SweepJob": - loaded_schema = load_from_dict(SweepJobSchema, data, context, additional_message, **kwargs) - loaded_schema["trial"] = ParameterizedCommand(**(loaded_schema["trial"])) - sweep_job = SweepJob(base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_schema) + loaded_schema = load_from_dict( + SweepJobSchema, data, context, additional_message, **kwargs) + loaded_schema["trial"] = ParameterizedCommand( + **(loaded_schema["trial"])) + sweep_job = SweepJob( + base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_schema) return sweep_job @classmethod @@ -238,10 +251,12 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": properties: RestSweepJob = obj.properties # Unpack termination schema - early_termination = EarlyTerminationPolicy._from_rest_object(properties.early_termination) + early_termination = EarlyTerminationPolicy._from_rest_object( + properties.early_termination) # Unpack sampling algorithm - sampling_algorithm = SamplingAlgorithm._from_rest_object(properties.sampling_algorithm) + sampling_algorithm = SamplingAlgorithm._from_rest_object( + properties.sampling_algorithm) trial = ParameterizedCommand._load_from_sweep_job(obj.properties) # Compute also appears in both layers of the yaml, but only one of the REST. @@ -257,7 +272,8 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": experiment_name=properties.experiment_name, services=properties.services, status=properties.status, - creation_context=SystemData._from_rest_object(obj.system_data) if obj.system_data else None, + creation_context=SystemData._from_rest_object( + obj.system_data) if obj.system_data else None, trial=trial, compute=properties.compute_id, sampling_algorithm=sampling_algorithm, @@ -269,7 +285,8 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": objective=properties.objective, inputs=from_rest_inputs_to_dataset_literal(properties.inputs), outputs=from_rest_data_outputs(properties.outputs), - identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) + identity=_BaseJobIdentityConfiguration._from_rest_object( + properties.identity) if properties.identity else None, queue_settings=properties.queue_settings, @@ -288,6 +305,7 @@ def _override_missing_properties_from_trial(self): has_trial_limits_timeout = self.trial.limits and self.trial.limits.timeout if has_trial_limits_timeout and not self.limits: - self.limits = SweepJobLimits(trial_timeout=self.trial.limits.timeout) + self.limits = SweepJobLimits( + trial_timeout=self.trial.limits.timeout) elif has_trial_limits_timeout and not self.limits.trial_timeout: self.limits.trial_timeout = self.trial.limits.timeout From 25c11fe12e986878ea1f66bbe045a76180ef2ac6 Mon Sep 17 00:00:00 2001 From: vivijay91 <107496336+vivijay91@users.noreply.github.com> Date: Wed, 8 Mar 2023 15:47:42 -0800 Subject: [PATCH 22/23] Update CHANGELOG.md --- sdk/ml/azure-ai-ml/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/ml/azure-ai-ml/CHANGELOG.md b/sdk/ml/azure-ai-ml/CHANGELOG.md index 07e6a1e6b6d0..9719a7a2feba 100644 --- a/sdk/ml/azure-ai-ml/CHANGELOG.md +++ b/sdk/ml/azure-ai-ml/CHANGELOG.md @@ -10,7 +10,7 @@ - Removed Experimental Tag from Image Metadata on Compute Instances. - Added support for data binding on outputs inside dynamic arguments for dsl pipeline - Added support for serverless compute in pipeline job -- Added support ofr serverless compute in command, automl and sweep job +- Added support for serverless compute in command, automl and sweep job ### Bugs Fixed From 53b04ebd1bab88827f1949f8d28a21b84c2f43f8 Mon Sep 17 00:00:00 2001 From: Vijetha Vijayendran Date: Wed, 8 Mar 2023 16:30:11 -0800 Subject: [PATCH 23/23] Fix black isssues --- .../azure/ai/ml/entities/_builders/command.py | 81 +++++++------------ .../azure/ai/ml/entities/_builders/sweep.py | 42 ++++------ .../ai/ml/entities/_job/automl/automl_job.py | 15 ++-- .../ai/ml/entities/_job/sweep/sweep_job.py | 48 ++++------- 4 files changed, 62 insertions(+), 124 deletions(-) diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py index 30011cc9a5e6..7d1d74cf2dc1 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py @@ -159,24 +159,20 @@ def __init__( outputs: Optional[Dict[str, Union[str, Output]]] = None, limits: Optional[CommandJobLimits] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, - AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, - distribution: Optional[Union[Dict, MpiDistribution, - TensorFlowDistribution, PyTorchDistribution]] = None, + distribution: Optional[Union[Dict, MpiDistribution, TensorFlowDistribution, PyTorchDistribution]] = None, environment: Optional[Union[Environment, str]] = None, environment_variables: Optional[Dict] = None, resources: Optional[JobResourceConfiguration] = None, services: Optional[ - Dict[str, Union[JobService, JupyterLabJobService, - SshJobService, TensorBoardJobService, VsCodeJobService]] + Dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs, ): # validate init params are valid type - validate_attribute_type(attrs_to_check=locals(), - attr_type_map=self._attr_type_map()) + validate_attribute_type(attrs_to_check=locals(), attr_type_map=self._attr_type_map()) # resolve normal dict to dict[str, JobService] services = _resolve_job_services(services) @@ -297,8 +293,7 @@ def identity( NestedField(UserIdentitySchema, unknown=INCLUDE), ] ) - value = identity_schema._deserialize( - value=value, attr=None, data=None) + value = identity_schema._deserialize(value=value, attr=None, data=None) self._identity = value @property @@ -398,8 +393,7 @@ def set_queue_settings(self, *, job_tier: Optional[str] = None, priority: Option self.queue_settings.job_tier = job_tier self.queue_settings.priority = priority else: - self.queue_settings = QueueSettings( - job_tier=job_tier, priority=priority) + self.queue_settings = QueueSettings(job_tier=job_tier, priority=priority) def sweep( self, @@ -422,8 +416,7 @@ def sweep( ] ] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, - AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, ) -> Sweep: @@ -466,8 +459,7 @@ def sweep( self._swept = True # inputs & outputs are already built in source Command obj # pylint: disable=abstract-class-instantiated - inputs, inputs_search_space = Sweep._get_origin_inputs_and_search_space( - self.inputs) + inputs, inputs_search_space = Sweep._get_origin_inputs_and_search_space(self.inputs) if search_space: inputs_search_space.update(search_space) @@ -561,15 +553,13 @@ def _to_rest_object(self, **kwargs) -> dict: def _load_from_dict(cls, data: Dict, context: Dict, additional_message: str, **kwargs) -> "Command": from .command_func import command - loaded_data = load_from_dict( - CommandJobSchema, data, context, additional_message, **kwargs) + loaded_data = load_from_dict(CommandJobSchema, data, context, additional_message, **kwargs) # resources a limits properties are flatten in command() function, exact them and set separately resources = loaded_data.pop("resources", None) limits = loaded_data.pop("limits", None) - command_job = command( - base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_data) + command_job = command(base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_data) command_job.resources = resources command_job.limits = limits @@ -580,10 +570,8 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: obj = BaseNode._from_rest_object_to_init_params(obj) if "resources" in obj and obj["resources"]: - resources = RestJobResourceConfiguration.from_dict( - obj["resources"]) - obj["resources"] = JobResourceConfiguration._from_rest_object( - resources) + resources = RestJobResourceConfiguration.from_dict(obj["resources"]) + obj["resources"] = JobResourceConfiguration._from_rest_object(resources) # services, sweep won't have services if "services" in obj and obj["services"]: @@ -594,8 +582,7 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: # it's attributes of a node, but JobService._from_rest_object expect a # RestJobService, so we need to convert it back. Here we convert the dict to a # dummy rest object which may work as a RestJobService instead. - services[service_name] = from_rest_dict_to_dummy_rest_object( - service) + services[service_name] = from_rest_dict_to_dummy_rest_object(service) obj["services"] = JobServiceBase._from_rest_job_services(services) # handle limits @@ -604,13 +591,11 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: obj["limits"] = CommandJobLimits()._from_rest_object(rest_limits) if "identity" in obj and obj["identity"]: - obj["identity"] = _BaseJobIdentityConfiguration._load( - obj["identity"]) + obj["identity"] = _BaseJobIdentityConfiguration._load(obj["identity"]) if "queue_settings" in obj and obj["queue_settings"]: queue_settings = RestQueueSettings.from_dict(obj["queue_settings"]) - obj["queue_settings"] = QueueSettings._from_rest_object( - queue_settings) + obj["queue_settings"] = QueueSettings._from_rest_object(queue_settings) return obj @@ -628,33 +613,25 @@ def _load_from_rest_job(cls, obj: JobBase) -> "Command": properties=rest_command_job.properties, command=rest_command_job.command, experiment_name=rest_command_job.experiment_name, - services=JobServiceBase._from_rest_job_services( - rest_command_job.services), + services=JobServiceBase._from_rest_job_services(rest_command_job.services), status=rest_command_job.status, - creation_context=SystemData._from_rest_object( - obj.system_data) if obj.system_data else None, + creation_context=SystemData._from_rest_object(obj.system_data) if obj.system_data else None, code=rest_command_job.code_id, compute=rest_command_job.compute_id, environment=rest_command_job.environment_id, - distribution=DistributionConfiguration._from_rest_object( - rest_command_job.distribution), + distribution=DistributionConfiguration._from_rest_object(rest_command_job.distribution), parameters=rest_command_job.parameters, - identity=_BaseJobIdentityConfiguration._from_rest_object( - rest_command_job.identity) + identity=_BaseJobIdentityConfiguration._from_rest_object(rest_command_job.identity) if rest_command_job.identity else None, environment_variables=rest_command_job.environment_variables, - inputs=from_rest_inputs_to_dataset_literal( - rest_command_job.inputs), + inputs=from_rest_inputs_to_dataset_literal(rest_command_job.inputs), outputs=from_rest_data_outputs(rest_command_job.outputs), ) command_job._id = obj.id - command_job.resources = JobResourceConfiguration._from_rest_object( - rest_command_job.resources) - command_job.limits = CommandJobLimits._from_rest_object( - rest_command_job.limits) - command_job.queue_settings = QueueSettings._from_rest_object( - rest_command_job.queue_settings) + command_job.resources = JobResourceConfiguration._from_rest_object(rest_command_job.resources) + command_job.limits = CommandJobLimits._from_rest_object(rest_command_job.limits) + command_job.queue_settings = QueueSettings._from_rest_object(rest_command_job.queue_settings) command_job.component._source = ( ComponentSource.REMOTE_WORKSPACE_JOB ) # This is used by pipeline job telemetries. @@ -709,8 +686,7 @@ def __call__(self, *args, **kwargs) -> "Command": node.display_name = self.display_name if self.display_name != self.name else None node.environment = copy.deepcopy(self.environment) # deep copy for complex object - node.environment_variables = copy.deepcopy( - self.environment_variables) + node.environment_variables = copy.deepcopy(self.environment_variables) node.limits = copy.deepcopy(self.limits) node.distribution = copy.deepcopy(self.distribution) node.resources = copy.deepcopy(self.resources) @@ -721,8 +697,7 @@ def __call__(self, *args, **kwargs) -> "Command": msg = "Command can be called as a function only when referenced component is {}, currently got {}." raise ValidationException( message=msg.format(type(Component), self._component), - no_personal_data_message=msg.format( - type(Component), "self._component"), + no_personal_data_message=msg.format(type(Component), "self._component"), target=ErrorTarget.COMMAND_JOB, error_type=ValidationErrorType.INVALID_VALUE, ) @@ -747,11 +722,9 @@ def _resolve_job_services( result = {} for name, service in services.items(): if isinstance(service, dict): - service = load_from_dict(JobServiceSchema, service, context={ - BASE_PATH_CONTEXT_KEY: "."}) + service = load_from_dict(JobServiceSchema, service, context={BASE_PATH_CONTEXT_KEY: "."}) elif not isinstance( - service, (JobService, JupyterLabJobService, SshJobService, - TensorBoardJobService, VsCodeJobService) + service, (JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService) ): msg = f"Service value for key {name!r} must be a dict or JobService object, got {type(service)} instead." raise ValidationException( diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py index 8e8e47aedb6e..154f31853ee0 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/sweep.py @@ -110,8 +110,7 @@ def __init__( limits: Optional[SweepJobLimits] = None, sampling_algorithm: Optional[Union[str, SamplingAlgorithm]] = None, objective: Optional[Objective] = None, - early_termination: Optional[Union[BanditPolicy, - MedianStoppingPolicy, TruncationSelectionPolicy]] = None, + early_termination: Optional[Union[BanditPolicy, MedianStoppingPolicy, TruncationSelectionPolicy]] = None, search_space: Optional[ Dict[ str, @@ -120,12 +119,10 @@ def __init__( ], ] ] = None, - inputs: Optional[Dict[str, - Union[Input, str, bool, int, float]]] = None, + inputs: Optional[Dict[str, Union[Input, str, bool, int, float]]] = None, outputs: Optional[Dict[str, Union[str, Output]]] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, - AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs, @@ -175,8 +172,7 @@ def search_space(self, values: Dict[str, Dict[str, Union[str, int, float, dict]] search_space = {} for name, value in values.items(): # If value is a SearchSpace object, directly pass it to job.search_space[name] - search_space[name] = self._value_type_to_class( - value) if isinstance(value, dict) else value + search_space[name] = self._value_type_to_class(value) if isinstance(value, dict) else value self._search_space = search_space @classmethod @@ -228,8 +224,7 @@ def _to_rest_object(self, **kwargs) -> dict: # hack: only early termination policy does not follow yaml schema now, should be removed after server-side made # the change if "early_termination" in rest_obj: - rest_obj["early_termination"] = self.early_termination._to_rest_object( - ).as_dict() + rest_obj["early_termination"] = self.early_termination._to_rest_object().as_dict() rest_obj.update( dict( @@ -247,19 +242,15 @@ def _from_rest_object_to_init_params(cls, obj: dict) -> Dict: # the change if "early_termination" in obj and "policy_type" in obj["early_termination"]: # can't use _from_rest_object here, because obj is a dict instead of an EarlyTerminationPolicy rest object - obj["early_termination"]["type"] = camel_to_snake( - obj["early_termination"].pop("policy_type")) + obj["early_termination"]["type"] = camel_to_snake(obj["early_termination"].pop("policy_type")) # TODO: use cls._get_schema() to load from rest object from azure.ai.ml._schema._sweep.parameterized_sweep import ParameterizedSweepSchema - schema = ParameterizedSweepSchema( - context={BASE_PATH_CONTEXT_KEY: "./"}) - support_data_binding_expression_for_fields( - schema, ["type", "component", "trial"]) + schema = ParameterizedSweepSchema(context={BASE_PATH_CONTEXT_KEY: "./"}) + support_data_binding_expression_for_fields(schema, ["type", "component", "trial"]) - base_sweep = schema.load(obj, unknown=EXCLUDE, - partial=True) # pylint: disable=no-member + base_sweep = schema.load(obj, unknown=EXCLUDE, partial=True) # pylint: disable=no-member for key, value in base_sweep.items(): obj[key] = value @@ -278,15 +269,13 @@ def _get_trial_component_rest_obj(self): return dict(componentId=trial_component_id) if isinstance(trial_component_id, CommandComponent): return trial_component_id._to_rest_object() - raise UserErrorException( - f"invalid trial in sweep node {self.name}: {str(self.trial)}") + raise UserErrorException(f"invalid trial in sweep node {self.name}: {str(self.trial)}") def _to_job(self) -> SweepJob: command = self.trial.command for key, _ in self.search_space.items(): # Double curly brackets to escape - command = command.replace( - f"${{{{inputs.{key}}}}}", f"${{{{search_space.{key}}}}}") + command = command.replace(f"${{{{inputs.{key}}}}}", f"${{{{search_space.{key}}}}}") # TODO: raise exception when the trial is a pre-registered component if command != self.trial.command and isinstance(self.trial, CommandComponent): @@ -341,8 +330,7 @@ def _get_origin_inputs_and_search_space(cls, built_inputs: Dict[str, NodeInput]) """ search_space: Dict[ str, - Union[Choice, LogNormal, LogUniform, Normal, QLogNormal, - QLogUniform, QNormal, QUniform, Randint, Uniform], + Union[Choice, LogNormal, LogUniform, Normal, QLogNormal, QLogUniform, QNormal, QUniform, Randint, Uniform], ] = {} inputs: Dict[str, Union[Input, str, bool, int, float]] = {} if built_inputs is not None: @@ -356,8 +344,7 @@ def _get_origin_inputs_and_search_space(cls, built_inputs: Dict[str, NodeInput]) msg = "unsupported built input type: {}: {}" raise ValidationException( message=msg.format(input_name, type(input_obj)), - no_personal_data_message=msg.format( - "[input_name]", type(input_obj)), + no_personal_data_message=msg.format("[input_name]", type(input_obj)), target=ErrorTarget.SWEEP_JOB, error_type=ValidationErrorType.INVALID_VALUE, ) @@ -386,6 +373,5 @@ def early_termination(self) -> Union[str, EarlyTerminationPolicy]: def early_termination(self, value: Union[EarlyTerminationPolicy, Dict[str, Union[str, float, int, bool]]]): if isinstance(value, dict): early_termination_schema = EarlyTerminationField() - value = early_termination_schema._deserialize( - value=value, attr=None, data=None) + value = early_termination_schema._deserialize(value=value, attr=None, data=None) self._early_termination = value diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py index 1183487cf9de..97970b2d7a62 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/automl/automl_job.py @@ -41,8 +41,7 @@ def __init__( *, resources: Optional[ResourceConfiguration] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, - AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, queue_settings: Optional[QueueSettings] = None, **kwargs: Any, @@ -86,8 +85,7 @@ def test_data(self) -> Input: @classmethod def _load_from_rest(cls, obj: JobBase) -> "AutoMLJob": task_type = ( - camel_to_snake( - obj.properties.task_details.task_type) if obj.properties.task_details.task_type else None + camel_to_snake(obj.properties.task_details.task_type) if obj.properties.task_details.task_type else None ) class_type = cls._get_task_mapping().get(task_type, None) if class_type: @@ -169,11 +167,9 @@ def _get_task_mapping(cls): def _resolve_data_inputs(self, rest_job): # pylint: disable=no-self-use """Resolve JobInputs to MLTableJobInputs within data_settings.""" if isinstance(rest_job.training_data, Input): - rest_job.training_data = MLTableJobInput( - uri=rest_job.training_data.path) + rest_job.training_data = MLTableJobInput(uri=rest_job.training_data.path) if isinstance(rest_job.validation_data, Input): - rest_job.validation_data = MLTableJobInput( - uri=rest_job.validation_data.path) + rest_job.validation_data = MLTableJobInput(uri=rest_job.validation_data.path) if hasattr(rest_job, "test_data") and isinstance(rest_job.test_data, Input): rest_job.test_data = MLTableJobInput(uri=rest_job.test_data.path) @@ -188,5 +184,4 @@ def _restore_data_inputs(self): type=AssetTypes.MLTABLE, path=self.validation_data.uri # pylint: disable=no-member ) if hasattr(self, "test_data") and isinstance(self.test_data, MLTableJobInput): - self.test_data = Input( - type=AssetTypes.MLTABLE, path=self.test_data.uri) # pylint: disable=no-member + self.test_data = Input(type=AssetTypes.MLTABLE, path=self.test_data.uri) # pylint: disable=no-member diff --git a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py index d6f43a59599a..8c943564d31b 100644 --- a/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py +++ b/sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/sweep/sweep_job.py @@ -128,11 +128,9 @@ def __init__( display_name: Optional[str] = None, experiment_name: Optional[str] = None, identity: Optional[ - Union[ManagedIdentityConfiguration, - AmlTokenConfiguration, UserIdentityConfiguration] + Union[ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration] ] = None, - inputs: Optional[Dict[str, - Union[Input, str, bool, int, float]]] = None, + inputs: Optional[Dict[str, Union[Input, str, bool, int, float]]] = None, outputs: Optional[Dict[str, Output]] = None, compute: Optional[str] = None, limits: Optional[SweepJobLimits] = None, @@ -147,8 +145,7 @@ def __init__( ] = None, objective: Optional[Objective] = None, trial: Optional[Union[CommandJob, CommandComponent]] = None, - early_termination: Optional[Union[BanditPolicy, - MedianStoppingPolicy, TruncationSelectionPolicy]] = None, + early_termination: Optional[Union[BanditPolicy, MedianStoppingPolicy, TruncationSelectionPolicy]] = None, queue_settings: Optional[QueueSettings] = None, **kwargs: Any, ): @@ -185,8 +182,7 @@ def _to_dict(self) -> Dict: def _to_rest_object(self) -> JobBase: self._override_missing_properties_from_trial() self.trial.command = map_single_brackets_and_warn(self.trial.command) - search_space = {param: space._to_rest_object() - for (param, space) in self.search_space.items()} + search_space = {param: space._to_rest_object() for (param, space) in self.search_space.items()} validate_inputs_for_command(self.trial.command, self.inputs) for key in search_space.keys(): @@ -194,8 +190,7 @@ def _to_rest_object(self) -> JobBase: trial_component = TrialComponent( code_id=self.trial.code, - distribution=self.trial.distribution._to_rest_object( - ) if self.trial.distribution else None, + distribution=self.trial.distribution._to_rest_object() if self.trial.distribution else None, environment_id=self.trial.environment, command=self.trial.command, environment_variables=self.trial.environment_variables, @@ -207,18 +202,15 @@ def _to_rest_object(self) -> JobBase: description=self.description, experiment_name=self.experiment_name, search_space=search_space, - sampling_algorithm=self._get_rest_sampling_algorithm( - ) if self.sampling_algorithm else None, + sampling_algorithm=self._get_rest_sampling_algorithm() if self.sampling_algorithm else None, limits=self.limits._to_rest_object() if self.limits else None, - early_termination=self.early_termination._to_rest_object( - ) if self.early_termination else None, + early_termination=self.early_termination._to_rest_object() if self.early_termination else None, properties=self.properties, compute_id=self.compute, objective=self.objective._to_rest_object() if self.objective else None, trial=trial_component, tags=self.tags, - inputs=to_rest_dataset_literal_inputs( - self.inputs, job_type=self.type), + inputs=to_rest_dataset_literal_inputs(self.inputs, job_type=self.type), outputs=to_rest_data_outputs(self.outputs), identity=self.identity._to_job_rest_object() if self.identity else None, queue_settings=self.queue_settings._to_rest_object() if self.queue_settings else None, @@ -238,12 +230,9 @@ def _to_component(self, context: Optional[Dict] = None, **kwargs): @classmethod def _load_from_dict(cls, data: Dict, context: Dict, additional_message: str, **kwargs) -> "SweepJob": - loaded_schema = load_from_dict( - SweepJobSchema, data, context, additional_message, **kwargs) - loaded_schema["trial"] = ParameterizedCommand( - **(loaded_schema["trial"])) - sweep_job = SweepJob( - base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_schema) + loaded_schema = load_from_dict(SweepJobSchema, data, context, additional_message, **kwargs) + loaded_schema["trial"] = ParameterizedCommand(**(loaded_schema["trial"])) + sweep_job = SweepJob(base_path=context[BASE_PATH_CONTEXT_KEY], **loaded_schema) return sweep_job @classmethod @@ -251,12 +240,10 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": properties: RestSweepJob = obj.properties # Unpack termination schema - early_termination = EarlyTerminationPolicy._from_rest_object( - properties.early_termination) + early_termination = EarlyTerminationPolicy._from_rest_object(properties.early_termination) # Unpack sampling algorithm - sampling_algorithm = SamplingAlgorithm._from_rest_object( - properties.sampling_algorithm) + sampling_algorithm = SamplingAlgorithm._from_rest_object(properties.sampling_algorithm) trial = ParameterizedCommand._load_from_sweep_job(obj.properties) # Compute also appears in both layers of the yaml, but only one of the REST. @@ -272,8 +259,7 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": experiment_name=properties.experiment_name, services=properties.services, status=properties.status, - creation_context=SystemData._from_rest_object( - obj.system_data) if obj.system_data else None, + creation_context=SystemData._from_rest_object(obj.system_data) if obj.system_data else None, trial=trial, compute=properties.compute_id, sampling_algorithm=sampling_algorithm, @@ -285,8 +271,7 @@ def _load_from_rest(cls, obj: JobBase) -> "SweepJob": objective=properties.objective, inputs=from_rest_inputs_to_dataset_literal(properties.inputs), outputs=from_rest_data_outputs(properties.outputs), - identity=_BaseJobIdentityConfiguration._from_rest_object( - properties.identity) + identity=_BaseJobIdentityConfiguration._from_rest_object(properties.identity) if properties.identity else None, queue_settings=properties.queue_settings, @@ -305,7 +290,6 @@ def _override_missing_properties_from_trial(self): has_trial_limits_timeout = self.trial.limits and self.trial.limits.timeout if has_trial_limits_timeout and not self.limits: - self.limits = SweepJobLimits( - trial_timeout=self.trial.limits.timeout) + self.limits = SweepJobLimits(trial_timeout=self.trial.limits.timeout) elif has_trial_limits_timeout and not self.limits.trial_timeout: self.limits.trial_timeout = self.trial.limits.timeout