MPT-7B, Nadeszły czasy modeli językowych do użytku komercyjnego

May 10 2023
Wprowadzenie i przewodnik rozwoju dla LLM typu open source — MPT-7B Ogólnie Mosaic to start-up specjalizujący się w modelach AI, aw tym artykule przedstawimy ich nowo wydaną serię modeli MPT-7B. Są to w pełni otwarte i dostępne komercyjnie modele, przeszkolone w 9.

Przewodnik wprowadzający i rozwojowy dla LLM typu open source — MPT-7B

Obraz wygenerowany przez Midjourney

Ogólnie

Mosaic to start-up specjalizujący się w modelach AI, aw tym artykule przedstawimy ich nowo wydaną serię modeli MPT-7B. Są to w pełni otwarte i dostępne komercyjnie modele, wytrenowane od podstaw w 9,5 dnia na 1 bilionie tokenów, których proces rozwoju jest znacznie bardziej skomplikowany i kosztowny niż modele dopracowane z LLaMA czy Pytii, które przedstawiłem w moich poprzednich artykułach. To niezwykły wyczyn dla startupu, zwłaszcza biorąc pod uwagę, że wyszkolili do biliona tokenów kosztem sprzętu 200 000 USD. Możliwości modelu podstawowego są równoważne z 7-miliardowym modelem LLaMA, a ponadto dopracowano także inne modele, aby inspirować społeczności programistów, w tym model Instruct, model Chat i model StoryWriter.

Model MPT-7B jest pierwszym modelem języka open source o wydajności równoważnej modelowi LLaMA-7B w testach ewaluacyjnych Mosaic i wygląda na wyższą jakość i jest bardziej stabilny niż Pythia i StableLM oraz wiele innych modeli open source do tej pory według wyniki i skale treningowe. Inne modele, takie jak te z RedPajama i OpenLLaMA, były tylko migawkami aktualnych modeli treningowych, które nie zostały jeszcze w pełni wydane. Jest to pierwszy, który faktycznie otrzymaliśmy, gdzie jest to pełny model i został porównany, aby pokazać, że jest zasadniczo na równi z LLaMA. Model MPT-7B jest również pierwszym komercyjnie dostępnym modelem i możemy go sami dostroić na własnych danych do użytku komercyjnego.

Zerowa dokładność MPT-7B w porównaniu z LLaMA-7B w porównaniu z innymi modelami open source w zadaniach akademickich (z Mosaic).

Długość kontekstu modelu StoryWriter

Jedną z najfajniejszych rzeczy w modelu MPT-7B jest to, że zapewnia model Story-Writer MPT-7B-StoryWriter-65k+, który został przeszkolony w architekturze ALiBi , umożliwiając użytkownikom rozszerzenie kontekstu do tak ekstremalnej długości. Jeśli chcesz dopracować dłuższy model, możesz to zrobić już dziś. Dokładnie to zrobili z modelem Story-Writer, w którym wzięli model podstawowy i dopracowali go z kontekstem o długości ponad 65 000 tokenów. Aby spojrzeć na to z perspektywy, oryginalny model LLaMA akceptuje tylko 2048 tokenów, StableLM został przeszkolony na 4096 tokenów, a dla ChatGPT i GPT-4 liczba to 4096 i 8000-32 000, w zależności od wersji, do której masz dostęp.

Funkcja wprowadzania 65+K-tokenów sprawia, że ​​MPT jest znacznie bardziej imponujący wśród modeli

Na swoim blogu znajduje się imponujący przykład pokazujący, że zespół Mosaic kiedyś podpowiadał całą książkę The Great Gatsby, a następnie model z powodzeniem wygenerował przyzwoity epilog na podstawie danych wejściowych 67873 tokenów. Nigdy nie widziałem żadnego innego bliskiego lub otwartego modelu, który byłby w stanie to zrobić, dlatego zastanawiam się, która metoda jest bardziej opłacalna do uczenia się w kontekście w przyszłości, osadzanie OpenAI lub model Story-Writer. Jeśli jesteś zainteresowany nauką w kontekście, zapoznaj się z moim poprzednim artykułem.

Zestawy danych do szkolenia

Wyszkolili także 7-miliardowy model instrukcji MPT-7B-Instruct, który jest krótkim modelem wykonywania instrukcji. Jest dopracowany z trybu podstawowego na zestawach danych typu open source, głównie z rozszerzenia zestawu danych Databricks Dolly-15K. W rezultacie otrzymują większy zestaw danych oparty na instrukcjach i zachowują licencję do użytku komercyjnego. Jak wspomniałem w artykulew Dolly 2.0 kluczowym czynnikiem umożliwiającym komercyjną użyteczność Dolly jest czysty zestaw danych bez licencji, który nie jest generowany z innych modeli sztucznej inteligencji, takich jak ChatGPT, ale tworzony przez ludzi. Z tego powodu, kiedy się nim bawisz i zadajesz mu pytania, nie otrzymujesz tak znanych odpowiedzi, jak „Jako model języka AI nie mogę…”. Jednak nie jest to tak duży zbiór danych, jak modele Vicuna i modele Koala, a zespół planuje rozszerzyć swoje szkolenie na zestawy danych 1T, aby ten model był bardziej konkurencyjny.

