что исправно работало на одном GPU стало вылетать с ошибками при использовании DDP. Источник более-менее локализовал в следующей части кода:
batch_size = img.shape[0]
euclidean_s = torch.zeros([batch_size, 1]).to(device=img.device)
heatmap = self.extract_heatmap_posenet_fast(img, pose_dnn=self.pose_dnn, device=img.device)
heatmap_src = self.extract_heatmap_posenet_fast(img_src, pose_dnn=self.pose_dnn, device=img_src.device)
heatmap_s = heatmap.split(1, 0)
heatmap_src_s = heatmap_src.split(1, 0)
for idx, (heatmap, heatmap_src) in enumerate(zip(heatmap_s, heatmap_src_s)):
euclidean = sum(((heatmap - heatmap_src)**2).reshape(17 * 64 * 64))
euclidean_s[idx] = euclidean
Мне кажется, что рассинхронизация происходит из-за всех этих split/stack. Можно ли как-то проще и правильнее применить извлечение евклидовой нормы к батчу?
С какой ошибкой ?
to divice - на какой девайс? Ты в ддп работаешь
Старайся на gpu не использовать мат операции которые не входят в либу торча. sum питоновский, и с торчом дружит, все будет ок. Это просто как совет. Когда нибудь наткнешься на говно
спасибо, попробовал решить через torch.sum - в принципе работает на одной видеокарте, сейчас пойду на сервере запускать.
Обсуждают сегодня