部署模型时在azure ml entry脚本中导入数据和python脚本
我在本地系统上保存了一个现有的机器学习模型。我希望将此模型部署为web服务,以便将此模型作为请求-响应使用,即向模型发送HTTP请求并返回预测的响应 尝试在AzureML上部署此模型时,我遇到了一些问题 该模型需要在init()函数的输入脚本中初始化,但要初始化我的模型,我有一个自定义类,需要加载一些txt文件 下面是初始化模型对象的代码部署模型时在azure ml entry脚本中导入数据和python脚本,python,azure,machine-learning,web-deployment,azureml,Python,Azure,Machine Learning,Web Deployment,Azureml,我在本地系统上保存了一个现有的机器学习模型。我希望将此模型部署为web服务,以便将此模型作为请求-响应使用,即向模型发送HTTP请求并返回预测的响应 尝试在AzureML上部署此模型时,我遇到了一些问题 该模型需要在init()函数的输入脚本中初始化,但要初始化我的模型,我有一个自定义类,需要加载一些txt文件 下面是初始化模型对象的代码 from model_file import MyModelClass # this is the file which contains the mode
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
从模型文件导入MyModelClass#这是包含模型类的文件
def init():
全局robert_模型
my_model=MyModelClass(vocab_path='',
模型_路径=[''],
迭代次数=5次,
最小误差概率=0.0,
最小概率=0.0,
重量=无)
def运行(json_数据):
尝试:
data=json.load(json_数据)
preds,cnt=my_model.handle_batch([句子.split()]))
返回{'output':pred,'count':cnt}
例外情况除外,如e:
错误=str(e)
返回错误
我不知道如何在输入脚本中导入这些类文件和文本文件
我对azure了解不多,我很难弄明白这一点。请提供帮助。对于txt/静态文件,您可以上传到Azure Blob并动态使用它们。 对于类,您可以将类封装在模块中 这里有两种选择 选项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
在这里看到了参考代码和类似的讨论。我找到了解决方案: 解决方案就在那里,我只是需要阅读更多的官方文件。下面我已经解释了我的问题的解决方案 在Azure机器学习工作室上部署模型时,我们必须准备3件事:
inferece\u config
采用名为source\u directory
的参数。我们可以为source_directory参数提供一个文件夹路径,如下所示
inference_config = InferenceConfig(
entry_script="<entry-script.py>",
environment=myenv,
source_directory="<path-to-your-folder>",
)
并将其保存在/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\u class
导入,即使score.py
存在于assets
文件夹中,因为部署后CWD(当前工作目录)更改为资产的父文件夹
文件夹与模型相关的其他文件可以直接上载到源目录中的Azure ML Workspace(带有GUI),即HOME>Notebook。(请参阅图)。
assets
├── my_model_class.py
├── score.py
└── data
└── vocaublary.txt
1 directory, 3 files
使用“添加文件”按钮将文件添加到此(源目录)
上载的文件可以通过os.getEnv()方法访问
谢谢你的回复。但是我发现了一种更简单的方法,在部署模型时,我们可以在
推理\u config
中指定一个包含静态文件和包文件的文件夹。此文件夹在部署时复制,可以在条目脚本中使用。感谢您更多的关于<代码>推理>配置> <代码>请考虑将您的实现/推荐作为答案。这将有助于社区是的,当然。我添加了我的解决方案作为这个问题的答案。这看起来不错。我有机会一定会试试的。谢谢你的回答。
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')