Pytorch模型使用GPU内存,但波动率为0
我有一个模型,它占用了gpu内存,但大部分时间gpu是空闲的,它达到90波动,然后返回到0 如何将波动率保持在100Pytorch模型使用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
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内存