Amazon web services 是否可以在sagemaker中不使用s3进行预测

Amazon web services 是否可以在sagemaker中不使用s3进行预测,amazon-web-services,amazon-s3,aws-lambda,amazon-sagemaker,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Sagemaker,我有一个.pkl,我想投入生产。我想每天查询我的SQL server,并对大约1000行进行预测。这意味着我必须将每日数据加载到s3中。有办法解决这个问题吗?它应该能够适应内存没有问题 答案是笔记本实例附带了一个本地EBS 5GB,您可以使用它将一些数据复制到其中,并运行快速开发迭代,而无需每次从S3复制数据。5GB就足够了,但我不确定你能不能用这种方式从笔记本电脑上运行。如果我设置了VPN,我可以使用pyodbc进行查询吗 sagemaker是否与AWS Lambda集成?与docker容器结

我有一个.pkl,我想投入生产。我想每天查询我的SQL server,并对大约1000行进行预测。这意味着我必须将每日数据加载到s3中。有办法解决这个问题吗?它应该能够适应内存没有问题

答案是笔记本实例附带了一个本地EBS 5GB,您可以使用它将一些数据复制到其中,并运行快速开发迭代,而无需每次从S3复制数据。5GB就足够了,但我不确定你能不能用这种方式从笔记本电脑上运行。如果我设置了VPN,我可以使用pyodbc进行查询吗


sagemaker是否与AWS Lambda集成?与docker容器结合使用可以满足我的需要。

虽然需要指定一个s3文件夹作为输入,但该文件夹只能包含一个虚拟文件。 此外,如果你带着自己的docker容器进行训练,比如在,你几乎可以在里面做任何事情。因此,您可以在docker容器中进行日常查询,因为他们可以访问internet


在该容器中,您还可以访问所有其他aws服务。您的访问权限由您传递给培训工作的角色定义。

您可以在Sagemaker上创建端点,并使用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数据不是必需的

以下是指向SageMaker文档页面的链接:


可以通过内嵌文本blob或数据文件二进制、纯文本、csv、json等进行预测。

这是一个有趣的解决方案。若我要走那个条路线,我需要API端点始终处于开启状态。如果我只想每天跑步20分钟,这似乎是浪费。我希望加速只是为了做出预测,您可以考虑通过另一个Lambda或CloudFormation来安排端点供应,当它成功完成时,运行预测并清理端点。