MPT-7B, die Zeit kommerziell nutzbarer Sprachmodelle ist gekommen

May 10 2023
Ein Einführungs- und Entwicklungsleitfaden für Open-Source-LLM – MPT-7B Insgesamt ist Mosaic ein Startup-Unternehmen, das sich auf KI-Modelle spezialisiert hat. In diesem Artikel stellen wir die neu veröffentlichte Modellreihe MPT-7B vor. Es handelt sich um vollständig Open-Source- und kommerziell verfügbare Modelle, die in 9 geschult wurden.

Ein Einführungs- und Entwicklungsleitfaden für Open-Source-LLM – MPT-7B

Bild erstellt von Midjourney

Gesamt

Mosaic ist ein Startup-Unternehmen, das sich auf KI-Modelle spezialisiert hat. In diesem Artikel stellen wir die neu veröffentlichte MPT-7B-Modellreihe vor. Es handelt sich um vollständig quelloffene und im Handel erhältliche Modelle, die in 9,5 Tagen von Grund auf auf 1 Billion Token trainiert wurden und deren Entwicklungsprozess viel komplizierter und kostspieliger ist als die Modelle, die von LLaMA oder Pythia aus optimiert wurden und die ich in meinen vorherigen Artikeln vorgestellt habe. Dies ist eine bemerkenswerte Leistung für ein Startup, insbesondere wenn man bedenkt, dass es bis zu einer Billion Token zu Hardwarekosten von 200.000 USD trainiert hat. Die Leistungsfähigkeit des Basismodells entspricht dem 7-Milliarden-LLaMA-Modell. Darüber hinaus wurden auch andere Modelle zur Inspiration von Entwicklungsgemeinschaften verfeinert, darunter ein Instruct-Modell, ein Chat-Modell und ein StoryWriter-Modell.

Das MPT-7B-Modell ist das erste Open-Source-Sprachmodell mit einer Leistung, die in den Evaluierungstests von Mosaic dem LLaMA-7B-Modell entspricht, und es scheint qualitativ hochwertiger und stabiler zu sein als Pythia und StableLM und viele andere Open-Source-Modelle bisher die Ergebnis- und Trainingsskalen. Andere Modelle, etwa die von RedPajama und OpenLLaMA, waren lediglich Schnappschüsse aktueller Trainingsmodelle, die noch nicht vollständig veröffentlicht wurden. Dies ist das erste, das wir tatsächlich erhalten haben. Dabei handelt es sich um das vollständige Modell, und es wurde ein Benchmarking durchgeführt, um zu zeigen, dass es im Grunde mit LLaMA gleichwertig ist. Das MPT-7B-Modell ist auch das erste kommerziell erhältliche Modell, und wir können es anhand unserer eigenen Daten für den kommerziellen Einsatz selbst optimieren.

Nullschussgenauigkeit von MPT-7B im Vergleich zu LLaMA-7B im Vergleich zu anderen Open-Source-Modellen für akademische Aufgaben (von Mosaik).

Kontextlänge des StoryWriter-Modells

Eines der coolsten Dinge am MPT-7B-Modell ist, dass es das Story-Writer-Modell bereitstellt , das mit der ALiBi- Architektur MPT-7B-StoryWriter-65k+trainiert wurde und es Benutzern ermöglicht, den Kontext auf eine so extreme Länge zu erweitern. Wenn Sie ein längeres Modell verfeinern möchten, können Sie dies noch heute tun. Genau das haben sie mit dem Story-Writer-Modell getan, bei dem sie das Basismodell genommen und es mit einer Kontextlänge von über 65.000 Token verfeinert haben. Um das ins rechte Licht zu rücken: Das ursprüngliche LLaMA-Modell akzeptiert nur 2048 Token, der StableLM wurde für 4.096 Token trainiert und für ChatGPT und GPT-4 beträgt die Zahl 4.096 und 8.000–32.000, je nachdem, auf welche Version Sie Zugriff haben.

Die Funktion der 65+K-Token-Eingabe macht MPT unter den Modellen viel beeindruckender

Auf seinem Blog gibt es ein beeindruckendes Beispiel, das zeigt, dass das Mosaik-Team einmal das gesamte Buch „ Der große Gatsby“ erstellt hat und das Modell dann erfolgreich einen anständigen Epilog basierend auf der Eingabe von 67873 Token erstellt hat. Ich habe noch nie ein anderes geschlossenes oder offenes Modell gesehen, das dazu in der Lage wäre. Deshalb überlege ich, welche Methode für das Lernen im Kontext in Zukunft kostengünstiger ist: die Einbettung von OpenAI oder das Story-Writer-Modell. Wenn Sie an kontextbezogenem Lernen interessiert sind, lesen Sie bitte meinen vorherigen Artikel.

Datensätze für das Training

Sie haben auch ein 7-Milliarden-Instruktionsmodell trainiert MPT-7B-Instruct, bei dem es sich um ein Kurzform-Anweisungsfolgemodell handelt. Die Feinabstimmung erfolgt ausgehend vom Basismodus auf Open-Source-Datensätze, hauptsächlich durch die Erweiterung des Dolly-15K-Datensatzes von Databricks. Dadurch erhalten sie einen größeren befehlsbasierten Datensatz und behalten eine kommerziell nutzbare Lizenz. Wie ich im Artikel erwähnt habeBei Dolly 2.0 ist der entscheidende Faktor für die kommerzielle Nutzbarkeit von Dolly der reine lizenzfreie Datensatz, der nicht aus anderen KI-Modellen wie ChatGPT generiert, sondern von Menschen erstellt wird. Aus diesem Grund erhält man, wenn man damit spielt und ihm Fragen stellt, keine so vertrauten Antworten wie „Als KI-Sprachmodell kann ich nicht …“. Es handelt sich jedoch nicht um einen so großen Datensatz wie die Vicuna-Modelle und die Koala-Modelle, und das Team plant, sein Training auf 1T-Datensätze auszudehnen, um dieses Lehrmodell wettbewerbsfähiger zu machen.

