- BrainTools - https://www.braintools.ru -
Работу у AI отобрал другой AI )
Компания HighFlyer внедрила в свою LLM такие архитектурные фишки как Multi-Head Latent Attention, Mixture of Experts (MoE) with Auxiliary-Loss-Free Load Balancing и Multi-Token Predict. Однако все эти новшества уже были ранее представлены в других LLM: GPT-4, Llama, Mistrall и других.
Полистав WhitePaper [1] HighFlyer, можно наткнуться на описание собственного непубличного тренировочного фреймворка HAI LLM [2], эксплуатирующего действительно новые фишки, которые позволяют значительно сэкономить на обучении [3] модели. Именно в фреймворке и кроется, как мне кажется, одна из основных инноваций DeepSeek, о чем мне бы и хотелось поговорить далее.
Приятного прочтения)
Модель DeepSeek V3 имеет 671 миллиардов параметров (общее кол-во). Чтобы только ее запустить [4], нужна видеокарта с 772 Гб памяти [5]. Но самая большая доступная видеокарта, Nvidia H100, содержит всего лишь 94 гигабайта памяти. Поэтому такие модели запускают и тренируют на GPU-кластерах.
Существуют специальные фреймворки для развертывания LLM (serving framework), а также существуют фреймворки для обучения LLM (training framework) которые позволяют обучать большую модель сразу на большом количестве видеокарт. Такие фреймворки позволяют обучить модель с триллионом параметров, для которой нужно 12 ТБ видеопамяти на кластере из нескольких сотен видеокарт.
DeepSeek-V3 обучался на кластере с 2048 графическими процессорами NVIDIA H800, где каждый узел содержит 8 графических процессоров, соединенных посредством NVLink и NVSwitch для быстрой внутриузловой коммуникации. NVLink позволяет видеокартам обмениваться данными со скоростью 160 гигабайт в секунду. Для связи между различными узлами используется InfiniBand, обеспечивающий скорость 50 гигабайт в секунду, причем каждый узел соединен с каждым другим узлом, что позволяет эффективно распределять вычислительные задачи по всему кластеру.
Для того, чтобы запустить LLM на GPU кластере используются различные публичные фреймворки для развертывания SGLang, LMDeploy, TensorRT-LLM, vLLM. Кстати разработчики DeepSeek сотрудничают с SGlang, для того чтобы помочь им улучшить свой фреймворк для запуска этой LLM.
Мы рады сообщить о выпуске SGLang v0.4.1 [6], который теперь поддерживает DeepSeek V3 — на данный момент самая мощная опенсорсная LLM, превосходящую даже GPT-4o.
Команды SGLang и DeepSeek совместно работали над тем, чтобы DeepSeek V3 FP8 работал на графических процессорах NVIDIA и AMD с первого дня. Мы также внедрили оптимизацию MLA и DP внимание [7] ранее, что делает SGLang одним из лучших открытых движков LLM для работы с моделями DeepSeek.
Наиболее распространенной стратегией параллелизма для инференса является тензорный параллелизм. Однако он может быть не самым эффективным методом для некоторых моделей. Например, модели DeepSeek используют многоголовое латентное внимание (MLA) и имеют только одну KV-головку. Если мы применим тензорный параллелизм на 8 графических процессорах, это приведет к дублированию кеша KV и нежелательным затратам памяти.
Чтобы справиться с этой проблемой, в SGLang реализовали параллелизм данных (DP) для механизма MLA, дабы повысить пропускную способность моделей DeepSeek. Применяя DP для компонента внимания, они значительно сократили кеш KV, что позволило использовать большие размеры батчей. В подобной реализации внимания с DP каждый рабочий процесс DP обрабатывают разные типы батчей (предварительная выборка, декодирование, бездействие) независимо. Данные, обработанные вниманием, будут собраны со всех рабочих процессов перед входом в слой смеси экспертов (MoE), а после обработки через MoE данные будут перераспределены обратно к каждому рабочему процессу.
Для обучения своей LLM, компания High-Flyer, разработчик DeepSeek, разработала свой фреймворк HAI-LLM [2], который является инновационным в плане развития идей параллелизма. Увы, но этого фреймворка нет в открытом доступе.
HAI-LLM, получил ряд особенностей DualPipe и Computation-Communication Overlap, Efficient Implementation of Cross-Node All-to-All Communication и Extremely Memory Saving with Minimal Overhead, а также несколько видов параллелизма, на которых остановимся подробнее:
3D-параллелизм:
параллельность данных с поддержкой ZeRO;
конвейерную параллельность;
параллельность модели с разбиением тензоров;
последовательная параллельность.
HAI-LLM позволяет реализовать гибкое сочетание трех способов параллельного обучения: параллелизм по данным, конвейерный параллелизм и тензорный параллелизм, а также применяет последовательный параллелизм для дальнейшей оптимизации transformer, что значительно повышает эффективность использования видеопамяти и вычислительную эффективность.
Одной из ключевых особенностей HAI-LLM является алгоритм DualPipe, который предназначен для эффективного конвейерного параллелизма. В традиционных методах существуют “пузыри” простоя, когда одни GPU стоят, ожидая завершения вычислений на других GPU. А DualPipe в свою очередь минимизирует эти самые “пузыри”, перекрывая этапы вычислений в прямом и обратном проходах.
Для иллюстрации мы обратимся к отчету. Здесь мы видим, что каждый чанк делится DualPipe’ом на четыре компонента: attention, all-to-all dispatch, MLP, and all-to-all combine (кстати, при обратном проходе attention и MLP дополнительно делятся на две части: для входных данных и для весов). В паре прямого и обратного чанков, DualPipe упорядочивает эти компоненты, чтобы добиться максимального перекрытия вычислений. И такая стратегия обеспечивает практически нулевую задержку на all-to-all коммуникацию даже при масштабировании модели и использовании экспертов на разных узлах кластеров.
Кроме оптимизации процесса обучения нейросетей, этому подверглась также и генерация контента.
Известно, что архитектура DeepSeek содержит в себе десятки экспертов (MoE), каждый из которых отвечает за свою специализацию от написания кода до хранения знания. При работе MoE, используется механизм 32-way Expert Parallelism (EP32). Основная идея которого заключается в том, что более востребованные эксперты развертываются в избыточном количестве.
Чтобы достичь балансировки нагрузки между различными экспертами в части MoE, необходимо, чтобы каждый GPU обрабатывал примерно одинаковое количество токенов. Для этого мы внедряем стратегию развертывания избыточных экспертов, которая дублирует экспертов с высокой нагрузкой и развертывает их избыточно.
Эксперты с высокой нагрузкой выявляются на основе статистики, собранной во время онлайн-развертывания, и корректируются периодически (например, каждые 10 минут).
И перед завершением, мне бы также хотелось отметить использование формата FP8 [8] для хранения весов и активаций модели, что также повлияло на снижение стоимости обучения. Если сравнивать со стандартным BF16, FP8 требует гораздо меньше памяти, что позволяет ускорить вычисления. Однако, этот работа с этим форматом приводит к проблеме ограниченного динамического диапазона, а также возможной потерей точности.
Чтобы избавится от этой проблемы для DeepSeek применили fine-grained quantization strategy, суть которой заключается в гранулярном масштабировании тензоров при квантизации в FP8. То есть вместо применения одного общего scaling factor для всего тензора, использовались индивидуальные для плиток 1×128 элементов для активация и для блоков 128×128 для весов соответственно. Подобная манипуляция позволила лучше адаптироваться к выбросам в данных, а также снизить ошибки [9] квантизации.
И также стоит отметить increasing accumulation precision, которая была направлена на повышение точности операций GEMM (General Matrix Multiplication) в FP8. Промежуточные результаты GEMM скапливались в FP32 через интервалы n=128, что позволило минимизировать ошибки округления и улучшило общую точность вычислений.
В заключение хочу добавить, что наши китайские коммунистические товарищи хотя и не придумали ничего нового в архитектуре LLM, взяв лучшие существующие практики, а также обучив свою модель на результатах работы GPT-4, тем не менее смогли удивить весь мир в первую очередь за счёт более низких цен на обучение и генерацию. Этого удалось добиться в первую очередь благодаря более эффективной оптимизации работы слоя, который отвечает за запуск LLM на распределенном кластере, за счёт экономии видеопамяти и распараллеливанию процессов. За это им низкий поклон.
Также, я думаю, что большую роль сыграло использование пониженной точности FP8 в сочетании с increasing accumulation precision и fine-grained quantization strategy. Комбинация смогла всё-таки дать очень хорошее качество генерации модели на уровне топовых ChatGPT-4o/Claude-3.5-Sonnet в части тестов.
P.S.: В Deepseek-v3 technical paper описано ещё много чего интересно, но включать это я не решил, чтобы не удлинять статью. Буду очень рад, если не вошедшая информация будет дополнять эту статьи в виде комментариев.
Также буду рад, если подпишитесь на мой телеграм канал [10] (никого не принуждаю, предлагаю) :-)
Автор: rajce
Источник [11]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/11786
URLs in this post:
[1] WhitePaper: https://arxiv.org/pdf/2412.19437
[2] HAI LLM: https://www.high-flyer.cn/en/blog/hai-llm/
[3] обучении: http://www.braintools.ru/article/5125
[4] запустить: https://github.com/deepseek-ai/DeepSeek-V3
[5] памяти: http://www.braintools.ru/article/4140
[6] SGLang v0.4.1: https://github.com/sgl-project/sglang/releases/tag/v0.4.1
[7] внимание: http://www.braintools.ru/article/7595
[8] FP8: https://habr.com/ru/companies/serverflow/articles/847068/
[9] ошибки: http://www.braintools.ru/article/4192
[10] телеграм канал: https://t.me/bothub_founder
[11] Источник: https://habr.com/ru/companies/bothub/articles/878742/?utm_source=habrahabr&utm_medium=rss&utm_campaign=878742
Нажмите здесь для печати.