138просмотров
54.5%от подписчиков
24 февраля 2026 г.
Score: 152
Совсем недавно ребята из Z.ai опубликовали техрепорт GLM-5. Что из важного можно сказать об их трейн инфре: Всё делалось на китайских чипах, - чуваки проделали большую работу чтобы адаптировать различные существующие GPU-кернелы под них. Партия довольна. Используют Pipeline Parallelism, - это когда модель делится на кусочки вертикально, и каждый PP-ранг обладает срезом слоёв всей модели. Пайплайнинг очень вкусный для 'распила' больших моделей по серверам, - ведь все коммуникации являются P2P, и передаются только hidden states. Но не всё так просто, - основной челлендж с пайплайнингом - это минимизация bubbles - отрезков времени, когда какие-то воркеры простаивают, ожидая, результат воркера-соседа. Существуют разные schedules (расписания), одни предоставляют время простоя меньше, другие - больше. Самые новые расписания для PP - это так называемые Zero Bubble Schedules, и именно такой используют авторы. ZB характерны тем, что классический backward pass разделяется на два этапа - первый этап делает backward исключительно до входов в pipeline stage, а второй делает backward до параметров модели. Это работает, т.к. для того чтобы запустить backward в ранге-соседе, нам нужно лишь досчитать первый этап, а второй этап можно посчитать когда-нибудь позже. Это позволяет минимизировать простой. Единственное, что не сказали, - zero-bubble расписаний существует много разных, - есть ZBV, есть 1F1B с ZB, есть дипсиковские DualPipe и DualPipeV. Подозреваю (напишите в комментах, если кто-то знает точно), что таки использовался 1F1B с ZB, т.к. авторы упоминают термин pipeline warmup, который характерен для него. В статье мелькает Data Parallelism, его тоже используют. Т.к. модели - MoE, то предполагаю, что Expert Parallelism тоже есть. Но в статье про него написано только в секции про инференс. В трейне никаких подробностей. Подробно писать про EP не буду, иначе пост не влезет в лимит тг 😭. Для длинных последовательностей используют Context Parallelism, не говорят какой конкретно, но судя по тому какие работы цитируют, похоже, что используют что-то Ulysses-style. Это когда мы делим последовательность по CP-рангам, перед вычислением SDPA делаем All2All коммуникацию, считаем разные attention-головы на разных рангах, потом снова раскидываем результаты через All2All. Чтобы паковать батчи, опять же, судя по цитате, - используют китайский планировщик FlexSP. * Напихали разных стандартных и не очень штук для экономии памяти. Из важного - шардируют градиенты как в ZeRO2, выгружают ненужные активации в RAM во время выполнения пайплайнга, считают кроссэнтропию не для всей последовательности сразу, а по чанкам (как было, например, в Liger Kernel), используют оптимизированную реализацию оптимизатора Muon. PS: Полностью репорт можно прочитать здесь, в своей краткой выжимке я описал далеко не всё. PPS: Если кому интересно почитать более-менее чистую (at least I believe so) имплементацию пайплайнинга и современных скедулей - можно глянуть в моём трен фремворке: user api дока , дока по реализации, код. Сам фреймворк еще не готов к релизу, я позже буду делать большой анонс, как доедут фичи, которые хотим к 1.0 доделать и как мы ещё шушуть его побатлтестим.