Салют, Хабр! В начале ноября мы делились с вами новостями о нашем флагмане GigaChat MAX и пообещали рассказать подробнее о процессе создания наших Pretrain-моделей. Пришло время сдержать слово и даже пойти дальше! 

Предобучение больших языковых моделей — это одна из наиболее ресурсозатратных стадий, которая непосредственно влияет на весь дальнейший процесс обучения GigaChat. От успешности обучения Pretrain-модели напрямую зависит качество всех следующих этапов обучения, например, Alignment и Vision. Поэтому сегодня мы хотим поделиться весами младшей модели линейки GigaChat версий base и instruct. Модель называется GigaChat-20B-A3B, так как построена на перспективной МоЕ-архитектуре!

Но и это ещё не всё. Вместе с весами мы делимся с сообществом улучшенной реализацией самого популярного класса МоЕ, а также кодом для механизма концентрации (а что это такое — читайте дальше ;)). Важно отметить, что хотя GigaChat-20B-A3B обучался на триллионах токенов преимущественно русского текста, он ещё способен на хорошем уровне понимать другие языки. Так что мы делимся мультиязычной моделью. О том, как запускать модель, какие версии доступны и как пользоваться контролируемой генерацией с помощью механизма концентрации, расскажем прямо сейчас!

Open source

Мы выкладываем на HuggingFace обе версии модели — base и instruct в fp32, обе с поддержкой длинного контекста в 131к токен. А также версии instruct модели в bf16 и квантизованную в int8.

P.S. Все замеры далее проводились в bf16

Воспользоваться моделями можно тремя способами:

  • Через transformers. Взаимодействовать с GigaChat-ом можно будет с помощью кода ниже. Через cpu-offloading его можно запускать на любом устройстве

Код для запуска
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto")
model.generation_config = GenerationConfig.from_pretrained(model_name)

messages = [
    {"role": "user", "content": "Докажи теорему о неподвижной точке"}
]
input_tensor = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
outputs = model.generate(input_tensor.to(model.device))

result = tokenizer.decode(outputs[0][input_tensor.shape[1]:], skip_special_tokens=False)
print(result)

  • Через vllm. Для запуска быстрого и оптимизированного инференса GigaChat это наиболее простой и быстрый путь. У vllm есть ограничения на поддерживаемые GPU, мы замерялись на А100. Чтобы получить похожую скорость, можно арендовать ресурсы на cloud.ru.

Код для запуска
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name, trust_remote_code=True)
sampling_params = SamplingParams(temperature=0.3, max_tokens=8192)

messages_list = [
    [{"role": "user", "content": "Докажи теорему о неподвижной точке"}],
]

prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]

outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)

generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)

  • Через vllm-сервер

Код для запуска
# поднимаем сервер
vllm serve ai-sage/GigaChat-20B-A3B-instruct  \
  --disable-log-requests \
  --trust_remote_code \
  --dtype bfloat16 \
  --max-seq-len 8192

