假设我可以在一台机器上访问多个GPU(为了争论,假设8GPU,每台机器的最大内存为8GB,每台机器有一定数量的RAM和磁盘).我想在一个单独的脚本和一台机器中运行一个程序来评估TensorFlow中的多个模型(比如50或200),每个模型都有不同的超参数设置(比如,步长,衰减率,批量大小,时期/迭代等).在训练结束时假设我们只是记录它的准确性并摆脱模型(如果你想假设模型经常检查指向,那么它可以扔掉模型并从头开始训练.你也可以假设某些其他数据可能被记录,如特定的超级参数,列车,验证,列车错误被记录为我们训练等).
目前我有一个(伪)脚本,如下所示:
def train_multiple_modles_in_one_script_with_gpu(arg):
'''
trains multiple NN models in one session using GPUs correctly.
arg = some obj/struct with the params for trianing each of the models.
'''
#### try mutliple models
for mdl_id in range(100):
#### define/create graph
graph = tf.Graph()
with graph.as_default():
### get mdl
x = tf.placeholder(float_type, get_x_shape(arg), name='x-input')
y_ = tf.placeholder(float_type, get_y_shape(arg))
y = get_mdl(arg,x)
### get loss and accuracy
loss, accuracy = get_accuracy_loss(arg,x,y,y_)
### get optimizer variables
opt = get_optimizer(arg)
train_step = …Run Code Online (Sandbox Code Playgroud) 我有一些非常简单的案例,可以将工作分解并分配给工人.我从这里尝试了一个非常简单的多处理示例:
import multiprocessing
import numpy as np
import time
def do_calculation(data):
rand=np.random.randint(10)
print data, rand
time.sleep(rand)
return data * 2
if __name__ == '__main__':
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size)
inputs = list(range(10))
print 'Input :', inputs
pool_outputs = pool.map(do_calculation, inputs)
print 'Pool :', pool_outputs
Run Code Online (Sandbox Code Playgroud)
上面的程序产生以下输出:
Input : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 7
1 7
2 7
5 7
3 7
4 7
6 7
7 7
8 6 …Run Code Online (Sandbox Code Playgroud) 已解决:问题是 Wingware Python IDE。我想现在自然的问题是这怎么可能以及如何解决。
我昨天问了一个问题(Python 中的 multiprocessing.Pool 问题),这个问题几乎相同,但我发现它似乎可以在 Windows 计算机上运行,而不是在我的 ubuntu 中运行。在这篇文章的最后,我将发布一个稍微不同的代码版本,它做同样的事情。
我的问题的简短摘要:在 Python 中使用 multiprocessing.Pool 时,我并不总是能够获得我要求的工人数量。当这种情况发生时,程序就会停止。
我一整天都在寻找解决方案,然后我开始考虑Noahs对我上一个问题的评论。他说它在他的机器上运行,所以我将代码提供给我的同事,他运行带有 Enthoughts 64 位 Python 2.7.1 发行版的 Windows 机器。我与我在 ubuntu 上运行的巨大差异相同。我还提到我们都有 Wingware Python IDE,但我怀疑这是否重要?
当我的同事在他的机器上运行代码时,我的代码有两个问题不会出现。
我并不总是能够得到我要求的四名工人(尽管我的机器有 12 名工人)。发生这种情况时,该过程会停止并且不会继续。不会引发异常或错误。
当我能够得到我要求的四名工人(大约发生 5 次左右)时,生成的数字(纯随机数)对于所有四张图片都完全相同。我的同事不是这种情况。
有些事情很可疑,我非常感谢你们提供的任何帮助。
编码:
import multiprocessing as mp
import scipy as sp
import scipy.stats as spstat
import pylab
def testfunc(x0, N):
print 'working with x0 = %s' % x0
x = [x0]
for i in xrange(1,N):
x.append(spstat.norm.rvs(size = 1)) # stupid appending …Run Code Online (Sandbox Code Playgroud) 我有一些简单的代码如下.
count =0
iters = 1000000
l=10
k=10
for i in xrange(iters):
t = np.random.choice([-1,1],size=l+k-1)
v = np.random.choice([-1,1], size = l)
if (not np.convolve(v, t, 'valid').any()):
count += 1
print count
Run Code Online (Sandbox Code Playgroud)
当我对此进行分析时,我惊讶地发现只有一小部分时间花在np.convolve理论上应该是最昂贵的部分.有没有办法加快其他部分,以便np.convolve占用大部分时间?
我很乐意使用pypy但遗憾的是它还不支持np.convolve.
有没有办法让它足够快,iters = 1亿,l = 12,k = 12可以终止?