Файл подкачки слишком мал для завершения операции python
У меня очень маленькая сеть, которую я хочу протестировать с разными случайными начальными числами. Сеть почти не использует 1% вычислительной мощности моих графических процессоров, так что теоретически я мог бы запустить 50 процессов одновременно, чтобы опробовать сразу несколько разных семян.
Проблема
Минимальный воспроизводимый код§ - dispatcher.py
§ Я увеличил количество семян, чтобы люди с лучшими машинами также могли их воспроизвести.
Минимальный воспроизводимый код - ml_model.py
Дальнейшее расследование
Я заметил, что каждый процесс загружает в оперативную память множество dll. И когда я закрываю все другие программы, которые используют много ОЗУ, я могу получить до 10 процессов вместо 4. Так что это похоже на ограничение ресурсов.
Вопросов
Есть ли обходной путь?
Какой рекомендуемый способ обучить множество небольших сетей с помощью pytorch на одном графическом процессоре?
Должен ли я вместо этого написать собственное ядро CUDA или использовать другой фреймворк для этого?
Моя цель состояла в том, чтобы запускать около 50 процессов одновременно (на машине с ОЗУ 16 ГБ, ОЗУ графического процессора 8 ГБ)
3 ответа
В моем случае система уже настроена на управляемый системой размер, но у меня такая же ошибка, потому что я передаю переменную большого размера нескольким процессам внутри функции. Скорее всего, мне нужно установить очень большой файл подкачки, поскольку Windows не может создать его на лету, а вместо этого откажитесь от сокращения количества процессов, поскольку это не всегда используемая функция.
Если вы работаете в Windows, может быть лучше использовать на 1 (или более) ядро меньше, чем общее количество физических ядер, поскольку многопроцессорный модуль в python в Windows стремится получить все, насколько это возможно, если вы используете все и фактически пытаетесь получить все логические ядра.
Что ж, мне удалось это решить. откройте «расширенные настройки системы». Перейдите на вкладку «Дополнительно» и нажмите «Настройки, связанные с производительностью». Снова щелкните вкладку «Дополнительно» -> изменить -> отменить выбор «автоматически . ». для всех дисков установите «размер, управляемый системой». Перезагрузите компьютер.
Я немного изучил это сегодня вечером. У меня нет решения, но у меня есть дополнительная информация.
Похоже, проблема вызвана тем, что в память загружаются файлы NVidia fatbins (.nv_fatb). Некоторые библиотеки DLL, такие как cusolver64_xx.dll, torcha_cuda_cu.dll и некоторые другие, содержат разделы .nv_fatb. Они содержат множество различных вариантов кода CUDA для разных графических процессоров, поэтому в итоге получается от нескольких сотен мегабайт до пары гигабайт.
Каждый процесс Python, загружающий эти библиотеки DLL, выделяет несколько ГБ памяти для загрузки этих библиотек DLL. Таким образом, если 1 процесс Python тратит 2 ГБ памяти, а вы пытаетесь запустить 8 воркеров, вам нужно выделить 16 ГБ памяти только для загрузки библиотек DLL . На самом деле не похоже, что эта память используется , просто передана.
Но в настоящее время с этим есть две проблемы:
Почему это не происходит каждый раз , когда я выполняю перестройку? Если я правильно понимаю, компилятору не хватило памяти при компиляции моего проекта. Итак, если я сделаю перестройку, которая очистит всю предыдущую работу, не должна ли она исчерпать память в следующий раз, если я ничего не изменю?
4 ответа
Я знаю, что это старый, но я оказался здесь, так что могу ответить.
Есть отличная статья о проблемах PCH здесь.
1) Почему это не происходит каждый раз, когда я выполняю перестройку?
Конечно, на этот вопрос сложно ответить. Поскольку это происходит не каждый раз, может быть несколько проблем. Скорее всего, это связано с выделением памяти. Из статьи:
- Фрагментация диапазонов адресов виртуальной памяти, необходимых для PCH перед CL.EXE сможет загрузить его в память.
- Отказ ОС Windows при больших нагрузках увеличить размер файла подкачки в течение определенного порогового времени.
c1xx: ошибка C3859: не удалось создать виртуальную память для PCH [. Project.vcxproj] c1xx: примечание: система вернула код 1455: файл подкачки слишком мал для завершения этой операции
Также может помочь установить PreferredToolArchtecture на x64:
Если вы используете MSBuild из командной строки, вы можете передать / p: PreferredToolArchtecture = x64 в MSBuild. Если вы создаете с помощью MSBuild из Visual Studio, вы можете отредактировать файл .vcxproj, включив в него PropertyGroup, содержащую это свойство.
Это легко упустить из виду, но такие проблемы также возникают, когда предварительно скомпилированный заголовок слишком велик. Также неплохо было бы провести небольшую уборку.
Просто вмешиваюсь в то, чем оказалось решение для меня. Похоже, что Visual Studio пыталась скомпилировать мою программу для нескольких архитектур, хотя я думал, что удалил профили, в диспетчере конфигурации была куча фиктивных записей для сборки в режиме x86. Для меня это было бесполезно, так как я хочу собирать только x64. После удаления этих записей программа снова скомпилировалась, и эта ошибка исчезла. Надеюсь, это кому-то поможет.
Еще одна причина этой проблемы. Я не совсем понимаю, как проект попал в это состояние, но он пытался использовать файлы PCH, для параметра «Файл предварительно скомпилированного заголовка» было установлено значение pch.h , но параметр «Вывод предварительно скомпилированного заголовка» чуть ниже был пусто.
Неудивительно, но Visual Studio очень сильно разошлась по этому поводу, в частности, выдавая многочисленные ошибки C3859 во время сборки.
Сортировка конфигурации проекта до «Наследовать» это значение исправила его.
Я столкнулся с этим, собирая большую базу кода на локальной виртуальной машине. Пытался увеличить размер файла подкачки и т. Д., Но ничего не вышло. Единственное, что сработало в моем случае, - это отключить динамическую память в настройке виртуальной машины Hyper-V и дать виртуальной машине больше ОЗУ, 8 ГБ -> 16 ГБ.
По-видимому, VS выделяет память заранее, поэтому он использует только начальное значение, данное виртуальной машине, и не запускает никаких изменений динамической памяти.
Файл подкачки в Windows служит для расширения оперативной памяти в том случае, если ее не хватает. Написали для вас шпаргалку по манипуляциям с подкачкой: как ей управлять?
Файл подкачки, или виртуальная память — это системный файл на жестком диске компьютера, который Windows использует, чтобы компенсировать нехватку оперативной памяти, если приложениям ее не хватает. Что это за файл, как он работает, что о нем нужно знать, как увеличить файл подкачки в Windows 10, или, наоборот — как отключить файл подкачки в Windows 10, читайте в нашей шпаргалке. В конце статьи — короткое видео, в котором все показано.
Файл подкачки в Windows: зачем он нужен и как работает?
Всем известно, что запущенные приложения на компьютере выполняются в оперативной памяти (ОЗУ, RAM). Выражаясь образно, при запуске приложения считываются с жесткого диска и временно «переписываются» в оперативную память. Вся информация в приложениях тоже хранится в оперативной памяти до тех пор, пока вы их не закроете.
Когда количество оперативной памяти заполняется, в дело вступает так называемый «файл подкачки». Это скрытый системный файл на жестком диске, который может выполнять функции ОЗУ. Вместо того, чтобы закрыть приложение, которому не хватает RAM, Windows скидывает его в файл подкачки и при необходимости возвращает обратно.
Какие приложения отправлять в файл подкачки, система решает сама. К примеру, приложение, которое долго находится в свернутом состоянии, может быть помечено системой как неактуальное. При нехватке RAM оно отправится в файл на жестком диске, чтобы немного почистить память.
В современных компьютерах устанавливается достаточно много ОЗУ, поэтому файл подкачки используется редко. Но если вы замечаете, что приложение при открытии немного «подлагивает», а индикатор жесткого диска на ПК мигает, значит, Windows возвратила его в RAM из файла подкачки. Если это происходит часто, стоит задуматься о том, чтобы докупить немного памяти.
Начну издалека.
В компьютере присутствуют 2 вида памяти - это Оперативная и Физическая.
Оперативная - находится в планках Оперативной памяти на материнской плате. От её объема зависит быстродействие компьютера (чем больше, тем быстрее). В "оперативке" происходят всяческие процессы, нужные для работы Операционной Системы (ОС) и к которым нужно иметь быстрый доступ (оперативный). На этом хватит маленького ознакомления с ней.
Физическая - находится в жестком диске. Подразумевается как место, отведенное файлам ОС и Вашим личным (фото, видео, программы и т.п.).
Но здесь есть небольшой нюанс. Компьютеры, на которых установлена ОС Windows, используют для своих целей Виртуальную память.
Виртуальная память - это своеобразный симбиоз Оперативной и Физической памяти. Когда в оперативной памяти становится мало места, а системе нужно функционировать, она обращается к физической памяти и проделывает с ней те же операции, что и с оперативной. Сложно объяснил? Тогда попроще.
При установке Windows создается Файл подкачки, который находится в системном диске (где установлена ОС) и имеет название pagefile.sys (он скрытый и системный).
Вот к нему и обращается ОС, когда в "оперативке" не хватает памяти. В принципе можно сказать что в этом файле и сосредоточена вся Виртуальная память.
Обычно такой недостаток памяти системой оповещается в подобном окне:
Это означает то, что Виртуальная память, а именно размер файла подкачки слишком мал для выполнения всех операций.
Обычно такое происходит со временем, когда Вы устанавливаете всё больше и больше программ, а они занимают всё больше физического места и процессов тоже становится больше, а они в свою очередь занимают больше оперативной памяти. Что в итоге приводит к малому объему виртуальной памяти.
Кстати, подобное явление так же можно отнести к признакам торможения и зависания компьютера.
Установить нужный размер Виртуальной памяти (файла подкачки) можно следующим образом:
В Windows XP: ПКМ по “Мой компьютер” – “Свойства” – вкладка “Дополнительно” – “Быстродействие” – “Параметры”
В Windows 7: ПКМ по “Компьютер” – “Свойства” – слева выбираем “Дополнительные параметры системы” – вкладка “Дополнительно” – “Быстродействие” – “Параметры” – “Дополнительно” – “Виртуальная память” – “Изменить”.
В конечном счёте окошко будет таким:
Вот здесь и нужно изменять. Обычно лучше увеличить данный размер.
Отмечу лишь что нужно уделить больше внимания на Дополнительные советы по оптимизации файла подкачки.
Читайте также: