Как torch.distributed.запуск назначает данные каждому графическому процессору?

#python #pytorch

#python #pytorch

Вопрос:

Когда размер нашего пакета равен 1 или 2 и у нас 8 графических процессоров, как torch.distributed.launch назначить данные каждому графическому процессору? Я преобразовал свою модель в torch.nn.parallel.DistributedDataParallel ,

 model = DistributedDataParallel(model,
                                device_ids=[args.local_rank],
                                output_device=args.local_rank,
                                find_unused_parameters=True,
                                )
  

но в документации указано, что DistributedDataParallel:

распараллеливает приложение данного модуля, разделяя входные данные на указанные устройства путем разделения в пакетном измерении.

Мой вопрос в том, когда размер пакета меньше количества графических процессоров, как он справляется с этим?

Ответ №1:

Они этого не делают. В отличие от Dataparallel , размер пакета, который вы устанавливаете, зависит от графического процессора. Когда у вас 8 графических процессоров с размером пакета 1, эффективный размер пакета равен 8.

Комментарии:

1. Спасибо за ваш ответ. Означает ли это, что документация устарела?

2. @Amir Я думаю, они имели в виду «эффективный размер пакета». Я всегда думал, что документация для DDP сбивает с толку. Ключ в том, чтобы признать, что для каждого графического процессора будет один основной процесс Python, каждый из которых выполняет загрузку данных и вычисление потерь, и обменивается данными только через DistributedDataParallel и DistributedSampler .