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

部署模型时在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

我在本地系统上保存了一个现有的机器学习模型。我希望将此模型部署为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
从模型文件导入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件事:

  • 是进行预测的实际python脚本

  • 可以将其视为运行模型的计算机

  • 定义模型的软件依赖项。在这里,我们还可以提供文本/静态文件

  • 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')