Как использовать все графические процессоры при работе с кодом pytorch?

Ваша текущая установка OpenCV не поддерживает формат файла, который вы пытаетесь создать на диске.

Проверьте правильность расширения файла. Если это так, вам придется перекомпилировать OpenCV и добавить поддержку этого формата и, возможно, установить библиотеки, которые вам не хватает.

Это все, что можно сказать без дополнительной информации.

EDIT:

Поскольку мне также не удалось создать приложение, которое использует интерфейс C ++ OpenCV (v2.3 на VS2005), я закончил использование следующего обходного пути: при необходимости преобразуйте типы C ++ в типы C.

Преобразование из IplImage* в cv::Mat довольно прямолинейно:

IplImage* ipl_img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED);
Mat mat_img(ipl_img);

imshow("window", mat_img);

Преобразование cv::Mat в IplImage* не так очевидно, но это также просто , а трюк - использовать IplImage вместо IplImage*:

IplImage ipl_from_mat((IplImage)mat_img);

cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
// and then pass the memory address of the variable when you need it as IplImage*
cvShowImage("window", &ipl_from_mat); 
0
задан talonmies 13 July 2018 в 10:12
поделиться

1 ответ

Необходимо раздельно распределять данные обучения для каждого графического процессора. Параллелизм данных реализуется с использованием torch.nn.DataParallel. Пример из документации pytorch :

import torch
import torch.nn as nn


class DataParallelModel(nn.Module):

    def __init__(self):
        super().__init__()
        self.block1 = nn.Linear(10, 20)

        # wrap block2 in DataParallel
        self.block2 = nn.Linear(20, 20)
        self.block2 = nn.DataParallel(self.block2)

        self.block3 = nn.Linear(20, 20)

    def forward(self, x):
        x = self.block1(x)
        x = self.block2(x)
        x = self.block3(x)
        return x
1
ответ дан modesitt 17 August 2018 в 13:11
поделиться
  • 1
    Я испытываю как-то подобную ошибку. Im использует nn.DataParallel(self.net).to(self._device) для распараллеливания и перемещения его на устройство. Если у меня есть только одно устройство CUDA, все будет работать. Но если я использую 2 устройства, я получаю RuntimeErroor из-за несоответствия размера в моей сети (RuntimeError: size mismatch, m1: [1 x 144], m2: [288 x 256] at /pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:249). Я использую размер партии 16, поэтому нет проблем с разделением данных на устройства. У вас есть идея, что происходит? – bene 22 July 2018 в 13:22
Другие вопросы по тегам:

Похожие вопросы: