Возможны ли нейросети без нелинейностей? Возможно ли сделать сеть только из матричных умножений - наиболее эффективных по вычислениям и с возможностью параллелизма? И самое главное - не потерять при этом точность работы трансформера. В этой статье показывается, что это возможно. Определив и выкинув наиболее слабые части архитектуры, автор заменяет их матричными умножениями, а где-то вводит новые преобразования для повышения эффективности модели. В результате получается DenseAttention - структура с повышенной точностью и эффективностью вычислений.
Разобравшись в основах параллелизма моделей, перейдем к не менее актуальной теме - квантизации. Квантизация моделей машинного обучения стала одним из ключевых направлений оптимизации нейронных сетей в последние годы. Этот метод позволяет значительно уменьшить вычислительные затраты и объем памяти, необходимые для работы моделей, сохраняя при этом высокую точность предсказаний.
FSDP - параллелизм с полным шардингом данных. Реализован за счет разбиения операции AllReduce на две - ReduceScatter и AllGather, а также за счет перегруппировки этих операций. Имея шард модели, данные весов собираются с других GPU за счет AllGather, далее происходит Forward pass, после чего снова собираются веса через AllGather, и только потом проиходит Backward pass. В конце градиенты обновляются с помощью ReduceScatter. Имеет 3 типа шардинга - DDP, Hybrid Sharding и Full Sharding.
В данной статье разработан метод параллельного обучения моделей с большим количеством параметров (от 100млрд до 1трл). ZeRO позволяет параллельно хранить и вычислять параметры модели, градиенты и параметры оптимизатора, сохраняя при этом низкий объем коммуникаций и высокую гранулярность вычислений.
В статье предлагается способ снижения потребления памяти тренироки сетей в 2 раза за счет перевода величин из формата FP32 в FP16. Авторы статьи исследуют распределения полученных величин по экспоненте и вводят Loss Scaling для предовращения зануления значений активаций и увеличения точности. Последним дополнением является Arithmetic Precision - разграничение проводимых операций в FP32 и FP16 формате.
Во второй части мы углубимся в Tensor Parallelism на основе статьи Megatron-LM. В ней представлен способ параллельных вычислений внутри блоков MLP и Attention. Благодаря разделению весовых матриц по столбцам и строкам, становится возможным распараллелить блоки MLP и Attention между GPU с минимальными коммуникациями между нодами. Также разберем пайплайн TP+DP.
В этой части разобраны самые основные методы параллельного обучения сетей - Data Parallel, Distributed Data Parallel, Model Parallelism и Pipeline Parallelism.
В статье разработано улучшение сети LSTM с помощью двух архитектур - sLSTM и mLSTM. Каждая архитектура, направлена на решение проблем оригинальной сети. Добавлены параллельные вычисления, способность корректировать запоминание информации, а также матричное представление данных внутри сети. Эксперименты доказывают, что xLSTM сравнима с GPT моделями.
В статье разработана новая архитектура RAG на основе итерационного процесса кластеризации фрагментов текстов БД и их суммаризации. Архитектура позволяет сети отвечать на тематические запросы, требующие суммаризованного контекста всего документа (пример - краткий пересказ книги).
Начиная писать этот материал я решил не вдаваться в подробности базовой архитектуры Retrieval-Augmented Generation (RAG), поскольку про нее и так много известно (но на крайний случай оставляю ссылки на краткое объяснение и полный гайд). Также хочу поделиться классным репозиторием от LangChain - в нескольких ноутбуках from scratch реализован RAG в нескольких вариантах для разных БД. Шпаргалка по работе RAG именно от туда: