【问题标题】:How to use ML.Net PredictionEnginePool with ONNX model?如何将 ML.Net PredictionEnginePool 与 ONNX 模型一起使用?
【发布时间】:2021-05-12 07:23:22
【问题描述】:

我正在尝试使用 ML.Net 来使用 ONNX 模型在 API 后面进行预测。有关于如何将 ML.Net 和 ONNX 模型与控制台应用程序 here 一起使用的文档,但正如 this 文章中所述,它不能很好地扩展。从这篇文章开始,他们添加了 PredictionEnginePool 来解决缩放问题,但我无法使其适用于 ONNX 模型。当我尝试加载模型时,它会抛出两个异常:

InvalidOperationException: Repository doesn't contain entry DataLoaderModel\Model.key
Microsoft.ML.RepositoryReader.OpenEntry(string dir, string name)
InvalidOperationException: Could not load legacy format model
Microsoft.ML.ModelOperationsCatalog.Load(Stream stream, out DataViewSchema inputSchema)

遗留格式异常很有趣,因为我尝试了两种不同的模型,一种来自 Azure 机器学习服务和 AutoML,另一种是在本地训练的 Scikit,因此不确定哪一部分是“遗留”。

缺少的 Model.key 可能是提示,因为在 MS API 文档中使用的 zip 模型文件没有单个 .onnx 文件,但它有包含二进制文件的文件夹并且其中一些文件实际上命名为 Model.key

我的问题是: 有没有人使用过带有 ONNX 模型的 PredictionEnginePool?可能吗?还是尚未实施? (不确定是否重要,但都是分类模型,一个 SVM 和一个 LightGBM)


*更新

找到了一种方法来做到这一点。所以看起来引擎池只支持 ML.Net 格式的模型,但是您可以按照控制台应用程序示例中的描述打开模型并将其保存为 ML.Net 格式,然后您可以将其与引擎池一起使用。 这个here 有一个类似的例子。 OnnxModelConfigurator 类打开 ONNX 模型并将其保存为 ML.Net 格式,然后在 Startup.cs 的 ctr 中调用配置器以正确格式保存模型,并在 ConfigureServices() 函数中实际创建使用 ONNX 模型的池。

这可行,但是通过遵循这种方法,格式之间的转换将成为 API 源代码的一部分,因此当您想要使用新模型时,您至少需要重新启动应用程序。这可能没什么大不了的,如果有一点停机时间是可以的,即使没有,你也可以通过部署槽来避免它。我猜您也可以将转换作为单独的服务,然后将模型文件转储到 API,以便池可以检测到新模型并使用它。

不管怎样,谢谢大家的回答!

【问题讨论】:

    标签: ml.net onnx


    【解决方案1】:

    我之前遇到过你的错误,但没有使用 Pool。如果您查看这个特定的comment 和随后的 cmets,我们通过彻底清理他的项目来解决问题。在这种情况下,他已经升级到新版本的 ML.NET 并且没有清理项目,因此导致了问题。我不确定这是否能解决您的问题,但我是从事 ML.NET 工作的工程师之一,所以如果不能,请随时创建 issue,我们可以帮助您解决。

    【讨论】:

    • 谢谢迈克尔。我认为这不是问题,如果有的话,这将是一个功能请求。该池目前不适用于 onnx 模型,但有一种解决方法。我认为让我感到困惑的是 Ms Docs。有一个关于如何将 Onnx 模型与 ML.Net 与控制台应用程序一起使用的示例,并且从该页面有一个链接到另一个关于如何将其部署为 API 的链接,有些人可能认为它也可以与 Onnx 一起使用。但是转换模型很容易,所以我认为没有问题。
    【解决方案2】:

    你也可以看看this guide

    在这种情况下,使用 Azure 自定义视觉训练的模型在使用 PredictionEnginePool 的 ASP.NET 应用程序中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多