【发布时间】:2020-01-01 02:10:12
【问题描述】:
我在 ASP.NET Core 应用程序中使用 ML.NET,我在 Startup 中使用以下代码:
var builder = services.AddPredictionEnginePool<Foo, Bar>();
if (File.Exists("model.zip"))
{
builder.FromFile(String.Empty, "model.zip", true);
}
如果 model.zip 不存在,我稍后会在中间件中创建它。如何将其添加到注入的PredictionEnginePool?
没有通过PredictionEnginePool 加载模型的选项,实例化或注入PredictionEnginePoolBuilder 不是一个选项,因为它需要IServiceCollection(因此必须在Startup.ConfigureServices 期间配置)。
目前我能看到的唯一选项是如果文件在启动时不存在,则设置一个标志,然后稍后在中间件中创建 model.zip 后重新启动服务(使用IApplicationLifetime.StopApplication),但我真的不喜欢这个选项。
【问题讨论】:
-
我也注意到
PredictionEnginePool的这个限制。我能想到的唯一解决方法是,如果您不能始终保证文件存在,可能是运行 Azure 函数或计划任务来检查它是否不存在,然后从 Azure 存储或其他地方获取它。跨度> -
@Jon 是的,但它在
Startup.ConfigureServices期间不存在的原因是它尚未创建。然后,我的应用稍后将在中间件中创建它,这当然是在Startup.ConfigureServices运行之后。此时,我需要通过PredictionEnginePool访问模型,这意味着我需要以编程方式重新启动应用程序,以便在启动期间可以读取 model.zip。我想还有另一种方法可以做到这一点,那就是将我的 API 分成两部分——一个负责创建模型,一个负责使用它(有PredictionEnginePool)。
标签: ml.net asp.net-core-middleware