【问题标题】:Training ML.NET -- System.OutOfMemoryException训练 ML.NET——System.OutOfMemoryException
【发布时间】:2020-03-31 13:33:55
【问题描述】:

首先,我是 ML.NET(以及整个 ML)的新手。我正在尝试使用 SQL Server 表作为我的数据源来设置模型。我从同一张表中选择一个标签和 18 个特征,该表包含超过 300 万条记录。当我完成选择我的标签/功能并单击 Train 按钮时,我收到一个提示,告诉我 VS 将从我承认的 SQL Server(托管在同一台机器上)下载 1.1 GB 的数据.我收到反馈,表明下载正在进行中,并且会持续 30 - 60 秒。然后我收到以下错误:

Error retrieving SQL data: "Exception of type 'System.OutOfMemoryException' was thrown."
   at Microsoft.ML.ModelBuilder.ToolWindows.ModelBuilderDataContext.<DownloadSqlFileAsync>b__88_0()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ML.ModelBuilder.ToolWindows.ModelBuilderDataContext.<DownloadSqlFileAsync>d__88.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ML.ModelBuilder.ToolWindows.ModelBuilderDataContext.<<OnDataChanged>b__77_1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ML.ModelBuilder.ToolWindows.TrainTabDataContext.<BuildTrainModelParametersAsync>d__138.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ML.ModelBuilder.ToolWindows.TrainTabDataContext.<StartTrainingAsync>d__130.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.ML.ModelBuilder.ToolWindows.TrainTabControl.<<StartTraining_Click>b__5_0>d.MoveNext()

一些有趣的事实:

  • 我在尝试训练时观察了机器上的 RAM 计数,但它没有超过可用总 RAM 的 65%。

  • 在同一个 VS 解决方案中,我有另一个应用程序,我定期通过 EF 将相关表的整个内容读入内存。

  • 我正在使用 VS Community 和 SQL Express

  • 我看到 RAM 计数在错误发生之前增加了大约 3 GB。它闻起来很糟糕,就像它以 32 位运行进程(这对所有这些都是有意义的),但如果有这个设置,我找不到它。我检查了我的 ML 项目的 Build 属性,并确保将其设置为 64 位,但我不确定您在训练模型时使用的是什么。

【问题讨论】:

标签: c# .net sql-server machine-learning ml.net


【解决方案1】:

模型构建器(必然)是 32 位扩展,因此它无法处理我试图推送给它的那么多数据。我已经打开了一个错误/功能请求,以将数据引入一些 64 位代码中,或者更改数据的摄取方式。

https://github.com/dotnet/machinelearning-modelbuilder/issues/647

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2020-01-13
    相关资源
    最近更新 更多