В эпоху, когда размер больших языковых моделей (LLM) и диффузионных моделей (DM) измеряется сотнями миллиардов параметров, проблема эффективного развертывания на аппаратном обеспечении с ограниченными ресурсами становится критической. Традиционные подходы к оптимизации, такие как квантование, часто идут на компромисс между размером модели и точностью вычислений, что может приводить к заметному снижению качества генерации текста или изображений. Однако новый подход, представленный в исследовании "70% Size, 100% Accuracy: Lossless LLM Compression for Efficient GPU Inference via Dynamic-Length Float (DFloat11)", предлагает радикально иное решение. Авторы — команда исследователей во главе с Тяньи Чжаном — представляют метод DFloat11, который сокращает размер модели, сохраняя при этом бит-в-бит идентичные выходные данные по сравнению с оригинальной моделью. Это не просто сжатие, а фундаментальный пересмотр того, как мы храним и обрабатываем веса нейронных сетей.
Ключевая идея DFloat11 заключается в использовании энтропийного кодирования для весов, представленных в формате BFloat16. Анализ показывает, что распределение весов в современных LLM обладает низкой энтропией, что означает наличие значительной избыточности в стандартном формате хранения. DFloat11 устраняет эту неэффективность, назначая динамические длины кодирования весам в зависимости от их частоты встречаемости. Такой подход позволяет достичь сжатия, близкого к информационно-оптимальному, без какой-либо потери точности. Для обеспечения быстрого вывода (inference) с динамическими длинами кодирования разработчики создали пользовательское ядро GPU, которое выполняет онлайн-декомпрессию с минимальными задержками.
Эта технология открывает новые горизонты для развертывания гигантских моделей, таких как Llama 3.1 405B, на одном вычислительном узле, оснащенном несколькими GPU. В условиях, когда доступ к мощным кластерам может быть ограничен или дорог, возможность запускать модели такого масштаба на стандартном серверном оборудовании становится game-changer для индустрии. В этой статье мы подробно разберем, как работает DFloat11, какие технические решения лежат в основе его высокой эффективности и что это значит для разработчиков и исследователей ИИ, особенно в контексте использования из России.
01Проблема масштабируемости и ограничения GPU
Рост размеров моделей ИИ опережает рост аппаратных возможностей. Современные LLM, такие как Llama 3.3, Qwen 3, Mistral 3, а также диффузионные модели, такие как FLUX.1, требуют огромных объемов видеопамяти (VRAM) для хранения весов и промежуточных вычислений. Стандартный формат хранения весов, BFloat16, использует 16 бит на параметр. Для модели с сотнями миллиардов параметров это приводит к гигабайтам данных, которые должны быть загружены в GPU для каждого шага генерации.

Традиционные методы сжатия, такие как INT8 или INT4 квантование, уменьшают размер модели, но вносят ошибки округления. Хотя для многих задач это приемлемо, в сценариях, требующих максимальной точности (например, в научных вычислениях или критически важных приложениях), даже незначительные отклонения могут быть недопустимы. Альтернативой является использование CPU для хранения части модели (offloading), но это создает узкое горлышко из-за медленной пропускной способности шины PCIe между CPU и GPU. DFloat11 предлагает третий путь: сжатие, которое не требует переноса данных на CPU и не жертвует точностью.
02Принцип работы DFloat11: Энтропийное кодирование весов
Основой DFloat11 является наблюдение о низкой энтропии в распределении весов BFloat16. Энтропия в информационном смысле измеряет непредсказуемость данных. Если веса модели распределены неравномерно (то есть некоторые значения встречаются гораздо чаще других), это создает возможность для эффективного сжатия. DFloat11 применяет энтропийное кодирование, аналогичное алгоритмам, используемым в архиваторах (например, Huffman coding или Arithmetic coding), но адаптированное для работы в реальном времени на GPU.
Вместо того чтобы хранить каждый вес в фиксированном формате 16 бит, DFloat11 присваивает более короткие коды часто встречающимся значениям и более длинные — редким. Это позволяет в среднем сократить количество бит на вес, достигая заметного сжатия. Важно отметить, что это сжатие является безпотерным (lossless). При декомпрессии на лету выходные данные бит-в-бит совпадают с результатами вычислений в оригинальной модели BFloat16. Это гарантирует, что качество генерации текста или изображений не ухудшается.

03Архитектура ядра GPU для быстрой декомпрессии
Самая сложная часть внедрения динамического кодирования — это скорость. Если декомпрессия занимает слишком много времени, выигрыш от меньшего объема передачи данных теряется. Авторы разработали специализированное ядро GPU, которое решает эту проблему с помощью трех ключевых инноваций:
1. Компактные иерархические таблицы поиска (LUT)
Для быстрого декодирования используются компактные иерархические таблицы поиска (Lookup Tables, LUT). Эти таблицы хранятся в SRAM GPU, что обеспечивает доступ к ним с минимальной задержкой. SRAM значительно быстрее обычной видеопамяти (VRAM), поэтому размещение ключевых структур данных там критически важно для производительности. Иерархическая структура позволяет эффективно справляться с переменными длинами кодов, быстро определяя границы между разными весами в потоке данных.
2. Двухфазное ядро GPU с легковесными вспомогательными переменными
Процесс декомпрессии разделен на две фазы. В первой фазе потоки GPU координируют позиции чтения и записи с помощью легковесных вспомогательных переменных. Это позволяет избежать конфликтов доступа и обеспечивает параллельную обработку данных. Вторая фаза занимается непосредственной реконструкцией весов в формат, пригодный для вычислений Tr
Источник: Hacker News ↗
