- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我推测我在使用 PyTorch 框架训练 Conv 网络时遇到了 GPU 内存泄漏。如下图
为了解决这个问题,我添加了 -
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
但由于我使用的是 torch.nn.DataParallel
,所以我希望我的代码能够利用所有 GPU,但现在它只利用 GPU:1
。
在使用os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
之前,GPU利用率低于(同样糟糕)-
关于挖掘further ,我开始知道,当我们使用torch.nn.DataParallel
时,我们不应该使用CUDA_LAUNCH_BLOCKING'
,因为它使网络陷入某种死锁机制。所以,现在我又回到了 GPU 内存问题,因为我认为我的代码没有利用它在没有设置 CUDA_LAUNCH_BLOCKING=1
的情况下显示的那么多内存。
我的代码使用 torch.nn.DataParallel
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs!")
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model_transfer = nn.DataParallel(model_transfer.cuda(),device_ids=range(torch.cuda.device_count()))
model_transfer.to(device)
如何解决 GPU 内存问题?编辑:最少的代码 -
image_dataset = datasets.ImageFolder(train_dir_path,transform = transform)
train_loader = torch.utils.data.DataLoader(image_dataset['train'], batch_size=batch_size,shuffle = True)
model_transfer = models.resnet18(pretrained=True)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs!")
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model_transfer = nn.DataParallel(model_transfer.cuda(),device_ids=range(torch.cuda.device_count()))
model_transfer.to(device)
## Training function
for epoch in range(1, n_epochs+1):
for batch_idx, (data, target) in enumerate(train_loader):
if use_cuda:
data, target = data.to('cuda',non_blocking = True), target.to('cuda',non_blocking = True)
optimizer.zero_grad()
output = model(data)
loss = criterion(output,target)
loss.backward()
optimizer.step()
train_loss += ((1 / (batch_idx + 1)) * (loss.item() - train_loss))
## Validation loop same as training loop so not mentioning here
print('Epoch: {} \tTraining Loss: {:.6f} \tValidation Loss: {:.6f}'.format(
epoch,
train_loss,
valid_loss
))
if valid_loss <= valid_loss_min:
valid_loss_min,valid_loss))
torch.save(model.state_dict(), 'case_3_model.pt')
valid_loss_min = valid_loss
最佳答案
因此,我解决一些 CUDA 内存不足问题的方法是确保删除无用的张量并修剪可能因某些隐藏原因而被引用的张量。问题可能是由于请求的内存超出了您的容量,或者积累了不需要但不知何故留在内存中的垃圾数据。
内存管理最重要的方面之一是如何加载数据。与读取整个数据集不同,从磁盘读取(读取 npy 时使用 memmap)或进行批量加载(一次只读取一批图像或任何数据)可能会更有效地提高内存效率。尽管这可能会导致计算速度变慢,但它确实为您提供了灵活性,让您不必为了运行代码而外出购买更多 GPU 来存储内存。
我们不确定您的代码在读取数据或训练 CNN 方面的结构如何,所以这就是我能提供的建议。
关于deep-learning - torch : GPU Memory Leak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61991467/
你能告诉我,下面两种 scss 样式之间的区别吗?我对此没有清楚的认识。 :host { display: inline-block; /deep/ { span { co
/deep/和::ng-deep 这些在 DOM 模式下也被弃用了,我想知道将来是否会有/deep/和::ng-deep 的替代方案,或者我们应该开始使用其他方式? ::ng-deep .result
长期以来,我一直在寻找这个问题的明确答案。是否有可靠且推荐的替代策略来执行此操作?此问题的不正确答案包括: Just favor ::ng-deep for now 和 if component au
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在阅读 DQN 网络上的 deepmind 自然论文。 我几乎得到了关于它的一切,除了一个。我不知道为什么以前没有人问过这个问题,但无论如何对我来说似乎有点奇怪。 我的问题: DQN 的输入是一个
我在我的新 Jetpack Compose 应用程序中设置了一个底栏,其中包含 2 个目的地。我尝试遵循 Google 的示例。 例如它看起来像这样: @Composable fun MyBottom
所以,我读过 here在 Vue.js 中,您可以在选择器中使用 /deep/ 或 >>> 来创建适用于子组件内部元素的样式规则。但是,尝试在我的样式中使用它,无论是在 SCSS 中还是在普通的旧 C
我正在尝试实现DQN和DDQN(两者都有经验回复)来解决OpenAI AI-Gym Cartpole环境。这两种方法有时都能学习并解决这个问题,但并非总是如此。 我的网络只是一个前馈网络(我尝试过使用
scss中下面两个有什么区别,在片段中给出一些例子。 :host::ng-deep .content-body { ... } 和 .content-body :host::ng-deep { ...
在我们的元素中,我们使用了 Angular Material 进行开发。我们已经覆盖了 使用::ng-deep 的 Angular Material 样式自定义 CSS 属性。 在使用::ng-dee
我尝试熟悉 Q-learning 和深度神经网络,目前尝试实现 Playing Atari with Deep Reinforcement Learning . 为了测试我的实现并尝试使用它,我坚持尝
我开始在 Vue 3 中收到以下警告 ::v-deep用法。 ::v-deep usage as a combinator has been deprecated. Use ::v-deep() in
谁能给我解释一下 df2 = df1 df2 = df1.copy() df3 = df1.copy(deep=False) 我已经尝试了所有选项并执行了以下操作: df1 = pd.DataFram
我对 PyTorch 比较陌生,但我对 Keras 和 TensorFlow 有很好的经验。我关注了这个article在我自己的训练脚本中使用 DDP。然而,出于某种原因,我总是最终得到: proce
我正在尝试为 Conv2D 和 transposeconv2D 层编写 dropconnect 代码。按照 https://pytorchnlp.readthedocs.io/en/latest/_m
我正在做一个 mask 检测项目,我使用 ultralytics/yolov5 训练了我的模型。我将训练好的模型保存为一个 onnx 文件,你可以在这里找到模型文件 model.onnx .现在我希望
我正在研究一种强化算法,我对此很陌生,并试图掌握一些东西。 Player1Env 查看 7x6 Connect4 游戏网格。我按如下方式初始化类: def __init__(self): su
我有几个嵌入矩阵,假设 E1 矩阵用于 Glove,E2 用于 Word2vec。 我想构建一个简单的情感分类器,它采用该嵌入的可训练加权和。 例如,对于单词“dog”,我想在学习 x 和 y 时得到
我正在使用它处理深度学习和医学图像分类。我使用大脑 MRI 数据并将它们转换为 jpg。然后使用 VGG16 进行训练。当我检查损失、准确性、验证损失和验证准确性时,我看到了下图。 accuracy
我设计的网络包括转置卷积层。(pytorch 中的 ConvTranspose2d) 我想获得网络的感受野大小。 感受野的概念是否也适用于转置卷积层? 如果是,那我怎样才能得到它? 最佳答案 您可以使
我是一名优秀的程序员,十分优秀!