在 Azure 中运行时,ML.NET Tensorflow 图像分类崩溃并出现 SEHException
Posted
技术标签:
【中文标题】在 Azure 中运行时,ML.NET Tensorflow 图像分类崩溃并出现 SEHException【英文标题】:ML.NET Tensorflow Image clasification crashes with SEHException when run in Azure 【发布时间】:2020-07-17 05:25:52 【问题描述】:我在 asp.net core C# 应用程序中使用 ML.NET tensorflow 来去除图像背景(类似于这里的实现方式https://github.com/susheelsk/image-background-removal、https://github.com/OPHoperHPO/image-background-remove-tool)。 使用的 TensorFlow 模型是 DeepLabV3 xception_model http://download.tensorflow.org/models/deeplabv3_pascal_train_aug_2018_01_04.tar.gz 在本地运行时,它可以正常工作(至少我无法在本地重现它)。 但是在 Azure 中运行应用服务时,有时会在调用 PredictionEnginePool Predict 方法时出现 SEHException 崩溃:
System.Runtime.InteropServices.SEHException (0x80004005):外部组件已引发异常。在 Tensorflow.c_api.TF_SessionRun(IntPtr 会话,TF_Buffer* run_options,TF_Output[] 输入,IntPtr[] input_values,Int32 ninputs,TF_Output[] 输出,IntPtr[] output_values,Int32 noutputs,IntPtr[] target_opers,Int32 ntargets,IntPtr run_metadata , IntPtr status) 在 Microsoft.ML.TensorFlow.TensorFlowUtils.Runner.Run() 在 Microsoft.ML.Transforms.TensorFlowTransformer.Mapper.UpdateCacheIfNeeded(Int64 位置, ITensorValueGetter[] srcTensorGetters, String[] activeOutputColNames, OutputCache outputCache) 在微软。 ML.Transforms.TensorFlowTransformer.Mapper.c__DisplayClass9_01.<MakeGetter>b__4(VBuffer
1& dst) 在 Microsoft.ML.Data.TypedCursorable1.TypedRowBase.<>c__DisplayClass8_0
1.b__0(TRow 行) 在 Microsoft.ML.Data.TypedCursorable1.TypedRowBase.FillValues(TRow row) at Microsoft.ML.Data.TypedCursorable
1.RowImplementation。 FillValues(TRow row) at Microsoft.ML.PredictionEngineBase2.FillValues(TDst prediction) at Microsoft.ML.PredictionEngine
2.Predict(TSrc example, TDst& prediction) at Microsoft.ML.PredictionEngineBase2.Predict(TSrc example) at Microsoft.Extensions.ML.PredictionEnginePoolExtensions.Predict[TData,TPrediction](PredictionEnginePool
2 predictionEnginePool, String modelName, TData example) at...
我怎样才能更深入地调查它以获得更多的见解? 出现此类问题的原因可能是什么?
还有一点需要注意:重启服务及其网络作业后问题消失。
【问题讨论】:
托管在云中的 Azure Function 应用发生了同样的异常。提出了关于 dotnet/machinelearning 的问题。 github.com/dotnet/machinelearning/issues/5361 【参考方案1】:我怎样才能更深入地调查它以获得更多的见解?
你可能会得到有意义的错误代码
SEHException
派生自 ExternalException
并具有 ErrorCode
属性,它只是在 Winerror.h
中定义的 HRESULT
常见错误值位于此处
https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values
【讨论】:
是的,我检查了那个错误代码(它在上面的异常堆栈跟踪中)。 SEHException (0x80004005) - E_FAIL 未指定的失败。但它并没有为我提供很多信息。以上是关于在 Azure 中运行时,ML.NET Tensorflow 图像分类崩溃并出现 SEHException的主要内容,如果未能解决你的问题,请参考以下文章
CA周记 - 在 Azure ML 上用 .NET 跑机器学习
ML.NET机器学习API容器化与Azure DevOps实践:RESTful API