Добро пожаловать Mixtral – передовая смесь экспертов на Hugging Face

Dobro pozhalovat' v Mixtral - lider na rynke kombinatsii ekspertov na Hugging Face

Mixtral 8x7b – это захватывающая модель большого языка, выпущенная сегодня Mistral, которая устанавливает новый уровень качества для моделей с открытым доступом и превосходит GPT-3.5 по множеству бенчмарков. Мы рады поддержать запуск комплексной интеграцией Mixtral в экосистему Hugging Face 🔥!

Среди функций и интеграций, выпущенных сегодня, мы предлагаем:

  • Модели в хабе, со своими модельными картами и лицензиями (Apache 2.0)
  • 🤗 Интеграцию Transformers
  • Интеграцию с Inference Endpoints
  • Интеграцию с Text Generation Inference для быстрого и эффективного производственного вывода
  • Пример тонкой настройки Mixtral на одном графическом процессоре с 🤗 TRL.

Содержание

Что такое Mixtral 8x7b?

Mixtral имеет аналогичную архитектуру Mistral 7B, но имеет особенность: это на самом деле 8 “экспертных” моделей в одной благодаря технике, называемой Mixture of Experts (MoE). Для моделей-трансформеров это работает путем замены некоторых слоев Feed-Forward слоем MoE с разреженной структурой. Слой MoE содержит сеть маршрутизатора, выбирающую, какие эксперты обрабатывают токены наиболее эффективно. В случае Mixtral выбираются два эксперта для каждого временного шага, что позволяет модели декодировать со скоростью модели с плотными параметрами в 12B при том, что в ней находится в 4 раза больше эффективных параметров!

Получите более подробную информацию о MoE в нашей сопровождающей записи блога: hf.co/blog/moe

Кратко о выпуске Mixtral;

  • Выпуск базовой и Instruct-версий
  • Поддержка длины контекста до 32 тыс. токенов.
  • Превосходит Llama 2 70B и соответствует или превосходит GPT3.5 по большинству бенчмарков
  • Поддерживает английский, французский, немецкий, испанский и итальянский языки.
  • Хорошо справляется с кодированием, имея 40,2% на HumanEval
  • Предоставляется с коммерчески допустимой лицензией Apache 2.0

Насколько хороши модели Mixtral? Вот обзор базовой модели и ее производительности по сравнению с другими открытыми моделями на LLM Leaderboard (более высокие баллы лучше):

Для моделей инструкций и чата оценка на таких показателях, как MT-Bench или AlpacaEval, лучше. Ниже мы покажем, как Mixtral Instruct проявляет себя на фоне лучших закрытых и открытых моделей (более высокие баллы лучше):

Впечатляюще, Mixtral Instruct превосходит все другие открытые модели на MT-Bench и является первой, которая достигает сопоставимой производительности с GPT-3.5!

О названии

Модель Mixtral MoE называется Mixtral-8x7B, но в ней нет 56B параметров. Вскоре после выпуска мы обнаружили, что некоторые люди ошибочно думали, что модель ведет себя так же, как ансамбль из 8 моделей с 7B параметрами каждая, но это не работает для моделей MoE. Реплицируются только некоторые слои модели (блоки прямого распространения); остальные параметры такие же, как в модели 7B. Общее количество параметров не составляет 56B, а около 45B. Лучше имя могло бы быть Mixtral-45-8e для более ясной передачи архитектуры. Более подробную информацию о том, как работает MoE, вы можете найти в нашей статье “Разъяснение смеси экспертов”

Формат промпта

Базовая модель не имеет формата промпта. Как и другие базовые модели, ее можно использовать для продолжения последовательности ввода с правдоподобным продолжением или для инференса с нулевым / небольшим количеством примеров. Она также отлично подходит для настройки под ваш собственный случай использования. Instruct модель имеет очень простую структуру разговора.

<s> [INST] User Instruction 1 [/INST] Model answer 1</s> [INST] User instruction 2[/INST]

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

Чего мы не знаем

Как и при предыдущем выпуске Mistral 7B, у этой новой серии моделей есть несколько открытых вопросов. В частности, у нас нет информации о размере набора данных, используемого для предварительной обработки, его составе или способе предварительной обработки.

Аналогично для модели Mixtral Instruct не было раскрыто никаких деталей о датасетах для настройки или о связанных с SFT и DPO гиперпараметрах.

Демонстрация

Вы можете поговорить с моделью Mixtral Instruct на Hugging Face Chat! Здесь вы можете ее проверить: https://huggingface.co/chat/?model=mistralai/Mixtral-8x7B-Instruct-v0.1.

Инференс

Мы предоставляем два основных способа запуска инференса с моделями Mixtral:

  • Через функцию pipeline() в 🤗 Transformers.
  • С помощью генерации текста, которая поддерживает продвинутые функции, такие как непрерывная обработка пакетов, параллелизм тензоров и другие, для получения быстрых результатов.

Для каждого из этих методов есть возможность запуска модели в половинной точности (float16) или с весами с квантованием. Поскольку модель Mixtral примерно эквивалентна модели с плотностью параметров 45B, мы можем оценить минимальное количество VRAM, требуемое следующим образом:

Использование 🤗 Трансформаторов

С релизом 4.36 трансформаторов release 4.36 вы можете использовать Mixtral и использовать все инструменты в экосистеме Hugging Face, такие как:

  • обучающие и выводные сценарии и примеры
  • безопасный формат файла (safetensors)
  • интеграции с инструментами, такими как bitsandbytes (квантование 4-бит), PEFT (эффективное дообучение параметров) и Flash Attention 2
  • утилиты и помощники для запуска генерации с моделью
  • механизмы экспорта моделей для развертывания

Убедитесь, что вы используете последний релиз transformers:

pip install -U "transformers==4.36.0" --upgrade

В следующем кодовом фрагменте мы покажем, как выполнять вывод с использованием 🤗 Transformers и квантования 4 бита. Из-за большого размера модели вам понадобится карта с не менее чем 30 ГБ оперативной памяти для ее запуска. Это включает такие карты, как A100 (версии 80 или 40 ГБ) или A6000 (48 ГБ).

from transformers import AutoTokenizerimport transformersimport torchmodel = "mistralai/Mixtral-8x7B-Instruct-v0.1"tokenizer = AutoTokenizer.from_pretrained(model)pipeline = transformers.pipeline(    "text-generation",    model=model,    model_kwargs={"torch_dtype": torch.float16, "load_in_4bit": True},)messages = [{"role": "user", "content": "Explain what a Mixture of Experts is in less than 100 words."}]prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)outputs = pipeline(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)print(outputs[0]["generated_text"])

<s>[INST] Explain what a Mixture of Experts is in less than 100 words. [/INST]A Mixture of Experts is an ensemble learning method that combines multiple models, or “experts,” to make more accurate predictions. Each expert specializes in a different subset of the data, and a gating network determines the appropriate expert to use for a given input. This approach allows the model to adapt to complex, non-linear relationships in the data and improve overall performance.

Использование вывода текста генерации

Вывод текста генерации — это готовый к использованию контейнер вывода, разработанный Hugging Face для простого развертывания больших языковых моделей. Он имеет такие функции, как непрерывное разбиение на пакеты, потоковая токенизация, тензорная параллельность для быстрого вывода на нескольких GPU и готовые к производству запись журналов и трассировка.

Вы можете развернуть Mixtral на точках вывода Hugging Face, которые используют вывод текста генерации в качестве внутреннего компонента. Чтобы развернуть модель Mixtral, перейдите на страницу модели и нажмите на виджет Deploy -> Inference Endpoints.

Примечание: Вам может потребоваться запросить увеличение квоты по электронной почте на  для доступа к A100s

Вы можете узнать больше о том, как развертывать LLM с использованием точек вывода Hugging Face в нашем блоге. В блоге приведена информация о поддерживаемых гиперпараметрах и о том, как потоково передавать ответ с помощью Python и Javascript.

Вы также можете запустить локальную генерацию текста на 2x A100s (80GB) с использованием Docker следующим образом:

docker run --gpus all --shm-size 1g -p 3000:80 -v /data:/data ghcr.io/huggingface/text-generation-inference:1.3.0 \    --model-id mistralai/Mixtral-8x7B-Instruct-v0.1 \    --num-shard 2 \    --max-batch-total-tokens 1024000 \    --max-total-tokens 32000

Настройка с помощью 🤗 TRL

Обучение LLM может быть технически и вычислительно сложным. В этом разделе мы рассмотрим инструменты, доступные в экосистеме Hugging Face, для эффективного обучения Mixtral на одном графическом процессоре A100.

Пример команды для настройки Mixtral на наборе данных чата OpenAssistant можно найти ниже. Для экономии памяти мы используем квантование 4 бита и QLoRA для нацеливания всех линейных слоев в блоках внимания. Обратите внимание, что, в отличие от плотных трансформеров, не следует нацеливать MLP-слои, так как они разрежены и плохо взаимодействуют с PEFT.

Сначала установите ночную версию 🤗 TRL и склонируйте репозиторий, чтобы получить доступ к скрипту тренировки:

pip install -U transformerspip install git+https://github.com/huggingface/trlgit clone https://github.com/huggingface/trlcd trl

Затем вы можете запустить скрипт:

accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1 \    examples/scripts/sft.py \    --model_name mistralai/Mixtral-8x7B-v0.1 \    --dataset_name OpenAssistant/oasst_top1_2023-08-25 \    --batch_size 2 \    --gradient_accumulation_steps 1 \    --learning_rate 2e-4 \    --save_steps 20_000 \    --use_peft \    --peft_lora_r 16 --peft_lora_alpha 32 \    --target_modules q_proj k_proj v_proj o_proj \    --load_in_4bit

Обучение на одном графическом процессоре A100 занимает около 9 часов, но его можно легко параллельно выполнять, изменяя --num_processes на количество доступных у вас графических процессоров.

Оговорки и текущая работа

  • Квантование: Квантование MoEs является активной областью исследований. Хотя TheBloke провел начальные эксперименты по достижению квантования 4 бита и 8 бит, качество модели значительно снижается. Будет интересно наблюдать за развитием в этой области в ближайшие дни и недели. Кроме того, недавние работы, такие как QMoE, которые достигают квантования менее 1 бита для MoEs, могут быть применены здесь.
  • Высокое использование VRAM: MoEs работают очень быстро в режиме вывода, но все еще требуют большого объема VRAM (и, следовательно, дорогостоящего графического процессора). Это делает его сложным для использования в локальных настройках. MoEs отлично подходят для настроек с большим количеством устройств и большим объемом VRAM. Для Mixtral требуется 90 ГБ VRAM в полутонах 🤯

Дополнительные ресурсы

Заключение

Мы очень рады выходу Mixtral! В ближайшие дни будьте готовы узнавать больше о способах настройки и развертывания Mixtral.