Как мы создали LLM-модель Cotype Nano

от автора

На связи группа фундаментальных исследований MTS AI. В этой статье мы расскажем про дроп трех маленьких моделей Cotype-Nano, Cotype-Nano-4bit и Cotype-Nano-CPU. Расскажем, как нам удалось достичь 1 места на RuGeneralArena  в своей весовой категории.

Почему мы решили создать маленькие LLM

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

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

Не будем медлить, вот ссылки на модели:

Cotype‑Nano — это легковесная модель для выполнения задач с минимальными ресурсами. Она оптимизирована для быстрого и эффективного взаимодействия с пользователями, обеспечивая высокую производительность даже в условиях ограниченных ресурсов.

Cotype‑Nano-4bit — это квантизированная версия Cotype Nano, которая быстрее и в три раза меньше оригинальной модели.

Cotype‑Nano‑CPU — модель, оптимизированная под Intel CPU с помощью фреймворка openVINO.

Пример использования с Hugging Face:

from transformers import pipeline  pipe = pipeline("text-generation", model="MTSAIR/Cotype-Nano", device="cuda")  messages = [    {"role": "system", "content": "Ты — ИИ-помощник. Тебе дано задание: необходимо сгенерировать подробный и развернутый ответ."},    {"role": "user", "content": "Расскажи мне про ИИ"},  ]  res = pipe(messages, max_length=1024)  print(res[0]['generated_text'][-1][‘content’])

Для инференса наших моделей мы рекомендуем использовать фреймворк vLLM (подробнее можно почитать здесь)

Установка:

pip install vllm -U

Docker (опционально):

docker pull vllm/vllm-openai:latest

Деплой модели c vLLM:

python3 -m vllm.entrypoints.openai.api_server --model MTSAIR/Cotype-Nano --port 8000

Пример запроса с vLLM:

