如何将S3目录访问或挂载到AWS SageMaker并解决相关操作报错
解决SageMaker访问S3目录的操作步骤
1 修复aws s3 cp 404报错
首先排查执行同步命令时报404的问题,按以下步骤操作:
- 确认S3路径真实性:登录S3控制台,确认
data桶存在,且sub/dir/前缀下至少有1个文件。S3为对象存储没有原生目录结构,空的手动创建目录不会生成对应Key,会触发HeadObject 404错误。 - 修正同步命令格式,路径末尾补斜杠避免被识别为单个对象:
!aws s3 cp s3://data/sub/dir/ ./tempdata --recursive - 校验IAM权限:当前SageMaker Notebook绑定的执行角色,必须包含针对
arn:aws:s3:::data的ListBucket权限,以及针对arn:aws:s3:::data/*的GetObject权限。如果S3对象使用KMS加密,还需要额外添加对应KMS密钥的解密权限。
2 正确配置s3fs挂载S3桶
你之前查询挂载的命令输入错误,先修正操作流程:
- 第一步:安装s3fs(SageMaker Notebook实例为Ubuntu系统,优先用apt安装)
!sudo apt update && sudo apt install s3fs -y - 第二步:创建本地挂载目录
!mkdir -p ./s3_bucket_mount - 第三步:执行挂载命令,直接复用SageMaker的IAM角色权限,不需要手动配置密钥:
如果你使用AWS中国区,将url后缀改为!s3fs data ./s3_bucket_mount -o iam_role=auto -o url=https://s3.<替换为桶所在区域>.amazonaws.com -o nonempty -o allow_otheramazonaws.com.cn即可。 - 第四步:验证挂载结果,执行正确的磁盘查询命令:
输出中如果有!df -hs3fs开头的挂载条目即为成功,可通过!ls ./s3_bucket_mount/sub/dir查看目标路径下的所有文件。
3 轻量化访问方案(无需同步/挂载)
如果数据集体积较大,不需要全量下载到Notebook本地存储,可以直接通过boto3 SDK操作S3对象,性能更高:
import boto3 s3 = boto3.resource("s3") bucket = s3.Bucket("data") # 遍历目标前缀下的所有文件 for obj in bucket.objects.filter(Prefix="sub/dir/"): print(obj.key) # 按需读取文件内容示例 # file_content = obj.get()["Body"].read()
内容的提问来源于stack exchange,提问作者temp
相关产品推荐
相关产品推荐

