oracle-ads 2.11.1__py3-none-any.whl → 2.11.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ads/aqua/base.py +0 -1
- ads/aqua/data.py +2 -0
- ads/aqua/deployment.py +14 -15
- ads/aqua/evaluation.py +29 -29
- ads/aqua/finetune.py +6 -3
- ads/aqua/model.py +11 -6
- ads/aqua/training/exceptions.py +24 -7
- ads/aqua/ui.py +1 -1
- ads/aqua/utils.py +14 -13
- ads/config.py +11 -3
- ads/model/datascience_model.py +10 -2
- {oracle_ads-2.11.1.dist-info → oracle_ads-2.11.3.dist-info}/METADATA +1 -1
- {oracle_ads-2.11.1.dist-info → oracle_ads-2.11.3.dist-info}/RECORD +16 -16
- {oracle_ads-2.11.1.dist-info → oracle_ads-2.11.3.dist-info}/LICENSE.txt +0 -0
- {oracle_ads-2.11.1.dist-info → oracle_ads-2.11.3.dist-info}/WHEEL +0 -0
- {oracle_ads-2.11.1.dist-info → oracle_ads-2.11.3.dist-info}/entry_points.txt +0 -0
ads/aqua/base.py
CHANGED
ads/aqua/data.py
CHANGED
@@ -36,5 +36,7 @@ class Tags(Enum):
|
|
36
36
|
AQUA_TAG = "OCI_AQUA"
|
37
37
|
AQUA_SERVICE_MODEL_TAG = "aqua_service_model"
|
38
38
|
AQUA_FINE_TUNED_MODEL_TAG = "aqua_fine_tuned_model"
|
39
|
+
AQUA_MODEL_NAME_TAG = "aqua_model_name"
|
39
40
|
AQUA_EVALUATION = "aqua_evaluation"
|
40
41
|
AQUA_FINE_TUNING = "aqua_finetuning"
|
42
|
+
READY_TO_FINE_TUNE = "ready_to_fine_tune"
|
ads/aqua/deployment.py
CHANGED
@@ -61,6 +61,7 @@ class AquaDeployment(DataClassSerializable):
|
|
61
61
|
id: str = None
|
62
62
|
display_name: str = None
|
63
63
|
aqua_service_model: bool = None
|
64
|
+
aqua_model_name: str = None
|
64
65
|
state: str = None
|
65
66
|
description: str = None
|
66
67
|
created_on: str = None
|
@@ -116,13 +117,17 @@ class AquaDeployment(DataClassSerializable):
|
|
116
117
|
),
|
117
118
|
)
|
118
119
|
|
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
|
+
|
119
126
|
return AquaDeployment(
|
120
127
|
id=oci_model_deployment.id,
|
121
128
|
display_name=oci_model_deployment.display_name,
|
122
|
-
aqua_service_model=
|
123
|
-
|
124
|
-
)
|
125
|
-
is not None,
|
129
|
+
aqua_service_model=aqua_service_model_tag is not None,
|
130
|
+
aqua_model_name=aqua_model_name,
|
126
131
|
shape_info=shape_info,
|
127
132
|
state=oci_model_deployment.lifecycle_state,
|
128
133
|
lifecycle_details=getattr(
|
@@ -137,7 +142,7 @@ class AquaDeployment(DataClassSerializable):
|
|
137
142
|
ocid=oci_model_deployment.id,
|
138
143
|
region=region,
|
139
144
|
),
|
140
|
-
tags=
|
145
|
+
tags=freeform_tags,
|
141
146
|
)
|
142
147
|
|
143
148
|
|
@@ -235,17 +240,9 @@ class AquaDeploymentApp(AquaApp):
|
|
235
240
|
An Aqua deployment instance
|
236
241
|
|
237
242
|
"""
|
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.
|
246
243
|
# Create a model catalog entry in the user compartment
|
247
244
|
aqua_model = AquaModelApp().create(
|
248
|
-
model_id=model_id,
|
245
|
+
model_id=model_id, compartment_id=compartment_id, project_id=project_id
|
249
246
|
)
|
250
247
|
|
251
248
|
tags = {}
|
@@ -257,6 +254,8 @@ class AquaDeploymentApp(AquaApp):
|
|
257
254
|
if tag in aqua_model.freeform_tags:
|
258
255
|
tags[tag] = aqua_model.freeform_tags[tag]
|
259
256
|
|
257
|
+
tags.update({Tags.AQUA_MODEL_NAME_TAG.value: aqua_model.display_name})
|
258
|
+
|
260
259
|
# Set up info to get deployment config
|
261
260
|
config_source_id = model_id
|
262
261
|
model_name = aqua_model.display_name
|
@@ -535,7 +534,7 @@ class AquaDeploymentApp(AquaApp):
|
|
535
534
|
log_group_id=log_group_id,
|
536
535
|
log_id=log_id,
|
537
536
|
compartment_id=model_deployment.compartment_id,
|
538
|
-
source_id=model_deployment.id
|
537
|
+
source_id=model_deployment.id,
|
539
538
|
)
|
540
539
|
|
541
540
|
return AquaDeploymentDetail(
|
ads/aqua/evaluation.py
CHANGED
@@ -362,7 +362,7 @@ class AquaEvaluationApp(AquaApp):
|
|
362
362
|
@telemetry(entry_point="plugin=evaluation&action=create", name="aqua")
|
363
363
|
def create(
|
364
364
|
self,
|
365
|
-
create_aqua_evaluation_details: CreateAquaEvaluationDetails,
|
365
|
+
create_aqua_evaluation_details: CreateAquaEvaluationDetails = None,
|
366
366
|
**kwargs,
|
367
367
|
) -> "AquaEvaluationSummary":
|
368
368
|
"""Creates Aqua evaluation for resource.
|
@@ -373,13 +373,23 @@ class AquaEvaluationApp(AquaApp):
|
|
373
373
|
The CreateAquaEvaluationDetails data class which contains all
|
374
374
|
required and optional fields to create the aqua evaluation.
|
375
375
|
kwargs:
|
376
|
-
The kwargs for
|
376
|
+
The kwargs for creating CreateAquaEvaluationDetails instance if
|
377
|
+
no create_aqua_evaluation_details provided.
|
377
378
|
|
378
379
|
Returns
|
379
380
|
-------
|
380
381
|
AquaEvaluationSummary:
|
381
382
|
The instance of AquaEvaluationSummary.
|
382
383
|
"""
|
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
|
+
|
383
393
|
if not is_valid_ocid(create_aqua_evaluation_details.evaluation_source_id):
|
384
394
|
raise AquaValueError(
|
385
395
|
f"Invalid evaluation source {create_aqua_evaluation_details.evaluation_source_id}. "
|
@@ -1066,7 +1076,7 @@ class AquaEvaluationApp(AquaApp):
|
|
1066
1076
|
{
|
1067
1077
|
"use_case": ["text_generation"],
|
1068
1078
|
"key": "bertscore",
|
1069
|
-
"name": "
|
1079
|
+
"name": "bertscore",
|
1070
1080
|
"description": (
|
1071
1081
|
"BERT Score is a metric for evaluating the quality of text "
|
1072
1082
|
"generation models, such as machine translation or summarization. "
|
@@ -1079,7 +1089,7 @@ class AquaEvaluationApp(AquaApp):
|
|
1079
1089
|
{
|
1080
1090
|
"use_case": ["text_generation"],
|
1081
1091
|
"key": "rouge",
|
1082
|
-
"name": "
|
1092
|
+
"name": "rouge",
|
1083
1093
|
"description": (
|
1084
1094
|
"ROUGE scores compare a candidate document to a collection of "
|
1085
1095
|
"reference documents to evaluate the similarity between them. "
|
@@ -1363,40 +1373,30 @@ class AquaEvaluationApp(AquaApp):
|
|
1363
1373
|
},
|
1364
1374
|
"shape": {
|
1365
1375
|
"VM.Standard.E3.Flex": {
|
1366
|
-
"ocpu":
|
1367
|
-
"memory_in_gbs":
|
1368
|
-
"block_storage_size":
|
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,
|
1374
1379
|
},
|
1375
1380
|
"VM.Standard.E4.Flex": {
|
1376
|
-
"ocpu":
|
1377
|
-
"memory_in_gbs":
|
1378
|
-
"block_storage_size":
|
1381
|
+
"ocpu": 8,
|
1382
|
+
"memory_in_gbs": 128,
|
1383
|
+
"block_storage_size": 200,
|
1379
1384
|
},
|
1380
1385
|
"VM.Standard3.Flex": {
|
1381
|
-
"ocpu":
|
1382
|
-
"memory_in_gbs":
|
1383
|
-
"block_storage_size":
|
1386
|
+
"ocpu": 8,
|
1387
|
+
"memory_in_gbs": 128,
|
1388
|
+
"block_storage_size": 200,
|
1384
1389
|
},
|
1385
1390
|
"VM.Optimized3.Flex": {
|
1386
|
-
"ocpu":
|
1387
|
-
"memory_in_gbs":
|
1388
|
-
"block_storage_size":
|
1389
|
-
},
|
1390
|
-
"VM.Standard.A1.Flex": {
|
1391
|
-
"ocpu": 2,
|
1392
|
-
"memory_in_gbs": 64,
|
1393
|
-
"block_storage_size": 100,
|
1391
|
+
"ocpu": 8,
|
1392
|
+
"memory_in_gbs": 128,
|
1393
|
+
"block_storage_size": 200,
|
1394
1394
|
},
|
1395
1395
|
},
|
1396
1396
|
"default": {
|
1397
|
-
"ocpu":
|
1398
|
-
"memory_in_gbs":
|
1399
|
-
"block_storage_size":
|
1397
|
+
"ocpu": 8,
|
1398
|
+
"memory_in_gbs": 128,
|
1399
|
+
"block_storage_size": 200,
|
1400
1400
|
},
|
1401
1401
|
}
|
1402
1402
|
|
ads/aqua/finetune.py
CHANGED
@@ -24,12 +24,10 @@ from ads.aqua.utils import (
|
|
24
24
|
DEFAULT_FT_BLOCK_STORAGE_SIZE,
|
25
25
|
DEFAULT_FT_REPLICA,
|
26
26
|
DEFAULT_FT_VALIDATION_SET_SIZE,
|
27
|
-
FINE_TUNING_RUNTIME_CONTAINER,
|
28
27
|
JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING,
|
29
28
|
UNKNOWN,
|
30
29
|
UNKNOWN_DICT,
|
31
30
|
get_container_image,
|
32
|
-
load_config,
|
33
31
|
logger,
|
34
32
|
upload_local_to_os,
|
35
33
|
)
|
@@ -433,6 +431,11 @@ class AquaFineTuningApp(AquaApp):
|
|
433
431
|
for metadata in ft_model_custom_metadata.to_dict()["data"]
|
434
432
|
]
|
435
433
|
|
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
|
+
|
436
439
|
self.update_model(
|
437
440
|
model_id=ft_model.id,
|
438
441
|
update_model_details=UpdateModelDetails(
|
@@ -441,7 +444,7 @@ class AquaFineTuningApp(AquaApp):
|
|
441
444
|
Tags.AQUA_FINE_TUNED_MODEL_TAG.value: (
|
442
445
|
f"{source.id}#{source.display_name}"
|
443
446
|
),
|
444
|
-
**
|
447
|
+
**source_freeform_tags,
|
445
448
|
},
|
446
449
|
),
|
447
450
|
)
|
ads/aqua/model.py
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
# Copyright (c) 2024 Oracle and/or its affiliates.
|
4
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
import os
|
5
6
|
import re
|
6
7
|
from dataclasses import InitVar, dataclass, field
|
7
8
|
from datetime import datetime, timedelta
|
8
9
|
from enum import Enum
|
9
|
-
import os
|
10
10
|
from threading import Lock
|
11
11
|
from typing import List, Union
|
12
12
|
|
@@ -25,18 +25,19 @@ from ads.aqua.constants import (
|
|
25
25
|
FineTuningDefinedMetadata,
|
26
26
|
)
|
27
27
|
from ads.aqua.data import AquaResourceIdentifier, Tags
|
28
|
-
|
29
28
|
from ads.aqua.exception import AquaRuntimeError
|
29
|
+
|
30
|
+
from ads.aqua.training.exceptions import exit_code_dict
|
30
31
|
from ads.aqua.utils import (
|
31
32
|
LICENSE_TXT,
|
32
33
|
README,
|
33
34
|
READY_TO_DEPLOY_STATUS,
|
35
|
+
READY_TO_FINE_TUNE_STATUS,
|
34
36
|
UNKNOWN,
|
35
37
|
create_word_icon,
|
36
38
|
get_artifact_path,
|
37
39
|
read_file,
|
38
40
|
)
|
39
|
-
from ads.aqua.training.exceptions import exit_code_dict
|
40
41
|
from ads.common.auth import default_signer
|
41
42
|
from ads.common.object_storage_details import ObjectStorageDetails
|
42
43
|
from ads.common.oci_resource import SEARCH_TYPE, OCIResource
|
@@ -45,10 +46,10 @@ from ads.common.utils import get_console_link, get_log_links
|
|
45
46
|
from ads.config import (
|
46
47
|
AQUA_SERVICE_MODELS_BUCKET,
|
47
48
|
COMPARTMENT_OCID,
|
49
|
+
CONDA_BUCKET_NS,
|
48
50
|
ODSC_MODEL_COMPARTMENT_OCID,
|
49
51
|
PROJECT_OCID,
|
50
52
|
TENANCY_OCID,
|
51
|
-
CONDA_BUCKET_NS,
|
52
53
|
)
|
53
54
|
from ads.model import DataScienceModel
|
54
55
|
from ads.model.model_metadata import MetadataTaxonomyKeys, ModelCustomMetadata
|
@@ -106,6 +107,7 @@ class AquaModelSummary(DataClassSerializable):
|
|
106
107
|
console_link: str = None
|
107
108
|
search_text: str = None
|
108
109
|
ready_to_deploy: bool = True
|
110
|
+
ready_to_finetune: bool = False
|
109
111
|
|
110
112
|
|
111
113
|
@dataclass(repr=False)
|
@@ -626,8 +628,10 @@ class AquaModelApp(AquaApp):
|
|
626
628
|
is_fine_tuned_model = Tags.AQUA_FINE_TUNED_MODEL_TAG.value in freeform_tags
|
627
629
|
ready_to_deploy = (
|
628
630
|
freeform_tags.get(Tags.AQUA_TAG.value, "").upper() == READY_TO_DEPLOY_STATUS
|
629
|
-
|
630
|
-
|
631
|
+
)
|
632
|
+
ready_to_finetune = (
|
633
|
+
freeform_tags.get(Tags.READY_TO_FINE_TUNE.value, "").upper()
|
634
|
+
== READY_TO_FINE_TUNE_STATUS
|
631
635
|
)
|
632
636
|
|
633
637
|
return dict(
|
@@ -644,6 +648,7 @@ class AquaModelApp(AquaApp):
|
|
644
648
|
console_link=console_link,
|
645
649
|
search_text=search_text,
|
646
650
|
ready_to_deploy=ready_to_deploy,
|
651
|
+
ready_to_finetune=ready_to_finetune,
|
647
652
|
)
|
648
653
|
|
649
654
|
@telemetry(entry_point="plugin=model&action=list", name="aqua")
|
ads/aqua/training/exceptions.py
CHANGED
@@ -66,6 +66,16 @@ class TrainingExit(SystemExit):
|
|
66
66
|
traceback.print_exc()
|
67
67
|
|
68
68
|
|
69
|
+
class TrustRemoteCodeErrorExit(TrainingExit):
|
70
|
+
"""Error when the model contains custom code while `trust_remote_code` is not set to True."""
|
71
|
+
|
72
|
+
code = 30
|
73
|
+
reason = (
|
74
|
+
"The model contains custom code which must be executed in order to correctly load the model."
|
75
|
+
"However, `trust_remote_code` is not enabled."
|
76
|
+
)
|
77
|
+
|
78
|
+
|
69
79
|
class DistributedTrainingLoggingError(TrainingExit):
|
70
80
|
"""Error when fetching job run logs for setting up distributed training."""
|
71
81
|
|
@@ -349,7 +359,7 @@ class ObjectStorageErrorExit(ServiceErrorExit):
|
|
349
359
|
target_service = "object_storage"
|
350
360
|
reason = (
|
351
361
|
"Failed to access object storage service. "
|
352
|
-
"Please make sure the job run has permission to access the object
|
362
|
+
"Please make sure the job run has permission to access the object storage."
|
353
363
|
)
|
354
364
|
|
355
365
|
|
@@ -364,7 +374,7 @@ class OutOfMemoryErrorExit(TrainingExit):
|
|
364
374
|
)
|
365
375
|
|
366
376
|
|
367
|
-
class
|
377
|
+
class NetworkTimeoutErrorExit(TrainingExit):
|
368
378
|
"""Error due to network connection timeout."""
|
369
379
|
|
370
380
|
code = 101
|
@@ -372,10 +382,17 @@ class NetworkTimeoutError(TrainingExit):
|
|
372
382
|
"Network connection timeout. "
|
373
383
|
"If you are using custom networking, "
|
374
384
|
"please check the VCN/subnet setting to make sure service or NAT gateway is configured correctly. "
|
375
|
-
"This could also be a
|
385
|
+
"This could also be a temporary issue."
|
376
386
|
)
|
377
387
|
|
378
388
|
|
389
|
+
class GPUNotAvailableErrorExit(TrainingExit):
|
390
|
+
"""Error when GPU is not available."""
|
391
|
+
|
392
|
+
code = 102
|
393
|
+
reason = "GPU is not available."
|
394
|
+
|
395
|
+
|
379
396
|
def exception_list():
|
380
397
|
"""Returns a list of exceptions that may cause the training to exit with specific code."""
|
381
398
|
return [
|
@@ -437,14 +454,13 @@ def service_dict():
|
|
437
454
|
}
|
438
455
|
|
439
456
|
|
440
|
-
def
|
457
|
+
def log_reason_and_print_exc(exit_ex: TrainingExit = None):
|
441
458
|
"""Log the exit reason and raise a TrainingExit exception to exit with exit code."""
|
442
459
|
logger.error(traceback.format_exc())
|
443
460
|
logger.critical(exit_ex.reason)
|
444
|
-
raise exit_ex from exception_cause
|
445
461
|
|
446
462
|
|
447
|
-
def
|
463
|
+
def prepare_service_exit(ex: oci.exceptions.ServiceError):
|
448
464
|
"""Raise ServiceErrorExit base on OCI ServiceError."""
|
449
465
|
operations = operation_dict()
|
450
466
|
services = service_dict()
|
@@ -456,4 +472,5 @@ def raise_service_exit(ex: oci.exceptions.ServiceError):
|
|
456
472
|
exit_ex = ServiceErrorExit(
|
457
473
|
service=ex.target_service, operation=ex.operation_name
|
458
474
|
)
|
459
|
-
|
475
|
+
log_reason_and_print_exc(exit_ex=exit_ex)
|
476
|
+
return exit_ex
|
ads/aqua/ui.py
CHANGED
@@ -406,7 +406,7 @@ class AquaUIApp(AquaApp):
|
|
406
406
|
).data
|
407
407
|
except ServiceError as se:
|
408
408
|
raise AquaResourceAccessError(
|
409
|
-
f"Could not check limits availability for the shape {instance_shape}.",
|
409
|
+
f"Could not check limits availability for the shape {instance_shape}. Make sure you have the necessary policy to check limits availability.",
|
410
410
|
service_payload=se.args[0] if se.args else None,
|
411
411
|
)
|
412
412
|
|
ads/aqua/utils.py
CHANGED
@@ -31,8 +31,8 @@ from ads.common.utils import get_console_link, upload_to_os
|
|
31
31
|
from ads.config import (
|
32
32
|
AQUA_CONFIG_FOLDER,
|
33
33
|
AQUA_SERVICE_MODELS_BUCKET,
|
34
|
-
TENANCY_OCID,
|
35
34
|
CONDA_BUCKET_NS,
|
35
|
+
TENANCY_OCID,
|
36
36
|
)
|
37
37
|
from ads.model import DataScienceModel, ModelVersionSet
|
38
38
|
|
@@ -67,7 +67,7 @@ CONSOLE_LINK_RESOURCE_TYPE_MAPPING = dict(
|
|
67
67
|
datasciencemodelversionsetdev="model-version-sets",
|
68
68
|
)
|
69
69
|
FINE_TUNING_RUNTIME_CONTAINER = "iad.ocir.io/ociodscdev/aqua_ft_cuda121:0.3.17.20"
|
70
|
-
DEFAULT_FT_BLOCK_STORAGE_SIZE =
|
70
|
+
DEFAULT_FT_BLOCK_STORAGE_SIZE = 750
|
71
71
|
DEFAULT_FT_REPLICA = 1
|
72
72
|
DEFAULT_FT_BATCH_SIZE = 1
|
73
73
|
DEFAULT_FT_VALIDATION_SET_SIZE = 0.1
|
@@ -78,6 +78,7 @@ JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING = "ME_STANDALONE"
|
|
78
78
|
NB_SESSION_IDENTIFIER = "NB_SESSION_OCID"
|
79
79
|
LIFECYCLE_DETAILS_MISSING_JOBRUN = "The asscociated JobRun resource has been deleted."
|
80
80
|
READY_TO_DEPLOY_STATUS = "ACTIVE"
|
81
|
+
READY_TO_FINE_TUNE_STATUS = "TRUE"
|
81
82
|
|
82
83
|
|
83
84
|
class LifecycleStatus(Enum):
|
@@ -610,18 +611,18 @@ def fire_and_forget(func):
|
|
610
611
|
return wrapped
|
611
612
|
|
612
613
|
|
613
|
-
def
|
614
|
-
base_model_ocid =
|
615
|
-
base_model_name =
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
614
|
+
def extract_id_and_name_from_tag(tag: str):
|
615
|
+
base_model_ocid = UNKNOWN
|
616
|
+
base_model_name = UNKNOWN
|
617
|
+
try:
|
618
|
+
base_model_ocid, base_model_name = tag.split("#")
|
619
|
+
except:
|
620
|
+
pass
|
620
621
|
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
622
|
+
if not (is_valid_ocid(base_model_ocid) and base_model_name):
|
623
|
+
logger.debug(
|
624
|
+
f"Invalid {tag}. Specify tag in the format as <service_model_id>#<service_model_name>."
|
625
|
+
)
|
625
626
|
|
626
627
|
return base_model_ocid, base_model_name
|
627
628
|
|
ads/config.py
CHANGED
@@ -8,7 +8,6 @@ import contextlib
|
|
8
8
|
import inspect
|
9
9
|
import os
|
10
10
|
from typing import Dict, Optional
|
11
|
-
|
12
11
|
from ads.common.config import DEFAULT_CONFIG_PATH, DEFAULT_CONFIG_PROFILE, Config, Mode
|
13
12
|
|
14
13
|
OCI_ODSC_SERVICE_ENDPOINT = os.environ.get("OCI_ODSC_SERVICE_ENDPOINT")
|
@@ -49,8 +48,6 @@ RESOURCE_OCID = (
|
|
49
48
|
NO_CONTAINER = os.environ.get("NO_CONTAINER")
|
50
49
|
TMPDIR = os.environ.get("TMPDIR")
|
51
50
|
|
52
|
-
ODSC_MODEL_COMPARTMENT_OCID = os.environ.get("ODSC_MODEL_COMPARTMENT_OCID")
|
53
|
-
AQUA_MODEL_DEPLOYMENT_IMAGE = os.environ.get("AQUA_MODEL_DEPLOYMENT_IMAGE")
|
54
51
|
AQUA_MODEL_DEPLOYMENT_CONFIG = os.environ.get(
|
55
52
|
"AQUA_DEPLOYMENT_CONFIG", "deployment_config.json"
|
56
53
|
)
|
@@ -86,6 +83,17 @@ DEBUG_TELEMETRY = os.environ.get("DEBUG_TELEMETRY", None)
|
|
86
83
|
AQUA_SERVICE_NAME = "aqua"
|
87
84
|
DATA_SCIENCE_SERVICE_NAME = "data-science"
|
88
85
|
|
86
|
+
compartment_mapping = {
|
87
|
+
"idoaxnz5ar4s": "ocid1.compartment.oc1..aaaaaaaabxqyb6w4kj5y4fwwkc47auxdothlqc7jpm3zbah5aamflvp7th3q",
|
88
|
+
"id19sfcrra6z": "ocid1.compartment.oc1..aaaaaaaasdur4tm5apdm6qyapaba7apdiyv22n2mwt6zquyubqevk3uo7nha",
|
89
|
+
}
|
90
|
+
default_compartment = compartment_mapping.get(CONDA_BUCKET_NS)
|
91
|
+
ODSC_MODEL_COMPARTMENT_OCID = (
|
92
|
+
default_compartment
|
93
|
+
if default_compartment
|
94
|
+
else os.environ.get("ODSC_MODEL_COMPARTMENT_OCID")
|
95
|
+
)
|
96
|
+
|
89
97
|
|
90
98
|
def export(
|
91
99
|
uri: Optional[str] = DEFAULT_CONFIG_PATH,
|
ads/model/datascience_model.py
CHANGED
@@ -18,7 +18,11 @@ from jsonschema import ValidationError, validate
|
|
18
18
|
|
19
19
|
from ads.common import utils
|
20
20
|
from ads.common.object_storage_details import ObjectStorageDetails
|
21
|
-
from ads.config import
|
21
|
+
from ads.config import (
|
22
|
+
COMPARTMENT_OCID,
|
23
|
+
PROJECT_OCID,
|
24
|
+
AQUA_SERVICE_MODELS_BUCKET as SERVICE_MODELS_BUCKET,
|
25
|
+
)
|
22
26
|
from ads.feature_engineering.schema import Schema
|
23
27
|
from ads.jobs.builders.base import Builder
|
24
28
|
from ads.model.artifact_downloader import (
|
@@ -1316,7 +1320,11 @@ class DataScienceModel(Builder):
|
|
1316
1320
|
bucket_uri = [bucket_uri]
|
1317
1321
|
|
1318
1322
|
for uri in bucket_uri:
|
1319
|
-
|
1323
|
+
os_path = ObjectStorageDetails.from_path(uri)
|
1324
|
+
# for aqua use case, user may not have access to the service bucket.
|
1325
|
+
if os_path.bucket == SERVICE_MODELS_BUCKET:
|
1326
|
+
continue
|
1327
|
+
if not os_path.is_bucket_versioned():
|
1320
1328
|
message = f"Model artifact bucket {uri} is not versioned. Enable versioning on the bucket to proceed with model creation by reference."
|
1321
1329
|
logger.error(message)
|
1322
1330
|
raise BucketNotVersionedError(message)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: oracle_ads
|
3
|
-
Version: 2.11.
|
3
|
+
Version: 2.11.3
|
4
4
|
Summary: Oracle Accelerated Data Science SDK
|
5
5
|
Keywords: Oracle Cloud Infrastructure,OCI,Machine Learning,ML,Artificial Intelligence,AI,Data Science,Cloud,Oracle
|
6
6
|
Author: Oracle Data Science
|
@@ -1,20 +1,20 @@
|
|
1
1
|
ads/__init__.py,sha256=OxHySbHbMqPgZ8sUj33Bxy-smSiNgRjtcSUV77oBL08,3787
|
2
2
|
ads/cli.py,sha256=GVJOtlkeLYIyMEH_sqZ93aGb3j0XIcS4aiCyOVkf6So,2044
|
3
|
-
ads/config.py,sha256=
|
3
|
+
ads/config.py,sha256=KxnvnTxA-xai-4yd6-Dfh6dVHC6hAmT__7IVEVdmPXE,8253
|
4
4
|
ads/aqua/__init__.py,sha256=GvScTRi_de89ryqIsyCRQQEi6jbjOA7NojZYKYhCvqY,342
|
5
|
-
ads/aqua/base.py,sha256=
|
5
|
+
ads/aqua/base.py,sha256=xxLdZPirDALBXSkSR6_amWNhnsDTpJcooF-pNS3rDic,11137
|
6
6
|
ads/aqua/cli.py,sha256=GQUSeAOjD3aGK9VfRpj80_Pp1wZaOMC1xlVUVgUMMQ8,602
|
7
7
|
ads/aqua/constants.py,sha256=ArlrOW6xGsXReKKVLSWNqhaFsAqlqCTEJAVGR-sqbNM,1463
|
8
|
-
ads/aqua/data.py,sha256=
|
8
|
+
ads/aqua/data.py,sha256=VYP_uByT3G2vUC-gsgLSHpWNTxGFz8gD2xOKxdPzpCI,1137
|
9
9
|
ads/aqua/decorator.py,sha256=bTaOa90q4rJ18Dpiy8ETupbpru3IXvm3Di5DGiZO_N8,3152
|
10
|
-
ads/aqua/deployment.py,sha256=
|
11
|
-
ads/aqua/evaluation.py,sha256=
|
10
|
+
ads/aqua/deployment.py,sha256=gy8BRQxXvVPOk1wo7MQs6xx1laHy2a2AAmmc1Jyh9lg,23323
|
11
|
+
ads/aqua/evaluation.py,sha256=DxHywtjZHxMmeZapT0APXX9iAM4gkJD6XF-SBa2dl-E,66710
|
12
12
|
ads/aqua/exception.py,sha256=wV0XEZy9dlZfX7DQ_hLcEFW8tTEeL375qVuOQmjiRPs,2381
|
13
|
-
ads/aqua/finetune.py,sha256=
|
13
|
+
ads/aqua/finetune.py,sha256=eMSyRwQuhbALmv7tPImSOD-Brjfb0WurGxmCY3siLNg,22912
|
14
14
|
ads/aqua/job.py,sha256=QfFLRaCcaUh3qNd7ofMAvsB23mr2AAvE5JaPyBpCJpE,904
|
15
|
-
ads/aqua/model.py,sha256=
|
16
|
-
ads/aqua/ui.py,sha256=
|
17
|
-
ads/aqua/utils.py,sha256=
|
15
|
+
ads/aqua/model.py,sha256=P90OwiAm3Aq1xtDPjsNiI0lregmB_qfe5MrslpnNvkw,29016
|
16
|
+
ads/aqua/ui.py,sha256=zetpa_61X3SyMTuH_d3T3UieAp7H1MzRm6VR23PgYfc,17580
|
17
|
+
ads/aqua/utils.py,sha256=Np8-Le7M39GbVEgp3RCva2NQJAP4pbtgI7GsH4lGVvI,22218
|
18
18
|
ads/aqua/config/deployment_config_defaults.json,sha256=SoGP0J3BChwhR7L0HHpgLfSxLi0DsDfuLSGwWnrh5Zk,121
|
19
19
|
ads/aqua/config/resource_limit_names.json,sha256=Nsd_Ll5X09Wzhab7alAc2Utg8Bt2BSABK-E6JefUeA0,195
|
20
20
|
ads/aqua/dummy_data/icon.txt,sha256=wlB79r3A4mUBbrK5yVVXrNEEKpvfZiwBx2sKlj7wzA4,6326
|
@@ -31,7 +31,7 @@ ads/aqua/extension/model_handler.py,sha256=_qcFj45dgi3LUKnqjzcCoUObe1zs1S3PiEybo
|
|
31
31
|
ads/aqua/extension/ui_handler.py,sha256=ty_lCi_L-ojnfz8UPru7Lbo1ZGucROt_C3Zwbcptrm0,8021
|
32
32
|
ads/aqua/extension/utils.py,sha256=0TVxQPnJQ7Eqsrt81zRCHbVtTrSb8gnnN9BA5HF5TF4,855
|
33
33
|
ads/aqua/training/__init__.py,sha256=w2DNWltXtASQgbrHyvKo0gMs5_chZoG-CSDMI4qe7i0,202
|
34
|
-
ads/aqua/training/exceptions.py,sha256=
|
34
|
+
ads/aqua/training/exceptions.py,sha256=S5gHUeUiiPErxuwqG0TB1Yf11mhsAGNYb9o3zd1L1dI,13627
|
35
35
|
ads/automl/__init__.py,sha256=BrLB7utK9cULb_vHpH2QOUZv_NvDDF6kuR6o4boFWrU,264
|
36
36
|
ads/automl/driver.py,sha256=98KpOo2IAy4dot1vcxWYhJPEuVoa4krensXSXfy2gvQ,13159
|
37
37
|
ads/automl/provider.py,sha256=yWkgIDlVIbGvxwyjfMSlbNZD8ZgYcvGr_Qn6otVXBg8,35984
|
@@ -436,7 +436,7 @@ ads/model/artifact.py,sha256=ONKyjZKO5wmAYI-GT63z8yLm_QsmIGXcob9KrnwtF5k,20503
|
|
436
436
|
ads/model/artifact_downloader.py,sha256=-9IYkjZ0LaMWf5foz5HUGTZCEm67f-3LbDsigNlzEPg,9751
|
437
437
|
ads/model/artifact_uploader.py,sha256=jdkpmncczceOc28LyMkv4u6f845HJ1vVCoI-hLBT-RM,11305
|
438
438
|
ads/model/base_properties.py,sha256=YeVyjCync4fzqqruMc9UfZKR4PnscU31n0mf4CJv3R8,7885
|
439
|
-
ads/model/datascience_model.py,sha256=
|
439
|
+
ads/model/datascience_model.py,sha256=pu49ZpGNJKIkLf5N_hWEV0wDEZnlaVT4NQoSGRtFqvM,53426
|
440
440
|
ads/model/generic_model.py,sha256=aQco26ziO79q1BkLbRoS7CuE4Se4JYioyjRsFI3U5fU,146170
|
441
441
|
ads/model/model_file_description_schema.json,sha256=NZw_U4CvKf9oOdxCKr1eUxq8FHwjR_g0GSDk0Hz3SnE,1402
|
442
442
|
ads/model/model_introspect.py,sha256=z9pJul9dwT9w8flvRguhu0ZKoEkbm2Tvdutw_SHYTeg,9745
|
@@ -758,8 +758,8 @@ ads/type_discovery/unknown_detector.py,sha256=yZuYQReO7PUyoWZE7onhhtYaOg6088wf1y
|
|
758
758
|
ads/type_discovery/zipcode_detector.py,sha256=3AlETg_ZF4FT0u914WXvTT3F3Z6Vf51WiIt34yQMRbw,1421
|
759
759
|
ads/vault/__init__.py,sha256=x9tMdDAOdF5iDHk9u2di_K-ze5Nq068x25EWOBoWwqY,245
|
760
760
|
ads/vault/vault.py,sha256=hFBkpYE-Hfmzu1L0sQwUfYcGxpWmgG18JPndRl0NOXI,8624
|
761
|
-
oracle_ads-2.11.
|
762
|
-
oracle_ads-2.11.
|
763
|
-
oracle_ads-2.11.
|
764
|
-
oracle_ads-2.11.
|
765
|
-
oracle_ads-2.11.
|
761
|
+
oracle_ads-2.11.3.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
|
762
|
+
oracle_ads-2.11.3.dist-info/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
|
763
|
+
oracle_ads-2.11.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
764
|
+
oracle_ads-2.11.3.dist-info/METADATA,sha256=sdabg-gAdrPytrxbaHnHE5BCAVMuiaPnAtTwQjoho9Q,15876
|
765
|
+
oracle_ads-2.11.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|