Как посчитать сколько нужно видеопамяти для тренировки нейронной сети?
Есть ли где-нибудь информация при какой конфигурации НС сколько необходимо памяти в видеокарте для комфортного обучения нейронной сети? Или может кто-то смотрел насколько заполнена память при обучении вашей нейронной сети? Тогда хотелось бы увидеть - конфигурация сети, размер минибача при обучении и сколько это занимало памяти.
Цель сего - я только начинаю разбираться с нейронными сетями (Python+Keras). Планирую купить карту Нвидиа. На начальном этапе писать что-то сверхсложное не планирую, поэтому возник вопрос - есть ли смысл сразу гнаться за гигабайтами? Если типовые примеры из мниста или сифар-10 занимают не более 1-2 Гб при обучении, то смысла покупать карточку с 6-8-11 Гб для меня нету ... всё равно через год-полтора нужно будет апгрейдиться, а там уже и соответствующие карты "подвезут".
В принципе, самое сложное, что я сейчас вижу - входящий слой до 10к нейронов, скрытый слой до 30к нейронов с релу и выходящий слой 5-10 нейронов с софтмаксом. Размер обучающей выборки - 100к-500к примеров. Если кто-то может сказать, сколько оптимально под это нужно видеопамяти, буду благодарен. =)
Роман, наверно 10к*30к+30к*10=итого 300 Мб
300*4байта=1,2 Гб
мниста имеет 50к строк, это мой пример до 500к.
Остаётся вопросом - в память грузятся минибатчи или "всё что влезет"?
И это всё прикидка на глазок... может у вас есть возможность запустить к примеру msi afterburner и обучение мниста, и посмотреть сколько реально съедается видеопамяти?
1. Для простых задач вполне CPU хватает.
2. На AWS, например, есть инстансы специально для машинного обучения. p3.2xlarge - это одна Tesla V100 с 16 Гб. Если делать spot instance, то выходит примерно $0.9/час. Если вы не собираетесь интенсивно 24/7 в течение нескольких месяцев обучать, то такой вариант бюджетнее.
Обучал на таком инстансе wav2letter. В память GPU модель не влезла, пришлось все веса в 4 раза сократить. Обучение заняло ~90 часов. Но это весьма хардкорная модель.
Сам отвечу. Необходимый объём памяти равен объёму обучающей выборки +ещё чуть-чуть. Если данных больше, чем объём памяти видеокарты, то падает производительность ядра, т.к. начинается постоянная подкачка данных из оперативной памяти в память видеокарты. Загрузка процессора видеокарты в таком случае падает в 2-3 раза, иногда больше.
Если у вас обучающая выборка 10+ Гб, то на 1060 возможно загрузка карты будет постоянная приближённая к максимуму. Т.е. проц не быстрый и успевает обработать то, что подгрузилось. Карта 1080 и выше в такой ситуации будет постоянно простаивать в ожидании данных, т.е. время обучения НС окажется условно одинаковым.
Если же объём выборки будет в районе 5-6 Гб или меньше, то 1080 окажется существенно быстрее.
Завит от устройства на котором будешь обучать.
Размер обучайющей выборки обычно не сильно влияет, тк её можно делать частями, а вот модель может жрать значительно. Например на видео карке где процессы распараллеливаются - для вычеслений участки модели дублируются в памяти. Для процессора распараллеливание происходит в меньшей степени и потому модель меньше занимает данных. Дублирование данных модели необходимо потому что модель в памяти должна быть неизменна на протяжении всего процесса обучения, а вот то какими пачками ты будешь обучать модель уже меньше влияет на размер резервированной памяти