От GPT до Mistral-7B Захватывающий скачок вперед в области искусственного интеллекта в разговорах

От GPT до Mistral-7B Впереди захватывающие прорывы в области искусственного интеллекта в разговорах

Введение

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

Что отличает Mistral-7B-Instruct от других моделей, это ее способность демонстрировать выдающуюся производительность при более низком количестве параметров, что делает ее высокопроизводительным и экономичным решением. Модель недавно стала популярной после того, как результаты тестов показали, что она не только превосходит все 7B-модели на MT-Bench, но также успешно конкурирует с 13B-моделями чата. В этом блоге мы рассмотрим функции и возможности Mistral 7B, включая ее применение, производительность и практическое руководство по настройке модели.

Цели обучения

  • Понять, как работают большие языковые модели и Mistral 7B
  • Архитектура Mistral 7B и сравнение результатов
  • Варианты использования Mistral 7B и ее производительность
  • Глубокий анализ кода для вывода и настройки

Эта статья была опубликована в рамках Блогона по науке о данных.

Что такое большие языковые модели?

Архитектура больших языковых моделей формируется с помощью трансформаторов, которые используют механизмы внимания для захвата взаимосвязей в данных на дальних расстояниях, где множество слоев трансформерных блоков содержат многоголовые само-внимательные и прямые нейронные сети. Эти модели предварительно обучаются на текстовых данных, изучая предсказание следующего слова в последовательности, тем самым улавливая языковые шаблоны. Предварительно обученные веса можно настроить на конкретные задачи. Мы рассмотрим архитектуру Mistral 7B LLM и то, что делает ее особенной.

Архитектура Mistral 7B

Трансформаторная архитектура модели Mistral 7B эффективно сбалансирована между высокой производительностью и использованием памяти, используя механизмы внимания и стратегии кэширования для превосходства над более крупными моделями по скорости и качеству. Она использует 4096-оконное внимание скольжения (SWA), которое максимизирует внимание на более длинных последовательностях, позволяя каждому токену обращаться к подмножеству предыдущих токенов для оптимизации внимания на более длинных последовательностях.

Заданный скрытый слой может получить доступ к токенам из входных слоев на расстояниях, определяемых размером окна и глубиной слоя. Модель интегрирует модификации Flash Attention и xFormers, удваивая скорость по сравнению с традиционными механизмами внимания. Кроме того, механизм Rolling Buffer Cache поддерживает фиксированный размер кэша для эффективного использования памяти.

Mistral 7B в Google Colab

Давайте глубже вникнем в код и рассмотрим запуск выводов с использованием модели Mistral 7B в Google Colab. Мы будем использовать бесплатную версию с одним графическим процессором T4 и загружать модель из Hugging Face.

1. Установите и импортируйте библиотеку ctransformers в Colab.

#intsall ctransformerspip install ctransformers[cuda]#importfrom ctransformers import AutoModelForCausalLM

2. Инициализируйте объект модели из Hugging Face и установите необходимые параметры. Мы будем использовать другую версию модели, так как исходная модель от Mistral AI может иметь проблемы с загрузкой всей модели в память в Google Colab.

#загрузка модели из huggingface с 50 графическими слоями
llm = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-GGUF", model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf", model_type = "mistral", gpu_layers = 50)

3. Определите функцию для печати результатов вертикально в Google Colab. Этот шаг можно пропустить или изменить, если код выполняется в другой среде.

#функция для печати вывода модели в colab в удобочитаемом формате
def colab_print(текст, максимальная_ширина = 120):
  слова = текст.split()
  строка = ""
  for слово in слова:
    if len(строка) + len(слово) + 1 > максимальная_ширина:
      print(строка)
      строка = ""
    строка += слово + " "
  print(строка)

4. Генерируем текст с использованием модели и видим результаты. Измените параметры, чтобы изменить качество сгенерированного текста.

#генерируем текст
colab_print(llm('''Дайте мне хорошо написанный абзац из 5 предложений о старшем научном сотруднике по обработке данных (имя - Суводжит), который пишет блоги о LLMs на Analytics Vidhya. Он изучал магистерскую программу по AI и машинному обучению в BITS Pilani и работает в компании AZ, имея общий опыт работы 4 года. Начните предложение с - Суводжит является''', максимальное_количество_токенов = 2048, температура = 0.9, top_k = 55, top_p = 0.93, коэффициент_повторения = 1.2))

Ответ модели: Суводжит – старший научный сотрудник по обработке данных, который уже 4 года работает в компании AZ в рамках команды, занимающейся проектированием, внедрением и совершенствованием моделей прогнозирования поведения потребителей в брендах и бизнес-линиях их клиентов с использованием техник машинного обучения с ограниченной памятью. Он пишет о LLMs на Analytics Vidhya, что позволяет ему быть в курсе последних тенденций в области Data Science. Он имеет степень магистра по AI и машинному обучению от BITS Pilani, где изучал алгоритмы машинного обучения и их применение. Суводжит с большим воодушевлением использует свои знания в области науки о данных, чтобы помогать бизнесу принимать лучшие решения и улучшать свою производительность.

Области применения

Давайте подробнее рассмотрим некоторые сферы применения модели Mistral 7B.

Перевод

Mistral 7B поддерживает множество языков для перевода. Рассмотрим перевод с английского на французский и испанский и проверим точность.

#перевести с английского на французский
colab_print(llm('''Переведите этот текст с английского на французский: "Суводжит - старший научный сотрудник по обработке данных, который пишет блоги на Analytics Vidhya."''',                максимальное_количество_токенов = 2048, температура = 0.9, top_k = 55, top_p = 0.93,                 коэффициент_повторения = 1.2))

Ответ модели: Перевод будет: “Суводжит – старший научный сотрудник по обработке данных, который пишет блоги на Analytics Vidhya.”

#перевести с английского на испанский
colab_print(llm('''Переведите этот текст с английского на испанский: "Суводжит - старший научный сотрудник по обработке данных, который пишет блоги на Analytics Vidhya."''',                максимальное_количество_токенов = 2048, температура = 0.9, top_k = 55, top_p = 0.93,                 коэффициент_повторения = 1.2))

Ответ модели: Перевод будет: “Суводжит – старший научный сотрудник данных, который пишет блоги на Analytics Vidhya.”

Суммирование

Используйте Mistral 7B для суммирования документов в краткую версию с использованием соответствующих инструкций.

#Определите запрос с инструкциямипредложение = '''[INST] Вы - полезный кодовый помощник. Ваша задача - суммировать текст в точно два коротких предложения:Трансформеры революционизировали область больших языковых моделей своей способностью улавливать зависимости на большие расстояния и тонкие закономерности в тексте. Зародившись в статье "Внимание - все, что вам нужно" Васвани и др., 2017, трансформеры внесли механизм само-внимания, который весит входные токены по-разному в зависимости от их значимости для данного токена. Этот механизм позволяет трансформерам обрабатывать информацию гораздо более гибко, чем традиционные RNN или LSTM. В результате модели, такие как GPT, BERT и их последующие итерации, основаны на архитектуре трансформера, что привело к прорывам во многих задачах обработки естественного языка. Их возможности параллельной обработки способствуют тренировке на большом объеме данных. Однако с увеличением размера этих моделей возникают опасения относительно их влияния на окружающую среду и потребности вычислительных ресурсов. Несмотря на эти проблемы, трансформативная сила трансформеров в языковых моделях остается неоспоримой.Просто суммируйте текст в точно два коротких предложения без объяснений:[/INST]'''#Суммированиеcolab_print(llm(предложение,                максимальное_количество_токенов = 2048, температура = 0.9, top_k = 55, top_p = 0.93,                 коэффициент_повторения = 1.2))

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

Пользовательские инструкции

Мы можем использовать тег [INST], чтобы изменить пользовательский ввод и получить определенный ответ от модели. Например, мы можем сгенерировать JSON на основе текстового описания.

prompt = '''[INST] Вы – полезный кодовый помощник. Ваша задача – сгенерировать действительный объект JSON на основании предоставленной информации: Меня зовут Суводжит Хоре, я работаю в компании АБ, и мой адрес – AZ Street NY. Просто создайте объект JSON без объяснений:[/INST]'''colab_print(llm(prompt,                max_new_tokens=2048, temperature=0.9, top_k=55, top_p=0.93,                 repetition_penalty=1.2))

Модельный ответ: “`json {“name”: “Suvojit Hore”, “company”: “AB”, “address”: “AZ Street NY”} “`

Настройка модели Mistral 7B

Давайте посмотрим, как мы можем настроить модель, используя одну GPU на Google Colab. Мы будем использовать набор данных, который преобразует краткие описания изображений в подробный и высокоописательный текст. Эти результаты могут быть использованы в Midjourney для генерации конкретного изображения. Целью является обучение LLM для работы в качестве инженера запросов для генерации изображений.

Настройка окружения и импорт необходимых библиотек в Google Colab:

# Установка необходимых библиотек!pip install pandas autotrain-advanced -q!autotrain setup --update-torch!pip install -q peft  accelerate bitsandbytes safetensors# Импорт необходимых библиотекimport pandas as pdimport torchfrom peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizerimport transformersfrom huggingface_hub import notebook_login

Войдите в Hugging Face из браузера и скопируйте токен доступа. Используйте этот токен для входа в Hugging Face в блокноте.

notebook_login()
Hugging Face Notebook Login

Загрузите набор данных в сеансовое хранилище Colab. Мы будем использовать набор данных Midjourney.

df = pd.read_csv("prompt_engineering.csv")df.head(5)
Prompt Engineering Dataset

Обучите модель с помощью Autotrain с соответствующими параметрами. Измените команду ниже, чтобы запустить ее для вашего собственного репозитория Huggin Face и пользовательского токена доступа.

!autotrain llm --train --project_name mistral-7b-sh-finetuned --model username/Mistral-7B-Instruct-v0.1-sharded --token hf_yiguyfTFtufTFYUTUfuytfuys --data_path . --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 12 --num_train_epochs 3 --trainer sft --target_modules q_proj,v_proj --push_to_hub --repo_id username/mistral-7b-sh-finetuned

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

# Адаптер и модельadapters_name = "suvz47/mistral-7b-sh-finetuned"model_name = "bn22/Mistral-7B-Instruct-v0.1-sharded" device = "cuda"# Настройка конфигурациbnb_config = transformers.BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_use_double_quant=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.bfloat16)# Инициализация моделиmodel = AutoModelForCausalLM.from_pretrained(    model_name,    load_in_4bit=True,    torch_dtype=torch.bfloat16,    quantization_config=bnb_config,    device_map='auto')

Загрузите предварительно обученную модель и токенизатор.

#загрузка модели и токенизатораmodel = PeftModel.from_pretrained(model, adapters_name)tokenizer = AutoTokenizer.from_pretrained(model_name)tokenizer.bos_token_id = 1stop_token_ids = [0]

Создайте подробное и описательное задание на середину пути, используя всего несколько слов.

#prompttext = "[INST] сформируйте задание на середину пути, содержащее менее 20 слов для компьютера с эмоциональным чипом    [/INST]"#кодер и декодировщикencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

Ответ модели: Когда компьютеру с эмоциональным чипом начинают приходить на эмоции, он начинает задавать вопросы своему существованию и цели, что приводит к путешествию самопознания и самосовершенствования.

#prompttext = "[INST] сформируйте задание на середину пути, содержащее менее 20 слов для радуги, преследующей свои цвета  [/INST]"#кодер и декодировщикencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

Ответ модели: Радуга, преследующая свои цвета, оказывается в пустыне, где небо является морем бесконечно голубого цвета, а цвета радуги рассыпаются по песку.

Заключение

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

Выводы

  • Mistral-7B-Instruct проявляет высокую производительность, несмотря на меньшее количество параметров.
  • Он использует Sliding Window Attention для оптимизации обработки длинных последовательностей.
  • Функции, такие как Flash Attention и xFormers, удваивают его скорость.
  • Rolling Buffer Cache обеспечивает эффективное управление памятью.
  • Универсальность: обрабатывает перевод, суммирование, генерацию структурированных данных, генерацию текста и завершение текста.
  • Инженерия заданий позволяет добавлять пользовательские инструкции, чтобы модель лучше понимала запрос и выполняла сложные языковые задачи.
  • Настройте Mistral 7B для любых конкретных языковых задач, например, в качестве инженера-подсказки.

Часто задаваемые вопросы

Ссылки

  • Миниатюра – создана с использованием Stable Diffusion
  • Архитектура – Статья

Показанные в статье материалы не принадлежат Analytics Vidhya и используются по усмотрению автора.