【发布时间】:2020-08-18 17:28:24
【问题描述】:
正如标题所说,我正在尝试在 ASP.NET Core Web 应用程序中重新训练现有的 ML.NET 模型。 设置: 我在本地磁盘上有一个现有的 model.zip 文件。 在 Startup.cs 中,我正在注入预测引擎池服务
services.AddPredictionEnginePool<ImageData, ImagePrediction>().FromFile(
"ImageClassificationModel", _modelPath, true);
通过从磁盘加载现有模型。 _modelPath 变量表示 zip 文件的路径,true 参数表示预测引擎池应该监视模型的变化。根据https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/serve-model-web-api-ml-net,
PredictionEnginePool 服务提供了一种重新加载 无需关闭您的应用即可更新模型。
我还创建了一个服务,它获取一些图像文件夹的路径并训练一个新模型,然后将其保存到 _modelPath 指示的相同位置。该服务通过 API 端点公开。
问题: 访问 train 端点时,应用运行良好。它重新训练模型并将其保存到指定的路径。我可以多次这样做。但是,如果我使用该模型来预测图像的标签,我将不再能够重新训练该模型。如果我尝试再次调用 train 端点,我会收到一条错误消息,指出模型文件已在使用中。
System.IO.IOException: '进程无法访问文件 '\MLModel\model.zip' 因为它正被另一个进程使用。'
到目前为止,更新模型的唯一方法是完全重新启动 Web 应用程序并首先调用 train 端点。 预期结果将能够在不重新启动网络应用的情况下重新训练模型。
【问题讨论】:
-
可能在您的
PredictionEnginePool上调用Dispose(),可能会释放模型以便您保存更新的模型。
标签: asp.net-core ml.net