Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Tensorflow MirroredStrategy()看起来可能只在一个GPU上工作?_Python 3.x_Tensorflow_Gpu - Fatal编程技术网

Python 3.x Tensorflow MirroredStrategy()看起来可能只在一个GPU上工作?

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%。我把代码搞乱了吗?或者这是设计好的

我最终得到了一台有2个GPU的计算机,并进行了测试,确认两个GPU都在使用中(两个GPU的瓦数都增加到160-180,两个GPU的内存几乎都达到了最大值,同时两个GPU的使用率都增加到了约45%)

所以我决定在一个现存的神经网络上试用tensorflow的
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个工作进程