Skip to content

Commit 2b5cd84

Browse files
changes for tei byoc deployment
1 parent ee8be98 commit 2b5cd84

File tree

9 files changed

+430
-6
lines changed

9 files changed

+430
-6
lines changed

ads/aqua/common/utils.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,3 +1111,47 @@ def generate_tei_cmd_var(os_path: str) -> List[str]:
11111111
]
11121112

11131113
return cmd_var
1114+
1115+
1116+
def parse_cmd_var(cmd_list: List[str]) -> dict:
1117+
"""Helper functions that parses a list into a key-value dictionary. The list contains keys separated by the prefix
1118+
'--' and the value of the key is the subsequent element.
1119+
"""
1120+
it = iter(cmd_list)
1121+
return {
1122+
key: next(it, None) if not key.startswith("--") else next(it, None)
1123+
for key in it
1124+
if key.startswith("--")
1125+
}
1126+
1127+
1128+
def validate_cmd_var(cmd_var: List[str], overrides: List[str]) -> List[str]:
1129+
"""This function accepts two lists of parameters and combines them. If the second list shares the common parameter
1130+
names/keys, then it raises an error.
1131+
Parameters
1132+
----------
1133+
cmd_var: List[str]
1134+
Default list of parameters
1135+
overrides: List[str]
1136+
List of parameters to override
1137+
Returns
1138+
-------
1139+
List[str] of combined parameters
1140+
"""
1141+
cmd_var = [str(x) for x in cmd_var]
1142+
if not overrides:
1143+
return cmd_var
1144+
overrides = [str(x) for x in overrides]
1145+
1146+
cmd_dict = parse_cmd_var(cmd_var)
1147+
overrides_dict = parse_cmd_var(overrides)
1148+
1149+
# check for conflicts
1150+
common_keys = set(cmd_dict.keys()) & set(overrides_dict.keys())
1151+
if common_keys:
1152+
raise AquaValueError(
1153+
f"The following keys cannot be overridden: {', '.join(common_keys)}"
1154+
)
1155+
1156+
combined_cmd_var = cmd_var + overrides
1157+
return combined_cmd_var

