在使用AWS SageMaker的异步推断端点和批转换时,可以使用AWS CloudWatch日志记录服务来获取推断过程中的日志信息。具体地,可以使用SageMaker Python SDK提供的predictor对象的invoke方法来启动推断过程,并在其后添加日志记录器。日志记录器将消息格式化并将其发送到CloudWatch日志组中的日志流。在此之后,您可以使用AWS CloudWatch APIs查询并检索日志消息。以下是一些Python代码示例:
import boto3
from sagemaker.predictor import Predictor
from sagemaker.serializers import JSONSerializer
# 创建 CloudWatch log client
cloudwatch_logs = boto3.client('logs', region_name='us-east-1')
# 创建 SageMaker Endpoint predictor
endpoint_name = 'my-endpoint'
predictor = Predictor(endpoint_name, serializer=JSONSerializer())
# 添加日志记录器
def log_to_cloudwatch(msg):
response = cloudwatch_logs.create_log_stream(logGroupName='/aws/sagemaker/PredictorLogs', logStreamName='MyLogStream')
sequence_token = response.get('uploadSequenceToken')
message = str(msg)
log_event = {
'timestamp': int(round(time.time() * 1000)),
'message': message
}
cloudwatch_logs.put_log_events(
logGroupName='/aws/sagemaker/PredictorLogs',
logStreamName='MyLogStream',
logEvents=[log_event],
sequenceToken=sequence_token
)
# 启动推断并添加日志记录器
input_data = {'data': [1, 3, 5, 7]}
response = predictor.predict(input_data, target_model='MyModel', target_variant='variant1', log_fn=log_to_cloudwatch)
# 从 CloudWatch 获取日志数据
log_stream = cloudwatch_logs.get_log_events(logGroupName='/aws/sagemaker/PredictorLogs', logStreamName='MyLogStream')
for event in log_stream['events']:
print(event['timestamp'], event['message'])
此代码以SageMaker Predictor对象的invoke方法启动推断,并在调用时添加了一个日志记录器。在log_to_cloudwatch函数中,会将日志消息发送到CloudWatch日志组中的MyLogStream日志流中。最后,在获取日志数据时,该代码使用AWS CloudWatch日志记录API从CloudWatch中检索了日志。