【发布时间】: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 位,但我不确定您在训练模型时使用的是什么。
【问题讨论】:
-
您是否使用 ML.NET 的 DatabaseLoader 来获取数据?
-
如果您使用的是 .net 框架,请尝试取消选中“启用 Visual Studio 托管进程”
-
@Jon 我不确定... =/ 我正在关注本指南,它使用的 UI 显然是针对长期无知的人(比如我):dotnet.microsoft.com/learn/ml-dotnet/get-started-tutorial/intro
-
@ShakHam 我正在使用 .NET Core 2.1。也许我应该尝试向前推进?
-
我认为使用 DatabaseLoader 可能更有效。这是一个示例 - github.com/dotnet/machinelearning-samples/tree/master/samples/…
标签: c# .net sql-server machine-learning ml.net