import openai import pandas as pd from tqdm import tqdm  openai.api_key = 'xxx' endpoint = 'http://localhost:8000/v1' model = 'MTSAIR/Cotype-Nano' openai.api_base = endpoint  response = openai.ChatCompletion.create(     model=model,     temperature=0.4, # 0.0 is also allowed     frequency_penalty=0.0,     max_tokens=2048,     top_p=0.8, # 0.1 is also allowed     messages=[           {"role": "user", "content": "Как мне обучить модель meta-llama/Llama-3.2-1B с помощью библиотеки transformers?"}         ]     )  answer = response["choices"][0]["message"]["content"] print(answer)

Как мы собирали датасеты

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

На первом этапе мы определили домены будущего датасета для поддержания разнообразия. Сюда вошли математика, программирование, function-calling, RAG, суммаризация, классификация, а также инструктивные датасеты. 

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

Пример инструкционного датасета

Пример инструкционного датасета
Пример диалогового датасета

Пример диалогового датасета

Для математики мы взяли часть датасета microsoft/orca-math-word-problems-200k, перевели, а команда ИИ-тренеров провалидировала и исправила ошибки

Для того чтобы модель умела не только общаться с пользователем, но и помогать ему в программировании, мы взяли из открытых источников датасеты ru_stackoverflow. Из них выбрали ответы, помеченные как решенные, а далее подали их в нашу лучшую модель Cotype Pro 32k для исправления. Под исправлением имеется в виду исключение сленговых слов, личного мнения пользователя, написавшего ответ.

С остальными датасетами работа складывалась похожим образом: использовали для генерации данных Cotype Pro 32k, далее отдавали на разметку для чистки и использовали на этапе SFT. При этом прямо сейчас мы все еще улучшаем пайплайн чистки инструкционных датасетов.

Дополнительно команда ИИ-тренеров помогла нам в разработке датасета для алаймента (alignment). Alignment в контексте LLM означает выравнивание или согласование модели с желаемыми ценностями и принципами. Это процесс предполагает настройку модели таким образом, чтобы она генерировала ответы, которые соответствуют этическим нормам, правилам и ожиданиям пользователей.

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

Как мы выбираем лучший эксперимент?

Здесь и здесь мы подробно рассказали про наши методы оценивания. Если коротко, для оценки этих моделей мы использовали autoSBS против gpt-3.5-turbo и gpt-4o на нашем внутреннем датасете, ru-general-arena и немного смотрели на long-context бенчмарки.

Этапы обучения

Для обучения моделей мы использовали SFT (Supervised Fine-tuning) — это метод обучения, в котором модель уже имеет знания о языке и о мире.  Наша цель в таком случае —  дообучить LLM на определенный домен. Например, на этом этапе можно научить модель вызывать функции (function-calling), даже если она никогда такое делать не умела. 

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

 На первой стадии наша команда обучила слой MLP (многослойный перцептрон, представляющий собой нейронную сеть с несколькими слоями нейронов, способную моделировать сложные зависимости в данных) с LoRa (Low-Rank Adaptation — методом, позволяющим эффективно адаптировать большие языковые модели путем добавления обучаемых матриц низкого ранга, что значительно снижает количество обучаемых параметров и требования к памяти) на датасетах, связанных с математикой и программированием. На второй стадии — взяла высококачественные инструктивные датасеты и обучила на них уже всю модель. 

И это действительно сработало! AutoSBS улучшился, как и результат на ru-general-arena.

Пайплайн обучения

Пайплайн обучения

Алаймент

После двух стадий SFT мы приступили к алайменту модели. Было решено использовать метод Direct Preference Optimization (DPO) — он считается одним из самых популярных. В данном случае для обучения модели с DPO-тренером используются датасеты, состоящие из вопросов и пар «хороший ответ-плохой ответ». Датасет был сгенерирован и размечен с помощью большой языковой модели и отлично подошел для DPO более крупных собратьев, но в экспериментах с LLM размером в 1.5 миллиарда параметров заметных улучшений в производительности мы не увидели. В итоге, датасет для алаймента был включен во вторую стадию SFT и это сработало лучше всего.

Квантизация и оптимизация

Cotype-Nano — это маленькая и сильная модель для генерации текста. Но можно сделать ее еще меньше. Для этого мы использовали метод квантизации AWQ (Activation-aware Weight Quantization). Это post training метод, который учитывает, что не все веса большой языковой модели важны в процессе квантизации. 

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

Cotype-Nano была квантизирована в 4 бит. Это означает, что теперь модель эквивалентна LLM размером 400 миллионов параметров и занимает около 1.6ГБ видеопамяти. Модель также совместима с фреймворков vLLM.

После квантизации скор на ру-арене-авто составил 22.5 против 30.2 у оригинальной модели (цена за уменьшение размера модели более чем в 2 раза). Тем не менее, на данный момент даже квантизированная модель является лучшей в своей классе по результатам локальной оценки на ru_llm_arena.

Cotype-Nano-CPU

Для CPU-версии было решено использовать фреймворк OpenVINO. Для начала модель была квантизирована в 4-бит другим post-training методом-GPTQ. Затем модель была скомпилирована в формат OpenVINO. CPU-версия Cotype Nano лучше всего работает с процессорами Intel, код запуска приведен на странице модели на Hugging Face

Оценка наших моделей

Как мы уже упоминали, для оценки наших моделей мы используем различные бенчмарки. Первое, что мы делаем после обучения каждой модели-кандидата – прогоняем ее генерации через автоматический side-by-side с gpt-3.5-turbo и gpt-4 на нашем датасете вопросов, используя в качестве модели судьи другую большую языковую модель. Это быстрый и качественный способ оценить модель, который дает нам примерное понимание, помог ли добавленный датасет или измененный параметр улучшить навыки модели. Модель судья, сравнивая пару ответов и не зная, какой ответ принадлежит модели-кандидату, делает простой вывод: первый ответ лучше второго и второй ответ лучше первого.

autoSBS оценка для моделей

autoSBS оценка для моделей
Паутинка-сравнение по категориям

Паутинка-сравнение по категориям

Для сравнения наших кандидатов с моделями-конкурентами мы используем RuArenaGeneral. Методика очень похожа на наш autoSBS с парой отличий: 

  1. в качестве модели оценщика используется GPT-4-1106-preview

  2. сравнение проводится на открытых сетах general (разбитые по 50 темам вопросы из онлайн lmsys арены) или hard (переведенный оригинальный датасет из английской Arena-Hard)

Для создания сводной таблицы результатов используется система рейтингов ELO. Наша Cotype-Nano 1B набрала почетные 30.2 (Замеры производились с помощью репозитория ru_llm_arena и модели судьи gpt-4-1106-preview, на публичном сабмите может быть другая оценка) баллов, показав удивительно хороший результат для своего незначительного веса, и обогнав другие бейзлайны из этой весовой категории.

Мы представили три модели Cotype-Nano размером 1.5B, которые могут применяться в различных задачах. Все модели достигают лучших результатов в своем весе на RuGeneralArena. Предлагаем вам не терять время и протестировать их прямо сейчас!


ссылка на оригинал статьи https://habr.com/ru/articles/861398/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *