torch: в чем разница между использованием net:cuda() и использованием cudnn.somemodules

Мне интересно, в чем разница между 1) использованием net:cuda() после создания нейронной сети и 2) использованием cudnn.somemodules на пути к завершению нейронной сети.

то есть различия между вер 1 и вер 2

[версия 1]

local net = nn.Sequential()
net:add(nn.SpatialConvolution(3, 8, 5, 5))
net:add(nn.View(8*20*20))
net:add(nn.Linear(8*20*20, 10))
net:add(nn.LogSoftMax())
net:cuda()

[версия 2]

local net = nn.Sequential()
net:add(cudnn.SpatialConvolution(3, 8, 5, 5))
net:add(cudnn.View(8*20*20))
net:add(cudnn.Linear(8*20*20, 10))
net:add(cudnn.LogSoftMax())
  • не уверен, что коды выше работают. Они просто предназначены, чтобы показать некоторые примеры

2 ответа

:cuda() это использовать GPU

cudnn.xxx заключается в использовании некоторой оценки модели GPU, поэтому после ее добавления обучение будет проходить быстрее, чем только использование cuda.

Существует введение для cudnn: Ускорение машинного обучения с помощью библиотеки глубоких нейронных сетей cuDNN

cuda() это призыв переместить тензоры в графический процессор для более быстрого вычисления операций.

это библиотека модулей, оптимизированных для cuda, аналогичная nn. Если вы работаете на графическом процессоре, используйте cudnn Анализы будут быстрее, но ваш код не будет переноситься на устройство ЦП:

NVIDIA CUDA Deep Neural Network (cuDNN) - это библиотека примитивов с ускорением на GPU для глубоких нейронных сетей. Он обеспечивает хорошо настроенные реализации подпрограмм, часто возникающих в приложениях DNN. Эти примечания к выпуску описывают ключевые функции, улучшения и улучшения программного обеспечения, а также известные проблемы для cuDNN 8.1.1 и более ранних версий.

Другие вопросы по тегам