是否可以在不使用 s3 的情况下在 sagemaker 中进行预测
Is it possible to predict in sagemaker without using s3
我有一个要投入生产的 .pkl。我想每天查询我的 SQL 服务器并对大约 1000 行进行预测。 documentation 意味着我必须将每日数据加载到 s3 中。有没有解决的办法?它应该能够放入内存没问题。
对“is there some kind of persistent local storage in aws sagemaker model training?”的回答是“笔记本实例附带一个本地 EBS (5GB),您可以使用它来将一些数据复制到其中,运行 快速开发迭代,无需每次都从 S3 复制数据。" 5GB 可能就足够了,但我不确定您是否真的可以 运行 从笔记本中以这种方式使用。如果我设置了 VPN,我可以只使用 pyodbc 查询吗?
sagemaker 是否与 AWS Lambda 集成?结合 docker 容器将满足我的需要。
虽然您需要指定 s3 "folder" 作为输入,但此文件夹只能包含一个虚拟文件。
此外,如果您像 this example 那样带上自己的 docker 容器进行训练,您几乎可以在其中做任何事情。因此,您可以在 docker 容器内进行日常查询,因为它们可以访问互联网。
同样在此容器内,您可以访问所有其他 aws 服务。您的访问权限由您传递给训练作业的角色定义。
您可以在 Sagemaker 上创建一个端点以 host your pickled model 并通过使用 AWS Lambda 调用端点来进行预测。 S3 bucket 不是进行实时预测所必需的。批量转换是非实时推理,需要 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)
S3 数据不需要。
这是 link 到 SageMaker 文档页面:https://docs.aws.amazon.com/sagemaker/latest/dg/API_ContainerDefinition.html#SageMaker-Type-ContainerDefinition-ModelDataUrl
可以通过内联文本 blob 或数据文件(二进制、纯文本、csv、json 等)进行预测
我有一个要投入生产的 .pkl。我想每天查询我的 SQL 服务器并对大约 1000 行进行预测。 documentation 意味着我必须将每日数据加载到 s3 中。有没有解决的办法?它应该能够放入内存没问题。
对“is there some kind of persistent local storage in aws sagemaker model training?”的回答是“笔记本实例附带一个本地 EBS (5GB),您可以使用它来将一些数据复制到其中,运行 快速开发迭代,无需每次都从 S3 复制数据。" 5GB 可能就足够了,但我不确定您是否真的可以 运行 从笔记本中以这种方式使用。如果我设置了 VPN,我可以只使用 pyodbc 查询吗?
sagemaker 是否与 AWS Lambda 集成?结合 docker 容器将满足我的需要。
虽然您需要指定 s3 "folder" 作为输入,但此文件夹只能包含一个虚拟文件。 此外,如果您像 this example 那样带上自己的 docker 容器进行训练,您几乎可以在其中做任何事情。因此,您可以在 docker 容器内进行日常查询,因为它们可以访问互联网。
同样在此容器内,您可以访问所有其他 aws 服务。您的访问权限由您传递给训练作业的角色定义。
您可以在 Sagemaker 上创建一个端点以 host your pickled model 并通过使用 AWS Lambda 调用端点来进行预测。 S3 bucket 不是进行实时预测所必需的。批量转换是非实时推理,需要 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)
S3 数据不需要。
这是 link 到 SageMaker 文档页面:https://docs.aws.amazon.com/sagemaker/latest/dg/API_ContainerDefinition.html#SageMaker-Type-ContainerDefinition-ModelDataUrl
可以通过内联文本 blob 或数据文件(二进制、纯文本、csv、json 等)进行预测