Ein Beispiel für eine Instruct-Modell-auf-JSON-Konvertierungsaufgabe

Andere

Es gibt auch ein weiteres umfangreiches Modell des MPT-7B, das MPT-7B-Chat den Benutzern nahtlose, ansprechende Multi-Turn-Interaktionen bieten soll. Bitte beachten Sie, dass dieses Chatbot-Modell das einzige ist, das nicht für die kommerzielle Nutzung zugelassen ist.

Darüber hinaus umfasst die Optimierungsschicht des MPT-7B-Modells FlashAttention und Low Precision Layernorm, die zum Teil der Grund für die schnelleren Inferenzgeschwindigkeiten als bei anderen 7-Milliarden-Modellen sind, etwa „ 1,5x-2x schneller “ auf dem HuggingFace-Hub.

Hier sind die Ressourcen der MPT-7B-Modelle, aus denen Sie lernen können:

  • Blogeintrag:https://www.mosaicml.com/blog/mpt-7b
  • Demo anweisen:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
  • Chat-Demo:https://huggingface.co/spaces/mosaicml/mpt-7b-chat

Obwohl ein Modell für den kommerziellen Einsatz sehr gut geeignet ist, sollte die einfache und kostengünstige Bereitstellung eines der weiteren entscheidenden Merkmale sein. PreTrainedModelGlücklicherweise wurde MPT-7B dank der nahtlosen Kompatibilität mit der HuggingFace- Basisklasse so entwickelt, dass es schnell, einfach und kostengünstig für Inferenzaufgaben eingesetzt werden kann .

Ich habe ein Google Colab-Notizbuch erstellt, auf das Sie verweisen können. Wenn Sie das MPT-7B-Instruct-Modell lokal bereitstellen und ausführen möchten: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

Bitte zögern Sie nicht, es in Ihren Speicherplatz zu kopieren. Beachten Sie jedoch, dass Sie zum Ausführen dieses Modells möglicherweise über ein Colab Pro-Konto oder lokale GPU-Unterstützung verfügen, um über angemessene Ressourcen zu verfügen, die für das Vortraining erforderlich sind und mindestens eine T4-GPU mit 15 GB und 22 GB RAM erfordern MPT-7B-Instruct.

Lassen Sie uns den Code im Notizbuch durchgehen.

a) Installieren Sie die Pakete

!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_KEYund END_KEYwerden als Schlüssel verwendet, um bestimmte Abschnitte der Eingabeaufforderung zu identifizieren. INTRO_BLURBist eine Zeichenfolge, die einen einleitenden Text für die Eingabeaufforderung bereitstellt. PROMPT_FOR_GENERATION_FORMATist eine Zeichenfolge, die das Format der Eingabeaufforderung definiert, die an das Sprachmodell übergeben wird.

Eine benannte Klasse InstructionTextGenerationPipelinewird definiert, um anhand einer Anweisung mithilfe eines vorab trainierten Transformer-Sprachmodells Text zu generieren. Die Klasse verwendet die transformersBibliothek, um das vorab trainierte Modell und den Tokenizer zu laden, und definiert eine __call__Methode, die eine Anweisungszeichenfolge als Eingabe verwendet und mithilfe des Sprachmodells eine Antwortzeichenfolge generiert.

d) Modell mit Pipeline laden

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

Jetzt können wir die process_stream() Methode mit den richtigen Argumenten aufrufen, um zu sehen, wie das Modell auf unsere Anweisungen reagiert.

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

Antwort von MPT-7B-Instruct

Sie können viel mehr Anweisungen für das Modell ausprobieren, sobald Ihr Colab oder Ihr lokaler Computer das Modell erfolgreich bereitstellt und die Parameter im Code anpasst, um je nach Ihrer Perspektive unterschiedliche Verhaltensweisen zu sehen. Bei meinen bisherigen Tests ist die Text- und Codevervollständigung gut genug, aber die Argumentation und die Mathematik sind noch nicht ausgereift, um eine kommerzielle Befehlsaufgabe auszuführen. Aus dem offiziellen Blog von Mosaic wissen wir, dass sie versuchen, mehr Trainingsdaten in diese fein abgestimmten Modelle zu integrieren.

Das Basismodell, die Feinabstimmung, die Datensätze, das Training und die Inferenz von MPT-7B sind alle Open-Source- und kommerziellfrei, sodass Sie jetzt darüber nachdenken können, Ihr eigenes privates Modell für Ihr KI-Unternehmen zu einem erschwinglichen Preis zu trainieren und zu veröffentlichen.

Das ist es.

Ich hoffe, dass Sie in diesem Artikel etwas Nützliches finden und danke fürs Lesen!

Level-Up-Codierung

Vielen Dank, dass Sie Teil unserer Community sind! Bevor du gehst:

  • Klatschen Sie für die Geschichte und folgen Sie dem Autor
  • Weitere Inhalte finden Sie in der Level Up Coding-Publikation
  • Kostenloser Programmier-Interviewkurs ⇒ Kurs ansehen
  • Folgen Sie uns: Twitter | LinkedIn | Newsletter