部署模型时在azure ml入口脚本中导入数据和python脚本

Aks*_*kar 4 python machine-learning azure web-deployment azure-machine-learning-service

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

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

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

Aks*_*kar 6

我找到了解决方案:

\n

解决方案就在那里,我只需阅读官方文档即可。下面我解释了我的问题的解决方案。

\n

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

\n
    \n
  1. Entry Script是进行预测的实际 Python 脚本。

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

    \n
  4. \n
  5. 推理配置定义模型的软件依赖性。在这里,我们还可以提供文本/静态文件。

    \n
  6. \n
\n

inferece_config采用一个名为 的参数source_directory我们可以向source_directory参数提供文件夹路径,如下所示

\n
inference_config = InferenceConfig(\n    entry_script="<entry-script.py>",\n    environment=myenv, \n    source_directory="<path-to-your-folder>",\n)\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以将所有需求放在这个文件夹中,包括文本、静态、CSV、python 脚本等文件。入口脚本也必须放置在此文件夹中。\nazure 将直接在创建的部署映像中复制此文件夹。这样我们就可以使用常规的 python 语法在入口脚本中访问这些文件。

\n

对于我的解决方案:

\n

如果我有inference_config这样的

\n
inference_config = InferenceConfig(\n    entry_script="score.py", \n    environment=myenv, \n    source_directory=\'./assets\',\n)\n
Run Code Online (Sandbox Code Playgroud)\n

并将其放入./assets文件夹中

\n
assets\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_model_class.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 score.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 data\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vocaublary.txt\n\n1 directory, 3 files\n
Run Code Online (Sandbox Code Playgroud)\n

然后我的入口脚本(score.py)将如下所示:

\n
from assets.my_model_class import MyModelClass\n    \ndef init():\n  global my_model\n  model_path = os.path.join(os.getenv(\'AZUREML_MODEL_DIR\'), \n                            \'my_model.pkl\',)\n\n  my_model = MyModelClass(vocab_path=\'assets/data/vocaublary.txt\', \n                          model_path=model_path,)\n\ndef run(json_data):\n  try:\n    data = json.loads(json_data)\n    prediction = my_model.predict(data)\n    return {\'data\': prediction}\n  except Exception as e:\n    // do error handling\n    return error\n\n
Run Code Online (Sandbox Code Playgroud)\n

注意:assets.my_model_class即使文件夹score.py中存在,我们也必须从中导入assets,因为部署后,CWD(当前工作目录)更改为assets文件夹的父文件夹

\n