Azure ML webservice入口脚本无法加载工作区,/var/azureml-app路径在哪?
Azure ML本地部署推理服务找不到config.json问题解决方案
/var/azureml-app路径说明
该路径是Azure ML本地部署推理服务时,自动创建的Docker容器内部的默认工作目录,与宿主机文件系统完全隔离。你在宿主机中操作该路径、或传入宿主机的绝对路径都无法被容器内的推理脚本识别,因此会触发找不到配置文件的报错。
修复方案
方案1:将config.json随源码目录打包进容器
你在部署时指定了source_directory为./source_dir,该目录下的所有内容会被自动打包到容器的/var/azureml-app路径下,你只需要将配置文件写入该目录即可:
- 修改部署脚本中的
ws.write_config代码,直接将配置文件写入源码目录:
# 替换原有的ws.write_config(file_name='config.json') ws.write_config(path="./source_dir", file_name="config.json")
- 推理脚本中无需修改
Workspace.from_config()的调用逻辑,容器运行时会自动识别同目录下的config.json文件。
方案2:直接传入工作区参数初始化,无需依赖配置文件
推理服务默认拥有所属工作区的访问权限,你可以直接传入工作区的固定参数初始化Workspace,完全避免读取配置文件的步骤。建议将Workspace初始化逻辑放到init()函数中,避免每次处理请求都重复初始化,提升性能:
from azureml.core import Dataset, Datastore from azureml.data.datapath import DataPath from azureml.core import Workspace ws = None def init(): global ws # 替换为你自己的工作区参数即可 ws = Workspace( subscription_id="你的订阅ID", resource_group="你的资源组名称", workspace_name="你的工作区名称" ) def run(data): try: datastore = Datastore.get(ws, 'sql_db_name') query = DataPath(datastore, 'SELECT * FROM my_table') tabular = Dataset.Tabular.from_sql_query(query, query_timeout=10) df = tabular.to_pandas_dataframe() return len(df) except Exception as e: output0 = "{}:".format(type(e).__name__) output1 = "{} ".format(e) output2 = f"{type(e).__name__} occured at line {e.__traceback__.tb_lineno} of {__file__}" return output0 + output1 + output2
内容的提问来源于stack exchange,提问作者Redfox-Codder
相关产品推荐
相关产品推荐

