Как выполнить разложение большой матрицы с помощью GPU в Tensorflow

#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. Во-вторых, я не уверен, что это того стоит, учитывая разницу в пропускной способности разной оперативной памяти.