Python 3.x Tensorflow MirroredStrategy()看起来可能只在一个GPU上工作?
我最终得到了一台有2个GPU的计算机,并进行了测试,确认两个GPU都在使用中(两个GPU的瓦数都增加到160-180,两个GPU的内存几乎都达到了最大值,同时两个GPU的使用率都增加到了约45%) 所以我决定在一个现存的神经网络上试用tensorflow的Python 3.x Tensorflow MirroredStrategy()看起来可能只在一个GPU上工作?,python-3.x,tensorflow,gpu,Python 3.x,Tensorflow,Gpu,我最终得到了一台有2个GPU的计算机,并进行了测试,确认两个GPU都在使用中(两个GPU的瓦数都增加到160-180,两个GPU的内存几乎都达到了最大值,同时两个GPU的使用率都增加到了约45%) 所以我决定在一个现存的神经网络上试用tensorflow的MirroredStrategy(),我以前用一个GPU训练过这个神经网络 我不明白的是,两者的瓦数都增加了,内存几乎都达到了最大值,但只有一个GPU的利用率看起来达到了98%,而另一个GPU的利用率只有3%。我把代码搞乱了吗?或者这是设计好的
MirroredStrategy()
,我以前用一个GPU训练过这个神经网络
我不明白的是,两者的瓦数都增加了,内存几乎都达到了最大值,但只有一个GPU的利用率看起来达到了98%,而另一个GPU的利用率只有3%。我把代码搞乱了吗?或者这是设计好的吗
strategy = tensorflow.distribute.MirroredStrategy()
with strategy.scope():
model = tensorflow.keras.models.Sequential([
tensorflow.keras.layers.Dense(units=427, kernel_initializer='uniform', activation='relu', input_dim=853),
tensorflow.keras.layers.Dense(units=427, kernel_initializer='uniform',activation='relu'),
tensorflow.keras.layers.Dense(units=1, kernel_initializer='uniform', activation='sigmoid')])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=1000, epochs=100)
英伟达smi:
Fri Nov 22 09:26:21 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21 Driver Version: 435.21 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 TITAN Xp COLLEC... Off | 00000000:0A:00.0 Off | N/A |
| 24% 47C P2 81W / 250W | 11733MiB / 12196MiB | 98% Default |
+-------------------------------+----------------------+----------------------+
| 1 TITAN Xp COLLEC... Off | 00000000:41:00.0 On | N/A |
| 28% 51C P2 64W / 250W | 11736MiB / 12187MiB | 3% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2506 C python3 11721MiB |
| 1 1312 G /usr/lib/xorg/Xorg 18MiB |
| 1 1353 G /usr/bin/gnome-shell 51MiB |
| 1 1620 G /usr/lib/xorg/Xorg 108MiB |
| 1 1751 G /usr/bin/gnome-shell 72MiB |
| 1 2506 C python3 11473MiB |
+-----------------------------------------------------------------------------+
我没有tf策略的经验。不过,我可以建议使用nvprof查看哪个GPU上运行的是什么。我也可以建议尝试霍洛沃德的改变我现在正在看霍洛沃德。感谢您的建议@y.selivonchykSo查看示例。您必须指定多少个或gpu名称,还是自动检测到它们@y、 selivonchykI认为您必须使用hvd.rank()在脚本中设置可见的\u设备,然后使用
horovod-np2运行python smth.py
从控制台运行脚本,这将指定只有2个工作进程