如何使用 Theano 启用 Keras 以利用多个 GPU

Posted

技术标签:

【中文标题】如何使用 Theano 启用 Keras 以利用多个 GPU【英文标题】:How to enable Keras with Theano to utilize multiple GPUs 【发布时间】:2016-08-27 19:32:52 【问题描述】:

设置:

使用带有 Nvidia GPU 的 Amazon Linux 系统 我使用的是 Keras 1.0.1 运行 Theano v0.8.2 后端 使用 CUDA 和 CuDNN THEANO_FLAGS="device=gpu,floatX=float32,lib.cnmem=1"

一切正常,但是当我增加批量大小以加快训练速度时,大型模型的视频内存不足。我认为迁移到 4 GPU 系统理论上会提高可用总内存或允许更小批量更快地构建,但观察 nvidia 统计数据,我可以看到默认情况下只使用一个 GPU:

+------------------------------------------------------+ 
| NVIDIA-SMI 361.42     Driver Version: 361.42         |         
|-------------------------------+----------------------+----------------------+ 
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | 
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |    
|===============================+======================+======================| 
|   0  GRID K520           Off  | 0000:00:03.0     Off |                  N/A | 
| N/A   44C    P0    45W / 125W |   3954MiB /  4095MiB |     94% Default      |
+-------------------------------+----------------------+----------------------+ 
|   1  GRID K520           Off  | 0000:00:04.0     Off |               N/A    | 
| N/A   28C    P8    17W / 125W |     11MiB /  4095MiB |        0% Default    |
+-------------------------------+----------------------+----------------------+ 
|   2  GRID K520           Off  | 0000:00:05.0     Off |               N/A    | 
| N/A   32C    P8    17W / 125W |     11MiB /  4095MiB |           0% Default |
+-------------------------------+----------------------+----------------------+ 
|   3  GRID K520           Off  | 0000:00:06.0     Off |                N/A   |     
| N/A   29C    P8    17W / 125W |     11MiB /  4095MiB |           0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+ 
| Processes:                                                       GPU Memory | 
|  GPU       PID  Type  Process name                               Usage      | 
|=============================================================================| 
|    0      9862    C   python34                                      3941MiB |

我知道原始 Theano 可以显式手动使用多个 GPU。 Keras 是否支持使用多个 GPU?如果是这样,它是否将其抽象化,或者您是否需要像 Theano 中那样将 GPU 映射到设备并将计算显式编组到特定的 GPU?

【问题讨论】:

【参考方案1】:

多 GPU 训练是 experimental(“代码相当新,目前仍被认为是实验性的。它已经过测试,似乎在观察到的所有情况下都能正确执行,但请务必仔细检查您的结果在发表论文或任何类似的东西之前。”)并且尚未集成到 Keras 中。但是,您可以将多个 GPU 与 Keras 与 Tensorflow 后端一起使用:https://blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html#multi-gpu-and-distributed-training。

【讨论】:

在过去一年左右的时间里,您是否听说过这方面的进展?我知道 Tensorflow 正如预期的那样正在蚕食 Theano 的基础,所以我对任一后端都很灵活。 @Ray:我不确定在 Theano 端,但如果你有选择的话,我绝对建议切换到 Tensorflow。

以上是关于如何使用 Theano 启用 Keras 以利用多个 GPU的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ubuntu20 上以 theano 为后端的 termux 运行 keras

如何检查 Keras 后端是 tensorflow 还是 theano

如何利用Keras 深度学习库的进行回归

如何在 Windows 上的 Anaconda Python 中安装 Keras 和 Theano?

无法在 Google Cloud DL VM 中使用 Theano Keras 后端

Keras / Theano:如何添加 Convolution2D 层?