我正在使用 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)**
训练数据必须从 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)
AWS 指定了通过数据库迁移服务 (https://aws.amazon.com/dms/) 将表从数据库转储到 S3 的推荐模式,以供 Sagemaker 使用。这是数据科学原型设计的常见工作流程,并且在某些情况下可能是最佳工作流程。然而,对于推理管道等其他用例,这至少是额外的工作。
我们直接针对 RDS 运行训练作业以进行推理评分。训练、估计器、处理作业采用通用 Python 代码插入 AWS 提供的或自定义容器中。因为唯一的要求是将一些 python 代码(或 shell 包装器、C 或 Java)传递到容器,所以您的代码本身可以包含数据库的访问层。
只需确保您的代码包含数据库访问(sqlalchmey、pandas 等)并提取数据帧,只要数据库不存在安全障碍,您就不需要将表转储到 s3。