1414
1515from __future__ import absolute_import
1616import shutil
17- import tarfile
18- import subprocess
1917import json
18+ import tarfile
2019import logging
2120from typing import List
2221from pathlib import Path
2322
2423from sagemaker .utils import _tmpdir
24+ from sagemaker .s3 import S3Downloader
2525from sagemaker .djl_inference import DJLModel
2626from sagemaker .djl_inference .model import _read_existing_serving_properties
2727from sagemaker .serve .utils .local_hardware import _check_disk_space , _check_docker_disk_usage
3434
3535
3636def _has_serving_properties_file (code_dir : Path ) -> bool :
37- """Placeholder Docstring """
37+ """Check for existing serving properties in the directory """
3838 return code_dir .joinpath (_SERVING_PROPERTIES_FILE ).is_file ()
3939
4040
41- def _members (resources : object , depth : int ):
42- """Placeholder Docstring"""
43- for member in resources .getmembers ():
44- member .path = member .path .split ("/" , depth )[- 1 ]
45- yield member
41+ def _move_to_code_dir (js_model_dir : str , code_dir : Path ):
42+ """Move DJL Jumpstart resources from model to code_dir"""
43+ js_model_resources = Path (js_model_dir ).joinpath ("model" )
44+ for resource in js_model_resources .glob ("*" ):
45+ try :
46+ shutil .move (resource , code_dir )
47+ except shutil .Error as e :
48+ if "already exists" in str (e ):
49+ continue
50+
51+
52+ def _extract_js_resource (js_model_dir : str , js_id : str ):
53+ """Uncompress the jumpstart resource"""
54+ tmp_sourcedir = Path (js_model_dir ).joinpath (f"infer-prepack-{ js_id } .tar.gz" )
55+ with tarfile .open (str (tmp_sourcedir )) as resources :
56+ resources .extractall (path = js_model_dir )
4657
4758
4859def _copy_jumpstart_artifacts (model_data : str , js_id : str , code_dir : Path ):
49- """Placeholder Docstring """
60+ """Copy the associated JumpStart Resource into the code directory """
5061 logger .info ("Downloading JumpStart artifacts from S3..." )
51- with _tmpdir (directory = str (code_dir )) as js_model_dir :
52- subprocess .run (["aws" , "s3" , "cp" , model_data , js_model_dir ])
5362
54- logger .info ("Uncompressing JumpStart artifacts for faster loading..." )
55- tmp_sourcedir = Path (js_model_dir ).joinpath (f"infer-prepack-{ js_id } .tar.gz" )
56- with tarfile .open (str (tmp_sourcedir )) as resources :
57- resources .extractall (path = code_dir , members = _members (resources , 1 ))
63+ s3_downloader = S3Downloader ()
64+ invalid_model_data_format = False
65+ with _tmpdir (directory = str (code_dir )) as js_model_dir :
66+ if isinstance (model_data , str ):
67+ if model_data .endswith (".tar.gz" ):
68+ logger .info ("Uncompressing JumpStart artifacts for faster loading..." )
69+ s3_downloader .download (model_data , js_model_dir )
70+ _extract_js_resource (js_model_dir , js_id )
71+ else :
72+ logger .info ("Copying uncompressed JumpStart artifacts..." )
73+ s3_downloader .download (model_data , js_model_dir )
74+ elif (
75+ isinstance (model_data , dict )
76+ and model_data .get ("S3DataSource" )
77+ and model_data .get ("S3DataSource" ).get ("S3Uri" )
78+ ):
79+ logger .info ("Copying uncompressed JumpStart artifacts..." )
80+ s3_downloader .download (model_data .get ("S3DataSource" ).get ("S3Uri" ), js_model_dir )
81+ else :
82+ invalid_model_data_format = True
83+ if not invalid_model_data_format :
84+ _move_to_code_dir (js_model_dir , code_dir )
85+
86+ if invalid_model_data_format :
87+ raise ValueError ("JumpStart model data compression format is unsupported: %s" , model_data )
5888
5989 existing_properties = _read_existing_serving_properties (code_dir )
6090 config_json_file = code_dir .joinpath ("config.json" )
@@ -70,7 +100,7 @@ def _copy_jumpstart_artifacts(model_data: str, js_id: str, code_dir: Path):
70100def _generate_properties_file (
71101 model : DJLModel , code_dir : Path , overwrite_props_from_file : bool , manual_set_props : dict
72102):
73- """Placeholder Docstring """
103+ """Construct serving properties file taking into account of overrides or manual specs """
74104 if _has_serving_properties_file (code_dir ):
75105 existing_properties = _read_existing_serving_properties (code_dir )
76106 else :
0 commit comments