从本质上讲,我这样做:
devices = ['gpu_0', ..., 'gpu_N']
n_jobs = len(devices)
results = Parallel(n_jobs=n_jobs, verbose=5)(
delayed(train_model)
(device=device,
stuff=...)
for device, stuff in enumerate(zip(devices, stuffs))
train_model
在依次调用时效果很好:
def train_model(device, stuff):
graph=...
with graph.as_default():
with tf.device(device):
...
session=...
用Parallel
调用时,我可以看到所有分配的设备均已正确训练所有模型,但是完成后,Parallel
永不返回。键入nvidia-smi
时,我发现实际上所有N
作业仍分配给每个GPU(活动率为0%),因此我怀疑每个作业都被其他作业锁定了。有没有一种方法可以与Python的joblib
同时启动几个培训?