MPT-7B, die Zeit kommerziell nutzbarer Sprachmodelle ist gekommen
Ein Einführungs- und Entwicklungsleitfaden für Open-Source-LLM – MPT-7B
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.
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.
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.
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. PreTrainedModel
Glü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_KEY
und END_KEY
werden als Schlüssel verwendet, um bestimmte Abschnitte der Eingabeaufforderung zu identifizieren. INTRO_BLURB
ist eine Zeichenfolge, die einen einleitenden Text für die Eingabeaufforderung bereitstellt. PROMPT_FOR_GENERATION_FORMAT
ist eine Zeichenfolge, die das Format der Eingabeaufforderung definiert, die an das Sprachmodell übergeben wird.
Eine benannte Klasse InstructionTextGenerationPipeline
wird definiert, um anhand einer Anweisung mithilfe eines vorab trainierten Transformer-Sprachmodells Text zu generieren. Die Klasse verwendet die transformers
Bibliothek, 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')
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