如何解决无法在本地运行 Azure ML 模型,入口脚本帮助
我正在处理一个将使用 Azure ML(ml.azure.com) 创建模型的项目,
我计划最终使用 Azure ML Designer,因此我选择了一个示例管道(回归 - 汽车价格预测(基础))。然后我创建了一个实时推理管道并创建了一个实时端点。
发布此信息后,我可以按预期从 .Net 客户端通过互联网从该模型中获取预测。
作为同一个项目的一部分,我最终希望通过预测完全消除互联网依赖/附属延迟。我知道这可以通过打包模型并下载在本地计算机上运行并通过评分 Web 服务公开模型的 docker 映像来实现。
为了打包模型并将其下载为 docker 镜像,我使用了以下 python 代码,这将在我的本地 PC 上执行:
import azureml.core
print(azureml.core.VERSION)
from azureml.core import Workspace
ws = Workspace.get(name="TestMLWorkSpace",subscription_id='XXXXXX-a9c4-4426-XXXX-XXXXXXX',resource_group='MyResourceGroup')
from azureml.core.experiment import Experiment
experiment = Experiment(workspace=ws,name='TestAutomobileSampleExp')
list_runs = experiment.get_runs()
for run in list_runs:
print(run.id)
list_experiments = Experiment.list(ws)
from azureml.core.model import Model
import os
model = Model(workspace=ws,name="amlstudio-regrealtimeendpoint")
model.download(target_dir=os.getcwd(),exist_ok=1 )
from azureml.core import Environment
from azureml.core.model import InferenceConfig
env = Environment.get(workspace=ws,name="AzureML-Minimal")
inference_config = InferenceConfig(
environment=env,source_directory="./",entry_script="./score.py",)
package = Model.package(ws,[model],inference_config)
package.wait_for_creation(show_output=True)
package.pull()
#checked image id using ---> docker images
# replace image id from the result above in the following command
# docker run -p 6789:5001 --name mycontainer c262eaa7bab9
# http://localhost:6789/score
现在当我运行这个脚本时,一个 docker 镜像会下载到我的电脑上,并且可以使用 docker 运行。
有什么问题?
作为创建推理配置的一部分,我需要指定一个名为 score.py 的入口脚本 似乎我无法运行 docker 镜像,因为入口脚本可能不正确。
这是我的 score.py 目前的样子:
导入操作系统 导入json
从 azureml.core.model 导入模型 导入日志
def init():
global model
logging.basicConfig(level=logging.DEBUG)
model_path = Model.get_model_path(model_name='amlstudio-regrealtimeendpoint')
print(Model.get_model_path(model_name='amlstudio-regrealtimeendpoint'))
#How do I load the model here??
def run(input_data):
try:
data = json.loads(input_data)['data']
data = np.array(data)
result = model.predict(data)
return json.dumps({"result": result.tolist()})
except Exception as e:
result = str(e)
# return error message back to the client
return json.dumps({"error": result})
我从 Microsoft 材料中构建了这个入口脚本,但它不起作用并且 Docker 映像无法启动。
我的问题是,
- 我的推理配置中的源目录是否正确?鉴于我只希望模型在本地运行能够在本地提供预测,我的源目录应该是什么?
- 我应该对此输入脚本进行哪些更改,以使评分在我的计算机上本地运行?
谢谢,
解决方法
如果要构建封装模型及其依赖项的 Docker 映像,可以使用模型打包选项。输出图像将被推送到您工作区的 ACR。
您必须在 inference configuration 中包含 Environment 对象才能使用 Model.package()。
package = Model.package(ws,[model],inference_config) package.wait_for_creation(show_output=True) # 或者 show_output=False 隐藏 Docker 构建日志。 包.拉() 除了完整构建的映像,您还可以生成 Dockerfile 并下载在您的环境之上构建映像所需的所有资产。
package = Model.package(ws,inference_config,generate_dockerfile=True) package.wait_for_creation(show_output=True) package.save("./local_context_dir")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。