无法将文件从sagemaker笔记本上载到S3

时间:2019-06-28 16:03:08

标签: python amazon-web-services amazon-s3 amazon-sagemaker

我正在尝试将清理后的数据(并使用kfold拆分数据)上传到s3,以便我可以使用sagemaker使用该模型创建模型(因为sagemaker希望使用包含训练和测试数据的s3文件)。但是,每当我尝试将csv上传到s3时,它都会运行,但在s3中看不到该文件。

我尝试更改在sagemaker中访问的文件夹,或者尝试上传不同类型的文件,而这些文件都不起作用。另外,我在类似的Stack Overflow帖子中尝试了这种方法,但没有成功。

还请注意,我能够将我的csv手动上传到s3,而不是通过sagemaker自动上传。

下面的代码是我当前必须上传到s3的代码,我已直接从AWS文档复制了该代码以使用sagemaker上传文件。

import io
import csv
import boto3

#key = "{}/{}/examples".format(prefix,data_partition_name)
#url = 's3n://{}/{}'.format(bucket, key)
name = boto3.Session().resource('s3').Bucket('nc-demo-sagemaker').name
print(name)
boto3.Session().resource('s3').Bucket('nc-demo-sagemaker').upload_file('train', '/')
print('Done writing to {}'.format('sagemaker bucket'))

我希望当我运行该代码片段时,能够将训练和测试数据上传到要用于创建sagemaker模型的文件夹中。

3 个答案:

答案 0 :(得分:2)

我总是使用此代码将文件从Sagemaker笔记本实例上传到S3。这会将所有指定文件夹的内容上载到S3。或者,您可以指定要上传的单个文件。

import sagemaker


s3_path_to_data = sagemaker.Session().upload_data(bucket='my_awesome_bucket', 
                                                  path='local/path/data/train', 
                                                  key_prefix='my_crazy_project_name/data/train')

我希望这会有所帮助!

答案 1 :(得分:0)

问题可能是由于SageMaker笔记本电脑缺少适当的s3权限所致。

您的IAM用户具有一个具有权限的角色,该角色决定您是否可以通过s3控制台手动上载CSV。

SageMaker笔记本实际上具有其自己的IAM角色,这将要求您显式添加S3权限。您可以在SageMaker控制台中看到这一点,默认的IAM角色以SageMaker-XXX开头。您可以编辑此SageMaker创建的IAM角色,也可以附加现有的IAM角色,这些角色包括对s3的读/写权限。

答案 2 :(得分:0)

导入sagemaker库并使用sagemaker会话将文件上传到s3存储桶或从s3存储桶下载文件。

import sagemaker as sage
sage.session.s3_input