MPT-7B, пришло время коммерческих языковых моделей

May 10 2023
Введение и руководство по разработке LLM с открытым исходным кодом — MPT-7B. Компания Total Mosaic специализируется на моделях искусственного интеллекта, и в этой статье мы представим их недавно выпущенную серию моделей MPT-7B. Это полностью коммерчески доступные модели с открытым исходным кодом, обученные 9.

Введение и руководство по разработке LLM с открытым исходным кодом — MPT-7B

Изображение создано Midjourney

Общий

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 также является первой коммерчески доступной моделью, и мы можем самостоятельно настроить ее на основе собственных данных для коммерческого использования.

Нулевая точность MPT-7B по сравнению с LLaMA-7B по сравнению с другими моделями с открытым исходным кодом для академических задач (из Mosaic).

Контекст Длина модели StoryWriter

Одна из самых крутых вещей в модели MPT-7B заключается в том, что она предоставила модель Story-Writer MPT-7B-StoryWriter-65k+, которая была обучена архитектуре ALiBi , что позволяет пользователям расширять контекст до такой экстремальной длины. Если вы хотите настроить более длинную модель, вы можете сделать это сегодня. Это именно то, что они сделали с моделью Story-Writer, где они взяли базовую модель и настроили ее с длиной контекста более 65 000 токенов. Чтобы представить это в перспективе, исходная модель LLaMA принимает только 2048 токенов, StableLM был обучен для 4096 токенов, а для ChatGPT и GPT-4 число составляет 4096 и 8000-32000 в зависимости от того, к какой версии у вас есть доступ.

Возможность ввода 65+K-токенов делает MPT намного более впечатляющим среди моделей.

В его блоге есть впечатляющий пример, показывающий, что команда Mosaic однажды предложила всю книгу « Великий Гэтсби» , а затем модель успешно сгенерировала достойный эпилог на основе ввода 67873 токенов. Я никогда не видел какой-либо другой закрытой или открытой модели, способной сделать это, поэтому я задумался о том, какой метод более рентабельный для контекстного обучения в будущем: встраивание OpenAI или модель Story-Writer. Если вы заинтересованы в обучении в контексте, пожалуйста, обратитесь к моей предыдущей статье.

Наборы данных для обучения

Они также обучили модель с 7 миллиардами инструкций MPT-7B-Instruct, которая представляет собой краткую модель следования инструкциям. Он точно настроен по сравнению с базовым режимом на наборах данных с открытым исходным кодом, в основном на основе дополнения набора данных Dolly-15K от Databricks. В результате они получают больший набор данных на основе инструкций и сохраняют коммерческую лицензию. Как я упоминал в статьев Dolly 2.0 ключевым фактором, обеспечивающим коммерческое использование Dolly, является ее чистый безлицензионный набор данных, который не генерируется из других моделей ИИ, таких как ChatGPT, а создается людьми. Из-за этого, когда вы играете с ним и задаете ему вопросы, вы не получаете таких привычных ответов, как «Как языковая модель ИИ, я не могу…». Тем не менее, это не такой большой набор данных, как модели Vicuna и модели Koala, и команда планирует расширить свое обучение на наборы данных 1T для большей конкурентоспособности этой модели обучения.

Пример модели Instruct для задачи преобразования JSON

Другие

Существует также еще одна расширенная модель 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')

Ответ от MPT-7B-Instruct

Вы можете попробовать гораздо больше инструкций для модели после того, как ваш Colab или локальный компьютер успешно развернет модель и настроит параметры в коде, чтобы увидеть различные варианты поведения в соответствии с вашей точки зрения. Судя по моим тестам, завершение текста и кода достаточно хорошо, но рассуждения и математика еще не созрели для выполнения какой-либо коммерческой задачи обучения. Из официального блога Mosaic мы знаем, что они пытаются добавить больше обучающих данных в эти отлаженные модели.

Базовая модель MPT-7B, точная настройка, наборы данных, обучение и вывод — все это с открытым исходным кодом и без рекламы, поэтому теперь вы можете начать рассматривать возможность обучения и выпуска собственной частной модели для своего бизнеса ИИ по доступной цене.

Вот и все.

Надеюсь, вы сможете найти что-то полезное в этой статье и спасибо за чтение!

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • Хлопайте за историю и подписывайтесь на автора
  • Смотрите больше контента в публикации Level Up Coding
  • Бесплатный курс собеседования по программированию ⇒ Посмотреть курс
  • Подписывайтесь на нас: Твиттер | Линкедин | Новостная рассылка