Amazon SageMaker语义内容推荐系统S3存储适配v2报错求助
问题原因解释
这个报错本质是SageMaker v1和v2版本的SDK设计差异导致的隐式变量依赖失效:
- SageMaker v1版本的官方配套教程中,该代码块的前序步骤会隐式生成并全局留存
predictions(特征矩阵)、labels(标签数组)两个变量,同时v1的Notebook内核默认会长期保留跨单元格的变量上下文,因此不需要显式赋值即可直接调用。 - SageMaker v2版本做了两处破坏性调整导致该依赖失效:
- 内置算法、特征提取组件的返回值改为字典结构,不再默认将特征向量赋值给全局
predictions变量,需要用户显式从返回结果中提取 - v2的SDK拆分了命名空间,同时SageMaker Studio新内核的上下文清理逻辑更严格,前序单元格生成的临时变量如果没有显式赋值留存,会被自动回收
- 内置算法、特征提取组件的返回值改为字典结构,不再默认将特征向量赋值给全局
修正指导方向
你可以按照以下步骤依次排查修正:
- 显式定义缺失的
predictions和labels变量
回到前序特征提取/推理的代码步骤,从返回结果中手动提取特征矩阵和标签数组,示例参考如下:
# 以下为v2版本特征提取结果的通用提取逻辑,可根据你实际使用的模型调整 # 假设你之前已经调用过推理接口拿到返回结果 inference_response = feature_extractor.predict(raw_training_data) # 从返回字典中提取特征向量,赋值给predictions predictions = inference_response["predictions"] # 从你自己的训练数据集中提取标签列,转成numpy数组赋值给labels labels = train_df["label_column"].values
- 补全缺失的依赖导入
你当前运行的代码未导入os和boto3依赖,需在代码开头补充导入:
import os import boto3
- 确认全局参数已定义
提前声明BUCKET和PREFIX变量,可直接使用SageMaker默认桶:
import sagemaker sagemaker_session = sagemaker.Session() BUCKET = sagemaker_session.default_bucket() PREFIX = "semantic-content-recommendation/knn-data"
内容的提问来源于stack exchange,提问作者sarah charles
相关产品推荐
相关产品推荐

