我想对神经网络上的参数进行网格搜索。我有两个GPU,我想在第一个GPU上运行一个模型,在另一个GPU上运行具有不同参数的另一个模型。无效的第一次尝试是这样的:
with tf.device('/gpu:0'):
model_1 = sequential()
model_1.add(embedding) // the embeddings are defined earlier in the code
model_1.add(LSTM(50))
model_1.add(Dense(5, activation = 'softmax'))
model_1.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
model_1.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)
with tf.device('/gpu:1'):
model_2 = sequential()
model_2.add(embedding)
model_2.add(LSTM(100))
model_2.add(Dense(5, activation = 'softmax'))
model_2.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
model_2.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)
Run Code Online (Sandbox Code Playgroud)
编辑:我再次运行我的代码,没有收到错误。但是,这两个模型顺序运行,而不是并行运行。可以在这里进行多线程吗?那是我的下一个尝试。
网上有很多关于将多个GPU与keras一起使用的讨论,但是当涉及到同时运行多个模型时,讨论仅限于在单个GPU上运行多个模型。关于多个GPU的讨论也仅限于数据并行化和设备并行化。我不相信自己也不想这样做,因为我不想破坏单个模型以在多个GPU上运行。是否可以在带有两个GPU的keras中同时运行两个单独的模型?
可以在此处找到此问题的解决方案。然而,softmax 激活函数目前仅在 CPU 上运行。需要指挥cpu执行dense层:
with tf.device('cpu:0')
Run Code Online (Sandbox Code Playgroud)
CPU 和 GPU 之间的切换似乎不会导致明显的速度减慢。但对于 LSTM,最好在 CPU 上运行整个模型。
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |