1616
1717import pytest
1818
19+ from sagemaker .model import Model
1920from sagemaker .sklearn .model import SKLearnModel , SKLearnPredictor
2021from sagemaker .utils import unique_name_from_base
2122from tests .integ import DATA_DIR
@@ -154,6 +155,120 @@ def advanced_right_sized_model(sagemaker_session, cpu_instance_type):
154155 )
155156
156157
158+ @pytest .fixture (scope = "module" )
159+ def default_right_sized_unregistered_model (sagemaker_session , cpu_instance_type ):
160+ with timeout (minutes = 45 ):
161+ try :
162+ ir_job_name = unique_name_from_base ("test-ir-right-size-job-name" )
163+ model_data = sagemaker_session .upload_data (path = IR_SKLEARN_MODEL )
164+ payload_data = sagemaker_session .upload_data (path = IR_SKLEARN_PAYLOAD )
165+
166+ iam_client = sagemaker_session .boto_session .client ("iam" )
167+ role_arn = iam_client .get_role (RoleName = "SageMakerRole" )["Role" ]["Arn" ]
168+
169+ sklearn_model = SKLearnModel (
170+ model_data = model_data ,
171+ role = role_arn ,
172+ entry_point = IR_SKLEARN_ENTRY_POINT ,
173+ framework_version = IR_SKLEARN_FRAMEWORK_VERSION ,
174+ )
175+
176+ return (
177+ sklearn_model .right_size (
178+ job_name = ir_job_name ,
179+ sample_payload_url = payload_data ,
180+ supported_content_types = IR_SKLEARN_CONTENT_TYPE ,
181+ supported_instance_types = [cpu_instance_type ],
182+ framework = IR_SKLEARN_FRAMEWORK ,
183+ log_level = "Quiet" ,
184+ ),
185+ ir_job_name ,
186+ )
187+ except Exception :
188+ sagemaker_session .delete_model (ModelName = sklearn_model .name )
189+
190+
191+ @pytest .fixture (scope = "module" )
192+ def advanced_right_sized_unregistered_model (sagemaker_session , cpu_instance_type ):
193+ with timeout (minutes = 45 ):
194+ try :
195+ model_data = sagemaker_session .upload_data (path = IR_SKLEARN_MODEL )
196+ payload_data = sagemaker_session .upload_data (path = IR_SKLEARN_PAYLOAD )
197+
198+ iam_client = sagemaker_session .boto_session .client ("iam" )
199+ role_arn = iam_client .get_role (RoleName = "SageMakerRole" )["Role" ]["Arn" ]
200+
201+ sklearn_model = SKLearnModel (
202+ model_data = model_data ,
203+ role = role_arn ,
204+ entry_point = IR_SKLEARN_ENTRY_POINT ,
205+ framework_version = IR_SKLEARN_FRAMEWORK_VERSION ,
206+ )
207+
208+ hyperparameter_ranges = [
209+ {
210+ "instance_types" : CategoricalParameter ([cpu_instance_type ]),
211+ "TEST_PARAM" : CategoricalParameter (
212+ ["TEST_PARAM_VALUE_1" , "TEST_PARAM_VALUE_2" ]
213+ ),
214+ }
215+ ]
216+
217+ phases = [
218+ Phase (duration_in_seconds = 300 , initial_number_of_users = 2 , spawn_rate = 2 ),
219+ Phase (duration_in_seconds = 300 , initial_number_of_users = 14 , spawn_rate = 2 ),
220+ ]
221+
222+ model_latency_thresholds = [
223+ ModelLatencyThreshold (percentile = "P95" , value_in_milliseconds = 100 )
224+ ]
225+
226+ return sklearn_model .right_size (
227+ sample_payload_url = payload_data ,
228+ supported_content_types = IR_SKLEARN_CONTENT_TYPE ,
229+ framework = IR_SKLEARN_FRAMEWORK ,
230+ job_duration_in_seconds = 3600 ,
231+ hyperparameter_ranges = hyperparameter_ranges ,
232+ phases = phases ,
233+ model_latency_thresholds = model_latency_thresholds ,
234+ max_invocations = 100 ,
235+ max_tests = 5 ,
236+ max_parallel_tests = 5 ,
237+ log_level = "Quiet" ,
238+ )
239+
240+ except Exception :
241+ sagemaker_session .delete_model (ModelName = sklearn_model .name )
242+
243+
244+ @pytest .fixture (scope = "module" )
245+ def default_right_sized_unregistered_base_model (sagemaker_session , cpu_instance_type ):
246+ with timeout (minutes = 45 ):
247+ try :
248+ ir_job_name = unique_name_from_base ("test-ir-right-size-job-name" )
249+ model_data = sagemaker_session .upload_data (path = IR_SKLEARN_MODEL )
250+ payload_data = sagemaker_session .upload_data (path = IR_SKLEARN_PAYLOAD )
251+
252+ iam_client = sagemaker_session .boto_session .client ("iam" )
253+ role_arn = iam_client .get_role (RoleName = "SageMakerRole" )["Role" ]["Arn" ]
254+
255+ model = Model (model_data = model_data , role = role_arn , entry_point = IR_SKLEARN_ENTRY_POINT )
256+
257+ return (
258+ model .right_size (
259+ job_name = ir_job_name ,
260+ sample_payload_url = payload_data ,
261+ supported_content_types = IR_SKLEARN_CONTENT_TYPE ,
262+ supported_instance_types = [cpu_instance_type ],
263+ framework = IR_SKLEARN_FRAMEWORK ,
264+ log_level = "Quiet" ,
265+ ),
266+ ir_job_name ,
267+ )
268+ except Exception :
269+ sagemaker_session .delete_model (ModelName = model .name )
270+
271+
157272@pytest .mark .slow_test
158273def test_default_right_size_and_deploy_registered_model_sklearn (
159274 default_right_sized_model , sagemaker_session
@@ -176,6 +291,72 @@ def test_default_right_size_and_deploy_registered_model_sklearn(
176291 predictor .delete_endpoint ()
177292
178293
294+ @pytest .mark .slow_test
295+ def test_default_right_size_and_deploy_unregistered_model_sklearn (
296+ default_right_sized_unregistered_model , sagemaker_session
297+ ):
298+ endpoint_name = unique_name_from_base ("test-ir-right-size-default-unregistered-sklearn" )
299+
300+ right_size_model , ir_job_name = default_right_sized_unregistered_model
301+ with timeout (minutes = 45 ):
302+ try :
303+ right_size_model .predictor_cls = SKLearnPredictor
304+ predictor = right_size_model .deploy (endpoint_name = endpoint_name )
305+
306+ payload = pd .read_csv (IR_SKLEARN_DATA , header = None )
307+
308+ inference = predictor .predict (payload )
309+ assert inference is not None
310+ assert 26 == len (inference )
311+ finally :
312+ predictor .delete_model ()
313+ predictor .delete_endpoint ()
314+
315+
316+ @pytest .mark .slow_test
317+ def test_default_right_size_and_deploy_unregistered_base_model (
318+ default_right_sized_unregistered_base_model , sagemaker_session
319+ ):
320+ endpoint_name = unique_name_from_base ("test-ir-right-size-default-unregistered-base" )
321+
322+ right_size_model , ir_job_name = default_right_sized_unregistered_base_model
323+ with timeout (minutes = 45 ):
324+ try :
325+ right_size_model .predictor_cls = SKLearnPredictor
326+ predictor = right_size_model .deploy (endpoint_name = endpoint_name )
327+
328+ payload = pd .read_csv (IR_SKLEARN_DATA , header = None )
329+
330+ inference = predictor .predict (payload )
331+ assert inference is not None
332+ assert 26 == len (inference )
333+ finally :
334+ predictor .delete_model ()
335+ predictor .delete_endpoint ()
336+
337+
338+ @pytest .mark .slow_test
339+ def test_advanced_right_size_and_deploy_unregistered_model_sklearn (
340+ advanced_right_sized_unregistered_model , sagemaker_session
341+ ):
342+ endpoint_name = unique_name_from_base ("test-ir-right-size-advanced-sklearn" )
343+
344+ right_size_model = advanced_right_sized_unregistered_model
345+ with timeout (minutes = 45 ):
346+ try :
347+ right_size_model .predictor_cls = SKLearnPredictor
348+ predictor = right_size_model .deploy (endpoint_name = endpoint_name )
349+
350+ payload = pd .read_csv (IR_SKLEARN_DATA , header = None )
351+
352+ inference = predictor .predict (payload )
353+ assert inference is not None
354+ assert 26 == len (inference )
355+ finally :
356+ predictor .delete_model ()
357+ predictor .delete_endpoint ()
358+
359+
179360@pytest .mark .slow_test
180361def test_advanced_right_size_and_deploy_registered_model_sklearn (
181362 advanced_right_sized_model , sagemaker_session
0 commit comments