В распределенных вычислениях, каков размер и ранг мира? - PullRequest
1 голос
/ 07 октября 2019

Я читал некоторую документацию и пример кода с конечной целью написания сценариев для распределенных вычислений (работает PyTorch), но концепции меня смущают.

Давайте предположим, что у нас есть один узел с 4 графическими процессорами, и мы хотим запустить наш сценарий на этих 4 графических процессорах (то есть один процесс на графический процессор). В таком случае, каков размер мирового ранга и ранг? Я часто нахожу объяснение размера мира: Общее количество процессов, вовлеченных в работу , поэтому я предполагаю, что в нашем примере это четыре, но как насчет ранга?

Чтобы объяснить это дальшедругой пример с несколькими узлами и несколькими графическими процессорами также может быть полезен.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Эти понятия связаны с параллельными вычислениями. Было бы полезно немного узнать о параллельных вычислениях, например, MPI .

. Вы можете думать о world как о группе, содержащей все процессы для вашего распределенного обучения. Обычно каждый графический процессор соответствует одному процессу. Процессы в world могут взаимодействовать друг с другом, поэтому вы можете распределять свою модель распределенно и при этом получать правильное обновление градиента. Таким образом, размер мира - это количество процессов для вашего обучения, которое обычно представляет собой количество графических процессоров, которые вы используете для распределенного обучения.

Rank - это уникальный идентификатор, присвоенный процессу, чтобы другие процессы знали, какопределить конкретный процесс. Локальный ранг - это уникальный локальный идентификатор для процессов, выполняющихся в одном узле , здесь мое мнение отличается от @ zihaozhihao.

Давайте рассмотрим конкретный пример. Предположим, что мы проводим наше обучение на 2 серверах или узлах и на каждом по 4 графических процессора. Размер мира 4 * 2 = 8. Ранги для процессов будут [0, 1, 2, 3, 4, 5, 6, 7]. В каждом узле местный ранг будет [0, 1, 2, 3].

Я также написал пост о коллективах MPI и основных понятиях. Ссылка здесь .

0 голосов
/ 07 октября 2019

Когда я учил torch.distributed, меня также смутили эти термины. Нижеследующее основано на моем собственном понимании и документах API, пожалуйста, исправьте меня, если я ошибаюсь.

Я думаю, group должно быть правильно понято в первую очередь. Его можно рассматривать как «группу процессов» или «мир», и одной работе обычно соответствует одна группа. world_size - это число процессов в этом group, которое также является числом процессов, участвующих в задании. rank - это уникальный идентификатор для каждого процесса в group.

Так что в вашем примере world_size - это 4, а rank для процессов - [0,1,2,3].

Иногда у нас также может быть аргумент local_rank, это означает идентификатор GPU внутри одного процесса. Например, rank=1 и local_rank=1, это означает второй графический процессор во втором процессе.

...