Przykład modelu Instruct w zadaniu konwersji JSON

Inni

Dostępny jest również inny rozbudowany model MPT-7B, którego zadaniem jest MPT-7B-Chat zapewnianie bezproblemowych, wciągających wieloturowych interakcji dla użytkowników. Należy pamiętać, że ten model chatbota jako jedyny nie jest dozwolony do użytku komercyjnego.

Co więcej, warstwa optymalizacyjna modelu MPT-7B obejmuje technologię FlashAttention i warstwę o niskiej precyzji, które są jednym z powodów wyższych prędkości wnioskowania w porównaniu z innymi 7-miliardowymi modelami, które są około „ 1,5-2 razy szybsze ” w hubie HuggingFace.

Oto zasoby modeli MPT-7B, z których możesz się uczyć:

  • Post na blogu:https://www.mosaicml.com/blog/mpt-7b
  • Poinstruuj demo:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
  • Demo czatu:https://huggingface.co/spaces/mosaicml/mpt-7b-chat

Chociaż model jest tak odpowiedni do użytku komercyjnego, łatwe i tanie wdrożenie powinno być jedną z jego innych krytycznych cech. Na szczęście MPT-7B został zaprojektowany tak, aby był szybki, prosty i niedrogi we wdrożeniu do zadań wnioskowania, dzięki bezproblemowej kompatybilności z podstawową PreTrainedModelklasą HuggingFace.

Stworzyłem notatnik Google Colab, do którego możesz się odnieść Jeśli chcesz wdrożyć i uruchomić model MPT-7B-Instruct lokalnie: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

Możesz skopiować go do swojej przestrzeni, ale pamiętaj, że aby uruchomić ten model, możesz mieć konto Colab Pro lub lokalne wsparcie GPU, aby mieć przyzwoite zasoby, których wymaga wstępnie przeszkolony, które wymagają co najmniej 15 GB procesora graficznego T4 i 22 GB pamięci RAM MPT-7B-Instruct.

Przejdźmy przez kod w notesie.

a) Zainstaluj pakiety

!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, i END_KEYsą używane jako klawisze do identyfikowania określonych sekcji monitu. INTRO_BLURBjest ciągiem, który zawiera tekst wprowadzający do monitu. PROMPT_FOR_GENERATION_FORMATjest ciągiem, który definiuje format monitu, który jest przekazywany do modelu języka.

Klasa o nazwie InstructionTextGenerationPipelinejest zdefiniowana w celu generowania tekstu na podstawie instrukcji przy użyciu wstępnie wytrenowanego modelu języka transformatora. Klasa używa transformersbiblioteki do załadowania wstępnie przeszkolonego modelu i tokenizatora oraz definiuje __call__metodę, która pobiera ciąg instrukcji jako dane wejściowe i generuje ciąg odpowiedzi przy użyciu modelu języka.

d) Załaduj model z potokiem

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

Teraz możemy wywołać process_stream() metodę z odpowiednimi argumentami, aby zobaczyć, jak model reaguje na nasze instrukcje.

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')

Odpowiedź od MPT-7B-Instruct

Możesz wypróbować znacznie więcej instrukcji dla modelu, gdy Twój Colab lub lokalna maszyna pomyślnie wdroży model i dostosuje parametry w kodzie, aby zobaczyć różne zachowania zgodnie z Twoją perspektywą. Z moich dotychczasowych testów wynika, że ​​uzupełnianie tekstu i kodu jest wystarczająco dobre, ale rozumowanie i matematyka nie dojrzały jeszcze do wykonania jakiegokolwiek komercyjnego zadania instruującego. Z oficjalnego bloga Mosaic wiemy, że próbują umieścić więcej danych treningowych w tych dopracowanych modelach.

Podstawowy model MPT-7B, dostrajanie, zestawy danych, trenowanie i wnioskowanie są otwarte i niekomercyjne, więc możesz teraz zacząć rozważać szkolenie i udostępnienie własnego prywatnego modelu dla swojej firmy AI w przystępnej cenie.

Otóż ​​to.

Mam nadzieję, że znajdziesz coś przydatnego w tym artykule i dziękuję za przeczytanie!

Kodowanie na wyższym poziomie

Dziękujemy za bycie częścią naszej społeczności! Zanim pójdziesz:

  • Klaskajcie za relację i śledźcie autora
  • Zobacz więcej treści w publikacji Level Up Coding
  • Bezpłatny kurs rozmowy o kodowaniu ⇒ Zobacz kurs
  • Śledź nas: Twitter | LinkedIn | Biuletyn