Skip to content

Commit 045344c

Browse files
lllilithyangchenyangliao
andauthored
Pipeline job change to support name + version in job output (Azure#28227)
* add name and version for output * add asset_name, asset_version, merge 2022-12-01 pr * resolve comments * add test and modify related codes * refine code * fix failed test * fix comments * fix condition._port_name * fix test and some comments * revert the modification of compute * fix comments * fix pylint error, add tests for CommandJob, Spark, Parallel, Sweep * delete one test, will add in another pr * modify error message --------- Co-authored-by: chenyangliao <[email protected]>
1 parent 01ef556 commit 045344c

File tree

72 files changed

+9434
-209
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+9434
-209
lines changed

sdk/ml/azure-ai-ml/azure/ai/ml/_internal/entities/command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from azure.ai.ml._internal._schema.component import NodeType
1111
from azure.ai.ml._internal.entities.component import InternalComponent
1212
from azure.ai.ml._internal.entities.node import InternalBaseNode
13-
from azure.ai.ml._restclient.v2022_10_01_preview.models import CommandJobLimits as RestCommandJobLimits
14-
from azure.ai.ml._restclient.v2022_10_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
13+
from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJobLimits as RestCommandJobLimits
14+
from azure.ai.ml._restclient.v2022_12_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
1515
from azure.ai.ml._schema import PathAwareSchema
1616
from azure.ai.ml._schema.core.fields import DistributionField
1717
from azure.ai.ml.entities import CommandJobLimits, JobResourceConfiguration

sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ def __init__(
410410
self._jobs = JobOperations(
411411
self._operation_scope,
412412
self._operation_config,
413-
self._service_client_10_2022_preview,
413+
self._service_client_12_2022_preview,
414414
self._operation_container,
415415
self._credential,
416416
_service_client_kwargs=kwargs,

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/job/input_output_entry.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
StringTransformedEnum,
1414
UnionField,
1515
LocalPathField,
16+
VersionField,
1617
)
1718

1819
from azure.ai.ml._schema.core.schema import PatchedSchemaMeta, PathAwareSchema
@@ -134,6 +135,8 @@ def check_dict(self, data, **kwargs):
134135

135136

136137
class OutputSchema(PathAwareSchema):
138+
name = fields.Str()
139+
version = VersionField()
137140
mode = StringTransformedEnum(
138141
allowed_values=[
139142
InputOutputModes.MOUNT,

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/pipeline/control_flow_job.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ def resolve_inputs_outputs(self, data, **kwargs): # pylint: disable=no-self-use
6363
mapping = {}
6464
for k, v in result.mapping.items():
6565
v = v if isinstance(v, list) else [v]
66-
mapping[k] = [item._name for item in v]
66+
mapping[k] = [item._port_name for item in v]
6767
result._mapping = mapping
6868

6969
try:
70-
result._condition = result._condition._name
70+
result._condition = result._condition._port_name
7171
except AttributeError:
7272
result._condition = result._condition
7373

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/pipeline/pipeline_job_io.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def _serialize(self, value, attr, obj, **kwargs):
4040
raise ValidationError(f"Invalid output binding string '{value}' passed")
4141

4242
def _deserialize(self, value, attr, data, **kwargs):
43-
if isinstance(value, dict) and "path" in value and "mode" not in value:
43+
if isinstance(value, dict) and "path" in value and "mode" not in value and \
44+
'name' not in value and 'version' not in value:
4445
value = value["path"]
4546
if isinstance(value, str) and re.match(ComponentJobConstants.OUTPUT_PATTERN, value):
4647
return value

sdk/ml/azure-ai-ml/azure/ai/ml/dsl/_pipeline_component_builder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,14 @@ def _map_type(_meta):
269269
type=_map_type(meta), description=meta.description, mode=meta.mode, is_control=meta.is_control
270270
)
271271
pipeline_output = PipelineOutput(
272-
name=key,
272+
port_name=key,
273273
data=None,
274274
meta=output_meta,
275275
owner="pipeline",
276276
description=self._args_description.get(key, None),
277277
)
278-
value._owner.outputs[value._name]._data = PipelineOutput(
279-
name=key,
278+
value._owner.outputs[value._port_name]._data = PipelineOutput(
279+
port_name=key,
280280
data=value._data,
281281
meta=None,
282282
owner="pipeline",

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/command.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
from marshmallow import INCLUDE, Schema
1515

16-
from azure.ai.ml._restclient.v2022_10_01_preview.models import CommandJob as RestCommandJob
17-
from azure.ai.ml._restclient.v2022_10_01_preview.models import CommandJobLimits as RestCommandJobLimits
18-
from azure.ai.ml._restclient.v2022_10_01_preview.models import JobBase
19-
from azure.ai.ml._restclient.v2022_10_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
16+
from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJob as RestCommandJob
17+
from azure.ai.ml._restclient.v2022_12_01_preview.models import CommandJobLimits as RestCommandJobLimits
18+
from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase
19+
from azure.ai.ml._restclient.v2022_12_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
2020
from azure.ai.ml._schema.core.fields import NestedField, UnionField
2121
from azure.ai.ml._schema.job.command_job import CommandJobSchema
2222
from azure.ai.ml._schema.job.identity import AMLTokenIdentitySchema, ManagedIdentitySchema, UserIdentitySchema

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/do_while.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,16 +190,16 @@ def _validate_port(self, port, node_ports, port_type, yaml_path):
190190
validation_result.append_error(
191191
yaml_path=yaml_path,
192192
message=(
193-
f"{port_obj._name} is the {port_type} of {port_obj._owner.name}, " # pylint: disable=protected-access
193+
f"{port_obj._port_name} is the {port_type} of {port_obj._owner.name}, " # pylint: disable=protected-access
194194
f"dowhile only accept {port_type} of the body: {self.body.name}."
195195
),
196196
)
197-
elif port_obj is None or port_obj._name not in node_ports: # pylint: disable=protected-access
197+
elif port_obj is None or port_obj._port_name not in node_ports: # pylint: disable=protected-access
198198
# Check port is exist in dowhile body.
199199
validation_result.append_error(
200200
yaml_path=yaml_path,
201201
message=(
202-
f"The {port_type} of mapping {port_obj._name if port_obj else port} does not " # pylint: disable=protected-access
202+
f"The {port_type} of mapping {port_obj._port_name if port_obj else port} does not " # pylint: disable=protected-access
203203
f"exist in {self.body.name} {port_type}, existing {port_type}: {node_ports.keys()}"
204204
),
205205
)
@@ -218,7 +218,7 @@ def _validate_loop_condition(self, raise_error=True):
218218
)
219219
if validation_result.passed:
220220
# Check condition is a control output.
221-
condition_name = self.condition if isinstance(self.condition, str) else self.condition._name
221+
condition_name = self.condition if isinstance(self.condition, str) else self.condition._port_name
222222
if not self.body._outputs[condition_name].is_control:
223223
validation_result.append_error(
224224
yaml_path="condition",
@@ -258,7 +258,7 @@ def _validate_body_output_mapping(self, raise_error=True):
258258
# Validate mapping input&output should come from while body
259259
for output, inputs in self.mapping.items():
260260
# pylint: disable=protected-access
261-
output_name = output if isinstance(output, str) else output._name
261+
output_name = output if isinstance(output, str) else output._port_name
262262
validate_results = self._validate_port(
263263
output, self.body.outputs, port_type="output", yaml_path="mapping"
264264
)
@@ -271,7 +271,7 @@ def _validate_body_output_mapping(self, raise_error=True):
271271
)
272272
validation_result.merge_with(input_validate_results)
273273
# pylint: disable=protected-access
274-
input_name = item if isinstance(item, str) else item._name
274+
input_name = item if isinstance(item, str) else item._port_name
275275
input_output_mapping[input_name] = input_output_mapping.get(input_name, []) + [output_name]
276276
is_primitive_type = self.body._inputs[input_name]._meta._is_primitive_type
277277

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/parallel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from marshmallow import Schema
1515

16-
from azure.ai.ml._restclient.v2022_10_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
16+
from azure.ai.ml._restclient.v2022_12_01_preview.models import JobResourceConfiguration as RestJobResourceConfiguration
1717
from azure.ai.ml.constants._common import ARM_ID_PREFIX
1818
from azure.ai.ml.constants._component import NodeType
1919
from azure.ai.ml.entities._component.component import Component

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_builders/spark.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
from marshmallow import INCLUDE, Schema
1414

15-
from azure.ai.ml._restclient.v2022_10_01_preview.models import IdentityConfiguration
16-
from azure.ai.ml._restclient.v2022_10_01_preview.models import JobBase as JobBaseData
17-
from azure.ai.ml._restclient.v2022_10_01_preview.models import SparkJob as RestSparkJob
18-
from azure.ai.ml._restclient.v2022_10_01_preview.models import SparkJobEntry as RestSparkJobEntry
19-
from azure.ai.ml._restclient.v2022_10_01_preview.models import (
15+
from azure.ai.ml._restclient.v2022_12_01_preview.models import IdentityConfiguration
16+
from azure.ai.ml._restclient.v2022_12_01_preview.models import JobBase as JobBaseData
17+
from azure.ai.ml._restclient.v2022_12_01_preview.models import SparkJob as RestSparkJob
18+
from azure.ai.ml._restclient.v2022_12_01_preview.models import SparkJobEntry as RestSparkJobEntry
19+
from azure.ai.ml._restclient.v2022_12_01_preview.models import (
2020
SparkResourceConfiguration as RestSparkResourceConfiguration,
2121
)
2222
from azure.ai.ml._schema.job.identity import AMLTokenIdentitySchema, ManagedIdentitySchema, UserIdentitySchema

0 commit comments

Comments
 (0)