Как создать пользовательский код на Python с использованием GPU при использовании тензоров Pytorch и функций матрицы

#machine-learning #pytorch #gpu #conv-neural-network

#машинное обучение #pytorch #графический процессор #conv-neural-network

Вопрос:

Я создал CNN с нуля, используя только тензоры Pytorch и матричные операционные функции в надежде использовать графический процессор. К моему удивлению, графический процессор остается загруженным на 0%, и мое обучение, похоже, проходит не быстрее, чем на моем процессоре.

Перед обучением:

введите описание изображения здесь
введите описание изображения здесь

Во время обучения:

введите описание изображения здесь
введите описание изображения здесь

Я дважды проверил, доступна ли CUDA, и уже установил ее.

Видеокарта: Nvidia GEFORCE 2070 SUPER

Процессор: Intel i5 10400

Среда программирования: Jupyter Notebook

Версия Cuda amp; Cudnn: 11.0

Версия Pytorch: 1.6.0

Комментарии:

1. Один раз проверьте команду nvidia-smi внутри другого терминала во время выполнения кода. Возможно, ваш код использует слишком мало графического процессора. Использование nvidia-smi лучше проверять использование графического процессора в моделях DL

2. Я не вижу, чтобы мой графический процессор использовался после выполнения указанной вами команды. Я добавил результат команды в свой вопрос выше, пожалуйста, просмотрите.

3. на графике оптимизации GPU написано 3D, это означает, что график показан только для использования 3D, а не CUDA, есть стрелка вниз с использованием 3d, чтобы изменить его на CUDA, и вы сможете увидеть использование cuda.

4. @Mughees Да, теперь я вижу использование cuda, и оно составляет около 27% во время обучения. Спасибо, что указали на это. Но я тренировался с размером пакета 1000, как он мог использовать только 27% ядер cuda? И для вычисления прямого и обратного распространения одного пакета требуется почти час или около того.

5. В вашем коде все классы находятся на процессоре, поэтому используются CPU. Pytorch реализует использование графического процессора из серверной части. и .cuda будет работать, когда класс наследует torch.nn.Module класс.

Ответ №1:

Вы должны переместить свою модель и данные на графический процессор с помощью

 model.cuda()
# and 
x = x.cuda()
y = y.cuda()
  

Кажется, вы делаете это с помощью вызовов forward и backward. Чтобы убедиться, что модель переходит на графический процессор, постоянно контролируйте использование графического процессора с помощью команды shell

watch -n 5 nvidia-smi

Комментарии:

1. Я добавил результат выполнения команды ‘nvidia-smi’ в свой вопрос выше. И я не могу выполнить model.cuda (), поскольку я создал модель с нуля и не использую ее из Pytorch. Я использовал только тензоры и функции матрицы из Pytorch. В остальном это простой код на Python.

2. поскольку вы переводите свои тензоры в cuda и поскольку он работает без сбоев, он должен быть переведен на графический процессор. Можете ли вы сделать скриншот вывода nvidia-smi перед запуском обучения и еще один после запуска обучения. Во время обучения дождитесь завершения одной эпохи, а затем сделайте остановку экрана.

3. Добавлены скриншоты выше в вопросе. Похоже, что нагрузка ложится на центральный процессор, а не на графический процессор.