当前位置: 首页 > 知识库问答 >
问题:

Pytorch GPU通用化

景令秋
2023-03-14

因此,我目前正在训练我的DQN在雅达利突破(从OpenAI健身房)。我的问题是速度很慢,但我的GPU似乎没有得到充分利用。我正在使用一个名为HWMonitor的工具以及nvidiasmi命令监视它。你知道为什么吗?

以下是一些可能相关的规范:

Python version: 3.7.7
torch version: 1.4.0
gym version: 0.17.2
CUDA version: 11.0
GPU: GTX 980 founders edition
CPU: Inte Core i7 4790K

以下是对我的DQN的一些见解:

device:cuda
DQN(
  (conv1): Conv2d(1, 16, kernel_size=(8, 8), stride=(4, 4))
  (conv2): Conv2d(16, 32, kernel_size=(4, 4), stride=(2, 2))
  (mp1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (mp2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (lin1): Linear(in_features=128, out_features=256, bias=True)
  (lin2): Linear(in_features=256, out_features=4, bias=True)
)
optimizer: Adam (
Parameter Group 0
    amsgrad: False
    betas: (0.9, 0.999)
    eps: 1e-08
    lr: 0.001
    weight_decay: 0
)
gamma: 0.95
epsilon_decay: 0.99
epsilon_min: 0.01
obs_space: [110, 84]
trainig_batchsize: 32

还有一件事可能很重要。出于某种原因,用CPU训练比用GPU更快。这些结果是平均超过30分钟的训练。我不能解释为什么我的CPU更快,所以如果有人有线索,我肯定想听。

GPU took 353 seconds for 1000 minibatches
CPU took 148 seconds for 1000 minibatches

如果我的任何代码需要进一步检查我的问题,请让我知道。

编辑:我现在正在考虑使用云GPU服务,更具体的Linode。唯一让我担心的是,问题的原因在于我的代码。因此,使用云GPU服务不是很明智。

共有1个答案

尉迟俊能
2023-03-14

尽管以下内容在技术上并没有让它变得“更快”,但在改变/优化代码的意义上,我仍然想把它作为我问题的答案。

我的一个解决方案是使用谷歌可乐。在线笔记本,非常类似于jupyter笔记本,但有一个关键的区别,当使用笔记本时,你可以访问谷歌的计算资源(例如,你可以免费使用高端图形处理器!)。

在我的情况下,这是一个整体的加速。但即使你家里有一个相当好的GPU,你仍然可以用它来同时测试两组不同的超参数。

 类似资料:
  • 通用通知消息 消息体 ChannelMessage 例子 Swift: NotificationCenter.rokidsdk.addObserver(self, selector: #selector(handleChannelMsgsNotification(_:)), name: NSNotification.Name(rawValue: SDKNotificationName.Channe

  • 问题内容: 前几天,我正在查看别人的代码,遇到了引起关注的一行。为简化起见,假设我有一个通用的A类和一个抽象的B类。是否允许以下​​实例化?如果可以,为什么? 我个人从未见过像上面这样的实例化,尽管有这样的声明: 肯定会成立。我一直在泛型中使用通配符声明方法参数,所以我可能没有经验。 问题答案: 其实不编译。自Java 5以来,它一直是非法的。 但是我想你原来的例子是这样的。后者在Java的最新版

  • 类属性 $state state值,调用getAuthUrl方法后可以获取到 $scope 授权权限列表 $result 接口调用结果 $accessToken AccessToken,调用相应方法后可以获取到 $openid openid,调用相应方法后可以获取到

  • 问题内容: 我想在我的api中提供以下内容: 所以我这样写: 但是java无法解决。 随着代替它的工作原理,但第二个实际上是多余的“事业AbtractThing已定义的类型。所以我喜欢摆脱它。 问题答案: 你不能摆脱它。第二个不是多余的。您希望编译器将第一个解释为类型参数,但事实并非如此。您也可以这样写: 请注意,在这种情况下,它是一个具体的类,而不是类型参数。将此与以下内容进行比较: 请注意,它

  • 以下是各个选项的中文翻译: 在启动时: 创建新文档 新建组合 新建的组合允许深度点击 如果启用了深度点击,你就可以在画布中直接选中组合内的对象,而不需要先进入组合。如果关闭此选项,你仍然可以通过按住Cmd键来进行深度点击。 撤销 将类似的操作组合在一起 一次撤销将同时撤销短时间内连续进行的类似操作。 字体渲染 对字体进行子像素反锯齿 允许子像素反锯齿,可以精确获得在Mac上字体渲染效果。iOS设备

  • application提供了千牛移动提供的原生能力,比如打开聊天窗口(openChat)、获取地址位置(location)和打开网址(openWebsite)等,点击查看api列表和具体用法 打开“千牛欢迎页” QN.application.invoke({ api: 'openPlugin', query: { appkey: 23093073 }, settings: