Прежде всего, я новичок в ML. NET (и ML в целом). Я пытаюсь настроить модель, используя таблицу сервера SQL в качестве источника данных. Я выбираю одну метку и 18 объектов из одной таблицы, и в этой таблице содержится чуть более 3 миллионов записей. Когда я заканчиваю sh, выбирая ярлык / функции и нажимаю кнопку Train , я получаю сообщение о том, что VS загрузит 1,1 ГБ данных с сервера SQL (размещенного на том же компьютере). ) что я признаю. Я получаю отзыв о том, что загрузка идет, и это длится 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()
Несколько забавных фактов:
Я наблюдал за подсчетом ОЗУ на машине во время попытки обучения и он не превышает 65% от общего объема доступной оперативной памяти.
В том же решении VS у меня есть другое приложение, в котором я обычно считываю всю таблицу, о которой идет речь, в память через EF.
Я использую VS Community и SQL Express
Я вижу, что число ошибок ОЗУ может быть увеличено примерно на 3 ГБ до ошибки происходит. Он пахнет так плохо, как будто он запускает процесс в 32-битном режиме (что будет иметь смысл для всего этого), но если для этого есть настройка, я не могу ее найти. Я проверил свойства Build для своего проекта ML и удостоверился, что он установлен на 64-битную версию, но я не уверен, что это даже то, что используется при обучении модели.