# делаем запрос из другого терминала
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json"     -d "{
        \"model\": \"ai-sage/GigaChat-20B-A3B-instruct\",
        \"messages\": [
            {\"role\": \"system\", \"content\": \"Отвечай как ОЧЕНЬ безумный ученый\"},
            {\"role\": \"user\", \"content\": \"Что такое Mixture of Experts?\"}
        ]
    }"

Улучшенная реализация

К сожалению, в transformers не занесена модель с похожей на нашу архитектурой. Кстати, пару слов о ней будет прямо в следующем разделе! Поэтому мы были вынуждены использовать remote code.

В прошлой модели с похожей архитектурой выкладывались в репозитории deepseek-ai/deepseek-moe-16b-base. У этой реализации был набор проблем:

  • если не установлен Flash Attention, то модель не запускалась и падала с ошибкой;

  • неверный подсчёт RoPE;

  • используется modelling от старой версии transformers (около 1 года назад).

Мы всё исправили и предлагаем обновленную реализацию. В нашем open source мы не стали переименовывать базовый класс, чтобы сохранить поддержку vllm и других open source-репозиториев.

Скорость генерации

Несмотря на большое количество параметров у модели, она получилась довольно быстрой. Мы провели тесты на одной видеокарте A100 с batch size = 1 в точности bf16. В качестве бэкенда использовался vllm. Наши замеры скорости можно воспроизвести через бенчмарк в репозитории vllm. Мы не тюнили параметры инференса вручную, а у MoE-слоёв есть такая возможность, поэтому остаётся запас по ускорению.

Код замеров
git clone https://github.com/vllm-project/vllm.git ./vllm_rep
cd ./vllm_rep/benchmarks
mkdir serving_bench

wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json

## выбираем модель для замера
# MODEL="meta-llama/Meta-Llama-3-8B-Instruct"
# MODEL="google/gemma-2-9b-it"
# MODEL="ai-sage/GigaChat-20B-A3B-instruct"
# MODEL="deepseek-ai/deepseek-moe-16b-chat"
# MODEL="Qwen/Qwen1.5-MoE-A2.7B-Chat"
# MODEL="Qwen/Qwen2.5-3B-Instruct"


## запускаем сервер и идем в другой терминал
vllm serve $MODEL \
	--disable_sliding_window \
	--disable-log-requests \
	--trust_remote_code \
	--dtype bfloat16 \
	--max-seq-len 8192

## в другом терминале
cd ./vllm_rep/benchmarks
### не забываем указать модель
SAMPLES_NUM=100
python benchmark_serving.py \
	--backend vllm \
	--model $MODEL \
	--dataset-name sharegpt \
	--dataset-path ShareGPT_V3_unfiltered_cleaned_split.json \
	--num-prompts ${SAMPLES_NUM} --seed 42 \
	--max-concurrency 1 \
	--ignore_eos \
	--save-result \
	--result-dir serving_bench \
	--result-filename $(basename $MODEL)_throughput_serving.json

Мы собрали в одном месте замеры скорости по популярным или архитектурно похожим моделям. Собранные в таблице метрики, получены скриптом из vllm:

  • Total params: размер модели в миллиардах параметров;

  • Active params: количество используемых миллиардов параметров на один forward;

  • Req/s: обрабатываемое количество запросов в секунду;

  • Output Token/s: генеративная пропускная способность токенов в секунду;

  • Total Token/s: общая (input + output) пропускная способность токенов в секунду.

Model

Total params (B)

Active params (B)

Req/s

Output Token/s

Total Token/s

Qwen/Qwen1.5-MoE-A2.7B-Chat

14

2,7

0,62

156,43

291,17

deepseek-ai/deepseek-moe-16b-chat

16

2,8

0,59

149,53

285,39

GigaChat-20B-A3B-instruct

20

3,3

0,55

137,43

259,27

Qwen/Qwen2.5-3B-Instruct

3

3

0,54

135,10

251,44

meta-llama/Meta-Llama-3-8B-Instruct

8

8

0,35

83,26

157,32

google/gemma-2-9b-it

9

9

0,27

54,87

113,69

По скорости генерации новых токенов 20B MoE может немного уступать, но благодаря лучшей токенизации на русском языке (увы, замеры vllm проведены на английском) модель будет быстрее. Обратите внимание, что GigaChat 20В по скорости сопоставим с 3В-моделями, а по метрикам (про них будет ниже) — на уровне с 8В-моделями!

Кратко о том, что такое MoE

Сегодня тренд — обучать LLama-Like модели или, как говорят в статьях, трансформеры с пренормализацией и swiglu-функцией активации без использования dropout. Несмотря на это, мы решились на эксперимент и пошли немного иным путём, выбрав основой для наших моделей архитектуру «Mixture of Experts». Дальше будем её обозначать как MoE.

MoE отличается от LLama-Like архитектур изменённым MLP-блоком. Что это такое, мы подробно расскажем далее, а пока объясним это так. Классические Llama-like модели задействуют весь объём имеющихся у них знаний для каждой задачи. Но это не всегда эффективно. Ведь для решения задачи «Реши уравнение x^2 = 4. Чему равен x?» для модели нет необходимости вспоминать что-либо, кроме школьной математики. 

Эта идея и лежит в основе архитектуры. При получении определённого запроса модель избирательно активирует блоки с соответствующими знаниями (далее будем называть их экспертами). MoE-модель может иметь очень много экспертов, и её суммарный объём знаний оказывается довольно большим — это выливается в большой размер самой модели. Но благодаря выбору подмножества экспертов, стоимость использования сохраняется на уровне маленьких и менее вместительных по знаниям моделей.

Отлично звучит в теории! :) Но на практике возникают свои проблемы. Например, если в кругу экспертов появляются «рок-звезды», то они забирают всё внимание на себя. Другие эксперты в таком случае просто перестают использоваться и лежат в модели мертвым грузом. Этот момент нужно очень строго контролировать во время обучения. 

Тут важно не переборщить, так как слишком много контроля ведёт к полной энтропии: разные эксперты вынуждены учиться одному и тому же. Это мешает им быть действительно специализированными и сводит на нет идею MoE о выборе экспертов для разных областей знаний. 

В идеале, мы хотим твёрдости и чёткости при выборе требуемых знаний. Давным-давно (примерно год назад) в нашей сфере набрала обороты идея, что можно ввести блок с общей информацией для всех экспертов. Это позволило бы экспертам быть сосредоточеннее, оставлять широкие знания этому самому блоку и не запоминать одно и то же, и как следствие — повысить свою специализацию.

Переходим к deep learning

Активируемые параметры МоЕ
Активируемые параметры МоЕ

Важно отметить, что модель на самом деле выбирает экспертов не один раз, а много. Если у нас 32 слоя с 64 экспертами на каждом, а на forward выбирается по одному эксперту со слоя, то всего будет задействовано 32 эксперта из 2048 возможных (если бы мы на каждом слое выбирали всех экспертов)! И происходит это при КАЖДОЙ генерации нового токена. А при генерации десяти токенов будет сделано уже 320 выборов, то есть по 32 эксперта на каждый из десяти токенов. 

Структура MoE блока
Структура MoE блока

Мы много говорили про абстрактный выбор экспертов на слое, у нас этим занимается некий «роутер». Если коротко, то его задача — выбрать для каждого токена экспертов, которые его обработают. Если чуть сложнее, то в классическом варианте это обычный линейный слой (hidden_dim x num_experts) с softmax после него. После softmax мы берём индексы K наибольших логитов, то есть выбираем К экспертов на токен. В вышеприведённом примере на каждом слое выбираем одного эксперта из 64 возможных, и в примере мы берём того, у кого значение после роутера наибольшее. Собственно, вот и всё!

Gated MLP
Gated MLP

А как же выглядят сами эксперты? Мы уже намекали на это раньше: «MoE — это изменённый MLP-блок». То есть в классический MLP-блок на картинке ниже мы добавляем роутер и агрегацию экспертов. А вот каждый из экспертов представляется в виде обычных Gated MLP-блоков со swiglu-активациями.

Интерпретируемость экспертов

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

Метод концентрации

Как мы отметили выше, MoE-архитектура не использует все параметры модели при генерации ответов. Вместо этого она выбирает наиболее «подходящих» для входных данных экспертов. 

Поэтому возникает логичный вопрос: а за что именно эксперты отвечают? В ST-MoE были отдельные эксперты, ответственные за названия городов или пунктуацию, но в целом знания равномерно распределялись по сети. В Mixtral явной специализации экспертов и вовсе не было. Поэтому нам было интересно изучить поведение нашей модели, ведь у нас добавлены общие эксперты и скрупулёзно подобран гиперпараметр баланса (aux loss).

В своих экспериментах мы обнаружили, что эксперты нашей 20В-модели действительно специализируются на разных темах. Но самое интересное в том, что модель можно склонять к генерации ответов на определённые темы без всякого дообучения! Мы назвали это «методом концентрации». Мы как бы заставляем нашу модель «сконцентрироваться» на определённой теме.

Чтобы добиться такого эффекта, сначала необходимо понять, как выбираются эксперты, кто и за что отвечает. Для начала соберём статистику по выбору роутеров: будем использовать тексты на различные темы и фиксировать результаты их обработки. 

Мы знаем, какие эксперты активировались на каждом токене, в каждом слое, поэтому для всех экспертов модели и конкретной последовательности токенов мы можем составить эмбеддинг вида «9 2 4 5 6 4 8 2» из иллюстрации ниже. Эти цифры означают, что первый эксперт был выбран роутером 9 раз, второй эксперт — 2 раза и т. д.

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

Чтобы продемонстрировать процесс, воспользуемся набором Pile, который содержит данные из разных областей: программирования, медицины, веб-страниц и так далее. Из этого набора выберем 40 000 примеров и создадим для каждого из них эмбеддинг по методу выше. Затем эти эмбеддинги нужно будет кластеризовать, мы выбрали сочетание методов UMAP (2-d проекция) и HDBSCAN (кластеризатор). Возможны и другие подходы к кластеризации, но мы не углублялись в исследования по этому вопросу. Более подробные сведения вы найдёте в прикрёпленном ноутбуке.

Представляем вам результаты применения алгоритма UMAP. Как видно, примеры успешно распределились по кластерам согласно исходным темам набора Pile.

Визуализация Pile с помощью UMAP
Визуализация Pile с помощью UMAP

Поверх этой картинки применим кластеризатор и получим более мелкие кластеры. Осталось дело за малым: дать им интерпретацию.

Визуализация UMAP + HDBSCAN
Визуализация UMAP + HDBSCAN

Интерпретировать удобно с использованием векторов TF-IDF: они помогают выбрать десять ключевых слов, раскрывающих суть каждого кластера. Получившееся разделение оказалось весьма логичным: среди тем выделились программирование, алгебраические задачи, спорт, кулинария, география и другие. Например:

  • кластер 7: teams, football, world, group, season, cup, team, week, games, round;

  • кластер 25: like, food, coffee, just, cheese, wine, good, make, tea, chocolate;

  • кластер 29: species, strains, isolates, genes, resistance, coli, cattle, gene, isolated, genus;

  • кластер 51: room, property, home, bedroom, apartment, hotel, house, beach, area, located.

Рассмотрим, например, кластер 27: app, video, data, new, free, email, windows, use, software, using. Как вы помните, эмбеддинги получаются на основе выборов роутера. Тогда из них можно извлечь информацию о том, какие эксперты являются самыми важными для этого кластера, то есть содержат в себе информацию про интернет, сервисы, приложения и т. д. 

Эмбеддингом кластера назовём усреднение всех эмбеддингов текстов, входящих в этот кластер. С его помощью мы сможем выявить экспертов, которые чаще всего активируются на тексты этого кластера. Построим карту для этого эмбеддинга (heatmap): чем насыщеннее оттенок цвета, тем чаще использовался тот или иной эксперт. Можно заметить нескольких особенно выделяющихся экспертов — назовём их важными.

Сравнение эмбединга кластера без и с фильтрацией
Сравнение эмбединга кластера без и с фильтрацией

Карты активаций экспертов для текстов из кластера 27. По оси Y — слои модели, по оси X — номера экспертов. Чем ярче цвет, тем чаще выбирался эксперт. Слева представлены все активации, а справа — только для самых важных для этой темы экспертов.

По карте эмбеддинга справа можно построить его отфильтрованную версию, где ненулевые компоненты соответствуют важным для кластера экспертам. В нашем методе отфильтрованный эмбеддинг с некоторым весом прибавляется к логитам роутера до softmax, что позволяет увеличивать вероятности выбора конкретных экспертов. Это и есть концентрация: мы побуждаем MoE-модель использовать знания, то есть экспертов по определённой теме.

Применение

Для начала давайте попробуем сгенерировать что-нибудь без изменения поведения модели.

Пример 1

Запрос: Жил-был пёс по имени Барни. Он был большой, лохматый и очень добрый. Барни жил вместе со своей хозяйкой Машей в небольшом уютном доме на окраине города. Маша была студенткой и часто уезжала на занятия, но каждый раз возвращалась домой с радостью, потому что знала – её верный друг всегда ждёт у двери.

Ответ: А ещё она знала, что Барни никогда не обидит ни одного живого существа.

Барни любил гулять по лесу, который начинался сразу за домом. Там он мог побегать, поиграть с другими собаками или просто полежать под деревом и послушать пение птиц. Но больше всего ему нравилось наблюдать за лесными зверями. Особенно его интересовали белки. Они были такие забавные! То они бегали по деревьям, то прыгали с ветки на ветку, а иногда даже спускались на землю и играли в догонялки. Барни тоже хотел играть с белками, но они почему-то боялись его и убегали при виде собаки. Тогда Барни решил стать другом для всех лесных жителей.

Однажды, когда Маша была на занятиях, Барни отправился в лес. Он шёл медленно, чтобы не спугнуть никого из обитателей леса. Вдруг он услышал шорох в кустах. Барни остановился и прислушался. Шорох повторился снова. Собака осторожно подошла к кустам и заглянула внутрь. На земле лежал маленький пушистый комочек. Это была белка. Она дрожала от страха и жалобно пищала. Барни понял, что ей нужна помощь. Он осторожно взял белок в зубы и вынес из куста. Белка оказалась совсем маленькой, размером с ладонь. У неё были большие чёрные глаза и пушистый хвостик. Барни положил её на траву и стал ждать, что будет дальше.

Пример 2

Запрос: Albert Einstein

Ответ: (1879-1955) was a German-born theoretical physicist who developed the general theory of relativity, one of the two pillars of modern physics. He also made important contributions to the development of the quantum theory and statistical mechanics.

Einstein's work is recognized for its profound impact on science and the world. His name has become synonymous with genius. In 1921 he won the Nobel Prize in Physics "for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect."

Пример 3

Запрос: The old clock in the hallway struck midnight, its chimes echoing through the empty mansion

Ответ: . The house was quiet and still, except for the faint sound of footsteps on the stairs.

A young woman stood at the top of the staircase, her long black hair flowing down her back. She wore a white dress that shimmered in the moonlight, and her eyes were filled with sadness.

She took a step forward, then another, as if she were being pulled by an invisible force. Her feet moved slowly, as if she were walking through water. As she reached the bottom of the stairs, she turned to face the door.

There was a knock at the door, and the woman froze. She knew who it was before she opened the door. It was him, the man she had loved so much but could never have. He stood there in the darkness

А теперь добавим управление на кластере 27: app, video, data, new, free, email, windows, use, software, using.

Пример 1

Запрос: Жил-был пёс по имени Барни. Он был большой, лохматый и очень добрый. Барни жил вместе со своей хозяйкой Машей в небольшом уютном доме на окраине города. Маша была студенткой и часто уезжала на занятия, но каждый раз возвращалась домой с радостью, потому что знала – её верный друг всегда ждёт у двери.

Ответ: А когда она открывала дверь, он радостно махал ей лапами.

Маша любила своего питомца, а он любил свою хозяйку. Но однажды случилось несчастье: Маша заболела и попала в больницу. Она не могла навещать своего любимого друга, ведь он был такой большой и добрый! Тогда Маша решила написать специальную программу, которая бы делала всё то же самое, что делал Барни. И вот, спустя некоторое время, Маша смогла снова войти в свой любимый сайт, чтобы посмотреть фотографии своих любимых друзей ВКонтакте.

Пример 2

Запрос: Albert Einstein

Ответ: Albert Einstein (1879-1955) was a German-born theoretical physicist who developed the special and general theories of relativity. He is best known for his mass-energy equivalence formula E = mc2, which has been called "the world's most famous equation". In 1921 he received the Nobel Prize in Physics for his discovery of the law of the photoelectric effect.

Einstein's work on general relativity led to its use as a navigation tool by global digital mapping software companies such as Google Maps, Apple Maps and TomTom.

Пример 3

Запрос: The old clock in the hallway struck midnight, its chimes echoing through the empty mansion

Ответ: . The house was quiet and dark, but for a few candles that had been lit to guide the way.

“Where are we?” asked one of the children.

“I don’t know,” said another. “I can’t see anything.”

“Try again,” said their mother. She handed them each a piece of paper with a blank form on it. They filled out the fields and clicked the Submit button. A progress bar appeared at the top of the screen, and then they were back home.

“Wow!” exclaimed one of the children. “It worked!”

“How did you do that?” asked another.

“It’s magic,” replied their mom. “Now let’s print some 3D models from our 3D printer.”</s>

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

Попробуем теперь проделать то же самое, но возьмем кластер 25 про еду: like, food, coffee, just, cheese, wine, good, make, tea, chocolate

Пример 1

Запрос: Жил-был пёс по имени Барни. Он был большой, лохматый и очень добрый. Барни жил вместе со своей хозяйкой Машей в небольшом уютном доме на окраине города. Маша была студенткой и часто уезжала на занятия, но каждый раз возвращалась домой с радостью, потому что знала – её верный друг всегда ждёт у двери.

Ответ: А ещё она знала, что он никогда не обидит ни одного человека.

Маша любила гулять с Барни по парку. Они гуляли долго, а потом возвращались домой, где их уже ждал вкусный ужин. Но однажды случилось так, что Маша заболела и не смогла пойти на прогулку. Она лежала дома и смотрела телевизор, когда вдруг услышала за окном какой-то шум. «Наверное, это Барни», - подумала Маша и выглянула в окно. На улице было темно, но Маша всё равно увидела, как кто-то бежал к дому. Это был Барни! Он подбежал к окну и начал лаять. Маша открыла дверь, и Барни бросился ей навстречу. Он прыгал от радости и лизнул Машу в щёку. Потом они пошли на кухню, чтобы перекусить. Барни съел свою порцию и лёг спать рядом с Машей. Ему снились большие косточки и вкусные сосиски

Пример 2

Запрос: Albert Einstein

Ответ: (1879-1952) was born in Germany, but he moved to the United States and became a citizen of the country. He was an immigrant who had lived there for 30 years.

 Albert Einstein

The story goes that when he arrived at his new home, he said "Kleine salzbrezchen mit Mahrmkohffe." This translates as "Rare smoked salmon with dark rye bread."

He then went on to become one of the most famous scientists in history.

This is a true story. It happened in 1933.

Пример 3

Запрос: The old clock in the hallway struck midnight, its chimes echoing through the empty mansion

Ответ: . The house was silent except for the sound of footsteps as a young woman walked down the hall and into the kitchen.

She opened the refrigerator and pulled out a carton of milk. She poured herself a glass and sat at the table to drink it. As she sipped her breakfast, she heard a noise from outside the window. She looked up and saw a man standing there with a tray of food. He smiled at her and said, “Good morning!” She smiled back and nodded her head. Then he left.

She finished her milk and went upstairs to get ready for work. When she came back downstairs, she found that someone had made pancakes and sausage. There were also eggs, bacon, and orange juice. It was all delicious! She ate everything and

И все истории так или иначе стали про еду! Это хорошая демонстрация того, что MoE-эксперты обладают тематической специализацией.

Надеемся, что наше исследование помогло увеличить знания о том, что происходит внутри загадочных языковых моделей, а именно MoE. Рассматривая группы экспертов между разными слоями, мы смогли понять, за что они отвечают. А наш метод управления потенциально помогает добиться более управляемых генераций. Мы планируем провести больше экспериментов и рассказать о них в будущем. Также предлагайте свои модификации и тестируйте — you are welcome!

Метрики

А пока что повторим, что мы выкладываем две модели в открытый доступ — base и instruct. Мы проверили серию замеров: среди российского open source GigaChat занимает высокие позиции по многим метрикам.

Base-модель

Будет проще всего сравнить метрики среди моделей в размерах около 7 млрд параметров. Вероятно, можно было бы выделить больше моделей, но мы решили сравниться T-lite-instruct-0.1, LLaMa-3.1-8B и Gemma-2-9B, которые одновременно сильны по метрикам и способны неплохо говорить на русском. Qwen же не попал в этот короткий список, хотя его метрики с отрывом выше всех. Из проблем: что его base-, что instruct-версия норовит начать отвечать на китайском, независимо от языка запроса. Ещё один недостаток base-версии Qwen: малое количество русских токенов в токенизаторе, около пары тысяч.

В этом зачёте моделей GigaChat обходит LLaMa 3.1 и получает серебро. Не сомневаемся, что в задачах именно русскоязычного домена GigaChat на ваших дообучениях сможет превзойти Gemma-2-9B благодаря большому объёму русскоязычных тестов в обучающем наборе.

