2

我在本地系统上保存了一个现有的机器学习模型。我想将此模型部署为 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

我不知道如何在入口脚本中导入那些类文件和文本文件

我对天蓝色了解不多,我很难弄清楚这一点。请帮忙。

4

3 回答 3

4

我找到了解决方案:

解决方案就在那里,我只需要在官方文档中阅读更多内容。下面我已经解释了我的问题的解决方案。

在 Azure 机器学习工作室上部署模型时,我们必须准备 3 件事:

  1. 入口脚本是进行预测的实际 python 脚本。

  2. 部署配置可以被认为是运行模型的计算机。

  3. 推理配置定义模型的软件依赖关系。在这里,我们还可以提供文本/静态文件。

接受一个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 语法在入口脚本中访问这些文件。

对于我的解决方案:

如果我有我inference_config这样的

inference_config = InferenceConfig(
    entry_script="score.py", 
    environment=myenv, 
    source_directory='./assets',
)

./assets并在文件夹中有这个

assets
├── my_model_class.py
├── score.py
└── data
    └── vocaublary.txt

1 directory, 3 files

然后我的输入脚本 ( 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

于 2020-10-23T11:12:01.567 回答
1

与模型相关的附加文件可以直接上传到源目录中的 Azure ML Workspace(带有 GUI),即HOME > Notebooks。(参考图片)。 Azure 工作区映像

使用添加文件按钮将文件添加到此(源目录)

上传的文件可以通过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')
于 2021-04-27T11:23:59.607 回答
0

对于 txt/静态文件 - 您可以上传到 Azure Blob 并即时使用它们。对于类,您可以将类封装在模块中。

您可以在这里执行 2 个选项

选项1 :

您可以将模块发布到 pip 然后使用它。

选项 2:

本文中描述的“私人轮文件”解决方案。以下是示例环境,请仔细查看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

在这个线程中看到了参考代码和类似的讨论。

于 2020-10-14T11:28:13.080 回答