我想并行使用8 gpu,而不是顺序使用。
例如,当我执行此代码时,
<tr *ngFor="let data of allUsers">
<td><input type="radio" name="id" [value]="allUsers.id" ></td>
<td>{{data.id}}</td>
<td>{{data.name}}</td>
<td>{{data.address}}</td>
<td><button (click)="deleteUser(data.id)">delete</button></td>
</tr>
我尝试了cmd命令'CUDA_VISIBLE_DEVICE ='0,1',但结果相同。
我想查看结果“ 0 10 1 11 2 3 12 ....等”
但是实际结果是依次为“ 0 1 2 3 4 5 ..... 10 11 12 13 ..”
如何获得想要的结果?
答案 0 :(得分:3)
**我看到有问题的编辑,因此将其添加到我的答案中**
您需要将操作传递给Tensorflow会话,否则,代码将被解释为顺序的(就像许多编程语言一样),然后操作将顺序完成。
为先前对该问题的理解,下面将讨论创建具有多个GPU的神经网络训练的讨论:
坏消息是没有神奇的功能可以为您完成此操作。
好消息是有一些已建立的方法。
第一个是某些CUDA和其他GPU开发人员熟悉的东西,可以将模型复制到多个GPU,并通过CPU进行同步。一种方法是将数据集成批拆分,在这种情况下称为“塔”,然后为每个GPU喂一个塔。如果这是MNIST数据集,并且您有两个GPU,则可以显式使用CPU作为设备来初始化此数据。现在,随着数据集变小,您的相对批次大小可能会变大。完成一个时期后,您可以共享渐变并求平均值以训练两个网络。当然,使用8个GPU可以轻松扩展到您的情况。
A minimal example分配任务并在CPU上收集结果,如下所示:
# Creates a graph.
c = []
for d in ['/gpu:2', '/gpu:3']:
with tf.device(d):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
c.append(tf.matmul(a, b))
with tf.device('/cpu:0'):
sum = tf.add_n(c)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(sum))
但是,在许多设备之间传输数据将使您无法获得恰好your_gpu_number倍的加速度。因此,您需要优化每个GPU的工作量以最大化性能,并尝试尽可能避免设备间的通信。
第二个是将您的神经网络拆分为您拥有的设备数量,对其进行训练和合并。
在多个GPU上显式运行模型将需要您以这种方式设置算法。检查这些:
https://www.tensorflow.org/guide/using_gpu#using_multiple_gpus
https://gist.github.com/j-min/69aae99be6f6acfadf2073817c2f61b0