По сути, я делаю:
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
фактически все еще назначены каждому графическому процессору (с активностью 0%), поэтому я подозреваю, что другие задания заблокированы другими.Есть ли способ запустить несколько тренировок одновременно с Python joblib
?