Skip to content

Commit eb2d1a1

Browse files
authored
ADS release v2.11.2 (#738)
1 parent e1775be commit eb2d1a1

File tree

18 files changed

+184
-89
lines changed

18 files changed

+184
-89
lines changed

THIRD_PARTY_LICENSES.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,13 @@ cachetools
411411
* Source code: https://github.com/tkem/cachetools/
412412
* Project home: https://cachetools.readthedocs.io/
413413

414+
python-fire
415+
* Copyright 2017 Google Inc. All rights reserved.
416+
* License: Apache License 2.0
417+
* Source code: https://github.com/google/python-fire
418+
* Project home: https://github.com/google/python-fire
419+
420+
=======
414421
=============================== Licenses ===============================
415422
------------------------------------------------------------------------
416423

ads/aqua/base.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
UNKNOWN,
1818
_is_valid_mvs,
1919
get_artifact_path,
20-
get_base_model_from_tags,
2120
is_valid_ocid,
2221
load_config,
2322
logger,

ads/aqua/data.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,7 @@ class Tags(Enum):
3636
AQUA_TAG = "OCI_AQUA"
3737
AQUA_SERVICE_MODEL_TAG = "aqua_service_model"
3838
AQUA_FINE_TUNED_MODEL_TAG = "aqua_fine_tuned_model"
39+
AQUA_MODEL_NAME_TAG = "aqua_model_name"
3940
AQUA_EVALUATION = "aqua_evaluation"
4041
AQUA_FINE_TUNING = "aqua_finetuning"
42+
READY_TO_FINE_TUNE = "ready_to_fine_tune"

ads/aqua/deployment.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class AquaDeployment(DataClassSerializable):
6161
id: str = None
6262
display_name: str = None
6363
aqua_service_model: bool = None
64+
aqua_model_name: str = None
6465
state: str = None
6566
description: str = None
6667
created_on: str = None
@@ -116,13 +117,17 @@ def from_oci_model_deployment(
116117
),
117118
)
118119

