Чем pipeline parallelism отличается от tensor parallelism?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Pipeline parallelism делит модель по слоям: разные части сети выполняются на разных устройствах последовательно. Tensor parallelism делит вычисления внутри одного слоя: один и тот же слой считается несколькими GPU одновременно. Обычно pipeline лучше масштабирует очень глубокие модели, а tensor parallelism — очень большие слои, которые не помещаются на одну GPU.
Определение:
Pipeline parallelism — это способ распределённого обучения, при котором модель разбивается на последовательные стадии, и каждая стадия выполняется на своём устройстве. Данные проходят через эти стадии как через конвейер.
Tensor parallelism — это способ, при котором один слой или одна операция разбивается по тензорам между несколькими устройствами. GPU совместно считают один и тот же слой, деля матрицы, активации или веса на части.
Главное отличие: pipeline делит модель по глубине, а tensor parallelism делит вычисление внутри слоя по ширине.
Пример использования:
Допустим, есть очень большая языковая модель.
- При pipeline parallelism первые 12 слоёв работают на GPU 0, следующие 12 — на GPU 1, ещё 12 — на GPU 2.
- При tensor parallelism один большой attention-слой или MLP-слой разбивается между GPU 0 и GPU 1, и они вместе вычисляют результат этого слоя.
Pipeline parallelism:
Input -> [Layers 1-12 on GPU0] -> [Layers 13-24 on GPU1] -> [Layers 25-36 on GPU2] -> Output
Tensor parallelism:
Input -> [One layer split across GPU0 + GPU1 + GPU2] -> Output
Пояснение кода:
Код не требуется, потому что различие лучше объясняется на схеме вычислений.
Если разложить пример по шагам:
- В pipeline parallelism входной батч проходит через первую стадию на первой GPU.
- После завершения стадии активации передаются на следующую GPU.
- Пока одна GPU обрабатывает свой микро-батч, другие GPU могут уже работать со следующими микро-батчами — это повышает загрузку.
- В tensor parallelism один слой разбивается на части, и каждая GPU считает свою часть матрицы.
- Затем результаты частичных вычислений объединяются, чтобы получить итог слоя.
Ключевые моменты:
- Pipeline parallelism делит слои между устройствами, tensor parallelism делит операции внутри слоя.
- Pipeline проще понять и внедрить на уровне архитектуры модели, но может страдать от «пузырей» в конвейере.
- Tensor parallelism требует более частых синхронизаций между GPU, потому что части одного слоя зависят друг от друга.
- Pipeline удобен для очень глубоких моделей, tensor parallelism — для очень широких слоёв и больших матриц.
- На практике их часто комбинируют вместе, чтобы масштабировать большие модели эффективнее.