无法在 Azure Function Python3 中添加 ML 模型

Posted

技术标签:

【中文标题】无法在 Azure Function Python3 中添加 ML 模型【英文标题】:Unable to add ML Model in Azure Function Python3 【发布时间】:2021-01-09 08:41:58 【问题描述】:

我正在尝试创建一个 azure 函数,该函数将从我的 ML 模型 (final_model.sav) 中返回数据。 通过这样做,ML 模型将在 Internet 上可用。

我的 Azure Function(init.py) 程序:

import azure.functions as func
import pickle


def main(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        
        var=name
        load_model = pickle.load(open('final_model.sav', 'rb'))
        prediction = load_model.predict([var])
        prob = load_model.predict_proba([var])
        
        return func.HttpResponse(f"prediction[0]&prob[0][1].")
        
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

但每当我尝试通过 HTTP 端点 ("http://localhost:7071/api/News?name=HelloWorld") 触发此功能时,都会出现错误 500。 我在requirements.txt 中包含了“sklearn”包。

我遇到了这个错误:

Exception: FileNotFoundError: [Errno 2] No such file or directory: 'final_model.sav'

但我在同一目录中有final_model.sav 文件。我不知道为什么它没有检测到它。

当我尝试调试代码时,我发现我的程序在遇到load_model = pickle.load(open('final_model.sav', 'rb')) 程序行时停止工作。 我已将“final_model.sav”放在函数目录中(init.py 所在的同一位置)。

Function中的文件如下:

prediction.py 只是一个无用的文件。请忽略它。它没有对程序做出任何结论。

我认为绑定可能存在问题。请检查我的function.json 文件。

function.json:


  "scriptFile": "__init__.py",
  "bindings": [
    
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    ,
    
      "type": "http",
      "direction": "out",
      "name": "$return"
    
  ]

感谢您抽出宝贵的时间来解决我的问题。 非常感谢。

【问题讨论】:

能否提供详细的错误信息? 你好 @JimXu 先生,我已经用错误日志更新了这个问题。请再次查看。感谢您为我的问题付出宝贵的时间。如果它得到解决,那将是一个很大的帮助 您发布的错误仅包含堆栈跟踪。你能发布完整的例外吗? @KrishnenduGhosh-MSFT 我已经更新了错误日志,请再次检查,感谢您为我的问题付出宝贵的时间。 将“final_model.sav”移动到函数宿主的根目录,即在“host.json”所在的同一级别。 【参考方案1】:

由于您使用 open('final_model.sav', 'rb') 从根路径加载文件,因此它正在函数应用主位置查找该文件。因此,将“final_model.sav”移到那里,即移到“host.json”所在的同一级别。

【讨论】:

以上是关于无法在 Azure Function Python3 中添加 ML 模型的主要内容,如果未能解决你的问题,请参考以下文章

无法在 azure 函数应用程序中创建 python 函数

Azure Function (python) insert to Azure SQL 不断收到错误

Azure 流分析无法触发 Azure Function

Azure 应用服务Python fastapi Function在Azure

Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”

在 Azure Devops 中为基于 Python 的 Azure Function 设置发布管道的正确方法