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)
我不知道如何在入口脚本中导入那些类文件和文本文件
我对蔚蓝了解不多,而且很难弄清楚这一点。请帮忙。
我找到了解决方案:
\n解决方案就在那里,我只需阅读官方文档即可。下面我解释了我的问题的解决方案。
\n在 Azure 机器学习工作室上部署模型时,我们必须准备三件事:
\nEntry Script是进行预测的实际 Python 脚本。
\n部署配置可以被认为是运行模型的计算机。
\n推理配置定义模型的软件依赖性。在这里,我们还可以提供文本/静态文件。
\n它inferece_config采用一个名为 的参数source_directory。我们可以向source_directory参数提供文件夹路径,如下所示
inference_config = InferenceConfig(\n entry_script="<entry-script.py>",\n environment=myenv, \n source_directory="<path-to-your-folder>",\n)\nRun Code Online (Sandbox Code Playgroud)\n我们可以将所有需求放在这个文件夹中,包括文本、静态、CSV、python 脚本等文件。入口脚本也必须放置在此文件夹中。\nazure 将直接在创建的部署映像中复制此文件夹。这样我们就可以使用常规的 python 语法在入口脚本中访问这些文件。
\n对于我的解决方案:
\n如果我有inference_config这样的
inference_config = InferenceConfig(\n entry_script="score.py", \n environment=myenv, \n source_directory=\'./assets\',\n)\nRun Code Online (Sandbox Code Playgroud)\n并将其放入./assets文件夹中
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\nRun Code Online (Sandbox Code Playgroud)\n然后我的入口脚本(score.py)将如下所示:
\nfrom 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\nRun Code Online (Sandbox Code Playgroud)\n注意:assets.my_model_class即使文件夹score.py中存在,我们也必须从中导入assets,因为部署后,CWD(当前工作目录)更改为assets文件夹的父文件夹