如何从SageMaker模型端点获取已部署TF模型的元数据属性
结论
可以直接访问,核心实现思路是在SageMaker端点的推理脚本的模型加载阶段读取所需元数据缓存,后续根据业务需求返回即可。
实现步骤
- 第一步:修改推理入口脚本,在模型加载函数
model_fn中读取并缓存元数据
首先确保你部署模型时用到的推理脚本(通常为inference.py)中已导入h5py、numpy依赖,同时将这两个依赖添加到同目录的requirements.txt中,避免容器运行时缺少依赖报错。
参考代码如下:import h5py import numpy as np import tensorflow as tf # 定义全局变量存储元数据 labels = None img_norm_vec = None def model_fn(model_dir): global labels, img_norm_vec # 加载正常推理用的TF模型 model = tf.keras.models.load_model(f"{model_dir}/model.h5") # 读取h5文件中的元数据 # 此处路径请匹配你上传到S3的模型包内的h5文件实际路径 h5_path = f"{model_dir}/model.h5" with h5py.File(h5_path, 'r') as f: labels = [n.decode("ascii", "ignore") for n in f['labels']] img_norm_vec = np.array(f['norm_vector']) return model - 第二步:按需配置元数据返回逻辑
有两种常用实现方式可选:- 嵌入预测响应返回:修改推理脚本的
predict_fn或output_fn,将元数据和预测结果拼接后统一返回,调用方每次请求预测接口即可同时拿到结果和对应的元数据。 - 单独提供元数据查询接口:如果使用自定义推理容器,可以直接在服务框架(Flask/FastAPI等)中新增
/metadata类的专属路由,收到请求时直接返回已缓存的labels和img_norm_vec即可;如果使用SageMaker官方预置容器,也可以通过自定义handler的方式扩展路由支持。
- 嵌入预测响应返回:修改推理脚本的
注意事项
- 上传到S3的模型压缩包需要完整保留带元数据的h5模型文件,不要修改或裁剪模型结构
- 元数据仅需在
model_fn阶段加载一次即可,不要每次请求都重复读取h5文件,避免影响端点性能 - 若元数据量较大,可以考虑序列化后返回,减少传输体积
内容的提问来源于stack exchange,提问作者jypucca
相关产品推荐
相关产品推荐