ads/aqua/model/model.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,7 @@ def _create_model_catalog_entry(
720720
description=f"Inference container cmd vars for {model_name}",
721721
category="Other",
722722
)
723+
723724
if finetuning_container:
724725
tags[Tags.READY_TO_FINE_TUNE] = "true"
725726
metadata.add(
@@ -1232,9 +1233,12 @@ def register(
12321233
inference_container = ds_model.custom_metadata_list.get(
12331234
ModelCustomMetadataFields.DEPLOYMENT_CONTAINER
12341235
).value
1235-
evaluation_container = ds_model.custom_metadata_list.get(
1236-
ModelCustomMetadataFields.EVALUATION_CONTAINER,
1237-
).value
1236+
try:
1237+
evaluation_container = ds_model.custom_metadata_list.get(
1238+
ModelCustomMetadataFields.EVALUATION_CONTAINER,
1239+
).value
1240+
except Exception:
1241+
evaluation_container = None
12381242
try:
12391243
finetuning_container = ds_model.custom_metadata_list.get(
12401244
ModelCustomMetadataFields.FINETUNE_CONTAINER,

ads/aqua/modeldeployment/deployment.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
get_resource_name,
2525
get_restricted_params_by_container,
2626
load_config,
27+
validate_cmd_var,
2728
)
2829
from ads.aqua.constants import (
2930
AQUA_MODEL_ARTIFACT_FILE,
@@ -263,12 +264,15 @@ def create(
263264
cmd_var_string = aqua_model.custom_metadata_list.get(
264265
AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME
265266
).value
266-
cmd_var.extend(cmd_var_string.split(","))
267267
except ValueError as err:
268268
raise AquaValueError(
269269
f"{AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME} key is not available in the custom metadata "
270270
f"field. Please check if the model was registered with {container_type_key} inference container."
271271
) from err
272+
default_cmd_var = cmd_var_string.split(",")
273+
if default_cmd_var:
274+
cmd_var = validate_cmd_var(default_cmd_var, cmd_var)
275+
logging.info(f"CMD used for deploying {aqua_model.id} :{cmd_var}")
272276
else:
273277
# fetch image name from config
274278
container_image_uri = get_container_image(container_type=container_type_key)

ads/aqua/modeldeployment/entities.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
44

55
from dataclasses import dataclass, field
6-
from typing import Union
6+
from typing import List, Union
77

88
from oci.data_science.models import (
99
ModelDeployment,
@@ -52,6 +52,7 @@ class AquaDeployment(DataClassSerializable):
5252
shape_info: field(default_factory=ShapeInfo) = None
5353
tags: dict = None
5454
environment_variables: dict = None
55+
cmd: List[str] = None
5556

5657
@classmethod
5758
def from_oci_model_deployment(
@@ -80,6 +81,7 @@ def from_oci_model_deployment(
8081
)
8182
instance_count = oci_model_deployment.model_deployment_configuration_details.model_configuration_details.scaling_policy.instance_count
8283
environment_variables = oci_model_deployment.model_deployment_configuration_details.environment_configuration_details.environment_variables
84+
cmd = oci_model_deployment.model_deployment_configuration_details.environment_configuration_details.cmd
8385
shape_info = ShapeInfo(
8486
instance_shape=instance_configuration.instance_shape_name,
8587
instance_count=instance_count,
@@ -120,6 +122,7 @@ def from_oci_model_deployment(
120122
),
121123
tags=freeform_tags,
122124
environment_variables=environment_variables,
125+
cmd=cmd,
123126
)
124127

125128

ads/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME = "deployment-container"
6666
AQUA_FINETUNING_CONTAINER_METADATA_NAME = "finetune-container"
6767
AQUA_EVALUATION_CONTAINER_METADATA_NAME = "evaluation-container"
68-
AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME = "container_cmd_var"
68+
AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME = "container-cmd-var"
6969
AQUA_DEPLOYMENT_CONTAINER_URI_METADATA_NAME = "deployment-container-uri"
7070
AQUA_DEPLOYMENT_CONTAINER_OVERRIDE_FLAG_METADATA_NAME = "deployment-container-custom"
7171
AQUA_FINETUNING_CONTAINER_OVERRIDE_FLAG_METADATA_NAME = "finetune-container-custom"
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
kind: deployment
2+
spec:
3+
createdBy: ocid1.user.oc1..<OCID>
4+
displayName: model-deployment-name
5+
freeformTags:
6+
OCI_AQUA: active
7+
aqua_model_name: model-name
8+
id: "ocid1.datasciencemodeldeployment.oc1.<region>.<MD_OCID>"
9+
infrastructure:
10+
kind: infrastructure
11+
spec:
12+
bandwidthMbps: 10
13+
compartmentId: ocid1.compartment.oc1..<OCID>
14+
deploymentType: SINGLE_MODEL
15+
policyType: FIXED_SIZE
16+
projectId: ocid1.datascienceproject.oc1.iad.<OCID>
17+
replica: 1
18+
shapeName: "VM.GPU.A10.1"
19+
type: datascienceModelDeployment
20+
lifecycleState: CREATING
21+
modelDeploymentUrl: "https://modeldeployment.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.<region>.<MD_OCID>"
22+
runtime:
23+
kind: runtime
24+
spec:
25+
env:
26+
BASE_MODEL: service_models/model-name/artifact
27+
MODEL_DEPLOY_PREDICT_ENDPOINT: /v1/embeddings
28+
healthCheckPort: 8080
29+
image: "dsmc://image-name:1.0.0.0"
30+
modelUri: "ocid1.datasciencemodeldeployment.oc1.<region>.<MODEL_OCID>"
31+
serverPort: 8080
32+
type: container
33+
timeCreated: 2024-01-01T00:00:00.000000+00:00
34+
type: modelDeployment
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
kind: datascienceModel
2+
spec:
3+
artifact: oci://service-managed-models@namespace/service_models/model-name/artifact
4+
compartmentId: ocid1.compartment.oc1..<OCID>
5+
customMetadataList:
6+
data:
7+
- category: Other
8+
description: artifact location
9+
key: artifact_location
10+
value: service_models/model-name/artifact
11+
- category: Other
12+
description: model by reference flag
13+
key: modelDescription
14+
value: true
15+
- category: Other
16+
description: Deployment container mapping for model model-name
17+
key: deployment-container
18+
value: odsc-tei-serving
19+
- category: Other
20+
description: Inference container URI for model model-name
21+
key: deployment-container-uri
22+
value: region.ocir.io/tenancy/image_name:tag
23+
- category: Other
24+
description: Inference container cmd vars for model-name
25+
key: container-cmd-var
26+
value: --model-id,/opt/ds/model/deployed_model/service_models/model-name/artifact/,--port,8080
27+
definedTags: {}
28+
description: Mock model description
29+
displayName: model-name
30+
freeformTags:
31+
OCI_AQUA: active
32+
license: License
33+
organization: Organization
34+
ready_to_fine_tune: false
35+
task: text_embedding
36+
id: ocid1.datasciencemodel.oc1.iad.<OCID>
37+
lifecycleState: ACTIVE
38+
modelDescription:
39+
models:
40+
- bucketName: service-managed-models
41+
namespace: namespace
42+
objects:
43+
- name: service_models/model-name/artifact/README.md
44+
sizeInBytes: 10317
45+
version: 450a8124-f5ca-4ee6-b4cf-c1dc05b13d46
46+
- name: service_models/model-name/artifact/config.json
47+
sizeInBytes: 950
48+
version: 3ace781b-4a48-4e89-88b6-61f0db6d51ad
49+
- name: service_models/model-name/artifact/configuration_RW.py
50+
sizeInBytes: 2607
51+
version: ba1df5b6-7546-42e5-964e-63cd013e988c
52+
- name: service_models/model-name/artifact/generation_config.json
53+
sizeInBytes: 111
54+
version: e23a04c8-9725-4f20-8bb1-f455129e2a4e
55+
- name: service_models/model-name/artifact/modelling_RW.py
56+
sizeInBytes: 47560
57+
version: a584c221-afab-441f-901d-fbe8251dccf6
58+
- name: service_models/model-name/artifact/pytorch_model-00001-of-00002.bin
59+
sizeInBytes: 9951028193
60+
version: e919676e-48dd-4bea-af82-14b5f3eb2b9b
61+
- name: service_models/model-name/artifact/pytorch_model-00002-of-00002.bin
62+
sizeInBytes: 4483421659
63+
version: d6255d3e-bd91-4c05-b3ca-fc1be576ee10
64+
- name: service_models/model-name/artifact/pytorch_model.bin.index.json
65+
sizeInBytes: 16924
66+
version: 0419428c-2a7b-45d9-bb78-142fe0630017
67+
- name: service_models/model-name/artifact/special_tokens_map.json
68+
sizeInBytes: 281
69+
version: 5569231a-a526-4881-8945-a94a1bb59b2e
70+
- name: service_models/model-name/artifact/tokenizer.json
71+
sizeInBytes: 2734130
72+
version: d3a8a00a-de79-4d80-aa69-d8f68ee800ec
73+
- name: service_models/model-name/artifact/tokenizer_config.json
74+
sizeInBytes: 220
75+
version: 84eed6ff-c1ed-4641-8c10-e6a49364d7dd
76+
prefix: service_models/model-name/artifact
77+
type: modelOSSReferenceDescription
78+
version: '1.0'
79+
projectId: ocid1.datascienceproject.oc1.iad.<OCID>
80+
provenanceMetadata:
81+
artifact_dir: null
82+
git_branch: null
83+
git_commit: 123456
84+
repository_url: https://model-name-url.com
85+
training_id: null
86+
training_script_path: null
87+
timeCreated: 2024-01-01T00:00:00.000000+00:00
88+
type: dataScienceModel

0 commit comments

Comments
 (0)