我有一个要生产的.pkl文件。我想对我的SQL Server进行每日查询,并对约1000行进行预测。 documentation表示我必须将每日数据加载到s3中。有没有解决的办法?它应该能够装入内存没问题。
“ is there some kind of persistent local storage in aws sagemaker model training?”的答案表示“ 笔记本实例随附本地EBS(5GB),您可以使用该EBS将一些数据复制到其中,并运行快速开发迭代而无需复制每次从S3读取数据。” 5 GB可能就足够了,但我不确定您是否真的可以通过这种方式在笔记本电脑上运行。如果我设置了VPN,是否可以使用pyodbc进行查询?
sagemaker是否与AWS Lambda集成?结合使用Docker容器可以满足我的需求。
答案 0 :(得分:3)
您可以在Sagemaker上为host your pickled model创建一个端点,并通过使用AWS Lambda调用该端点进行预测。 S3存储桶对于进行实时预测不是必需的。批量转换是非实时推断,需要S3存储桶。要进行多达1000行的预测,您可以在lambda函数中使用实时推断。 lambda代码大致如下:
import sys
import logging
import rds_config
import pymysql
import boto3
import json
#rds settings
rds_host = "rds-instance-endpoint"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
# sagemaker client
sagemaker = boto3.client('sagemaker-runtime', region_name ='<your region>' )
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
"""
This function fetches content from mysql RDS instance
"""
item_count = 0
with conn.cursor() as cur:
cur.execute("select * from table_name")
for row in cur:
# format rows to match with prediction payload
item_count += 1
new_row = ','.join(row)
response = sagemaker.invoke_endpoint(
EndpointName='ServiceEndpoint',
Body=new_row,
ContentType='text/csv'
)
prediction = json.loads(response['Body'].read().decode())
print(result)
# store predictions somewhere if needed
return "Made predictioncs on %d items from RDS MySQL table" %(item_count)
答案 1 :(得分:2)
不需要S3数据。
以下是SageMaker文档页面的链接:https://docs.aws.amazon.com/sagemaker/latest/dg/API_ContainerDefinition.html#SageMaker-Type-ContainerDefinition-ModelDataUrl
可以通过嵌入式文本Blob或数据文件(二进制,纯文本,csv,json等)进行预测
答案 2 :(得分:1)
虽然您需要指定s3“文件夹”作为输入,但是此文件夹只能包含一个虚拟文件。 另外,如果像this example中那样带上自己的Docker容器进行培训,则可以在其中进行几乎所有操作。因此,您可以在docker容器中进行每日查询,因为他们可以访问互联网。
您还可以在此容器内访问所有其他aws服务。您的访问权限是由您传给培训工作的角色定义的。