#tensorflow #gpu
#tensorflow #графический процессор
Вопрос:
Я пытаюсь выполнить разложение матрицы (или разложение Такера по тензору) в Tensorflow с помощью GPU. У меня есть tensorflow-gpu, мой графический процессор NVidia имеет 4 ГБ оперативной памяти. Моя проблема в том, что моя входная матрица огромна, миллионы строк и миллионы столбцов, а размер матрицы составляет более 5 ГБ в памяти. Итак, каждый раз, когда Tensorflow выдает мне ошибку нехватки памяти (ООМ). (Если я выключу GPU, весь процесс может успешно выполняться в CPU с использованием системной оперативной памяти. Конечно, скорость низкая.)
Я провел некоторое исследование в Tensorflow и в библиотеке NVidia CUDA. Похоже, что CUDA имеет механизм «унифицированной памяти», поэтому системная оперативная память и GPU RAM совместно используют одну адресную книгу. Пока никаких дополнительных подробностей не найдено.
Интересно, поддерживает ли Tensorflow какой-либо механизм совместного использования памяти, чтобы я мог генерировать входные данные в системной оперативной памяти? (Поскольку я хочу использовать GPU для ускорения вычислений) И GPU может выполнять вычисления по частям.
Комментарии:
1. Можно ли разбить это разложение на более мелкие фрагменты вручную? Это ваш лучший выбор. Архитектуры с разделяемой памятью обычно истощают GPU, и вы теряете значительное преимущество в скорости.
2. Спасибо тебе за твои точные комментарии, Куба. Я не нашел никаких простых / эффективных способов сделать это. Одна из причин в том, что я не нашел простого способа разделить эту работу, похожую на SVD. Во-вторых, я не уверен, что это того стоит, учитывая разницу в пропускной способности разной оперативной памяти.