是否可以在不使用s3的情况下在sagemaker中进行预测

时间:2018-07-17 23:46:56

标签: amazon-web-services amazon-s3 aws-lambda amazon-sagemaker

我有一个要生产的.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容器可以满足我的需求。

3 个答案:

答案 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服务。您的访问权限是由您传给培训工作的角色定义的。