一般来说,这种错误是由于模型部署所使用的主容器没有正确启动或者运行异常所导致的。为了解决这个问题,我们可以首先检查容器的日志信息,找出具体的错误信息。例如,在python中创建一个SageMaker的端点:
import sagemaker
# 创建SageMaker客户端
session = sagemaker.Session()
sm_client = session.boto_session.client('sagemaker')
# 指定模型的ARN
model_arn = 'arn:aws:sagemaker:us-east-1:123456789012:model/my-model'
# 创建端点配置
endpoint_config_name = 'my-endpoint-config'
endpoint_config = {
'EndpointConfigName': endpoint_config_name,
'ProductionVariants': [{
'VariantName': 'AllTraffic',
'ModelName': model_arn,
'InitialInstanceCount': 1,
'InstanceType': 'ml.t2.medium'
}]
}
sm_client.create_endpoint_config(**endpoint_config)
# 创建端点
endpoint_name = 'my-endpoint'
endpoint = {
'EndpointName': endpoint_name,
'EndpointConfigName': endpoint_config_name
}
sm_client.create_endpoint(**endpoint)
# 等待端点创建完成
waiter = sm_client.get_waiter('endpoint_in_service')
waiter.wait(EndpointName=endpoint_name)
# 发送测试请求
from sagemaker.predictor import Predictor
predictor = Predictor(endpoint_name=endpoint_name)
predictor.predict('{"key": "value"}')
如果上述代码中,容器启动失败,我们就可以通过以下代码来获取容器的日志信息:
import re
import base64
logs = sm_client.describe_endpoint(EndpointName=endpoint_name)['EndpointConfig']['ProductionVariants'][0]['DeployedImages'][0]['Logs']
logs = base64.b64decode(logs).decode('utf-8')
error_messages = re.findall('.*(ERROR|Error|error):.*', logs)
for error_message in error_messages: