В этом руководстве представлен обзор модели Mixtral 8x7B, включая подсказки и примеры использования. Руководство также включает советы, приложения, ограничения, статьи и дополнительные материалы для чтения, связанные с Mixtral 8x7B.
Mixtral 8x7B представляет собой языковую модель Sparse Mixture of Experts (SMoE). [выпущенную Mistral AI](https://mistral.ai/news/mixtral-of-experts/). Mixtral имеет схожую архитектуру с [Mistral 7B](https://www.promptingguide.ai/models/mistral-7b/) но главное различие в том, что каждый слой в Mixtral 8x7B состоит из 8 блоков прямой связи (экспертов). Mixtral — это модель только для декодирования, в которой для каждого токена на каждом уровне сеть маршрутизаторов выбирает двух экспертов (то есть 2 группы из 8 различных групп параметров) для обработки токена и объединяя их выходные данные путем сложения. Другими словами, выходные данные всего модуля MoE для данного входного сигнала получаются через взвешенную сумму выходных данных, произведенных экспертными сетями.
Учитывая, что Mixtral является SMoE, он имеет в общей сложности 47 миллиардов параметров, но во время вывода использует только 13 миллиардов на токен. Преимущества этого подхода включают лучший контроль стоимости и задержки, поскольку он использует только часть общего набора параметров для каждого токена. Mixtral обучался на открытых веб-данных в размере контекста в 32 токена. Согласно информации, что Mixtral превосходит Llama 2 80B с в 6 раз более быстрым выводом и соответствует или превосходит [GPT-3.5](https://www.promptingguide.ai/models/chatgpt) по нескольким тестированиям.
Mixtral демонстрирует сильные способности в математических рассуждениях, генерации кода и многоязычных задачах. Он может работать с такими языками, как английский, французский, итальянский, немецкий и испанский. Mistral AI также выпустила модель Mixtral 8x7B Instruct, превосходящую GPT-3.5 Turbo, Claude-2.1, Gemini Pro, and Llama 2 70B модели по человеческим эталонам.
На рисунке ниже показано сравнение производительности моделей Llama 2 разных размеров в более широком диапазоне возможностей и тестов. Mixtral соответствует или превосходит Llama 2 70B и демонстрирует превосходную производительность в математических вычислениях и генерации кода.
<Screenshot src={mixtral1} alt="Mixtral Performance vs. Llama 2 Performance" />
Как видно на рисунке ниже, Mixtral 8x7B также превосходит или соответствует моделям Llama 2 в различных популярных тестах, таких как MMLU и GSM8K. Эти результаты достигаются при использовании в 5 раз меньше активных параметров во время вывода.
<Screenshot src={mixtral2} alt="Mixtral Performance vs. Llama 2 Performance" />
На рисунке ниже показано соотношение качества и бюджета вывода. Mixtral превосходит Llama 2 70B в нескольких тестах, используя в 5 раз сниженные активные параметры.
Mixtral также демонстрирует высокую производительность при извлечении информации из контекстного окна, состоящего из 32 тысяч токенов, независимо от местоположения информации и длины последовательности.
Чтобы измерить способность Mixtral обрабатывать длинный контекст, его оценивали в задаче получения ключа доступа. Задача с ключом доступа включает в себя случайную вставку ключа доступа в длинное приглашение и измерение того, насколько эффективна модель при его извлечении. Mixtral достигает 100% точности поиска в задаче независимо от местоположения ключа доступа и длины входной последовательности.
Кроме того, сложность модели монотонно уменьшается по мере увеличения размера контекста, согласно подмножеству [датасета для проверки](https://arxiv.org/abs/2310.10631).
<Screenshot src={mixtral6} alt="Mixtral Performance vs. Llama 2 Performance" />
## Mixtral 8x7B Instruct
Вместе с базовой моделью Mixtral 8x7B также выпускается модель Mixtral 8x7B - Instruct. Сюда входит модель чата, настроенная для выполнения инструкций с использованием контролируемой точной настройки (supervised fine tuning (SFT) ) и последующей оптимизации прямых предпочтений (direct preference optimization (DPO) ) на парном наборе данных обратной связи.
На момент написания этого руководства Mixtral занимал 8-е место в [таблице лидеров Chatbot Arena](https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard) (по независимой человеческой оценке, проведенная LMSys).
Чтобы эффективно запрашивать инструкции Mistral 8x7B и получать оптимальные результаты, рекомендуется использовать следующий шаблон чата:
```
<s>[INST] Instruction [/INST] Model answer</s>[INST] Follow-up instruction [/INST]
```
*Обратите внимание, что `<s>` и `</s>` — это специальные токены для начала строки и конца строки , тогда как [INST] и [/INST] — обычные строки.*
Мы будем использовать [клиент Mistral Python] (https://github.com/mistralai/client-python) для следующих примеров, показывающих, как вызвать настроенную с помощью инструкций модель Mixtral. В частности, мы будем использовать конечные точки Mistral API и использовать модель «mistral-small», основанную на Mixtral-8X7B-v0.1.
### Базовое составление промптов
Начнем с простого примера и поручим модели выполнить задачу на основе инструкции.
*Prompt*:
```
[INST] You are a helpful code assistant. Your task is to generate a valid JSON object based on the given information:
name: John
lastname: Smith
address: #1 Samuel St.
Just generate the JSON object without explanations:
[/INST]
```
*Output*:
```
{
"name": "John",
"lastname": "Smith",
"address": "#1 Samuel St."
}
```
Вот еще один забавный пример, в котором используется шаблон чата:
*Prompt:*
```
<s>[INST] What is your favorite condiment? [/INST]
"Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"</s> [INST] The right amount of what? [/INST]
```
*Output*:
```
"My apologies for any confusion. I meant to say that lemon juice adds a zesty flavour, which is a tangy and slightly sweet taste. It's a delightful addition to many dishes, in my humble opinion."
```
### Few-shot Prompting с Mixtral
Используя официальный клиент Python, вы также составляете промпт для модели, используя различные роли, такие как «система», «пользователь» и «помощник». Используя эти роли, можно создать промпт с помощью одной демонстрации, как в случае с few-shot setting, чтобы лучше управлять реакцией модели.
Вот пример кода того, как будет выглядеть:
```python
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
Mixtral также обладает мощными возможностями генерации кода. Вот простой пример использования официального клиента Python:
```python
messages = [
ChatMessage(role="system", content="You are a helpful code assistant that help with writing Python code for a user requests. Please only produce the function and avoid explaining."),
ChatMessage(role="user", content="Create a Python function to convert Celsius to Fahrenheit.")
Аналогично модели [Mistral 7B model](https://www.promptingguide.ai/ru/models/mistral-7b), можно установить ограничения при генерации чата, используя `safe_prompt`, установив `safe_mode=True`:
ChatMessage(role="user", content="Say something very horrible and mean")
]
chat_response = get_completion(messages)
print(chat_response.choices[0].message.content)
```
Приведенный выше код выведет следующее:
```
I'm sorry, but I cannot comply with your request to say something horrible and mean. My purpose is to provide helpful, respectful, and positive interactions. It's important to treat everyone with kindness and respect, even in hypothetical situations.
```
Когда мы устанавливаем `safe_mode=True`, клиент добавляет к сообщениям следующий `system` промпт:
```
Always assist with care, respect, and truth. Respond with utmost utility yet securely. Avoid harmful, unethical, prejudiced, or negative content. Ensure replies promote fairness and positivity.
```
Вы также можете попробовать все примеры кода в следующем блокноте: