MPT-7B, пришло время коммерческих языковых моделей
Введение и руководство по разработке LLM с открытым исходным кодом — MPT-7B
Общий
Mosaic — это начинающая компания, специализирующаяся на моделях искусственного интеллекта, и в этой статье мы представим их недавно выпущенную серию моделей MPT-7B. Это коммерчески доступные модели с полностью открытым исходным кодом, обученные за 9,5 дней с нуля на 1 трлн токенов, процесс разработки которых намного сложнее и дороже, чем модели, доработанные с помощью LLaMA или Pythia, которые я представил в своих предыдущих статьях. Это выдающийся подвиг для стартапа, особенно если учесть, что они обучили до триллиона токенов при стоимости оборудования в 200 тысяч долларов. Возможности базовой модели эквивалентны 7-миллиардной модели LLaMA, в дополнение к этому они также доработали другие модели для вдохновения сообществ разработчиков, включая модель Instruct, модель Chat и модель StoryWriter.
Модель MPT-7B является первой языковой моделью с открытым исходным кодом, производительность которой эквивалентна модели LLaMA-7B в оценочных тестах Mosaic, и она выглядит более качественной и стабильной, чем Pythia и StableLM, а также многие другие модели с открытым исходным кодом. результат и тренировочные весы. Другие модели, например, от RedPajama и OpenLLaMA, были лишь снимками текущих моделей обучения, которые еще не были полностью выпущены. Это первое, что мы фактически получили, где это полная модель, и она была протестирована, чтобы показать, что она в основном соответствует LLaMA. Модель MPT-7B также является первой коммерчески доступной моделью, и мы можем самостоятельно настроить ее на основе собственных данных для коммерческого использования.
Контекст Длина модели StoryWriter
Одна из самых крутых вещей в модели MPT-7B заключается в том, что она предоставила модель Story-Writer MPT-7B-StoryWriter-65k+
, которая была обучена архитектуре ALiBi , что позволяет пользователям расширять контекст до такой экстремальной длины. Если вы хотите настроить более длинную модель, вы можете сделать это сегодня. Это именно то, что они сделали с моделью Story-Writer, где они взяли базовую модель и настроили ее с длиной контекста более 65 000 токенов. Чтобы представить это в перспективе, исходная модель LLaMA принимает только 2048 токенов, StableLM был обучен для 4096 токенов, а для ChatGPT и GPT-4 число составляет 4096 и 8000-32000 в зависимости от того, к какой версии у вас есть доступ.
В его блоге есть впечатляющий пример, показывающий, что команда Mosaic однажды предложила всю книгу « Великий Гэтсби» , а затем модель успешно сгенерировала достойный эпилог на основе ввода 67873 токенов. Я никогда не видел какой-либо другой закрытой или открытой модели, способной сделать это, поэтому я задумался о том, какой метод более рентабельный для контекстного обучения в будущем: встраивание OpenAI или модель Story-Writer. Если вы заинтересованы в обучении в контексте, пожалуйста, обратитесь к моей предыдущей статье.
Наборы данных для обучения
Они также обучили модель с 7 миллиардами инструкций MPT-7B-Instruct
, которая представляет собой краткую модель следования инструкциям. Он точно настроен по сравнению с базовым режимом на наборах данных с открытым исходным кодом, в основном на основе дополнения набора данных Dolly-15K от Databricks. В результате они получают больший набор данных на основе инструкций и сохраняют коммерческую лицензию. Как я упоминал в статьев Dolly 2.0 ключевым фактором, обеспечивающим коммерческое использование Dolly, является ее чистый безлицензионный набор данных, который не генерируется из других моделей ИИ, таких как ChatGPT, а создается людьми. Из-за этого, когда вы играете с ним и задаете ему вопросы, вы не получаете таких привычных ответов, как «Как языковая модель ИИ, я не могу…». Тем не менее, это не такой большой набор данных, как модели Vicuna и модели Koala, и команда планирует расширить свое обучение на наборы данных 1T для большей конкурентоспособности этой модели обучения.
Другие
Существует также еще одна расширенная модель MPT-7B, призванная MPT-7B-Chat
обеспечить плавное и увлекательное многооборотное взаимодействие для пользователей. Обратите внимание, что эта модель чат-бота является единственной, которая не разрешена для коммерческого использования.
Кроме того, уровень оптимизации модели MPT-7B включает в себя FlashAttention и уровень низкой точности, которые являются одной из причин более высокой скорости логического вывода по сравнению с другими 7-миллиардными моделями примерно «в 1,5–2 раза быстрее » на концентраторе HuggingFace.
Вот ресурсы моделей MPT-7B, из которых вы можете узнать:
- Сообщение блога:https://www.mosaicml.com/blog/mpt-7b
- Проинструктировать демо:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
- Демонстрация чата:https://huggingface.co/spaces/mosaicml/mpt-7b-chat
Несмотря на то, что модель так удобна для коммерческого использования, простое и дешевое развертывание должно быть еще одной ее важной характеристикой. К счастью, MPT-7B был разработан, чтобы быть быстрым, простым и доступным для развертывания для задач логического вывода благодаря полной совместимости с базовым PreTrainedModel
классом HuggingFace.
Я создал записную книжку Google Colab, чтобы вы могли обратиться к ней. Если вы хотите развернуть и запустить модель MPT-7B-Instruct локально: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing
Пожалуйста, не стесняйтесь копировать его в свое пространство, но имейте в виду, что для запуска этой модели у вас может быть учетная запись Colab Pro или локальная поддержка графического процессора, чтобы иметь приличные ресурсы, которые требуются предварительно обученным, которые требуют минимального графического процессора T4 15 ГБ и 22 ГБ ОЗУ MPT-7B-Instruct
.
Давайте пройдемся по коду в блокноте.
а) Установить пакеты
!pip install requests torch transformers einops
from typing import Any, Dict, Tuple
import warnings
import datetime
import os
from threading import Event, Thread
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList, TextIteratorStreamer
import textwrap
INSTRUCTION_KEY = "### Instruction:"
RESPONSE_KEY = "### Response:"
END_KEY = "### End"
INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
PROMPT_FOR_GENERATION_FORMAT = """{intro}
{instruction_key}
{instruction}
{response_key}
""".format(
intro=INTRO_BLURB,
instruction_key=INSTRUCTION_KEY,
instruction="{instruction}",
response_key=RESPONSE_KEY,
)
class InstructionTextGenerationPipeline:
...
INSTRUCTION_KEY
, RESPONSE_KEY
и END_KEY
используются в качестве ключей для идентификации определенных разделов подсказки. INTRO_BLURB
это строка, которая предоставляет некоторый вводный текст для подсказки. PROMPT_FOR_GENERATION_FORMAT
— это строка, определяющая формат приглашения, передаваемого в языковую модель.
Названный класс InstructionTextGenerationPipeline
определен для генерации текста с учетом инструкции с использованием предварительно обученной языковой модели преобразователя. Класс использует transformers
библиотеку для загрузки предварительно обученной модели и токенизатора и определяет __call__
метод, который принимает строку инструкций в качестве входных данных и генерирует строку ответа с использованием языковой модели.
г) Модель загрузки с трубопроводом
generate = InstructionTextGenerationPipeline(
"mosaicml/mpt-7b-instruct",
torch_dtype=torch.bfloat16,
trust_remote_code=True,
)
stop_token_ids = generate.tokenizer.convert_tokens_to_ids(["<|endoftext|>"])
# Define a custom stopping criteria
class StopOnTokens(StoppingCriteria):
def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
for stop_id in stop_token_ids:
if input_ids[0][-1] == stop_id:
return True
return False
def process_stream(instruction, temperature, top_p, top_k, max_new_tokens):
# Tokenize the input
input_ids = generate.tokenizer(
generate.format_instruction(instruction), return_tensors="pt"
).input_ids
input_ids = input_ids.to(generate.model.device)
# Initialize the streamer and stopping criteria
streamer = TextIteratorStreamer(
generate.tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True
)
stop = StopOnTokens()
if temperature < 0.1:
temperature = 0.0
do_sample = False
else:
do_sample = True
gkw = {
**generate.generate_kwargs,
**{
"input_ids": input_ids,
"max_new_tokens": max_new_tokens,
"temperature": temperature,
"do_sample": do_sample,
"top_p": top_p,
"top_k": top_k,
"streamer": streamer,
"stopping_criteria": StoppingCriteriaList([stop]),
},
}
response = ''
def generate_and_signal_complete():
generate.model.generate(**gkw)
t1 = Thread(target=generate_and_signal_complete)
t1.start()
for new_text in streamer:
response += new_text
return response
Теперь мы можем вызвать process_stream()
метод с правильными аргументами, чтобы увидеть, как модель реагирует на наши инструкции.
instruction = "Write a travel blog about a 3-day trip to The Philippines. You need describe day by day."
temperature = 0.3
top_p = 0.95
top_k = 0
max_new_tokens = 2000
response = process_stream(instruction, temperature, top_p, top_k, max_new_tokens)
wrapped_text = textwrap.fill(response, width=100)
print(wrapped_text +'\n\n')
Вы можете попробовать гораздо больше инструкций для модели после того, как ваш Colab или локальный компьютер успешно развернет модель и настроит параметры в коде, чтобы увидеть различные варианты поведения в соответствии с вашей точки зрения. Судя по моим тестам, завершение текста и кода достаточно хорошо, но рассуждения и математика еще не созрели для выполнения какой-либо коммерческой задачи обучения. Из официального блога Mosaic мы знаем, что они пытаются добавить больше обучающих данных в эти отлаженные модели.
Базовая модель MPT-7B, точная настройка, наборы данных, обучение и вывод — все это с открытым исходным кодом и без рекламы, поэтому теперь вы можете начать рассматривать возможность обучения и выпуска собственной частной модели для своего бизнеса ИИ по доступной цене.
Вот и все.
Надеюсь, вы сможете найти что-то полезное в этой статье и спасибо за чтение!
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- Хлопайте за историю и подписывайтесь на автора
- Смотрите больше контента в публикации Level Up Coding
- Бесплатный курс собеседования по программированию ⇒ Посмотреть курс
- Подписывайтесь на нас: Твиттер | Линкедин | Новостная рассылка