AzureML中score.py无法读取同目录JSON文件,请求排查
解决AzureML推理端点无法读取同目录JSON文件的问题
核心原因
- 运行时工作目录与脚本目录不匹配:
os.getcwd()返回的是AzureML推理服务的默认工作目录(通常为/var/azureml-app),但你的model_adjustments.json实际部署路径可能并非此处,导致路径拼接错误。 - 文件打包遗漏:若
model_adjustments.json不在source_directory指定的目录下,部署时不会被包含到推理镜像中。
解决方案
1. 用脚本自身路径替代os.getcwd()
修改score.py中读取JSON文件的逻辑,通过__file__变量获取脚本的绝对路径,再拼接JSON文件路径,这是更可靠的方式:
def run(raw_data): try: # ... 其他原有代码 ... # 获取score.py所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) json_file = os.path.join(script_dir, "model_adjustments.json") with open(json_file, "r") as fr: adjustments_dat = json.load(fr) # 直接用json.load简化代码 modelAdjustment = adjustments_dat[model_name] # ... 其他原有代码 ... except Exception as e: error = str(e) return {"debug": -1, "error": error}
2. 确认部署文件完整性
检查path_to_source指定的目录下,是否同时存在score.py和model_adjustments.json。部署时AzureML会打包该目录下所有文件(除.amlignore排除项),确保文件未被遗漏。
3. 性能优化:预加载JSON文件
避免每次请求都重复读取JSON文件,可在init函数中一次性加载数据并存入全局变量:
def init(): global model, adjustments_dat # 预加载调整数据 script_dir = os.path.dirname(os.path.abspath(__file__)) json_file = os.path.join(script_dir, "model_adjustments.json") with open(json_file, "r") as fr: adjustments_dat = json.load(fr) def run(raw_data): try: # ... 其他原有代码 ... modelAdjustment = adjustments_dat[model_name] # ... 其他原有代码 ... except Exception as e: error = str(e) return {"debug": -1, "error": error}
内容的提问来源于stack exchange,提问作者Muhammad Pathan
相关产品推荐
相关产品推荐

