Skip to content

Commit 6fe2187

Browse files
authored
[AQUA] Block deploying ft model as single model deployment. (#1256)
2 parents cf21ec8 + 8aafc8b commit 6fe2187

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

ads/aqua/modeldeployment/deployment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def create(
232232
model = create_deployment_details.models[0]
233233
else:
234234
try:
235-
create_deployment_details.validate_ft_model_v2(model_id=model)
235+
create_deployment_details.validate_base_model(model_id=model)
236236
except ConfigValidationError as err:
237237
raise AquaValueError(f"{err}") from err
238238

ads/aqua/modeldeployment/entities.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,35 @@ def validate_ft_model_v2(
713713
f"Invalid fine-tuned model ID '{base_model.id}': for fine tuned models like Phi4, the deployment is not supported. "
714714
)
715715

716+
def validate_base_model(self, model_id: str) -> None:
717+
"""
718+
Validates the input base model for single model deployment configuration.
719+
720+
Validation Criteria:
721+
- Fine-tuned models are not supported in single model deployment.
722+
723+
Parameters
724+
----------
725+
model_id : str
726+
The OCID of DataScienceModel instance.
727+
728+
Raises
729+
------
730+
ConfigValidationError
731+
If any of the above conditions are violated.
732+
"""
733+
base_model = DataScienceModel.from_id(model_id)
734+
if Tags.AQUA_FINE_TUNED_MODEL_TAG in base_model.freeform_tags:
735+
logger.error(
736+
"Validation failed: Fine-tuned model ID '%s' is not supported for single-model deployment.",
737+
base_model.id,
738+
)
739+
raise ConfigValidationError(
740+
f"Invalid base model ID '{base_model.id}': "
741+
"single-model deployment does not support fine-tuned models. "
742+
f"Please deploy the fine-tuned model '{base_model.id}' as a stacked model deployment instead."
743+
)
744+
716745
class Config:
717746
extra = "allow"
718747
protected_namespaces = ()

tests/unitary/with_extras/aqua/test_deployment.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,11 +1438,11 @@ def test_verify_compatibility(self):
14381438
@patch("ads.model.deployment.model_deployment.ModelDeployment.deploy")
14391439
@patch.object(AquaApp, "get_container_config")
14401440
@patch(
1441-
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_ft_model_v2"
1441+
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_base_model"
14421442
)
14431443
def test_create_deployment_for_foundation_model(
14441444
self,
1445-
mock_validate_ft_model_v2,
1445+
mock_validate_base_model,
14461446
mock_get_container_config,
14471447
mock_deploy,
14481448
mock_get_container_image,
@@ -1518,7 +1518,7 @@ def test_create_deployment_for_foundation_model(
15181518
defined_tags=defined_tags,
15191519
)
15201520

1521-
mock_validate_ft_model_v2.assert_called()
1521+
mock_validate_base_model.assert_called()
15221522
mock_create.assert_called_with(
15231523
model=TestDataset.MODEL_ID,
15241524
compartment_id=TestDataset.USER_COMPARTMENT_ID,
@@ -1544,11 +1544,11 @@ def test_create_deployment_for_foundation_model(
15441544
@patch("ads.model.deployment.model_deployment.ModelDeployment.deploy")
15451545
@patch.object(AquaApp, "get_container_config")
15461546
@patch(
1547-
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_ft_model_v2"
1547+
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_base_model"
15481548
)
15491549
def test_create_deployment_for_fine_tuned_model(
15501550
self,
1551-
mock_validate_ft_model_v2,
1551+
mock_validate_base_model,
15521552
mock_get_container_config,
15531553
mock_deploy,
15541554
mock_get_container_image,
@@ -1619,7 +1619,7 @@ def test_create_deployment_for_fine_tuned_model(
16191619
predict_log_id="ocid1.log.oc1.<region>.<OCID>",
16201620
)
16211621

1622-
mock_validate_ft_model_v2.assert_called()
1622+
mock_validate_base_model.assert_called()
16231623
mock_create.assert_called_with(
16241624
model=TestDataset.MODEL_ID,
16251625
compartment_id=TestDataset.USER_COMPARTMENT_ID,
@@ -1643,11 +1643,11 @@ def test_create_deployment_for_fine_tuned_model(
16431643
@patch("ads.model.deployment.model_deployment.ModelDeployment.deploy")
16441644
@patch.object(AquaApp, "get_container_config")
16451645
@patch(
1646-
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_ft_model_v2"
1646+
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_base_model"
16471647
)
16481648
def test_create_deployment_for_gguf_model(
16491649
self,
1650-
mock_validate_ft_model_v2,
1650+
mock_validate_base_model,
16511651
mock_get_container_config,
16521652
mock_deploy,
16531653
mock_get_container_image,
@@ -1720,7 +1720,7 @@ def test_create_deployment_for_gguf_model(
17201720
memory_in_gbs=60.0,
17211721
)
17221722

1723-
mock_validate_ft_model_v2.assert_called()
1723+
mock_validate_base_model.assert_called()
17241724
mock_create.assert_called_with(
17251725
model=TestDataset.MODEL_ID,
17261726
compartment_id=TestDataset.USER_COMPARTMENT_ID,
@@ -1748,11 +1748,11 @@ def test_create_deployment_for_gguf_model(
17481748
@patch("ads.model.deployment.model_deployment.ModelDeployment.deploy")
17491749
@patch.object(AquaApp, "get_container_config")
17501750
@patch(
1751-
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_ft_model_v2"
1751+
"ads.aqua.modeldeployment.entities.CreateModelDeploymentDetails.validate_base_model"
17521752
)
17531753
def test_create_deployment_for_tei_byoc_embedding_model(
17541754
self,
1755-
mock_validate_ft_model_v2,
1755+
mock_validate_base_model,
17561756
mock_get_container_config,
17571757
mock_deploy,
17581758
mock_get_container_image,
@@ -1828,7 +1828,7 @@ def test_create_deployment_for_tei_byoc_embedding_model(
18281828
cmd_var=[],
18291829
)
18301830

1831-
mock_validate_ft_model_v2.assert_called()
1831+
mock_validate_base_model.assert_called()
18321832
mock_create.assert_called_with(
18331833
model=TestDataset.MODEL_ID,
18341834
compartment_id=TestDataset.USER_COMPARTMENT_ID,

0 commit comments

Comments
 (0)