oracle-ads 2.13.18rc0__py3-none-any.whl → 2.13.19__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/cli.py +7 -5
- ads/aqua/common/entities.py +195 -48
- ads/aqua/common/enums.py +6 -0
- ads/aqua/common/errors.py +5 -0
- ads/aqua/common/utils.py +157 -66
- ads/aqua/constants.py +3 -0
- ads/aqua/extension/deployment_handler.py +36 -0
- ads/aqua/modeldeployment/constants.py +1 -0
- ads/aqua/modeldeployment/deployment.py +95 -14
- ads/aqua/modeldeployment/entities.py +3 -0
- ads/aqua/modeldeployment/model_group_config.py +3 -3
- ads/aqua/resources/gpu_shapes_index.json +315 -26
- ads/aqua/shaperecommend/__init__.py +6 -0
- ads/aqua/shaperecommend/constants.py +116 -0
- ads/aqua/shaperecommend/estimator.py +384 -0
- ads/aqua/shaperecommend/llm_config.py +283 -0
- ads/aqua/shaperecommend/recommend.py +493 -0
- ads/aqua/shaperecommend/shape_report.py +233 -0
- ads/aqua/version.json +1 -1
- ads/cli.py +9 -1
- ads/jobs/builders/infrastructure/dsc_job.py +1 -0
- ads/jobs/builders/infrastructure/dsc_job_runtime.py +9 -1
- ads/model/service/oci_datascience_model_deployment.py +46 -19
- ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +4 -3
- ads/pipeline/ads_pipeline.py +13 -9
- {oracle_ads-2.13.18rc0.dist-info → oracle_ads-2.13.19.dist-info}/METADATA +1 -1
- {oracle_ads-2.13.18rc0.dist-info → oracle_ads-2.13.19.dist-info}/RECORD +30 -24
- {oracle_ads-2.13.18rc0.dist-info → oracle_ads-2.13.19.dist-info}/WHEEL +0 -0
- {oracle_ads-2.13.18rc0.dist-info → oracle_ads-2.13.19.dist-info}/entry_points.txt +0 -0
- {oracle_ads-2.13.18rc0.dist-info → oracle_ads-2.13.19.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,233 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2025 Oracle and/or its affiliates.
|
3
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
|
+
|
5
|
+
from typing import List, Optional
|
6
|
+
|
7
|
+
from pydantic import BaseModel, Field
|
8
|
+
|
9
|
+
from ads.aqua.common.entities import ComputeShapeSummary
|
10
|
+
from ads.aqua.shaperecommend.constants import QUANT_MAPPING
|
11
|
+
from ads.aqua.shaperecommend.estimator import MemoryEstimator
|
12
|
+
from ads.config import COMPARTMENT_OCID
|
13
|
+
|
14
|
+
|
15
|
+
class RequestRecommend(BaseModel):
|
16
|
+
"""
|
17
|
+
A request to recommend compute shapes and parameters for a given model.
|
18
|
+
"""
|
19
|
+
|
20
|
+
model_id: str = Field(
|
21
|
+
..., description="The OCID of the model to recommend feasible compute shapes."
|
22
|
+
)
|
23
|
+
generate_table: Optional[bool] = (
|
24
|
+
Field(
|
25
|
+
True,
|
26
|
+
description="True - to generate the rich diff Table, False - generate the JSON response",
|
27
|
+
),
|
28
|
+
)
|
29
|
+
compartment_id: Optional[str] = Field(
|
30
|
+
COMPARTMENT_OCID, description="The OCID of user's compartment"
|
31
|
+
)
|
32
|
+
|
33
|
+
class Config:
|
34
|
+
protected_namespaces = ()
|
35
|
+
|
36
|
+
|
37
|
+
class DeploymentParams(BaseModel): # noqa: N801
|
38
|
+
"""
|
39
|
+
Recommended parameters for deployment and model inferencing (specific to compute shape & model).
|
40
|
+
"""
|
41
|
+
|
42
|
+
quantization: Optional[str] = Field(
|
43
|
+
None, description="Type of quantization (e.g. 4bit)."
|
44
|
+
)
|
45
|
+
max_model_len: int = Field(..., description="Maximum length of input sequence.")
|
46
|
+
params: str = Field(
|
47
|
+
..., description="Runtime parameters for deployment with vLLM, etc."
|
48
|
+
)
|
49
|
+
|
50
|
+
|
51
|
+
class ModelDetail(BaseModel):
|
52
|
+
"""
|
53
|
+
The estimated memory footprint of a model, KV cache, and its total (model + KV cache).
|
54
|
+
"""
|
55
|
+
|
56
|
+
model_size_gb: float = Field(..., description="Size of the model in GB.")
|
57
|
+
kv_cache_size_gb: float = Field(..., description="Size of KV cache in GB.")
|
58
|
+
total_model_gb: float = Field(
|
59
|
+
..., description="Total size of model and cache in GB."
|
60
|
+
)
|
61
|
+
|
62
|
+
class Config:
|
63
|
+
protected_namespaces = ()
|
64
|
+
|
65
|
+
|
66
|
+
class ModelConfig(BaseModel):
|
67
|
+
"""
|
68
|
+
The configuration for a model based on specific set of deployment parameters and memory capacity of shape.
|
69
|
+
"""
|
70
|
+
|
71
|
+
model_details: ModelDetail = Field(..., description="Details about the model.")
|
72
|
+
deployment_params: DeploymentParams = Field(
|
73
|
+
..., description="Parameters for deployment."
|
74
|
+
)
|
75
|
+
recommendation: str = Field(..., description="GPU recommendation for the model.")
|
76
|
+
|
77
|
+
class Config:
|
78
|
+
protected_namespaces = ()
|
79
|
+
|
80
|
+
@classmethod
|
81
|
+
def constuct_model_config(
|
82
|
+
cls, estimator: MemoryEstimator, allowed_gpu_memory: float
|
83
|
+
) -> "ModelConfig":
|
84
|
+
"""
|
85
|
+
Assembles a complete ModelConfig, including model details, deployment parameters (vLLM), and recommendations.
|
86
|
+
|
87
|
+
Parameters
|
88
|
+
----------
|
89
|
+
shape_quantization : set[str]
|
90
|
+
Allowed quantization methods for the compute shape
|
91
|
+
|
92
|
+
Returns
|
93
|
+
-------
|
94
|
+
ModelConfig
|
95
|
+
Contains round-tripped model size, kv cache, total, vLLM parameters, and recommendations.
|
96
|
+
|
97
|
+
Notes
|
98
|
+
-----
|
99
|
+
- Rounds all sizes to 3 decimal digits.
|
100
|
+
- Computes a recommendation string using `limiting_factor`.
|
101
|
+
"""
|
102
|
+
c = estimator.llm_config
|
103
|
+
deployment_params = DeploymentParams(
|
104
|
+
quantization=c.quantization or c.in_flight_quantization or c.weight_dtype,
|
105
|
+
max_model_len=getattr(estimator, "seq_len", None),
|
106
|
+
params=estimator.construct_deployment_params(),
|
107
|
+
)
|
108
|
+
model_detail = ModelDetail(
|
109
|
+
model_size_gb=round(getattr(estimator, "model_memory", 0.0), 2),
|
110
|
+
kv_cache_size_gb=round(getattr(estimator, "kv_cache_memory", 0.0), 2),
|
111
|
+
total_model_gb=round(getattr(estimator, "total_memory", 0.0), 2),
|
112
|
+
)
|
113
|
+
return ModelConfig(
|
114
|
+
model_details=model_detail,
|
115
|
+
deployment_params=deployment_params,
|
116
|
+
recommendation=estimator.limiting_factor(allowed_gpu_memory),
|
117
|
+
)
|
118
|
+
|
119
|
+
|
120
|
+
class ShapeReport(BaseModel):
|
121
|
+
"""
|
122
|
+
The feasible deployment configurations for the model per shape.
|
123
|
+
"""
|
124
|
+
|
125
|
+
shape_details: "ComputeShapeSummary" = Field(
|
126
|
+
..., description="Details about the compute shape (ex. VM.GPU.A10.2)."
|
127
|
+
)
|
128
|
+
configurations: List["ModelConfig"] = Field(
|
129
|
+
default_factory=list, description="List of model configurations."
|
130
|
+
)
|
131
|
+
|
132
|
+
def is_dominated(self, others: List["ShapeReport"]) -> bool:
|
133
|
+
"""
|
134
|
+
Determines whether this shape is dominated by any other shape in a Pareto sense.
|
135
|
+
|
136
|
+
Parameters
|
137
|
+
----------
|
138
|
+
others : list of ShapeReport
|
139
|
+
List of other shape/deployment configurations to compare against.
|
140
|
+
|
141
|
+
Returns
|
142
|
+
-------
|
143
|
+
bool
|
144
|
+
True if this shape is dominated by at least one other, False otherwise.
|
145
|
+
|
146
|
+
Notes
|
147
|
+
-----
|
148
|
+
A shape is dominated if there exists another configuration that is
|
149
|
+
at least as good in all criteria and strictly better in at least one.
|
150
|
+
Criteria:
|
151
|
+
- Cost (to be minimized)
|
152
|
+
- Performance, quantization level, max sequence length (to be maximized)
|
153
|
+
"""
|
154
|
+
try:
|
155
|
+
cand_cost = self.shape_details.gpu_specs.ranking.cost
|
156
|
+
cand_perf = self.shape_details.gpu_specs.ranking.performance
|
157
|
+
cand_quant = QUANT_MAPPING.get(
|
158
|
+
self.configurations[0].deployment_params.quantization, 0
|
159
|
+
)
|
160
|
+
cand_maxlen = self.configurations[0].deployment_params.max_model_len
|
161
|
+
|
162
|
+
for other in others:
|
163
|
+
other_cost = other.shape_details.gpu_specs.ranking.cost
|
164
|
+
other_perf = other.shape_details.gpu_specs.ranking.performance
|
165
|
+
other_quant = QUANT_MAPPING.get(
|
166
|
+
other.configurations[0].deployment_params.quantization, 0
|
167
|
+
)
|
168
|
+
other_maxlen = other.configurations[0].deployment_params.max_model_len
|
169
|
+
if (
|
170
|
+
other_cost <= cand_cost
|
171
|
+
and other_perf >= cand_perf
|
172
|
+
and other_quant >= cand_quant
|
173
|
+
and other_maxlen >= cand_maxlen
|
174
|
+
and (
|
175
|
+
other_cost < cand_cost
|
176
|
+
or other_perf > cand_perf
|
177
|
+
or other_quant > cand_quant
|
178
|
+
or other_maxlen > cand_maxlen
|
179
|
+
)
|
180
|
+
):
|
181
|
+
return True
|
182
|
+
return False
|
183
|
+
except AttributeError:
|
184
|
+
return False
|
185
|
+
|
186
|
+
@classmethod
|
187
|
+
def pareto_front(cls, shapes: List["ShapeReport"]) -> List["ShapeReport"]:
|
188
|
+
"""
|
189
|
+
Filters a list of shapes/configurations to those on the Pareto frontier.
|
190
|
+
|
191
|
+
Parameters
|
192
|
+
----------
|
193
|
+
shapes : list of ShapeReport
|
194
|
+
List of candidate shape/configuration reports to evaluate.
|
195
|
+
|
196
|
+
Returns
|
197
|
+
-------
|
198
|
+
list of ShapeReport
|
199
|
+
Subset of input shapes that are not dominated by any other (the Pareto front).
|
200
|
+
|
201
|
+
Notes
|
202
|
+
-----
|
203
|
+
The returned set contains non-dominated deployments for maximizing
|
204
|
+
performance, quantization, and model length, while minimizing cost.
|
205
|
+
"""
|
206
|
+
return [
|
207
|
+
shape
|
208
|
+
for shape in shapes
|
209
|
+
if not shape.is_dominated([s for s in shapes if s != shape])
|
210
|
+
]
|
211
|
+
|
212
|
+
|
213
|
+
class ShapeRecommendationReport(BaseModel):
|
214
|
+
"""
|
215
|
+
Full report of shape fit recommendations and troubleshooting, if applicable.
|
216
|
+
|
217
|
+
Attributes:
|
218
|
+
recommendations (List[DeploymentShapeSummary]): Recommended deployment shapes
|
219
|
+
for each tested batch size and max sequence length combination.
|
220
|
+
troubleshoot (Optional[TroubleshootShapeSummary]): Troubleshooting information
|
221
|
+
if no valid deployment shapes are available.
|
222
|
+
"""
|
223
|
+
|
224
|
+
display_name: Optional[str] = Field(
|
225
|
+
"", description="Name of the model used for recommendations."
|
226
|
+
)
|
227
|
+
recommendations: List[ShapeReport] = Field(
|
228
|
+
default_factory=list, description="List of shape fit recommendations."
|
229
|
+
)
|
230
|
+
troubleshoot: Optional[str] = Field(
|
231
|
+
None,
|
232
|
+
description="Details for troubleshooting if no shapes fit the current model.",
|
233
|
+
)
|
ads/aqua/version.json
CHANGED
ads/cli.py
CHANGED
@@ -7,6 +7,8 @@ import logging
|
|
7
7
|
import sys
|
8
8
|
import traceback
|
9
9
|
import uuid
|
10
|
+
from rich.console import Console
|
11
|
+
from rich.table import Table
|
10
12
|
|
11
13
|
import fire
|
12
14
|
from pydantic import BaseModel
|
@@ -92,6 +94,12 @@ def serialize(data):
|
|
92
94
|
print(str(item))
|
93
95
|
elif isinstance(data, BaseModel):
|
94
96
|
print(json.dumps(data.dict(), indent=4))
|
97
|
+
elif isinstance(data, Table):
|
98
|
+
console = Console()
|
99
|
+
console.print(data)
|
100
|
+
return
|
101
|
+
elif data is None:
|
102
|
+
return
|
95
103
|
else:
|
96
104
|
print(str(data))
|
97
105
|
|
@@ -131,7 +139,7 @@ def exit_program(ex: Exception, logger: "logging.Logger") -> None:
|
|
131
139
|
|
132
140
|
request_id = str(uuid.uuid4())
|
133
141
|
logger.debug(f"Error Request ID: {request_id}\nError: {traceback.format_exc()}")
|
134
|
-
logger.error(f"Error Request ID: {request_id}\
|
142
|
+
logger.error(f"Error Request ID: {request_id}\nError: {str(ex)}")
|
135
143
|
|
136
144
|
exit_code = getattr(ex, "exit_code", 1)
|
137
145
|
logger.error(f"Exit code: {exit_code}")
|
@@ -365,6 +365,11 @@ class RuntimeHandler:
|
|
365
365
|
dsc_job,
|
366
366
|
"job_node_configuration_details.job_node_group_configuration_details_list",
|
367
367
|
)
|
368
|
+
if node_groups is None:
|
369
|
+
node_groups = get_value(
|
370
|
+
dsc_job,
|
371
|
+
"job_node_configuration_details.jobNodeGroupConfigurationDetailsList",
|
372
|
+
)
|
368
373
|
if node_groups and len(node_groups) == 1:
|
369
374
|
return node_groups[0]
|
370
375
|
return None
|
@@ -373,6 +378,7 @@ class RuntimeHandler:
|
|
373
378
|
node_group = self._get_node_group(dsc_job)
|
374
379
|
if node_group:
|
375
380
|
replica = get_value(node_group, "replicas")
|
381
|
+
envs.pop(self.CONST_NODE_COUNT, None)
|
376
382
|
elif not envs:
|
377
383
|
replica = None
|
378
384
|
elif self.CONST_WORKER_COUNT in envs:
|
@@ -399,7 +405,9 @@ class RuntimeHandler:
|
|
399
405
|
env_attr = "job_configuration_details.environment_variables"
|
400
406
|
node_group = self._get_node_group(dsc_job)
|
401
407
|
if node_group:
|
402
|
-
envs = get_value(node_group, env_attr)
|
408
|
+
envs = get_value(node_group, env_attr) or get_value(
|
409
|
+
node_group, "jobConfigurationDetails.environment_variables"
|
410
|
+
)
|
403
411
|
else:
|
404
412
|
envs = get_value(dsc_job, env_attr)
|
405
413
|
if envs:
|
@@ -1,23 +1,24 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8; -*-
|
3
2
|
|
4
|
-
# Copyright (c) 2024 Oracle and/or its affiliates.
|
3
|
+
# Copyright (c) 2024, 2025 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
5
|
|
7
|
-
from functools import wraps
|
8
6
|
import logging
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from ads.common.work_request import DataScienceWorkRequest
|
12
|
-
from ads.config import PROJECT_OCID
|
13
|
-
from ads.model.deployment.common.utils import OCIClientManager, State
|
14
|
-
import oci
|
7
|
+
from functools import wraps
|
8
|
+
from typing import Callable, List, Optional
|
15
9
|
|
10
|
+
import oci
|
16
11
|
from oci.data_science.models import (
|
17
12
|
CreateModelDeploymentDetails,
|
13
|
+
ModelDeploymentShapeSummary,
|
18
14
|
UpdateModelDeploymentDetails,
|
19
15
|
)
|
20
16
|
|
17
|
+
from ads.common.oci_datascience import OCIDataScienceMixin
|
18
|
+
from ads.common.work_request import DataScienceWorkRequest
|
19
|
+
from ads.config import COMPARTMENT_OCID, PROJECT_OCID
|
20
|
+
from ads.model.deployment.common.utils import OCIClientManager, State
|
21
|
+
|
21
22
|
DEFAULT_WAIT_TIME = 1200
|
22
23
|
DEFAULT_POLL_INTERVAL = 10
|
23
24
|
ALLOWED_STATUS = [
|
@@ -185,14 +186,13 @@ class OCIDataScienceModelDeployment(
|
|
185
186
|
self.id,
|
186
187
|
)
|
187
188
|
|
188
|
-
|
189
189
|
self.workflow_req_id = response.headers.get("opc-work-request-id", None)
|
190
190
|
if wait_for_completion:
|
191
191
|
try:
|
192
192
|
DataScienceWorkRequest(self.workflow_req_id).wait_work_request(
|
193
193
|
progress_bar_description="Activating model deployment",
|
194
|
-
max_wait_time=max_wait_time,
|
195
|
-
poll_interval=poll_interval
|
194
|
+
max_wait_time=max_wait_time,
|
195
|
+
poll_interval=poll_interval,
|
196
196
|
)
|
197
197
|
except Exception as e:
|
198
198
|
logger.error(
|
@@ -239,8 +239,8 @@ class OCIDataScienceModelDeployment(
|
|
239
239
|
try:
|
240
240
|
DataScienceWorkRequest(self.workflow_req_id).wait_work_request(
|
241
241
|
progress_bar_description="Creating model deployment",
|
242
|
-
max_wait_time=max_wait_time,
|
243
|
-
poll_interval=poll_interval
|
242
|
+
max_wait_time=max_wait_time,
|
243
|
+
poll_interval=poll_interval,
|
244
244
|
)
|
245
245
|
except Exception as e:
|
246
246
|
logger.error("Error while trying to create model deployment: " + str(e))
|
@@ -290,8 +290,8 @@ class OCIDataScienceModelDeployment(
|
|
290
290
|
try:
|
291
291
|
DataScienceWorkRequest(self.workflow_req_id).wait_work_request(
|
292
292
|
progress_bar_description="Deactivating model deployment",
|
293
|
-
max_wait_time=max_wait_time,
|
294
|
-
poll_interval=poll_interval
|
293
|
+
max_wait_time=max_wait_time,
|
294
|
+
poll_interval=poll_interval,
|
295
295
|
)
|
296
296
|
except Exception as e:
|
297
297
|
logger.error(
|
@@ -351,14 +351,14 @@ class OCIDataScienceModelDeployment(
|
|
351
351
|
response = self.client.delete_model_deployment(
|
352
352
|
self.id,
|
353
353
|
)
|
354
|
-
|
354
|
+
|
355
355
|
self.workflow_req_id = response.headers.get("opc-work-request-id", None)
|
356
356
|
if wait_for_completion:
|
357
357
|
try:
|
358
358
|
DataScienceWorkRequest(self.workflow_req_id).wait_work_request(
|
359
359
|
progress_bar_description="Deleting model deployment",
|
360
|
-
max_wait_time=max_wait_time,
|
361
|
-
poll_interval=poll_interval
|
360
|
+
max_wait_time=max_wait_time,
|
361
|
+
poll_interval=poll_interval,
|
362
362
|
)
|
363
363
|
except Exception as e:
|
364
364
|
logger.error("Error while trying to delete model deployment: " + str(e))
|
@@ -493,3 +493,30 @@ class OCIDataScienceModelDeployment(
|
|
493
493
|
An instance of `OCIDataScienceModelDeployment`.
|
494
494
|
"""
|
495
495
|
return super().from_ocid(model_deployment_id)
|
496
|
+
|
497
|
+
@classmethod
|
498
|
+
def shapes(
|
499
|
+
cls,
|
500
|
+
compartment_id: Optional[str] = None,
|
501
|
+
**kwargs,
|
502
|
+
) -> List[ModelDeploymentShapeSummary]:
|
503
|
+
"""
|
504
|
+
Retrieves all available model deployment shapes in the given compartment.
|
505
|
+
|
506
|
+
This method uses OCI's pagination utility to fetch all pages of model
|
507
|
+
deployment shape summaries available in the specified compartment.
|
508
|
+
|
509
|
+
Args:
|
510
|
+
compartment_id (Optional[str]): The OCID of the compartment. If not provided,
|
511
|
+
the default COMPARTMENT_ID extracted form env variables is used.
|
512
|
+
**kwargs: Additional keyword arguments to pass to the list_model_deployments call.
|
513
|
+
|
514
|
+
Returns:
|
515
|
+
List[ModelDeploymentShapeSummary]: A list of all model deployment shape summaries.
|
516
|
+
"""
|
517
|
+
client = cls().client
|
518
|
+
compartment_id = compartment_id or COMPARTMENT_OCID
|
519
|
+
|
520
|
+
return oci.pagination.list_call_get_all_results(
|
521
|
+
client.list_model_deployment_shapes, compartment_id, **kwargs
|
522
|
+
).data
|
@@ -119,8 +119,7 @@ class AdditionalData(AbstractData):
|
|
119
119
|
|
120
120
|
class TestData(AbstractData):
|
121
121
|
def __init__(self, spec, test_data):
|
122
|
-
|
123
|
-
super().__init__(spec=spec, name="test_data", data=test_data)
|
122
|
+
super().__init__(spec=spec, name="test_data", data=test_data)
|
124
123
|
self.dt_column_name = spec.datetime_column.name
|
125
124
|
self.target_name = spec.target_column
|
126
125
|
|
@@ -146,6 +145,7 @@ class ForecastDatasets:
|
|
146
145
|
self.config = config # Store the config for later use
|
147
146
|
self.historical_data: HistoricalData = None
|
148
147
|
self.additional_data: AdditionalData = None
|
148
|
+
self.test_data: TestData = None
|
149
149
|
self._horizon = config.spec.horizon
|
150
150
|
self._datetime_column_name = config.spec.datetime_column.name
|
151
151
|
self._target_col = config.spec.target_column
|
@@ -156,7 +156,8 @@ class ForecastDatasets:
|
|
156
156
|
)
|
157
157
|
else:
|
158
158
|
self._load_data(config.spec, subset=subset)
|
159
|
-
|
159
|
+
if test_data is not None or config.spec.test_data is not None:
|
160
|
+
self.test_data = TestData(config.spec, test_data)
|
160
161
|
|
161
162
|
def _load_data(self, spec, subset=None):
|
162
163
|
"""Loads forecasting input data."""
|
ads/pipeline/ads_pipeline.py
CHANGED
@@ -1728,15 +1728,19 @@ class Pipeline(Builder):
|
|
1728
1728
|
|
1729
1729
|
def __step_infrastructure_configuration_details(self, step) -> dict:
|
1730
1730
|
step_infrastructure_configuration_details = {}
|
1731
|
-
step_infrastructure_configuration_details[
|
1732
|
-
|
1733
|
-
|
1734
|
-
step_infrastructure_configuration_details[
|
1735
|
-
|
1736
|
-
|
1737
|
-
step_infrastructure_configuration_details[
|
1738
|
-
|
1739
|
-
|
1731
|
+
step_infrastructure_configuration_details["blockStorageSizeInGBs"] = (
|
1732
|
+
step.infrastructure.block_storage_size
|
1733
|
+
)
|
1734
|
+
step_infrastructure_configuration_details["shapeName"] = (
|
1735
|
+
step.infrastructure.shape_name
|
1736
|
+
)
|
1737
|
+
step_infrastructure_configuration_details["shapeConfigDetails"] = (
|
1738
|
+
step.infrastructure.shape_config_details
|
1739
|
+
)
|
1740
|
+
if getattr(step.infrastructure, "subnet_id", ""):
|
1741
|
+
step_infrastructure_configuration_details["subnetId"] = (
|
1742
|
+
step.infrastructure.subnet_id
|
1743
|
+
)
|
1740
1744
|
return step_infrastructure_configuration_details
|
1741
1745
|
|
1742
1746
|
def __step_configuration_details(self, pipeline_details: Dict, step) -> dict:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: oracle_ads
|
3
|
-
Version: 2.13.
|
3
|
+
Version: 2.13.19
|
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,GenAI,Generative AI,Forecast,Anomaly,Document Understanding,Anomaly Detection
|
6
6
|
Author: Oracle Data Science
|
@@ -1,22 +1,22 @@
|
|
1
1
|
ads/__init__.py,sha256=OxHySbHbMqPgZ8sUj33Bxy-smSiNgRjtcSUV77oBL08,3787
|
2
|
-
ads/cli.py,sha256=
|
2
|
+
ads/cli.py,sha256=sYbD75jvDh5N6sBQe5xbf-XR3HyzAD1zLjwvOCZInSk,4493
|
3
3
|
ads/config.py,sha256=ZFZpp0SgKgB1-7yQ6MEdVdyJ2nwzixbH91sJ4_XnG8Y,8170
|
4
4
|
ads/aqua/__init__.py,sha256=7DjwtmZaX-_atIkmZu6XQKHqJUEeemJGR2TlxzMHSXs,973
|
5
5
|
ads/aqua/app.py,sha256=yOago4k1FfykAqcKuBvMgMVpxnXNXfDw3FlAaH-vd2M,20368
|
6
|
-
ads/aqua/cli.py,sha256=
|
7
|
-
ads/aqua/constants.py,sha256=
|
6
|
+
ads/aqua/cli.py,sha256=u0jubFFiMx7lIHU1kxGoFH-SvGlRlDI2izR-8_yFmYk,4019
|
7
|
+
ads/aqua/constants.py,sha256=xusabNYXJHnmwoMDj-dO0S83qbXghr7oJR3TRmiUdQQ,5242
|
8
8
|
ads/aqua/data.py,sha256=HfxLfKiNiPJecMQy0JAztUsT3IdZilHHHOrCJnjZMc4,408
|
9
9
|
ads/aqua/ui.py,sha256=PYyr46ewx9Qygcsv6BryUF6rLHU0t5YjUgKSb1uZK2Y,20971
|
10
|
-
ads/aqua/version.json,sha256=
|
10
|
+
ads/aqua/version.json,sha256=HNaTDvhSpah0PmBs__n1bq1x4CralZiPI5xoMDiaSUs,22
|
11
11
|
ads/aqua/client/__init__.py,sha256=-46EcKQjnWEXxTt85bQzXjA5xsfoBXIGm_syKFlVL1c,178
|
12
12
|
ads/aqua/client/client.py,sha256=PzbIscVclkVwvfQWyKyRZjRCcT3cXE6bdSkMaMQMomI,32721
|
13
13
|
ads/aqua/client/openai_client.py,sha256=JxSmjaeBb7jG8ARH6LdmsWGip467V0y6_mo2YwiiZz4,12921
|
14
14
|
ads/aqua/common/__init__.py,sha256=rZrmh1nho40OCeabXCNWtze-mXi-PGKetcZdxZSn3_0,204
|
15
15
|
ads/aqua/common/decorator.py,sha256=JEN6Cy4DYgQbmIR3ShCjTuBMCnilDxq7jkYMJse1rcM,4112
|
16
|
-
ads/aqua/common/entities.py,sha256=
|
17
|
-
ads/aqua/common/enums.py,sha256=
|
18
|
-
ads/aqua/common/errors.py,sha256=
|
19
|
-
ads/aqua/common/utils.py,sha256=
|
16
|
+
ads/aqua/common/entities.py,sha256=qF74hz2uac3T-4Y92_swTBmW1uimRGbx_RhTCN6M4K0,16937
|
17
|
+
ads/aqua/common/enums.py,sha256=hl52JrT8SRQLKZ3sdw12wA2u0PdpnQQW4bejmIvtIsY,4695
|
18
|
+
ads/aqua/common/errors.py,sha256=T2jf8RiXSiU6deRoynvmyVsmZj3xJfOBlNudQcdx980,3294
|
19
|
+
ads/aqua/common/utils.py,sha256=HTl-A0NCwpMOhIegNihlanxr9v0uQwad3aYqTU87x1I,47964
|
20
20
|
ads/aqua/config/__init__.py,sha256=2a_1LI4jWtJpbic5_v4EoOUTXCAH7cmsy9BW5prDHjU,179
|
21
21
|
ads/aqua/config/container_config.py,sha256=2N65TZNpqlpKJ9I4U9_v9bB_MoP4xsmEo8V4W1iZj9M,9882
|
22
22
|
ads/aqua/config/evaluation/__init__.py,sha256=2a_1LI4jWtJpbic5_v4EoOUTXCAH7cmsy9BW5prDHjU,179
|
@@ -37,7 +37,7 @@ ads/aqua/extension/aqua_ws_msg_handler.py,sha256=VDa9vQOsYKX6flsUkDEx6nl-5MFCH5R
|
|
37
37
|
ads/aqua/extension/base_handler.py,sha256=W-eBXn9XYypCZuY84e9cSKRuY0CDyuou_znV6Yn9YzU,3047
|
38
38
|
ads/aqua/extension/common_handler.py,sha256=LDcs2ELUkbUd9eS9napq06_NDMC0-1fMkX5KmlYynJc,5403
|
39
39
|
ads/aqua/extension/common_ws_msg_handler.py,sha256=PAy98ZsM8VAXcy11ahsuam3QUDdmE-Hz4F5pISVkNHY,1242
|
40
|
-
ads/aqua/extension/deployment_handler.py,sha256=
|
40
|
+
ads/aqua/extension/deployment_handler.py,sha256=HsnZUbyadj6o3aMdrQMb-xPTCaXQHya5xd2A8wocxf4,16430
|
41
41
|
ads/aqua/extension/deployment_ws_msg_handler.py,sha256=JX3ZHRtscrflSxT7ZTEEI_p_owtk3m5FZq3QXE96AGY,2013
|
42
42
|
ads/aqua/extension/errors.py,sha256=4LbzZdCoDEtOcrVI-1dgiza4oAYGof6w5LbN6HqroYk,1396
|
43
43
|
ads/aqua/extension/evaluation_handler.py,sha256=fJH73fa0xmkEiP8SxKL4A4dJgj-NoL3z_G-w_WW2zJs,4353
|
@@ -62,16 +62,22 @@ ads/aqua/model/model.py,sha256=W6QBMWHTox2miiv-RhZzVf0wUw-5el-ZByE5n0L7vpU,92229
|
|
62
62
|
ads/aqua/model/utils.py,sha256=gFJVWdQvF4GfyamL4m5u62gOidJC7UXXkQwqXCUIoUo,2016
|
63
63
|
ads/aqua/modeldeployment/__init__.py,sha256=k5fGG2b6mae-uiQyuTAHqPjlzcUyJ4NFaF-uoMnK5Uc,277
|
64
64
|
ads/aqua/modeldeployment/config_loader.py,sha256=B-jIQ_rys1aRwprIDV8LEY3OOnBoacvUcOAvsZzNM5g,32201
|
65
|
-
ads/aqua/modeldeployment/constants.py,sha256=
|
66
|
-
ads/aqua/modeldeployment/deployment.py,sha256=
|
67
|
-
ads/aqua/modeldeployment/entities.py,sha256=
|
68
|
-
ads/aqua/modeldeployment/model_group_config.py,sha256=
|
65
|
+
ads/aqua/modeldeployment/constants.py,sha256=WaD1hfbuWGg2flhRJxQkftpy6pFsEg8bCEXtm0WWP2E,357
|
66
|
+
ads/aqua/modeldeployment/deployment.py,sha256=RF0S4dQ-xaTGfLxduHYJGFh8E3qO8z_2WOAppmyu5vI,59478
|
67
|
+
ads/aqua/modeldeployment/entities.py,sha256=eisS3RCg8xauPddr2MPtq8WkGiu_yL01sOmuz7R2dGk,27566
|
68
|
+
ads/aqua/modeldeployment/model_group_config.py,sha256=tiQNsxqpHADKPTtVbTAMj8v3wN-Y6lFjPkx66yDBuBA,9271
|
69
69
|
ads/aqua/modeldeployment/utils.py,sha256=yPUNGDlyHB7JYalqsczimlkPjf4l8f_NprRORp7nBVE,212
|
70
|
-
ads/aqua/resources/gpu_shapes_index.json,sha256
|
70
|
+
ads/aqua/resources/gpu_shapes_index.json,sha256=uyLKK8FBNDv45axzILVlbWbxsfNl2A1l5LJ2pRe1aa0,7491
|
71
71
|
ads/aqua/server/__init__.py,sha256=fswoO0kX0hrp2b1owF4f-bv_OodntvvUY3FvhL6FCMk,179
|
72
72
|
ads/aqua/server/__main__.py,sha256=5dbL01nblJYTQ9Qi8A3dT7Dt7qDhxfPMlEIAYqiQ9iI,749
|
73
73
|
ads/aqua/server/app.py,sha256=IjTFYSh6teWsoxuv5BjBvfurxNReLp6rYtYpYEU61oM,1419
|
74
74
|
ads/aqua/server/aqua_spec.yml,sha256=A6OcGQYQDWq85Kt5oy18PIF0Jb3a5dw9JD6sN8yV4zE,39875
|
75
|
+
ads/aqua/shaperecommend/__init__.py,sha256=k_kfW_d02fetbby6Audyw_Vy6e2Ej1jAPMe2awPcqyM,277
|
76
|
+
ads/aqua/shaperecommend/constants.py,sha256=V0r0Lg9YhlknxoBfvPBF0IRDVKJYXzJ921beN-8p2oA,2769
|
77
|
+
ads/aqua/shaperecommend/estimator.py,sha256=jayYh6BHg19u9T547e5PsSpEuwIzHffxHcsSNJzxHWY,14444
|
78
|
+
ads/aqua/shaperecommend/llm_config.py,sha256=1PLSIgjh3Dhay85zUzazei_v_7ArIutp0xv5uTgxMHY,10278
|
79
|
+
ads/aqua/shaperecommend/recommend.py,sha256=jDtBCqGUy7fkkCypWzzrWpIvj_pkTwHFSDYQIJtBwcI,18991
|
80
|
+
ads/aqua/shaperecommend/shape_report.py,sha256=w9uKM97fPy78dkHzOI3YHlJdwT_dc3lOSJEOogfsj7o,8244
|
75
81
|
ads/aqua/training/__init__.py,sha256=w2DNWltXtASQgbrHyvKo0gMs5_chZoG-CSDMI4qe7i0,202
|
76
82
|
ads/aqua/training/exceptions.py,sha256=S5gHUeUiiPErxuwqG0TB1Yf11mhsAGNYb9o3zd1L1dI,13627
|
77
83
|
ads/aqua/verify_policies/__init__.py,sha256=Qkpvpvc57dwXeWumRwOTCd3jpGjFGrRNs4pXbukPjqc,306
|
@@ -438,8 +444,8 @@ ads/jobs/builders/base.py,sha256=o_njFwWQpGY755KbYwpYhvup7UGdcDnN06RdVtAbOkM,483
|
|
438
444
|
ads/jobs/builders/infrastructure/__init__.py,sha256=SgpGnF6ppE6LneSPWysGVdBrYMvVd-jYZD8oQfqtR34,246
|
439
445
|
ads/jobs/builders/infrastructure/base.py,sha256=cm4QXdQ-3Qk3Jz-oVzmeKqLaWW06HgSpc4Q9P3vIHFQ,4405
|
440
446
|
ads/jobs/builders/infrastructure/dataflow.py,sha256=XTuDhcz96vqskE5dFXWqzic1YcYcD5qPlKGhP4J82J0,39281
|
441
|
-
ads/jobs/builders/infrastructure/dsc_job.py,sha256=
|
442
|
-
ads/jobs/builders/infrastructure/dsc_job_runtime.py,sha256=
|
447
|
+
ads/jobs/builders/infrastructure/dsc_job.py,sha256=GWzTneX-0RKX3LNJBS_Wg_Ox4jnQVc4YPwvyNydoxiw,69273
|
448
|
+
ads/jobs/builders/infrastructure/dsc_job_runtime.py,sha256=rSexr1Le9CdVeoo6f8yIY__2Hdd0Ov2nDfFO7shfc1k,48104
|
443
449
|
ads/jobs/builders/infrastructure/utils.py,sha256=SfGvKiIUsbnMnYFxmMnRtmCDkaiJR0_CuRenP94iQyI,1623
|
444
450
|
ads/jobs/builders/runtimes/__init__.py,sha256=-aGtuFul2fJIMa7xNoOKNFaBAQeBNcZk71hf6dVSohA,204
|
445
451
|
ads/jobs/builders/runtimes/artifact.py,sha256=7RPm-7hd8zG15iCJDIBbfMr7d003Bed9_0ioM-mu5nE,12555
|
@@ -572,7 +578,7 @@ ads/model/serde/model_input.py,sha256=MB6Uf4H_UzlAUTRIRqHTW4ZiyQKw0yerGtUE-WFSw-
|
|
572
578
|
ads/model/serde/model_serializer.py,sha256=2vi4MoUHZV-V-4r1OWD5YJzwARFqIBv7-oyGeXGhrK4,43197
|
573
579
|
ads/model/service/__init__.py,sha256=xMyuwB5xsIEW9MFmvyjmF1YnRarsIjeFe2Ib-aprCG4,210
|
574
580
|
ads/model/service/oci_datascience_model.py,sha256=Dv4t_6ZnJTwnCBFpv44mv2pyVGJQVIBTaYaWdvvAGN8,38771
|
575
|
-
ads/model/service/oci_datascience_model_deployment.py,sha256=
|
581
|
+
ads/model/service/oci_datascience_model_deployment.py,sha256=CWH45_EJ7irTzoZrixSZMWGsz7VL08fFyAsHqojUrJA,19517
|
576
582
|
ads/model/service/oci_datascience_model_version_set.py,sha256=lYw9BauH4BNZk2Jdf8mRjFO3MorQDSMPAxkP-inlwiM,5690
|
577
583
|
ads/model/transformer/__init__.py,sha256=yBa9sP_49XF0GDWWG-u1Q5ry-vXfmO61oUjNp7mdN74,204
|
578
584
|
ads/model/transformer/onnx_transformer.py,sha256=dr3WldE0bPDIBmKw63FOZ4Jg-1hyfu_9Bezy65adByw,11225
|
@@ -735,7 +741,7 @@ ads/opctl/operator/lowcode/forecast/model/automlx.py,sha256=PVUslP6Qae3glD3xkgN7
|
|
735
741
|
ads/opctl/operator/lowcode/forecast/model/autots.py,sha256=UThBBGsEiC3WLSn-BPAuNWT_ZFa3bYMu52keB0vvSt8,13137
|
736
742
|
ads/opctl/operator/lowcode/forecast/model/base_model.py,sha256=X3s7qhHUbExicFq61UG3876LWAQEUiSlpTjGFnib3IY,40401
|
737
743
|
ads/opctl/operator/lowcode/forecast/model/factory.py,sha256=odJAKV1rtu1wkAgDoPy_n4viJCpxnUUzPlJvyMYUr0c,5234
|
738
|
-
ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py,sha256=
|
744
|
+
ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py,sha256=Ax4EKrLWwAxkb4_GL9FVIPrMOCwZXXyR250006IjBdU,21666
|
739
745
|
ads/opctl/operator/lowcode/forecast/model/ml_forecast.py,sha256=t5x6EBxOd7XwfT3FGdt-n9gscxaHMm3R2A4Evvxbj38,9646
|
740
746
|
ads/opctl/operator/lowcode/forecast/model/neuralprophet.py,sha256=-AS3PPd8Fqn1uaMybJwTnFbmIfUxNPDlgYjGtjy9-E8,19944
|
741
747
|
ads/opctl/operator/lowcode/forecast/model/prophet.py,sha256=U0M3M7yzy7ea-mEG1c-dELL6t1Pf_LnnnbrZB08CG_Y,17402
|
@@ -792,7 +798,7 @@ ads/opctl/templates/diagnostic_report_template.jinja2,sha256=YfcEyTTrM-i2WgmS6b1
|
|
792
798
|
ads/oracledb/__init__.py,sha256=xMyuwB5xsIEW9MFmvyjmF1YnRarsIjeFe2Ib-aprCG4,210
|
793
799
|
ads/oracledb/oracle_db.py,sha256=mb70joLXAnm_ieROFWtG0LvsPNz4URh5dpDDP73_YOo,13570
|
794
800
|
ads/pipeline/__init__.py,sha256=AAxC4BtaiTO4fj5odxTPWBToqxSKfKzQzRHW_9ozIOY,1268
|
795
|
-
ads/pipeline/ads_pipeline.py,sha256=
|
801
|
+
ads/pipeline/ads_pipeline.py,sha256=qOYr-8DHDvnQHQfO0AroP2Kecyqpj6B8wjhDnothKPY,85076
|
796
802
|
ads/pipeline/ads_pipeline_run.py,sha256=XzCb6EKk5jya4Vo5obmu-ksUVNYw8oQP_r6bT21bm50,27880
|
797
803
|
ads/pipeline/ads_pipeline_step.py,sha256=Wo0SYmin2aY2Nqm_DRMoTZ2nGUcpPLA791goic9K14A,20267
|
798
804
|
ads/pipeline/cli.py,sha256=H_Z5vRSZmdW1iFIbbjKPnHa8pp4YS55M95HP9Naqi0Y,3480
|
@@ -861,8 +867,8 @@ ads/type_discovery/unknown_detector.py,sha256=yZuYQReO7PUyoWZE7onhhtYaOg6088wf1y
|
|
861
867
|
ads/type_discovery/zipcode_detector.py,sha256=3AlETg_ZF4FT0u914WXvTT3F3Z6Vf51WiIt34yQMRbw,1421
|
862
868
|
ads/vault/__init__.py,sha256=x9tMdDAOdF5iDHk9u2di_K-ze5Nq068x25EWOBoWwqY,245
|
863
869
|
ads/vault/vault.py,sha256=hFBkpYE-Hfmzu1L0sQwUfYcGxpWmgG18JPndRl0NOXI,8624
|
864
|
-
oracle_ads-2.13.
|
865
|
-
oracle_ads-2.13.
|
866
|
-
oracle_ads-2.13.
|
867
|
-
oracle_ads-2.13.
|
868
|
-
oracle_ads-2.13.
|
870
|
+
oracle_ads-2.13.19.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
|
871
|
+
oracle_ads-2.13.19.dist-info/licenses/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
|
872
|
+
oracle_ads-2.13.19.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
873
|
+
oracle_ads-2.13.19.dist-info/METADATA,sha256=azUVd7xrB_nXSNAk_SsmBBxjIcQ9IH8wZsKCk-RKDhc,16994
|
874
|
+
oracle_ads-2.13.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|