У меня есть некоторые сомнения относительно использования GPU в Tensorflow. Я следовал инструкциям по сверточной нейронной сети here (тензорный поток/models/image/cifar10/cifar10_train.py). Как и в учебнике, все параметры (например, веса) сохраняются и обновляются в памяти процессора, а графические процессоры используются только для вычисления градиентов или вывода.Управление памятью при использовании GPU в TensorFlow
Поскольку весы хранятся в ЦП, они должны быть синхронизированы на каждой итерации, и, похоже, ГПУ недостаточно используется (около 60% согласно nvidia-smi
). В случае использования нескольких графических процессоров я понимаю, что весы должны храниться в памяти процессора для синхронизации между графическими процессорами. Однако почему этот учебник хранит все веса в процессоре даже в одном графическом процессоре? Есть ли способ сохранить и обновить их в памяти GPU?
В случае вывода, весы копируются на GPU один раз и повторно их используют? или они должны копироваться каждый раз, когда они используются?
Как насчет данных изображения? Кажется, что эти данные находятся в графическом процессоре (не уверен). Когда эти данные передаются на GPU? Когда они загружаются с диска? или когда они требуются в GPU?
- Если они скопированы на GPU сразу после их загрузки с диска, что произойдет, если размер данных изображения слишком велик, чтобы вписаться в память графического процессора? В таком случае можно каким-либо образом скопировать данные отдельно (что-то вроде предварительной выборки)?
- Если они копируются на GPU по запросу, есть ли способ их предварительной выборки, прежде чем они будут фактически использованы GPU, чтобы избежать простоев?
EDIT: Было бы полезно, если есть способ проверить, где посыла/ПРИЕМ узлы вставляются между CPU и GPU (как в white paper).
Вы можете использовать очередь для извлечения данных в графический процессор. Он будет скопирован при продолжении вычислений и будет иметь код с резьбой, чтобы он был заполнен. – drpng