首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# ML.Net图像分类: GPU加速是否有助于提高预测的性能,我如何判断是否如此?

C# ML.Net图像分类: GPU加速是否有助于提高预测的性能,我如何判断是否如此?
EN

Stack Overflow用户
提问于 2020-08-28 21:21:35
回答 1查看 2.7K关注 0票数 4

我目前正在.NET Framework4.8中开发一个桌面工具,它接收带有潜在裂纹的图像列表,并使用经过ML.Net (C#)训练的模型来执行裂纹检测。理想情况下,我希望对10幅图像的预测小于100 on (注:单个图像预测需要36到41 on之间)。

首先,我尝试在不同的线程中执行多个预测,使用一个PredictionEngines列表和Parall.For-循环(使用线程列表,因为.Net框架没有PredictionEnginePool实现)。后来,我了解到使用ITransformer进行预测是一种推荐的、线程安全的.Net框架方法,并转而使用它,但在这两种情况下,它都没有给我希望的性能。

执行以下代码需要255-281 It (平均267.1ms):

代码语言:javascript
运行
复制
    MLContext mlContext = new MLContext();
    IDataView inputData = mlContext.Data.LoadFromEnumerable(inputDataEnumerable);
    IDataView results = _LoadedModel.Transform(inputData);
    var imageClassificationPredictions = mlContext.Data.CreateEnumerable<ImageClassificationPrediction>(results, false).ToList();

其中,_LoadedModel是表示以前训练过的加载模型的ITransformer,inputDataEnumerable是包含两个属性的ModelInput列表: ImageData (从png图像中提取的图像数据的byte[])和Label (字符串类型,设置为null)。

我试图通过将TensorFlow包依赖关系从SciSharp.TensorFlow.Redist切换到SciSharp.TensorFlow.Redist-Windows-GPU来加快这个过程,如这个教程中所描述的那样。

但是,执行时间几乎保持不变( 10幅图像的平均执行时间为262.4ms )。我还试着比较一下5760张图像的小数据集的训练时间,但没有看到多大的差别(两者都花了大约7分钟21秒)。

从这些结果看,它似乎没有使用GPU,所以我首先尝试删除我的项目的bin文件夹,并删除旧的面向CPU的tensorflow包(如果这是一个简单的构建问题)。当这没有帮助时,我重新安装了CUDA 10.0,按照说明描述了这里。我还通过运行一些示例项目(DeviceQuery、DeviceQueryDrv和bandwidthTest)来检查CUDA是否与我的显卡正常工作,以确保卡实际上是兼容的,并且运行得很好。

在这一点上,我似乎设置了错误的东西,或者GPU只是不适用于我的特定用例,但我不能指出它是什么。根据我所遵循的教程,GPU加速应该可以用于预测,但是在尝试使用GPU之后,我没有看到在执行时间上有任何明显的差异。

如果有人建议我可以采取进一步的故障排除措施,或者他们知道我哪里出了问题,或者如果他们认为这是错误的用例,我将非常感谢任何帮助/反馈。

如果有帮助,下面是一些系统规范:

  • 操作系统: Windows 10 Pro
  • CPU: Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz
  • RAM: 16.0GB
  • GPU: Quadro P1000 (已安装驱动程序:版本452.06)

下面是我正在运行的ML.Packages (版本):

  • Microsoft.ML (v1.5.0)
  • Microsoft.ML.ImageAnalytics (v1.5.0)
  • Microsoft.ML.TensorFlow (v1.5.0)
  • Microsoft.ML.Vision (v1.5.0)
  • (v1.15.1)

对于GPU支持,我已经安装了CUDA v10.0CUDNN v7.6.4

编辑

事实证明,这个问题不是ML.Net特有的,而是与TensorFlow.Net有关的。在我将slightly .ensorFlow.Redist-Windows-GPU更新到2.3.0版本(发布于8/31/2020)之后,我将CUDA更新为10.1,并遵循了TensorFlow.Net GitHub的指导,该GitHub在使GPU支持工作方面有一些略微不同的步骤。我现在可以在不到50毫秒内得到10个预测,这甚至比我的目标更好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-31 19:31:48

很可能是版本错配。

TensorFlow支持CUDA 10.1 (TensorFlow >= 2.1.0)

https://www.tensorflow.org/install/gpu

您可以检查您的输出窗口的原因,为什么它不会连接到您的GPU。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63641000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档