gpt4 book ai didi

tensorflow - Keras 没有显示使用 GPU 提高训练速度(部分 GPU 使用?!)

转载 作者:行者123 更新时间:2023-12-04 02:54:48 26 4
gpt4 key购买 nike

我正在尝试在来自我的 Jupyter Notebook 的 AWS p2.xlarge 实例上的 GPU 而不是 CPU 上训练我的模型。我正在使用 tensorflow-gpu 后端(仅 tensorflow-gpu 已安装并在 requirements.txt 中提及,而不是 tensorflow )。

与使用 CPU 相比,在这些实例上训练模型时,我没有看到任何速度改进,事实上,我在每个时期获得的训练速度几乎与我在 4 核笔记本电脑 CPU 上的训练速度相同(p2.xlarge 也有 4 个 vCPU使用 Tesla K80 GPU)。我不确定是否需要对我的代码进行一些更改以适应 GPU 可以提供的更快/并行处理。我在我的模型代码下面粘贴:

model = Sequential()
model.add(recurrent.LSTM(64, input_shape=(X_np.shape[1], X_np.shape[2]),
return_sequences=True))
model.add(recurrent.LSTM(64, return_sequences = False))
model.add(core.Dropout(0.1))
model.add(core.Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'rmsprop', metrics=['accuracy'])

model.fit(X_np, y_np, epochs=100, validation_split=0.25)

同样有趣的是,每次我使用 nvidia-smi 检查 GPU 状态时,GPU 似乎都在使用 50%-60% 的处理能力和几乎所有的内存。 (但在不训练时分别下降到 0% 和 1MiB):
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.81 Driver Version: 384.81 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 On | 00000000:00:1E.0 Off | 0 |
| N/A 47C P0 73W / 149W | 10919MiB / 11439MiB | 52% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1665 C ...ubuntu/aDash/MLenv/bin/python 10906MiB |
+-----------------------------------------------------------------------------+

另外,如果您想查看我关于使用 Jupyter Notebook 的 GPU 的日志:
[I 04:21:59.390 NotebookApp] Kernel started: c17bc4d1-fa15-4b0e-b5f0-87f90e56bf65
[I 04:22:02.241 NotebookApp] Adapting to protocol v5.1 for kernel c17bc4d1-fa15-4b0e-b5f0-87f90e56bf65
2017-11-30 04:22:32.403981: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2017-11-30 04:22:33.653681: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2017-11-30 04:22:33.654041: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 0000:00:1e.0
totalMemory: 11.17GiB freeMemory: 11.10GiB
2017-11-30 04:22:33.654070: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7)
2017-11-30 04:22:34.014329: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7
2017-11-30 04:22:34.015339: I tensorflow/core/common_runtime/direct_session.cc:299] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7

2017-11-30 04:23:22.426895: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7)

请建议可能是什么问题。无论如何,非常感谢您看这个!

最佳答案

发生这种情况是因为您使用的是 LSTM 层。
Tensorflow 对 LSTM 层的实现并不是那么好。原因可能是循环计算不是并行计算,GPU 非常适合并行处理。
我以自己的经验证实:

  • 在我的模型中使用 LSTM 获得了可怕的速度
  • 决定测试去除所有 LSTM 的模型(得到一个纯卷积模型)
  • 结果速度简直惊人!!!

  • 这篇关于使用 GPU 和 tensorflow 的文章也证实了这一点:
  • http://minimaxir.com/2017/07/cpu-or-gpu/

  • 一个可能的解决方案?
    您可以尝试使用新的 CuDNNLSTM ,这似乎是专门为使用 GPU 而准备的。
    我从来没有测试过它,但你很可能会得到更好的性能。
    我还没有测试过的另一件事,我不确定它是为此而设计的,但我怀疑它是:你可以把 unroll=True在你的 LSTM 层中。有了这个,我怀疑循环计算将被转换为并行计算。

    关于tensorflow - Keras 没有显示使用 GPU 提高训练速度(部分 GPU 使用?!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574050/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com