Сайт PyImageSearch опубликовал руководство по построению архитектуры DeepSeek-V3 с помощью PyTorch, библиотеки для глубокого обучения. Это пятая часть из шести в серии. Данное руководство, авторства Пунита Манглы, объединяет блоки, представленные в предыдущих уроках, в полноценную языковую модель, которая преобразует токены (единицы текста, обрабатываемые моделью) в логиты (оценки для каждого возможного токена).
Предыдущие уроки охватывали настройку модели, Rotary Position Embeddings (RoPE) (кодирование позиции токенов), Multihead Latent Attention (MLA) (механизм внимания) и Mixture of Experts (MoE) (смесь экспертов), которая распределяет вычисления между несколькими специализированными подсетями. Наконец, Multi-Token Prediction (MTP) позволяет предсказывать несколько токенов одновременно. Согласно руководству, это повышает эффективность обучения и может ускорить вывод благодаря спекулятивному декодированию.
Каждый блок трансформера объединяет MLA и MoE по схеме « pre-norm », где нормализация происходит перед каждым подслоем. Остаточные связи передают сигналы напрямую от слоя к слою, что, как поясняет автор, помогает решить проблему исчезающего градиента в глубоких сетях. Полная модель затем последовательно включает вложения токенов и позиций, слой dropout, блоки, финальную нормализацию, голову предсказания словаря и, опционально, головы MTP.
Разделение весов и предсказание нескольких токенов
В руководстве также представлено разделение весов между матрицей вложения токенов и головой предсказания. Для словаря в 50 259 токенов и размерности вложения 256 этот метод позволяет сэкономить около 12,9 миллионов параметров. По словам автора, это часто улучшает производительность, поскольку входное и выходное пространства остаются согласованными.
Во время обучения выходы голов MTP вычисляются для нескольких будущих горизонтов, затем их потери комбинируются с основной потерей и с вспомогательной потерей MoE, предназначенной для балансировки нагрузки между экспертами. В представленном коде средняя потеря MTP взвешивается коэффициентом 0,3 относительно основной потери. Головы MTP не используются при выводе, то есть при генерации текста.
Размер модели и объем памяти
По словам автора, модель содержит примерно 30–35 миллионов параметров, распределенных по шести слоям (2–3 миллиона на слой), плюс 2–3 миллиона параметров на каждую голову MTP. При точности FP32 (32 бита) только параметры занимают 120–140 мегабайт. Для обучения, с учетом градиентов и состояний оптимизатора AdamW, требуется около 500–600 МБ, плюс активации. Для батча из 4 примеров по 1024 токена активации весят 200–300 МБ, что в сумме составляет около 800 МБ — объем, который, по оценке руководства, совместим с современными графическими процессорами (GPU).
При выводе точность FP16 сокращает использование памяти примерно вдвое. Реализация не использует кэш ключ-значение и поэтому пересчитывает контекст на каждом шаге генерации. Следующий урок серии будет посвящен обучению этой модели на реальных данных.
