1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# ---------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------
# pylint: disable=try-except-raise
import logging
from azure.ai.ml.entities import BatchDeployment, OnlineDeployment, Deployment
from azure.ai.ml._restclient.v2023_04_01_preview.models import (
PackageRequest,
CodeConfiguration,
BaseEnvironmentId,
AzureMLOnlineInferencingServer,
AzureMLBatchInferencingServer,
)
from azure.ai.ml._restclient.v2021_10_01_dataplanepreview.models import (
PackageRequest as DataPlanePackageRequest,
)
from azure.ai.ml.constants._common import REGISTRY_URI_FORMAT
from azure.ai.ml._utils._logger_utils import initialize_logger_info
module_logger = logging.getLogger(__name__)
initialize_logger_info(module_logger, terminator="")
def package_deployment(deployment: Deployment, model_ops) -> Deployment:
model_str = deployment.model
model_version = model_str.split("/")[-1]
model_name = model_str.split("/")[-3]
target_environment_name = "packaged-env"
if deployment.code_configuration:
code_configuration = CodeConfiguration(
code_id=deployment.code_configuration.code,
scoring_script=deployment.code_configuration.scoring_script,
)
else:
code_configuration = None
if isinstance(deployment, OnlineDeployment):
inferencing_server = AzureMLOnlineInferencingServer(code_configuration=code_configuration)
elif isinstance(deployment, BatchDeployment):
inferencing_server = AzureMLBatchInferencingServer(code_configuration=code_configuration)
else:
inferencing_server = None
if deployment.environment:
base_environment_source = BaseEnvironmentId(
base_environment_source_type="EnvironmentAsset", resource_id=deployment.environment
)
else:
base_environment_source = None
package_request = (
PackageRequest(
target_environment_name=target_environment_name,
base_environment_source=base_environment_source,
inferencing_server=inferencing_server,
)
if not model_str.startswith(REGISTRY_URI_FORMAT)
else DataPlanePackageRequest(
inferencing_server=inferencing_server,
target_environment_id=target_environment_name,
base_environment_source=base_environment_source,
)
)
if deployment.environment:
if not model_str.startswith(REGISTRY_URI_FORMAT):
package_request.base_environment_source.resource_id = "azureml:/" + deployment.environment
else:
package_request.base_environment_source.resource_id = deployment.environment
if deployment.code_configuration:
if not deployment.code_configuration.code.startswith(REGISTRY_URI_FORMAT):
package_request.inferencing_server.code_configuration.code_id = (
"azureml:/" + deployment.code_configuration.code
)
else:
package_request.inferencing_server.code_configuration.code_id = deployment.code_configuration.code
try:
packaged_env = model_ops.package(
model_name,
model_version,
package_request=package_request,
skip_to_rest=True,
)
if not model_str.startswith(REGISTRY_URI_FORMAT):
deployment.environment = packaged_env.id
else:
deployment.environment = packaged_env.target_environment_id
deployment.model = None
deployment.code_configuration = None
except Exception:
raise
return deployment
|