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 и более ранних версий.