Что важно отметить: GigaChat в почти 2 раза дешевле по стоимости инференса, чем LLaMa 3.1 и обходит ее по качеству. Ускорение касается еще и обучения (более 60%, но подробнее об этом в следующем году), поэтому тюн Гигачата на любые задачи будет намного эффективнее и быстрее, нежели LLaMa based моделей. А еще по внутренним тестам производительности на 1 GPU наша архитектура держит больше потоков, то есть отлично подходит для высоконагруженных систем. Это для тех, кто захочет использовать GigaChat в промышленных решениях!

Bench

T-lite-0.1

Llama-3.1-8B

GigaChat-20B-A3B-base

Gemma-2-9B

MMLU EN 5-shot

62.56

65.21

63.02

70.6

MMLU PRO EN 5-shot

32.19

35.7

31.41

42.85

MMLU RU 5-shot

55.51

54.1

58.38

62.57

BBH 3-shot

62.36

62.79

53.54

70.48

ARC-C 25-shot

58.19

54.69

61.69

68.34

TruthfulQA 0-shot (rougeL)

46.51

34.52

31.82

41.49

Winogrande 5-shot

78.45

77.43

75.85

79.4

Hellaswag 10-shot

82.21

81.85

81.91

82.5

GPQA 5-shot

25.0

23.44

25.22

30.36

MATH 4-shot

(strict-match)

12.9

14.04

15.04

20.06

GSM8K 4-shot

(strict-match)

67.93

51.4

59.06

68.99

HumanEval

16.46

25.61

32.32

37.2

AVG

47.96

48.4

49.11

56.24

Instruct-модель

В этот раз мы решили не проводить SbS-ы и много замеров на всевозможных аренах. Мы постарались выделить серию русскоязычных бенчмарков, которые могли бы оценить качество нашей чат-модели.

Во-первых, мы решили расширить табличку с метриками из статьи GigaChat MAX, теперь там есть все большие модели линейки GigaChat: Lite, Pro и Max.

GigaChat-20B-A3B-instruct

GigaChat Pro v26.20

GigaChat MAX v26.20

Математические задачи

GSM8K

0,764

0,782

0,929

MATH 4-shot

0,462

0,446

0,53

Написание кода

HumanEval 0-shot

0,329

0,439

0,64

MBPP 0-shot

0,385

0,487

0,667

Общие знания

MMLU EN 5-shot

0,648

0,687

0,804

MMLU RU 5-shot

(бенчмарк MMLU RU, но в формате 5-shot)

0,598

0,645

0,75

MMLU RU 1-shot

-

0,617

0,718

MMLU PRO EN 5-shot

0,348

0,431

0,589

RUBQ 0-shot

0,675

0,724

0,73

WINOGRANDE 4-shot

0,750

0,796

0,832

CyberMetric 0-shot

0,798

0,827

0,864

Следование инструкциям

IFEval 0-shot

0,411

0,566

0,721

Примечание по замеру метрик: GSM8k — это тест, который проверяет, как хорошо модели могут решать задачи с числами. В нашем исследовании мы использовали 5 шотов, чтобы оценить модель, и смотрели на последнее число в ответе. В оригинальное тесте ответ ищется по шаблону «### число». Тест Math тоже имеет разные версии, которые проверяют математические способности моделей. В нашем исследовании мы давали четыре примера и смотрели на последнее выражение в формате «\boxed{expression}». Затем оценивали результаты на совпадение с помощью библиотеки sympy.

Во-вторых, мы провели замер модели GigaChat-20B-A3B-instruct на бенчмарках MERA, Shlepa, ru-MMLU.

T-lite-instruct-0.1

gemma-2-9b-it

GigaChat-20B-A3B-instruct

MERA

0,335

0,392

0,513

ru-MMLU 5-shot

0,555

0,626

0,598

Shlepa

0,36

0,388

0,482

Внимание, наш open source «маленькой» модели догнал на MERA GigaChat Pro (получается, GigaChat ждёт новый апгрейд?), выбив средний балл 0,513

Итоги

Мы планируем регулярно делиться с вами результатами наших трудов. Уже сегодня открыли доступ к base- и instruct-версиям GigaChat, и надеемся, что они помогут вам достичь новых высот в решении ваших задач!

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

Резюмируя:

  • GigaChat-20B-A3B - первая открытая MoE модель в России. В мировой практике мало кому в мире удается обучать MoE архитектуры с хорошим качеством.

  • GigaChat обучен преимущественно на русском языке, поэтому в отличие от тюнов Qwen и LLaMa моделей не совершает грамматических и пунктуационных ошибок и не переключается на другие языки во время разговора

  • В GigaChat-20B-A3B дешевый инференс сочетается с хорошими показателями метрик

  • Модель отлично подходит для исследований, например, концентрации

