Медленная предварительная обработка в кластере, но быстрая на локальном компьютере - PullRequest
0 голосов
/ 16 февраля 2020

Я оцениваю re snet -50 для некоторых изображений. Я написал свой собственный код предварительной обработки. Этот код работает быстро на локальной машине, на которой нет графического процессора. Теперь, когда я выполняю тот же код на компьютере кластера, который имеет 2 GPU, эта часть кода работает слишком медленно, примерно в 10-20 раз медленнее, чем на локальной машине. Бывают моменты, когда в кластере работает только мой код, который имеет более 16 ядер.

Я работаю python в среде анаконды. Недавно была проблема с драйвером графического процессора, она была исправлена, я думаю, что после этой проблемы только я сталкиваюсь с этой проблемой.

from torchvision import transforms
import torch 
import time

data_transforms = {
    'train': transforms.Compose([
        transforms.Scale(256),
        transforms.RandomSizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Scale(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}


data_transforms_1 = {
    'train': transforms.Compose([
        transforms.Grayscale(3),
        transforms.Scale(256),
        transforms.RandomSizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Grayscale(3),
        transforms.Scale(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}


def preprocess_image(array, split_type, use_gpu = True, gpu_name = 'cuda:0'):
    if(split_type == 'test'):
        split_type = 'val'
    array_preprocess = []
    for i in array:
        if(i.mode == 'L'):
            array_preprocess.append( data_transforms_1[split_type](i) )
        else:
            array_preprocess.append( data_transforms[split_type](i) )
    if( use_gpu == True ):
        array_preprocess = torch.stack(array_preprocess).cuda(gpu_name)
    else:
        array_preprocess = torch.stack(array_preprocess)
    return array_preprocess
...