Pytorch模型使用GPU内存,但波动率为0

Pytorch模型使用GPU内存,但波动率为0,pytorch,Pytorch,我有一个模型,它占用了gpu内存,但大部分时间gpu是空闲的,它达到90波动,然后返回到0 如何将波动率保持在100 class KaggleAmazonDataset(Dataset): """Dataset wrapping images and target labels for Kaggle - Planet Amazon from Space competition Arguments: A CSV file path Path to i

我有一个模型,它占用了gpu内存,但大部分时间gpu是空闲的,它达到90波动,然后返回到0

如何将波动率保持在100

class KaggleAmazonDataset(Dataset):
    """Dataset wrapping images and target labels for Kaggle - Planet Amazon from Space competition
    Arguments:
        A CSV file path
        Path to image folder
        Extension of images
        PIL transforms
    """

    def __init__(self, csv_path, img_path, img_ext, transform=None):
        # import pdb;pdb.set_trace()
        tmp_df = pd.read_csv(csv_path)
        # assert tmp_df['Left-Fundus'].apply(lambda x: os.path.isfile(img_path + x + img_ext)).all(), \
# "Some images referenced in the CSV file were not found"

        # self.mlb = MultiLabelBinarizer()
        self.img_path = img_path
        self.img_ext = img_ext
        self.transform = transform

        self.X_train = tmp_df['Left-Fundus']
        self.y_train = tmp_df.iloc[:, 7:16].values
        # self.y_train = self.mlb.fit_transform(tmp_df['tags'].str.split()).astype(np.float32)

    def __getitem__(self, index):
        img = Image.open(self.img_path + self.X_train[index] + self.img_ext)
        img = img.convert('RGB')
        if self.transform is not None:
            img = self.transform(img)

        label = torch.from_numpy(self.y_train[index])
        return img, label

    def __len__(self):
        return len(self.X_train.index)

# 
transformations = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor()])

dset_train = KaggleAmazonDataset(TRAIN_DATA,IMG_PATH,IMG_EXT,transformations)
train_loader = DataLoader(dset_train,
                          batch_size=256,
                          shuffle=True,
                          num_workers=12, # 1 for CUDA
                         pin_memory=True)

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(2304, 256)
        self.fc2 = nn.Linear(256, 8)

    def forward(self, x):

        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(x.size(0), -1) # Flatten layer
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return torch.sigmoid(x)

model = Net().cuda()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

如果这里有什么问题,任何建议都会非常有用。提前谢谢。

对于术语
波动性
,您是指GPU利用率吗?在我看来,数据加载过程花费了太多的时间,因此您的GPU必须等待数据加载。您是否使用
pin_memory=False
尝试了
Dataloader
?根据Pytorch的版本,您可能会发现线程很有趣。另外,在您的代码块中,
num#u workers=12
行中的
#1对于CUDA
是什么意思?如果您试图只使用一个worker,那么批处理256个图像可能会非常慢。您可能想尝试一些较小的批量大小,看看您的GPU是否得到充分利用。如果您的网络很小,您不必通过增加批处理大小来填充所有GPU内存。

对于术语
volatility
,您是指GPU利用率吗?在我看来,数据加载过程花费了太多的时间,因此您的GPU必须等待数据加载。您是否使用
pin_memory=False
尝试了
Dataloader
?根据Pytorch的版本,您可能会发现线程很有趣。另外,在您的代码块中,
num#u workers=12
行中的
#1对于CUDA
是什么意思?如果您试图只使用一个worker,那么批处理256个图像可能会非常慢。您可能想尝试一些较小的批量大小,看看您的GPU是否得到充分利用。如果网络很小,则不必通过增加批处理大小来填充所有GPU内存