如何解决部署模型时,在Azure ml输入脚本中导入数据和python脚本
我在本地系统上保存了一个现有的机器学习模型。我想将此模型部署为Web服务,以便可以将该模型用作请求-响应,即,向模型发送HTTP请求并获取预测的响应。
尝试在AzureML上部署此模型时,我遇到了一些问题
需要在init()函数的入口脚本中初始化模型,但是要初始化我的模型,我有一个自定义类,需要加载一些txt文件。
下面是初始化模型对象的代码
from model_file import MyModelClass # this is the file which contains the model class
def init():
global robert_model
my_model = MyModelClass(vocab_path='<path-to-text-files>',model_paths=['<path-to-model-file>'],iterations=5,min_error_probability=0.0,min_probability=0.0,weigths=None)
def run(json_data):
try:
data = json.loads(json_data)
preds,cnt = my_model.handle_batch([sentence.split()])
return {'output': pred,'count': cnt}
except Exception as e:
error = str(e)
return error
我对天蓝色的了解不多,我很难弄清楚这一点。请帮忙。
解决方法
我找到了解决方法:
那里的解决方案我只需要阅读官方文档中的更多内容。下面,我解释了解决问题的方法。
在Azure Machine Learning Studio上部署模型时,我们必须准备三件事:
-
Entry Script 是进行预测的实际python脚本。
可以想到 -
Deployment Configuration 可以在其中运行模型的计算机。
-
Inference Configuration 定义模型的软件依赖关系。在这里,我们还可以提供文本/静态文件。
inferece_config
接受一个名为source_directory
的参数。我们可以提供指向 source_directory 参数的文件夹的路径,如下所示:
inference_config = InferenceConfig(entry_script="<entry-script.py>",environment=myenv,source_directory="<path-to-your-folder>")
我们可以将所有需求放在此文件夹中,包括文本,静态,csv,python脚本等文件。 输入脚本也必须放在此文件夹中。 该文件夹将通过azure直接复制到创建的部署映像中。这样,我们可以使用常规python语法在 entry脚本中访问这些文件。
对于我的解决方案:
如果我有这样的inference_config
inference_config = InferenceConfig(entry_script="score.py",source_directory='./assets')
并将其保存在./assets
文件夹中
>assets
>data
>vocaublary.txt
>my_model_class.py
>score.py
然后我的输入脚本( score.py )将如下所示:
from assets.my_model_class import MyModelClass
def init():
global my_model
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'),'my_model.pkl')
my_model = MyModelClass(vocab_path='assets/data/vocaublary.txt',model_path=model_path)
def run(json_data):
try:
data = json.loads(json_data)
prediction = my_model.predict(data)
return {'data': prediction}
except Exception as e:
// do error handling
return error
注意:即使assets.my_model_class
文件夹中存在score.py
,我们也必须从assets
导入,因为在部署后,CWD(当前工作目录)是更改为assets
文件夹的父文件夹
与模型相关的其他文件可以直接上传到源目录中的 Azure ML Workspace(带 GUI),该目录是 HOME > Notebooks。 (参考图片)。
使用添加文件按钮
将文件添加到此(源目录)中上传的文件可以通过os.getEnv()方法访问。
from azureml.core import Workspace
from azureml.core import Environment
import os
# Connect to WS
ws = Workspace(subscription_id="sid",resource_group="rg",workspace_name="wsname")
# Creating inference Config for demo
env = Environment(name='environment_name')
inf_config = InferenceConfig(environment=env,source_directory=os.getenv('ENV_NAME'),entry_script='./score.py')
,
对于txt /静态文件-您可以上传到Azure Blob,并即时使用它们。 对于类,您可以将类封装在模块中。
您可以在此处执行2种选择
选项1:
您可以将模块发布为pip,然后使用它。
选项2:
this article中所述的“专用车轮文件”解决方案。 以下是示例环境,请仔细查看 pip 部分。
name: project_environment
dependencies:
# The python interpreter version.
# Currently Azure ML only supports 3.5.2 and later.
- python=3.6.2
- pip:
- scikit-learn==0.22.1
- azureml-defaults
- https://myworkspaceid.blob.core/azureml/Environment/azureml-private-packages/my-wheel-file-name.whl
channels:
- conda-forge
在此thread中看到了参考代码和类似的讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。