Обучение нейронной сети видеокартой и процессором — какая разница в потреблении памяти?
Сейчас учусь работать с нейронными сетями. Пробую всё на Python 3.6 с использованием Keras. К примеру, обучение текущей нейронной сети "съело" в оперативной памяти около 3Гб. Если перенести обучение такой сети на видеокарту, то она также потребует 3 Гб? или больше? или меньше?
Сама сеть простая - около 150к обучаемых параметров, остальное обучающая выборка.
Спрашиваю, потому что нет дискретной видеокарты, чтобы попробовать.
Иван Шумов, бесплатно? Я согласен. Куда загружать мои гигабайты? =)
А так, майнеры по паре лет круглые сутки гоняют, поэтому надеюсь неделя в месяц сильно делу не повредит. И почему перегревать? Нужно продумывать систему вентиляции и не запихивать всё в корпуса Mini-ITX.
Иван Шумов, зачем доллар час, если можно бесплатно 24? ну ладно. + 2,5 р/кВт. =)
Если НС профессия, то вариант правильный. Если "интересно, а что дальше - не знаю", то лучше вк.
Зависит от кол-ва параллельных потоков: уменьшите - будет меньше занимать оперативки, но дольше выполняться.
Дискретная карта - вычисляет, разумеется, быстрее, поэтому потребление памяти карты будет зависеть от кол-ва параллельных потоков, а их количество - зависит от самой структуры НС.
xmoonlight, т.е. проста сеть MLP можно рассчитывать на 1-к-1?
Количество потоков - вы подразумеваете количество одновременно обсчитываемых нейронов или количество нейронов в сети в принципе?
FerroPanda, кол-во потоков - это кол-во потоков. Есть очередь потоков, есть итог очереди. Когда нужен промежуточный итог - все последующие вычисления будут ждать результата потоков. Советую почитать про очереди, параллельные потоки и для чего они нужны.
xmoonlight, что такое очереди и потоки представление имеется. Возможно не смогу объяснить научно, но понимаю как это работает.
Одно но ... выделяется память под хранение результатов потоков до расчёта промежуточного итога, остальное "забивается" обучающей выборкой. Если она не влазит в память, то она постоянно подгружается из оперативной памяти. Как вариант результаты потоков хранятся в оперативной памяти, вся память видеокарты забивается обучающей выборкой (если не влазит, то подгружается). Какую-то часть памяти занимает сама структура сети (описание шейдеров или что-то такое). Как на это всё влияет количество потоков? Только на размер описания сети?
Зависит от кол-ва параллельных потоков: уменьшите - будет меньше занимать оперативки,
Кол-во потоков - ни на что не влияет
Какое из высказываний правильное?
Объём памяти влияет на максимальное количество потоков, но потоки на память не влияют. Т.е. если модель с выборкой влезла целиком, то она влезла, если нет, то нет. И ничего не изменишь. Можно только оптимизировать перераспределение ресурсов.
Так вопрос состоит в том, что если весь питон со всеми моделями и переменными при обучении на CPU занимает 7 Гб оперативной памяти, то влезет ли всё это в память 8-и гигабайтной видеокарты? Или всегда есть коэффициенты х1,5 или х2 или ...?
FerroPanda, Питон и прочие библиотеки - не грузятся сразу в память видюхи.
Поэтому, если хотите обучать "в ширину" (MNIST, изображения) - берите больше оперативы к видюхе (здесь нужны потоки), если нужно обучать "в глубину" - берите больше производительность (т.к. потоки - здесь не особо помогут ускорить обучение).
Ясно?
xmoonlight, нет. =)
Вы не ответили на мой вопрос. Чего где больше в каком случае - это я знаю.
Вопрос в эквивалентности расхода памяти - ОЗУ и память видеокарты.
Вы можете запустить одну и туже сеть на обучение у себя на CPU и GPU, и сказать разницу в "потреблённой" памяти? Желательно, чтобы процесс целиком поместился в память видеокарты.
xmoonlight, мне для учёбы. =)
Если серьёзно, то я пока что разбираюсь. Если НС как лего, то скорее всего будут перепробованы разные варианты - и MLP, и LSTM, и свёртки, и комбинации всего этого.
А сами данные - таймсерии.