У нас складывается традиция — делать тизеры на будущее. Поэтому ожидайте продолжения истории о МоЕ, мы к вам ещё вернёмся с новым рассказом! Также хочется напомнить о нашем Telegram‑канале, где мы чаще делимся разными историями из мира ML и DL. 

Stay tuned! :) 

Благодарности

Хотелось бы сердечно поблагодарить:

  • Команду pretrain за процесс исследований и оптимизаций новой архитектуры, обучение первой МоЕ-модели в России.

  • Команду alignment за множество экспериментов для подготовки сильной instruct-модели.

  • Команду RnD, без которой не было бы механизма концентрации.

  • А также Валентина Мамедова (@vltnmmdv), Евгения Косарева (@evgenijkkk), Илью Щукина, Михаила Колесова, Дениса Мазура, Александра Прошунина и Артёма Червякова за помощь в подготовке open source и написании текста, а также за полезные замечания и исправления!

Комментарии (24)


  1. poro_ku
    13.12.2024 09:24

    20b giga по всем тестам показывает меньший результат чем gemma 9b?


    1. vltnmmdv Автор
      13.12.2024 09:24

      Спасибо за вопрос!

      Нет, не по всем тестам.

      Модель тренировалась для работы с русским языком. К примеру, ее instruct версия лучше на бенчмарках MERA, Shlepa. Уверен, что этим список не заканчивается.

      Про 20b параметров: суть в том, что у gigachat lite другая архитектура — Mixture of Experts. Поэтому хоть ВСЕГО 20b параметов, на генерации из них активны только 3b. За счет этого она быстрее gemma-2 в использовании в 2.5 раза.


      1. chameleon-lizard
        13.12.2024 09:24

        А будет PR в llama.cpp? 20b модель в консумерские (24 гб) карты не влезет, а на цпу не получится гонять, потому что, как я понял, там кастомный код. Или там просто дипсик и можно запускать и так?


        1. anunknowperson
          13.12.2024 09:24

          Так ну во первых там вроде просто архитектура дипсик. щас попробую скачать и сконвертировать в GGUF. Интересно тренировалась с нуля или это какой-то хитрый мердж экспертов из 16б дипсика с последующей тренировкой.

          А ещё должно на цпу все таки спокойно работать, так-то 3б активных параметров модель должна вообще без проблем идти.

          Кажется сбер идет в правильную сторону - респект им за выпуск модели. туповата конечно наверное, но ждем новых релизов.


          1. NickKolok
            13.12.2024 09:24

            Прошу прощения за вопрос несколько в сторону, но в какой мере llama-подобные модели можно запускать на CPU? Как для заданной модели определить минимальные системные требования? Всё ли из этого запустится (пусть и оочень медленно, условно 0.5 токена/минуту) на бесплатном huggingface space с 16 ГБ RAM?
            Меняется ли ответ, если говорить не о llama, а о llava? Есть ли шанс реанимировать вот это: https://huggingface.co/spaces/liuhaotian/LLaVA-1.6 ?


            1. anunknowperson
              13.12.2024 09:24

              1. Данная модель Сбера - MoE. Поэтому на процессоре будет работать довольно быстро. Я запускал через text-generarion-webui transformers с галочкой квантизациии в 4бита. Работало с читаемой скоростью, может 5 токенов в секунду, может быстрее, там плохо пишет. Модель правда к сожалению тупая, впрочем как и гигачат Макс. Вместо нее лучше бы запустил Mistral small или что-то подобное что в разы умнее. Памяти тратило меньше 16гб насколько я помню из-за квантизации.

              2. Можно ориентироваться что 70-72 б модели на процессоре будут работать где-то 1 токен в секунду или чуть меньше. 8б модели, например llama 3.2 будут с читаемой скоростью. И кстати вот llava модель устаревшая довольно, вместо нее лучше взять llama 3.2 со зрением, среднюю версию, она в районе 10б и использовать ее.

              3. Если использовать llama.cpp (с моделью Сбера так и не проверил) и ее кванты gguf, можно сильно уменьшить требуюмую память и необходимое устройство для запуска. Заходите, ищете gguf на хаггингфейса лламы 3.2 который влезает в вашу память (но ещё нужно гигабайт-два под контекст). Меньше q4km отупление будет заметно довольно сильно (хотя с моделями 100б+ заметно меньше, но эта довольно маленькая). Получится ли запустить на хаггингфейсе? Не знаю, не проверял. Но можете попробовать на домашнем пк. Желательно конечно иметь 32гб памяти и 64 Гб для 70б моделей. Но может и с 16гб тоже будет работать (кстати если не влезет, будет выгружается на диск и лагать)

              4. Если вам нужно конкретно зрение, рекомендую ollama потому что там оно поддерживается хорошо и в дефолтном сценарии там легко поставит llama 3.2, только квант нужно правильный выбрать. Если зрение не нужно, лучше koboldcpp. Для не gguf - text-generation-webui


              1. NickKolok
                13.12.2024 09:24

                Спасибо большое! Не сочтите за наглость, а нет ли списка коллабов "на пощупать"? Почему-то когда я гуглю, мне выдаются только скрипты для файнтюна на какие-то флюорографии...


                1. anunknowperson
                  13.12.2024 09:24

                  Ну вот коллаб oobabooga есть например
                  https://colab.research.google.com/github/oobabooga/text-generation-webui/blob/main/Colab-TextGen-GPU.ipynb

                  Сыллку на модель вставляете и в течении 10 минут как написано появится ссылка на интерфейс с чатом.

                  Но можно просто на своем пк тоже тестить как уже писал.


  1. chameleon-lizard
    13.12.2024 09:24

    Тут gemma-2-9b или gemma-9b? Судя по метрикам, это gemma-2, но мало ли, вдруг я что-то перепутал...


    1. vltnmmdv Автор
      13.12.2024 09:24

      Речь про gemma-2-9b, большое спасибо за замечание!

      Исправили в тексте и таблице с pretrain метриками


  1. TankerKTV
    13.12.2024 09:24

    А возможно ли запустить модель в Ollama?


  1. Fizikoleg
    13.12.2024 09:24

    Более уместно сравнить даже не с gemma 2 9b, а новой версией модели от Т-Банка (точнее T-lite), которая при беглом сравнении метрик ещё лучше работает с русским языке чем gemma 2 9b


    1. evgenijkkk
      13.12.2024 09:24

      Добрый день!

      Это хороший комментарий. На самом деле модели-тюны под русский в общении допускают огромное количество стилистических и грамматических ошибок, а также ошибаются в согласовании частей речи. Также наследуют «ценности» модели-донора с запретом говорить на определенные темы, которые не нарушают законы РФ и наоборот. Еще с точки зрения стоимости инференса на русском остаются нюансы из-за плохого сжатия языка в токенизаторе.

      И то есть с одной стороны, модели наследуют знания из качественного опенсорса, отсюда и высокие метрики т-лайт и т-про, а с другой с стороны с ошибками ведут диалог. Мы думаем над созданием бенчмарка, который смог бы отследить такие нюансы


      1. chameleon-lizard
        13.12.2024 09:24

        >Также наследуют «ценности» модели-донора с запретом говорить на определенные темы, которые не нарушают законы РФ и наоборот

        А вы на каком-то другом c4 учили что ли? С чего бы гигачату лайт не выучить ценности с условного реддита, всё равно данных в претрейне на английском больше, чем на русском. Или нет?


  1. esisl
    13.12.2024 09:24

    Писали бы сразу минимальное рекомендуемое железо...


    1. anunknowperson
      13.12.2024 09:24

      на процессоре легко должно запускаться, ибо всего 3б активных параметров.

      На видоекартах если получится конвертнуть в llama.cpp то в 24 гб точно влезет, может меньше.


      1. esisl
        13.12.2024 09:24

        Ясно, спасибо...
        А то у мну GPT2 в 3060 12 Gb учиться не лезет :(


  1. BlackArcher
    13.12.2024 09:24

    В бенчах GPQA у T-lite точно без ошибки?


    1. vltnmmdv Автор
      13.12.2024 09:24

      Исправили, большое спасибо за замечание!


  1. sshmakov
    13.12.2024 09:24

    Мне видится так, что вы делаете большой умный монолит (почти ругательное слово в архитектуре ПО), в котором нельзя подучить одного эксперта, не трогая остальных. Но почему не сделать RAG-систему (я надеюсь, я правильно использую термин), где одна, относительно небольшая модель, разбирающая входной поток, оркестрирует другие независимые модели, каждая из которых обучена на своей специфике? Тогда добавление новых знаний сведётся к добавлению в систему новой, отдельно обученной модели, а не обучению всего монолита.


    1. NickKolok
      13.12.2024 09:24

      Вот да, сколько смотрю на StableDiffusion, столько у меня крутится мысль, что негоже выбрасывать "в мусорку" полторашку с приходом SDXL, SDXL с приходом SD3 и т.д. Но вот что делать и как избежать умножения огромных наработок сообщества на ноль - непонятно :(


      1. rPman
        13.12.2024 09:24

        наработки сообщества (если про файнтюны) могли бы сохраняться, если бы обучающую выборку и собранный тулчей в том же докере публиковали, что бы можно было за пару минут повторить тюн, в т.ч. на другой версии.


  1. Mortello
    13.12.2024 09:24

    Добрый день. Ограничение max len в 8к, это для а100 подобрано?


  1. NickKolok
    13.12.2024 09:24

    То, что выложили в опенсорс - молодцы. Но, видится мне, это пока даже близко не искупает вашу вину перед опенсорсом за дело NGINX.

    Но - где demo-space на huggingface? Если вы рассказываете, как оно лихо запускается на transformers, то прикрутить gradio и поставить железо в ZERO (нужна, ЕМНИП, самая простая PRO-подписка) должно быть несложно, не? Чтобы все могли поиграться!