You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从S3桶导入npz文件到SageMaker Notebook报错,求解决方案

问题分析与解决

错误原因

  1. 依赖版本不兼容:s3fs与aiobotocore版本不匹配,新版本aiobotocore已移除AioSession类,导致调用失败。
  2. 文件读取方式错误:你尝试用Image.open()读取.npz文件,但.npz是NumPy的压缩数组文件,并非图像文件,这步本身就会报错。

解决方案

方案1:修复依赖版本

在SageMaker Notebook中执行以下命令,安装兼容版本的依赖包:

pip install --upgrade s3fs aiobotocore
# 或指定稳定兼容版本
pip install s3fs==2023.10.0 aiobotocore==2.7.0

方案2:使用boto3读取(推荐,更稳定)

直接用AWS官方的boto3库下载并读取npz文件:

import boto3
import numpy as np

# 初始化S3客户端(SageMaker角色默认有权限访问对应S3桶)
s3 = boto3.client('s3')

# 定义桶名和文件路径
bucket = 'input_data'
file_key = 'train_npz/0.npz'

# 下载文件到临时目录(SageMaker允许/tmp路径读写)
local_path = '/tmp/0.npz'
s3.download_file(bucket, file_key, local_path)

# 读取npz文件
with np.load(local_path) as data:
    # 查看文件内的所有数组名称
    print("包含的数组:", data.files)
    # 访问具体数组,例如data['arr_0'](根据你的npz结构调整)
    sample_array = data['arr_0']
    print("数组形状:", sample_array.shape)

方案3:直接流式读取(无需下载到本地)

使用smart_open库实现流式读取,避免占用本地磁盘空间:

from smart_open import open
import numpy as np

s3_path = 's3://input_data/train_npz/0.npz'
with open(s3_path, 'rb') as f:
    data = np.load(f)
    print("包含的数组:", data.files)

注意事项

  • 确保SageMaker Notebook的IAM角色拥有访问目标S3桶的权限(s3:GetObject等权限)。
  • .npz文件需用numpy.load()读取,不要用图像处理库(如PIL)打开。

内容的提问来源于stack exchange,提问作者PScode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:06:25