在 AzureML 中部署模型时如何将参数传递给评分文件
Posted
技术标签:
【中文标题】在 AzureML 中部署模型时如何将参数传递给评分文件【英文标题】:How to pass arguments to scoring file when deploying a Model in AzureML 【发布时间】:2020-06-23 12:06:15 【问题描述】:我正在使用 Python SDK 将经过训练的模型部署到 Azure 机器学习上的 ACI 端点。
我已经创建了我的 score.py 文件,但我希望在调用该文件时传递一个参数(就像使用训练文件一样),我可以使用 argparse
解释该参数。
但是,我似乎没有找到如何传递参数
这是我必须创建 InferenceConfig 环境的代码,显然它不起作用。我应该使用额外的 Docker 文件步骤吗?
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig
env = Environment('my_hosted_environment')
env.python.conda_dependencies = CondaDependencies.create(
conda_packages=['scikit-learn'],
pip_packages=['azureml-defaults'])
scoring_script = 'score.py --model_name ' + model_name
inference_config = InferenceConfig(entry_script=scoring_script, environment=env)
添加 score.py 以供参考我希望如何使用该脚本中的参数:
#removed imports
import argparse
def init():
global model
parser = argparse.ArgumentParser(description="Load sklearn model")
parser.add_argument('--model_name', dest="model_name", required=True)
args, _ = parser.parse_known_args()
model_path = Model.get_model_path(model_name=args.model_name)
model = joblib.load(model_path)
def run(raw_data):
try:
data = json.loads(raw_data)['data']
data = np.array(data)
result = model.predict(data)
return result.tolist()
except Exception as e:
result = str(e)
return result
想听听你的想法
【问题讨论】:
您能否添加更多有关您所获得的用例/score.py 和错误日志的详细信息。 谢谢,我添加了 score.py 【参考方案1】:这个问题已经有一年了。提供解决方案来帮助那些可能仍在寻找答案的人。我对类似问题的回答是here。您可以将原生 python 数据类型变量传递到推理配置中,并将它们作为评分脚本中的环境变量进行访问。
【讨论】:
【参考方案2】:如何使用环境进行部署可以在这里找到model-register-and-deploy.ipynb。 InferenceConfig 类接受 source_directory 和 entry_script parameters,其中 source_directory 是包含用于创建图像的所有文件(score.py 和任何其他附加文件)的文件夹的路径。
这个multi-model-register-and-deploy.ipynb 有关于如何使用 source_directory 和 entry_script 创建 InferenceConfig 的代码 sn-ps。
from azureml.core.webservice import Webservice
from azureml.core.model import InferenceConfig
from azureml.core.environment import Environment
myenv = Environment.from_conda_specification(name="myenv", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
service = Model.deploy(workspace=ws,
name='sklearn-mnist-svc',
models=[model],
inference_config=inference_config,
deployment_config=aciconfig)
service.wait_for_deployment(show_output=True)
print(service.scoring_uri)
【讨论】:
您好 Ram,非常感谢您的反馈。但是,我似乎错过了将实际参数传递到 score.py 脚本中的位置?他们似乎只是调用脚本,没有任何特定参数,并且模型名称在脚本中是“硬编码”的,据我所见? github.com/Azure/MachineLearningNotebooks/tree/master/… 您可以尝试使用我们新的更简单的方法来使用parallelrunstep 来完成此任务吗? docs.microsoft.com/en-us/azure/machine-learning/… 这个答案没有为提出的问题提供任何解决方案。以上是关于在 AzureML 中部署模型时如何将参数传递给评分文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将模型作为参数传递给 ASP.NET MVC 中的 [HttpPost] ActionMethod?