По мере того как мы все глубже погружаемся в эпоху искусственного интеллекта, вычислительные ресурсы, необходимые для обучения сложных языковых моделей, резко возрастают. Высокие вычислительные затраты в первую очередь возникают из-за огромного размера моделей. Например, для обучения модели с одним миллиардом параметров с 32-битной точностью требуется около 80 гигабайт оперативной памяти графического процессора, что является сложной задачей даже для оборудования промышленного уровня. В этой статье мы углубимся в сложность и ограничения обучения больших языковых моделей (LLM) и рассмотрим возможные стратегии преодоления этих проблем.

Понимание вычислительного ландшафта

Прежде чем мы рассмотрим решения, важно понять проблему. Для обучения LLM мы используем такие библиотеки, как PyTorch и TensorFlow, которые используют CUDA — Compute Unified Device Architecture. CUDA — это набор библиотек и инструментов, разработанных Nvidia для своих графических процессоров для повышения производительности обычных операций глубокого обучения, таких как умножение матриц.

Один параметр в модели обычно представляется как 32-битное число с плавающей запятой, которое является вычислительным представлением действительных чисел. Однако память, необходимая для хранения параметров модели, составляет лишь часть общей памяти графического процессора, используемой на этапе обучения. Другие компоненты, такие как градиенты, состояния оптимизатора Адама, активации, а временные переменные также потребляют память, обычно требуя около 20 дополнительных байтов памяти на каждый параметр модели.

Учитывая эти требования, для обучения модели с одним миллиардом параметров потребуется примерно 80 гигабайт оперативной памяти графического процессора с 32-битной полной точностью. Это максимальная мощность графического процессора Nvidia A100, который обычно используется для задач машинного обучения в центрах обработки данных. Потребность в памяти выходит за рамки того, что может обеспечить большинство потребительских аппаратных средств, тем самым подчеркивая необходимость стратегий обучения с эффективным использованием памяти.

Применение квантования для повышения эффективности памяти

Одним из многообещающих методов сокращения использования памяти является квантование. Это влечет за собой снижение точности весов модели с 32-битных чисел с плавающей запятой (FP32) до 16-битных чисел с плавающей запятой (FP16) или даже восьмибитных целых чисел (int8). В результате объем памяти, необходимый для хранения каждого веса, уменьшается, что значительно сокращает объем памяти, занимаемой моделью.

Чтобы уточнить, FP32 может представлять числа в диапазоне примерно от 310^-38 до 310³⁸. Он использует один бит для знака (указывающего положительное или отрицательное число), восемь битов для показателя степени числа и 23 бита для дроби (также известной как мантисса или значащая) числа.

Когда вы снижаете точность до FP16, диапазон числа резко сокращается. Также меняется битовое представление: один бит для знака, пять бит для показателя степени и 10 бит для дроби.

Следовательно, значение FP32 числа, подобного Pi, при проецировании на FP16 теряет некоторую точность. Однако этот компромисс часто приемлем, учитывая существенное сокращение использования памяти — FP32 требует четыре байта памяти, а FP16 — только два байта.

Оптимизация тренировок с BFLOAT16

Недавние разработки представили BFLOAT16 (BF16), популярную альтернативу FP16 для приложений глубокого обучения. Созданный в Google Brain, этот тип данных представляет собой гибрид между FP16 и FP32, предлагая хороший баланс между эффективностью памяти и стабильностью обучения. Он также поддерживается более новыми графическими процессорами, такими как Nvidia A100.

BFLOAT16 использует восемь бит для представления экспоненты (аналогично FP32) и усекает дробь (мантисса) всего до семи бит. Эта конфигурация захватывает полный динамический диапазон 32-битного числа с плавающей запятой, используя только 16 бит. Результатом является меньший объем памяти и более быстрые вычисления, что делает его особенно подходящим для глубокого обучения, где целочисленные вычисления выполняются относительно редко.

Квантование и будущее крупномасштабных моделей

Потребность в эффективности использования памяти становится еще более очевидной при работе с моделями, число параметров которых исчисляется сотнями миллиардов. Для обучения таких моделей необходимо учитывать 16-битное или восьмибитное квантование и использовать методы распределенных вычислений, чтобы разделить задачу между несколькими графическими процессорами. Однако для этого подхода может потребоваться доступ к сотням графических процессоров, что значительно увеличивает затраты на обучение.

По мере того, как LLM продолжают развиваться, модели с размерами, превышающими 50 миллиардов или даже 100 миллиардов параметров, становятся все более распространенными. Эти огромные модели требуют десятков тысяч гигабайт памяти, что делает невозможным их обучение на одном графическом процессоре. Чтобы обрабатывать такие крупномасштабные модели, исследователи обращаются к методам распределенных вычислений, распределяя процесс обучения по нескольким графическим процессорам. Обучающие модели с миллиардами или десятками миллиардов параметров требуют доступа к сотням графических процессоров, что может быть слишком дорого для многих исследователей и организаций. Эта проблема усиливает важность моделей предварительной подготовки и тонкой настройки, которые были разработаны более крупными исследовательскими группами или организациями.

Поскольку LLM продолжают раздвигать границы языковых возможностей ИИ, преодоление этих вычислительных проблем останется в авангарде исследований и инноваций в области обработки естественного языка.