120+
freeform_tags = oci_model_deployment.freeform_tags or UNKNOWN_DICT
121+
aqua_service_model_tag = freeform_tags.get(
122+
Tags.AQUA_SERVICE_MODEL_TAG.value, None
123+
)
124+
aqua_model_name = freeform_tags.get(Tags.AQUA_MODEL_NAME_TAG.value, UNKNOWN)
125+
119126
return AquaDeployment(
120127
id=oci_model_deployment.id,
121128
display_name=oci_model_deployment.display_name,
122-
aqua_service_model=oci_model_deployment.freeform_tags.get(
123-
Tags.AQUA_SERVICE_MODEL_TAG.value
124-
)
125-
is not None,
129+
aqua_service_model=aqua_service_model_tag is not None,
130+
aqua_model_name=aqua_model_name,
126131
shape_info=shape_info,
127132
state=oci_model_deployment.lifecycle_state,
128133
lifecycle_details=getattr(
@@ -137,7 +142,7 @@ def from_oci_model_deployment(
137142
ocid=oci_model_deployment.id,
138143
region=region,
139144
),
140-
tags=oci_model_deployment.freeform_tags,
145+
tags=freeform_tags,
141146
)
142147

143148

@@ -235,17 +240,9 @@ def create(
235240
An Aqua deployment instance
236241
237242
"""
238-
# todo: revisit error handling and pull deployment image info from config
239-
# if not AQUA_MODEL_DEPLOYMENT_IMAGE:
240-
# raise AquaValueError(
241-
# f"AQUA_MODEL_DEPLOYMENT_IMAGE must be available in environment variables to "
242-
# f"continue with Aqua model deployment."
243-
# )
244-
245-
# todo: for fine tuned models, skip model creation.
246243
# Create a model catalog entry in the user compartment
247244
aqua_model = AquaModelApp().create(
248-
model_id=model_id, comparment_id=compartment_id, project_id=project_id
245+
model_id=model_id, compartment_id=compartment_id, project_id=project_id
249246
)
250247

251248
tags = {}
@@ -257,6 +254,8 @@ def create(
257254
if tag in aqua_model.freeform_tags:
258255
tags[tag] = aqua_model.freeform_tags[tag]
259256

257+
tags.update({Tags.AQUA_MODEL_NAME_TAG.value: aqua_model.display_name})
258+
260259
# Set up info to get deployment config
261260
config_source_id = model_id
262261
model_name = aqua_model.display_name
@@ -535,7 +534,7 @@ def get(self, model_deployment_id: str, **kwargs) -> "AquaDeploymentDetail":
535534
log_group_id=log_group_id,
536535
log_id=log_id,
537536
compartment_id=model_deployment.compartment_id,
538-
source_id=model_deployment.id
537+
source_id=model_deployment.id,
539538
)
540539

541540
return AquaDeploymentDetail(

ads/aqua/evaluation.py

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ class AquaEvaluationApp(AquaApp):
362362
@telemetry(entry_point="plugin=evaluation&action=create", name="aqua")
363363
def create(
364364
self,
365-
create_aqua_evaluation_details: CreateAquaEvaluationDetails,
365+
create_aqua_evaluation_details: CreateAquaEvaluationDetails = None,
366366
**kwargs,
367367
) -> "AquaEvaluationSummary":
368368
"""Creates Aqua evaluation for resource.
@@ -373,13 +373,23 @@ def create(
373373
The CreateAquaEvaluationDetails data class which contains all
374374
required and optional fields to create the aqua evaluation.
375375
kwargs:
376-
The kwargs for the evaluation.
376+
The kwargs for creating CreateAquaEvaluationDetails instance if
377+
no create_aqua_evaluation_details provided.
377378
378379
Returns
379380
-------
380381
AquaEvaluationSummary:
381382
The instance of AquaEvaluationSummary.
382383
"""
384+
if not create_aqua_evaluation_details:
385+
try:
386+
create_aqua_evaluation_details = CreateAquaEvaluationDetails(**kwargs)
387+
except:
388+
raise AquaValueError(
389+
"Invalid create evaluation parameters. Allowable parameters are: "
390+
f"{', '.join(list(asdict(CreateAquaEvaluationDetails).keys()))}."
391+
)
392+
383393
if not is_valid_ocid(create_aqua_evaluation_details.evaluation_source_id):
384394
raise AquaValueError(
385395
f"Invalid evaluation source {create_aqua_evaluation_details.evaluation_source_id}. "
@@ -1066,7 +1076,7 @@ def get_supported_metrics(self) -> dict:
10661076
{
10671077
"use_case": ["text_generation"],
10681078
"key": "bertscore",
1069-
"name": "BERT Score",
1079+
"name": "bertscore",
10701080
"description": (
10711081
"BERT Score is a metric for evaluating the quality of text "
10721082
"generation models, such as machine translation or summarization. "
@@ -1079,7 +1089,7 @@ def get_supported_metrics(self) -> dict:
10791089
{
10801090
"use_case": ["text_generation"],
10811091
"key": "rouge",
1082-
"name": "ROUGE Score",
1092+
"name": "rouge",
10831093
"description": (
10841094
"ROUGE scores compare a candidate document to a collection of "
10851095
"reference documents to evaluate the similarity between them. "
@@ -1363,40 +1373,35 @@ def load_evaluation_config(self, eval_id):
13631373
},
13641374
"shape": {
13651375
"VM.Standard.E3.Flex": {
1366-
"ocpu": 2,
1367-
"memory_in_gbs": 64,
1368-
"block_storage_size": 100,
1369-
},
1370-
"VM.Standard.E3.Flex": {
1371-
"ocpu": 2,
1372-
"memory_in_gbs": 64,
1373-
"block_storage_size": 100,
1376+
"ocpu": 8,
1377+
"memory_in_gbs": 128,
1378+
"block_storage_size": 200,
13741379
},
13751380
"VM.Standard.E4.Flex": {
1376-
"ocpu": 2,
1377-
"memory_in_gbs": 64,
1378-
"block_storage_size": 100,
1381+
"ocpu": 8,
1382+
"memory_in_gbs": 128,
1383+
"block_storage_size": 200,
13791384
},
13801385
"VM.Standard3.Flex": {
1381-
"ocpu": 2,
1382-
"memory_in_gbs": 64,
1383-
"block_storage_size": 100,
1386+
"ocpu": 8,
1387+
"memory_in_gbs": 128,
1388+
"block_storage_size": 200,
13841389
},
13851390
"VM.Optimized3.Flex": {
1386-
"ocpu": 2,
1387-
"memory_in_gbs": 64,
1388-
"block_storage_size": 100,
1391+
"ocpu": 8,
1392+
"memory_in_gbs": 128,
1393+
"block_storage_size": 200,
13891394
},
13901395
"VM.Standard.A1.Flex": {
1391-
"ocpu": 2,
1392-
"memory_in_gbs": 64,
1393-
"block_storage_size": 100,
1396+
"ocpu": 8,
1397+
"memory_in_gbs": 128,
1398+
"block_storage_size": 200,
13941399
},
13951400
},
13961401
"default": {
1397-
"ocpu": 2,
1398-
"memory_in_gbs": 64,
1399-
"block_storage_size": 100,
1402+
"ocpu": 8,
1403+
"memory_in_gbs": 128,
1404+
"block_storage_size": 200,
14001405
},
14011406
}
14021407

ads/aqua/finetune.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,10 @@
2424
DEFAULT_FT_BLOCK_STORAGE_SIZE,
2525
DEFAULT_FT_REPLICA,
2626
DEFAULT_FT_VALIDATION_SET_SIZE,
27-
FINE_TUNING_RUNTIME_CONTAINER,
2827
JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING,
2928
UNKNOWN,
3029
UNKNOWN_DICT,
3130
get_container_image,
32-
load_config,
3331
logger,
3432
upload_local_to_os,
3533
)
@@ -433,6 +431,11 @@ def create(
433431
for metadata in ft_model_custom_metadata.to_dict()["data"]
434432
]
435433

434+
source_freeform_tags = source.freeform_tags or {}
435+
source_freeform_tags.pop(Tags.LICENSE.value, None)
436+
source_freeform_tags.update({Tags.READY_TO_FINE_TUNE.value: "false"})
437+
source_freeform_tags.update({Tags.AQUA_TAG.value: UNKNOWN})
438+
436439
self.update_model(
437440
model_id=ft_model.id,
438441
update_model_details=UpdateModelDetails(
@@ -441,7 +444,7 @@ def create(
441444
Tags.AQUA_FINE_TUNED_MODEL_TAG.value: (
442445
f"{source.id}#{source.display_name}"
443446
),
444-
**source.freeform_tags,
447+
**source_freeform_tags,
445448
},
446449
),
447450
)

ads/aqua/model.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
# -*- coding: utf-8 -*-
33
# Copyright (c) 2024 Oracle and/or its affiliates.
44
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5+
import os
56
import re
67
from dataclasses import InitVar, dataclass, field
78
from datetime import datetime, timedelta
89
from enum import Enum
9-
import os
1010
from threading import Lock
1111
from typing import List, Union
1212

@@ -25,18 +25,19 @@
2525
FineTuningDefinedMetadata,
2626
)
2727
from ads.aqua.data import AquaResourceIdentifier, Tags
28-
2928
from ads.aqua.exception import AquaRuntimeError
29+
30+
from ads.aqua.training.exceptions import exit_code_dict
3031
from ads.aqua.utils import (
3132
LICENSE_TXT,
3233
README,
3334
READY_TO_DEPLOY_STATUS,
35+
READY_TO_FINE_TUNE_STATUS,
3436
UNKNOWN,
3537
create_word_icon,
3638
get_artifact_path,
3739
read_file,
3840
)
39-
from ads.aqua.training.exceptions import exit_code_dict
4041
from ads.common.auth import default_signer
4142
from ads.common.object_storage_details import ObjectStorageDetails
4243
from ads.common.oci_resource import SEARCH_TYPE, OCIResource
@@ -45,10 +46,10 @@
4546
from ads.config import (
4647
AQUA_SERVICE_MODELS_BUCKET,
4748
COMPARTMENT_OCID,
49+
CONDA_BUCKET_NS,
4850
ODSC_MODEL_COMPARTMENT_OCID,
4951
PROJECT_OCID,
5052
TENANCY_OCID,
51-
CONDA_BUCKET_NS,
5253
)
5354
from ads.model import DataScienceModel
5455
from ads.model.model_metadata import MetadataTaxonomyKeys, ModelCustomMetadata
@@ -106,6 +107,7 @@ class AquaModelSummary(DataClassSerializable):
106107
console_link: str = None
107108
search_text: str = None
108109
ready_to_deploy: bool = True
110+
ready_to_finetune: bool = False
109111

110112

111113
@dataclass(repr=False)
@@ -626,8 +628,10 @@ def _process_model(
626628
is_fine_tuned_model = Tags.AQUA_FINE_TUNED_MODEL_TAG.value in freeform_tags
627629
ready_to_deploy = (
628630
freeform_tags.get(Tags.AQUA_TAG.value, "").upper() == READY_TO_DEPLOY_STATUS
629-
if is_fine_tuned_model
630-
else True
631+
)
632+
ready_to_finetune = (
633+
freeform_tags.get(Tags.READY_TO_FINE_TUNE.value, "").upper()
634+
== READY_TO_FINE_TUNE_STATUS
631635
)
632636

633637
return dict(
@@ -644,6 +648,7 @@ def _process_model(
644648
console_link=console_link,
645649
search_text=search_text,
646650
ready_to_deploy=ready_to_deploy,
651+
ready_to_finetune=ready_to_finetune,
647652
)
648653

649654
@telemetry(entry_point="plugin=model&action=list", name="aqua")

0 commit comments

Comments
 (0)