我们可以直接使用来自 RDS 或 df 的数据作为 Sagemaker 中训练作业的数据源,而不是从 s3 或 EFS 中提取数据吗?

问题描述 投票:0回答:2

我正在使用 Sagemaker 平台进行模型开发和部署。从 RDS 表中读取数据,然后将其吐出以训练和测试 df。 为了在 Sagemaker 中创建训练作业,我发现它只需要数据源作为 s3 和 EFS。为此,我需要将训练和测试数据保留回 s3,这会在 RDS 和 s3 中重复数据存储过程。 我想直接从 RDS 传递 df 作为 tarining 作业代码中的参数。有什么方法可以在 fit 方法中传递 df

    image="581132636225.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-ols-model:latest"
    model_output_folder = "model-output"
    print(image)
    tree = sagemaker.estimator.Estimator(
        image,
        role,
        1,
        "ml.c4.2xlarge",
        output_path="s3://{}/{}".format(sess.default_bucket(), model_output_folder),
        sagemaker_session=sess,
    )

**tree.fit({'train': "s3_path_having_test_data"}, wait=True)**
python amazon-web-services data-science amazon-sagemaker
2个回答
1
投票

训练数据必须从 Amazon S3、Amazon EFS 或 Amazon FSx for Lustre 读取。
这样做的优点之一是能够在以后重现训练结果,因为输入数据会及时冻结(除非删除),这与实时数据库不同。

典型代码:

train_df.to_csv("train.csv", header=False, index=False)
boto3.Session().resource("s3").Bucket(bucket).Object(
    os.path.join(prefix, "train/train.csv")
).upload_file("train.csv")
s3_path_having_test_data = "s3://{}/{}/train".format(bucket, prefix)

tree.fit({'train': "s3_path_having_test_data"}, wait=True)

0
投票

AWS 指定了通过数据库迁移服务 (https://aws.amazon.com/dms/) 将表从数据库转储到 S3 的推荐模式,以供 Sagemaker 使用。这是数据科学原型设计的常见工作流程,并且在某些情况下可能是最佳工作流程。然而,对于推理管道等其他用例,这至少是额外的工作。

我们直接针对 RDS 运行训练作业以进行推理评分。训练、估计器、处理作业采用通用 Python 代码插入 AWS 提供的或自定义容器中。因为唯一的要求是将一些 python 代码(或 shell 包装器、C 或 Java)传递到容器,所以您的代码本身可以包含数据库的访问层。

只需确保您的代码包含数据库访问(sqlalchmey、pandas 等)并提取数据帧,只要数据库不存在安全障碍,您就不需要将表转储到 s3。

© www.soinside.com 2019 - 2024. All rights reserved.