7
7
import logging
8
8
import platform
9
9
import time
10
- import json
11
10
from pathlib import Path
12
11
from sagemaker import Session , fw_utils
13
12
from sagemaker .serve .utils .exceptions import LocalModelInvocationException
16
15
from sagemaker .s3 import S3Uploader
17
16
from sagemaker .local .utils import get_docker_host
18
17
from sagemaker .serve .utils .optimize_utils import _is_s3_uri
18
+ from sagemaker .serve .app import main
19
19
20
20
MODE_DIR_BINDING = "/opt/ml/model/"
21
21
_DEFAULT_ENV_VARS = {}
@@ -28,55 +28,64 @@ class InProcessMultiModelServer:
28
28
29
29
def _start_serving (self ):
30
30
"""Initializes the start of the server"""
31
- from sagemaker .serve .app import main
32
-
33
- asyncio .create_task (main ())
31
+ background_tasks = set ()
32
+ task = asyncio .create_task (main ())
33
+ background_tasks .add (task )
34
+ task .add_done_callback (background_tasks .discard )
34
35
35
36
time .sleep (10 )
36
37
37
38
def _invoke_multi_model_server_serving (self , request : object , content_type : str , accept : str ):
38
39
"""Placeholder docstring"""
39
- try : # for Python 3
40
- from http .client import HTTPConnection
41
- except ImportError :
42
- from httplib import HTTPConnection
43
-
44
- HTTPConnection .debuglevel = 1
45
- logging .basicConfig () # you need to initialize logging, otherwise you will not see
46
- # anything from requests
47
- logging .getLogger ().setLevel (logging .DEBUG )
48
- requests_log = logging .getLogger ("urllib3" )
49
- requests_log .setLevel (logging .DEBUG )
50
- requests_log .propagate = True
51
-
52
- try :
53
- requests .get ("http://127.0.0.1:8080/" , verify = False ).json ()
54
- except Exception as ex :
55
- logger .error (ex )
56
- raise ex
57
-
58
- try :
59
- response = requests .get (
60
- "http://127.0.0.1:8080/generate" ,
61
- json = json .dumps (request ),
62
- headers = {"Content-Type" : content_type , "Accept" : accept },
63
- timeout = 600 ,
64
- ).json ()
65
-
66
- return response
67
- except requests .exceptions .ConnectionError as e :
68
- logger .debug (f"Error connecting to the server: { e } " )
69
- except requests .exceptions .HTTPError as e :
70
- logger .debug (f"HTTP error occurred: { e } " )
71
- except requests .exceptions .RequestException as e :
72
- logger .debug (f"An error occurred: { e } " )
73
- except Exception as e :
74
- raise Exception ("Unable to send request to the local container server" ) from e
40
+ background_tasks = set ()
41
+ task = asyncio .create_task (self .generate_connect ())
42
+ background_tasks .add (task )
43
+ task .add_done_callback (background_tasks .discard )
75
44
76
45
def _multi_model_server_deep_ping (self , predictor : PredictorBase ):
77
46
"""Sends a deep ping to ensure prediction"""
47
+ background_tasks = set ()
48
+ task = asyncio .create_task (self .tcp_connect ())
49
+ background_tasks .add (task )
50
+ task .add_done_callback (background_tasks .discard )
78
51
response = None
79
- return (True , response )
52
+ return True , response
53
+
54
+ async def generate_connect (self ):
55
+ """Writes the lines in bytes for server"""
56
+ reader , writer = await asyncio .open_connection ("127.0.0.1" , 9007 )
57
+ a = (
58
+ b"GET /generate HTTP/1.1\r \n Host: 127.0.0.1:9007\r \n User-Agent: "
59
+ b"python-requests/2.31.0\r \n Accept-Encoding: gzip, deflate, br\r \n Accept: */*\r \n Connection: " ,
60
+ "keep-alive\r \n Content-Length: 33\r \n Content-Type: application/json\r \n \r \n " ,
61
+ )
62
+ b = b'"\\ "Hello, I\' m a language model\\ ""'
63
+ list = [a , b ]
64
+ writer .writelines (list )
65
+ logger .debug (writer .get_extra_info ("peername" ))
66
+ logger .debug (writer .transport )
67
+
68
+ data = await reader .read ()
69
+ logger .info ("Response from server" )
70
+ logger .info (data )
71
+ writer .close ()
72
+ await writer .wait_closed ()
73
+
74
+ async def tcp_connect (self ):
75
+ """Writes the lines in bytes for server"""
76
+ reader , writer = await asyncio .open_connection ("127.0.0.1" , 9007 )
77
+ writer .write (
78
+ b"GET / HTTP/1.1\r \n Host: 127.0.0.1:9007\r \n User-Agent: python-requests/2.32.3\r \n Accept-Encoding: gzip, " ,
79
+ "deflate, br\r \n Accept: */*\r \n Connection: keep-alive\r \n \r \n " ,
80
+ )
81
+ logger .debug (writer .get_extra_info ("peername" ))
82
+ logger .debug (writer .transport )
83
+
84
+ data = await reader .read ()
85
+ logger .info ("Response from server" )
86
+ logger .info (data )
87
+ writer .close ()
88
+ await writer .wait_closed ()
80
89
81
90
82
91
class LocalMultiModelServer :
0 commit comments