Das GPT-NeoXT-Chat-Base-20B-Grundmodell für Chatbot-Anwendungen ist jetzt auf Amazon SageMaker | verfügbar Amazon Web Services

Das GPT-NeoXT-Chat-Base-20B-Grundmodell für Chatbot-Anwendungen ist jetzt auf Amazon SageMaker | verfügbar Amazon Web Services

Quellknoten: 2096695

Wir freuen uns, heute bekannt geben zu können, dass das Sprachbasismodell GPT-NeoXT-Chat-Base-20B von Together Computer für Kunden verfügbar ist Amazon SageMaker-JumpStart. GPT-NeoXT-Chat-Base-20B ist ein Open-Source-Modell zum Erstellen von Konversations-Bots. Sie können dieses Modell ganz einfach ausprobieren und mit JumpStart verwenden. JumpStart ist das Zentrum für maschinelles Lernen (ML) von Amazon Sage Maker Das bietet zusätzlich zu integrierten Algorithmen und End-to-End-Lösungsvorlagen Zugriff auf Basismodelle, um Ihnen den schnellen Einstieg in ML zu erleichtern.

In diesem Beitrag erfahren Sie, wie Sie das bereitstellen GPT-NeoXT-Chat-Base-20B Modell und rufen Sie das Modell innerhalb eines auf OpenChatKit interaktive Shell. Diese Demonstration stellt einen Open-Source-Chatbot-Grundmodell zur Verwendung in Ihrer Anwendung bereit.

JumpStart-Modelle nutzen Deep Java Serving, das die Deep Java Library (DJL) mit Deep-Speed-Bibliotheken nutzt, um Modelle zu optimieren und die Latenz für Inferenzen zu minimieren. Die zugrunde liegende Implementierung in JumpStart folgt einer Implementierung, die der folgenden ähnelt Notizbuch. Als JumpStart Model Hub-Kunde erhalten Sie eine verbesserte Leistung, ohne das Modellskript außerhalb des SageMaker SDK verwalten zu müssen. JumpStart-Modelle erzielen außerdem eine verbesserte Sicherheitslage mit Endpunkten, die eine Netzwerkisolierung ermöglichen.

Foundation-Modelle in SageMaker

JumpStart bietet Zugriff auf eine Reihe von Modellen beliebter Modell-Hubs, darunter Hugging Face, PyTorch Hub und TensorFlow Hub, die Sie in Ihrem ML-Entwicklungsworkflow in SageMaker verwenden können. Die jüngsten Fortschritte im ML haben zu einer neuen Klasse von Modellen geführt, die als bekannt ist Gründungsmodelle, die in der Regel mit Milliarden von Parametern trainiert werden und an eine Vielzahl von Anwendungsfällen angepasst werden können, z. B. Textzusammenfassung, Generierung digitaler Kunst und Sprachübersetzung. Da das Trainieren dieser Modelle teuer ist, möchten Kunden vorhandene vortrainierte Basismodelle verwenden und sie nach Bedarf feinabstimmen, anstatt diese Modelle selbst zu trainieren. SageMaker bietet eine kuratierte Liste von Modellen, aus denen Sie in der SageMaker-Konsole auswählen können.

Sie können jetzt Foundation-Modelle von verschiedenen Modellanbietern innerhalb von JumpStart finden, sodass Sie schnell mit Foundation-Modellen beginnen können. Sie können Basismodelle basierend auf verschiedenen Aufgaben oder Modellanbietern finden und Modelleigenschaften und Nutzungsbedingungen einfach überprüfen. Sie können diese Modelle auch mit einem Test-UI-Widget ausprobieren. Wenn Sie ein grundlegendes Modell in großem Umfang verwenden möchten, können Sie dies ganz einfach tun, ohne SageMaker zu verlassen, indem Sie vorgefertigte Notebooks von Modellanbietern verwenden. Da die Modelle auf AWS gehostet und bereitgestellt werden, können Sie sicher sein, dass Ihre Daten, unabhängig davon, ob sie zur Bewertung oder zur Nutzung des Modells in großem Umfang verwendet werden, niemals an Dritte weitergegeben werden.

GPT-NeoXT-Chat-Base-20B-Grundlagenmodell

Zusammen Computer entwickelte GPT-NeoXT-Chat-Base-20B, ein Sprachmodell mit 20 Milliarden Parametern, das auf dem GPT-NeoX-Modell von ElutherAI mit über 40 Millionen Anweisungen verfeinert wurde und sich auf Interaktionen im Dialogstil konzentriert. Darüber hinaus ist das Modell auf verschiedene Aufgaben abgestimmt, beispielsweise auf die Beantwortung von Fragen, die Klassifizierung, die Extraktion und die Zusammenfassung. Das Modell basiert auf dem OIG-43M-Datensatz, der in Zusammenarbeit mit LAION und Ontocord erstellt wurde.

Zusätzlich zu der oben genannten Feinabstimmung wurde GPT-NeoXT-Chat-Base-20B-v0.16 anhand einer kleinen Menge an Feedback-Daten einer weiteren Feinabstimmung unterzogen. Dadurch kann sich das Modell besser an die menschlichen Vorlieben in den Gesprächen anpassen. GPT-NeoXT-Chat-Base-20B ist für die Verwendung in Chatbot-Anwendungen konzipiert und funktioniert möglicherweise nicht gut für andere Anwendungsfälle außerhalb des vorgesehenen Anwendungsbereichs. Ontocord und LAION haben gemeinsam OpenChatKit veröffentlicht, eine Open-Source-Alternative zu ChatGPT mit vergleichbaren Funktionen. OpenChatKit wurde unter einer Apache-2.0-Lizenz gestartet und gewährt vollständigen Zugriff auf den Quellcode, die Modellgewichte und die Trainingsdatensätze. Es gibt mehrere Aufgaben, bei denen OpenChatKit sofort einsatzbereit ist. Dazu gehören Zusammenfassungsaufgaben, Extraktionsaufgaben, die das Extrahieren strukturierter Informationen aus unstrukturierten Dokumenten ermöglichen, und Klassifizierungsaufgaben zur Klassifizierung eines Satzes oder Absatzes in verschiedene Kategorien.

Lassen Sie uns untersuchen, wie wir das GPT-NeoXT-Chat-Base-20B-Modell in JumpStart verwenden können.

Lösungsüberblick

Im Folgenden finden Sie den Code, der die Bereitstellung von GPT-NeoXT-Chat-Base-20B auf SageMaker zeigt, sowie ein Beispiel für die Verwendung des bereitgestellten Modells im Dialog mit der Befehlsshell GitHub-Notizbuch.

In den folgenden Abschnitten erweitern wir jeden Schritt im Detail, um das Modell bereitzustellen und es dann zur Lösung verschiedener Aufgaben zu verwenden:

  1. Voraussetzungen einrichten.
  2. Wählen Sie ein vorab trainiertes Modell aus.
  3. Rufen Sie Artefakte ab und stellen Sie einen Endpunkt bereit.
  4. Fragen Sie den Endpunkt ab und analysieren Sie eine Antwort.
  5. Verwenden Sie eine OpenChatKit-Shell, um mit Ihrem bereitgestellten Endpunkt zu interagieren.

Voraussetzungen einrichten

Dieses Notebook wurde auf einer ml.t3.medium-Instanz getestet Amazon SageMaker-Studio mit dem Python 3 (Data Science)-Kernel und in einer SageMaker Notebook-Instanz mit dem conda_python3-Kernel.

Bevor Sie das Notebook ausführen, führen Sie mit dem folgenden Befehl einige erste Schritte aus, die für die Einrichtung erforderlich sind:

%pip install --upgrade sagemaker –quiet

Wählen Sie ein vorab trainiertes Modell aus

Wir richten wie gewohnt eine SageMaker-Sitzung mit Boto3 ein und wählen dann die Modell-ID aus, die wir bereitstellen möchten:

model_id, model_version = "huggingface-textgeneration2-gpt-neoxt-chat-base-20b-fp16", "*"

Rufen Sie Artefakte ab und stellen Sie einen Endpunkt bereit

Mit SageMaker können wir Rückschlüsse auf das vorab trainierte Modell ziehen, auch ohne es zuerst an einem neuen Datensatz zu optimieren. Wir beginnen mit dem Abrufen der instance_type, image_uri und model_uri für das vorab trainierte Modell. Um das vorab trainierte Modell zu hosten, erstellen wir eine Instanz von sagemaker.model.Model und stellen Sie es bereit. Der folgende Code verwendet ml.g5.24xlarge für den Inferenzendpunkt. Die Bereitstellungsmethode kann einige Minuten dauern.

endpoint_name = name_from_base(f"jumpstart-example-{model_id}") # Retrieve the inference instance type for the specified model.
instance_type = instance_types.retrieve_default( model_id=model_id, model_version=model_version, scope="inference"
) # Retrieve the inference docker container uri.
image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=instance_type,
) # Retrieve the model uri.
model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="inference"
) # Create the SageMaker model instance. The inference script is prepacked with the model artifact.
model = Model( image_uri=image_uri, model_data=model_uri, role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # Set the serializer/deserializer used to run inference through the sagemaker API.
serializer = JSONSerializer()
deserializer = JSONDeserializer() # Deploy the Model.
predictor = model.deploy( initial_instance_count=1, instance_type=instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name, serializer=serializer, deserializer=deserializer
)

Fragen Sie den Endpunkt ab und analysieren Sie die Antwort

Als Nächstes zeigen wir Ihnen ein Beispiel, wie Sie einen Endpunkt mit einer Teilmenge der Hyperparameter aufrufen:

payload = { "text_inputs": "<human>: Tell me the steps to make a pizzan<bot>:", "max_length": 500, "max_time": 50, "top_k": 50, "top_p": 0.95, "do_sample": True, "stopping_criteria": ["<human>"],
}
response = predictor.predict(payload)
print(response[0][0]["generated_text"])

Folgendes ist die Antwort, die wir erhalten:

<human>: Tell me the steps to make a pizza
<bot>: 1. Choose your desired crust, such as thin-crust or deep-dish. 2. Preheat the oven to the desired temperature. 3. Spread sauce, such as tomato or garlic, over the crust. 4. Add your desired topping, such as pepperoni, mushrooms, or olives. 5. Add your favorite cheese, such as mozzarella, Parmesan, or Asiago. 6. Bake the pizza according to the recipe instructions. 7. Allow the pizza to cool slightly before slicing and serving.
<human>:

Hier haben wir das Payload-Argument bereitgestellt "stopping_criteria": ["<human>"], was dazu geführt hat, dass die Modellantwort mit der Generierung der Wortsequenz endet <human>. Das JumpStart-Modellskript akzeptiert jede Liste von Zeichenfolgen als gewünschte Stoppwörter und wandelt diese Liste in ein gültiges um Schlüsselwortargument „stoping_criteria“. an die Transformer-Generierungs-API und stoppt die Textgenerierung, wenn die Ausgabesequenz angegebene Stoppwörter enthält. Dies ist aus zwei Gründen nützlich: Erstens wird die Inferenzzeit verkürzt, da der Endpunkt keinen unerwünschten Text über die Stoppwörter hinaus generiert, und zweitens verhindert dies, dass das OpenChatKit-Modell zusätzliche menschliche und Bot-Antworten halluziniert, bis andere Stoppkriterien erfüllt sind .

Verwenden Sie eine OpenChatKit-Shell, um mit Ihrem bereitgestellten Endpunkt zu interagieren

OpenChatKit bietet eine Befehlszeilen-Shell für die Interaktion mit dem Chatbot. In diesem Schritt erstellen Sie eine Version dieser Shell, die mit Ihrem bereitgestellten Endpunkt interagieren kann. Wir bieten eine grundlegende Vereinfachung der Inferenzskripte in diesem OpenChatKit-Repository, die mit unserem bereitgestellten SageMaker-Endpunkt interagieren können.

Dabei gibt es zwei Hauptkomponenten:

  • Ein Shell-Interpreter (JumpStartOpenChatKitShell), das iterative Inferenzaufrufe des Modellendpunkts ermöglicht
  • Ein Gesprächsobjekt (Conversation), das frühere Mensch-/Chatbot-Interaktionen lokal in der interaktiven Shell speichert und vergangene Konversationen für den zukünftigen Inferenzkontext entsprechend formatiert

Das Conversation Das Objekt wird unverändert aus dem OpenChatKit-Repository importiert. Der folgende Code erstellt einen benutzerdefinierten Shell-Interpreter, der mit Ihrem Endpunkt interagieren kann. Dies ist eine vereinfachte Version der OpenChatKit-Implementierung. Wir empfehlen Ihnen, das OpenChatKit-Repository zu erkunden, um zu sehen, wie Sie in diesem Zusammenhang detailliertere Funktionen wie Token-Streaming, Moderationsmodelle und erweiterte Generierung beim Abruf nutzen können. Der Kontext dieses Notebooks konzentriert sich auf die Demonstration eines minimal brauchbaren Chatbots mit einem JumpStart-Endpunkt; Von hier aus können Sie die Komplexität nach Bedarf hinzufügen.

Eine kurze Demo zur Präsentation des JumpStartOpenChatKitShell wird im folgenden Video gezeigt.

Der folgende Ausschnitt zeigt, wie der Code funktioniert:

class JumpStartOpenChatKitShell(cmd.Cmd): intro = ( "Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to " "list commands. For example, type /quit to exit shell.n" ) prompt = ">>> " human_id = "<human>" bot_id = "<bot>" def __init__(self, predictor: Predictor, cmd_queue: Optional[List[str]] = None, **kwargs): super().__init__() self.predictor = predictor self.payload_kwargs = kwargs self.payload_kwargs["stopping_criteria"] = [self.human_id] if cmd_queue is not None: self.cmdqueue = cmd_queue def preloop(self): self.conversation = Conversation(self.human_id, self.bot_id) def precmd(self, line): command = line[1:] if line.startswith('/') else 'say ' + line return command def do_say(self, arg): self.conversation.push_human_turn(arg) prompt = self.conversation.get_raw_prompt() payload = {"text_inputs": prompt, **self.payload_kwargs} response = self.predictor.predict(payload) output = response[0][0]["generated_text"][len(prompt):] self.conversation.push_model_response(output) print(self.conversation.get_last_turn()) def do_reset(self, arg): self.conversation = Conversation(self.human_id, self.bot_id) def do_hyperparameters(self, arg): print(f"Hyperparameters: {self.payload_kwargs}n") def do_quit(self, arg): return True

Sie können diese Shell jetzt als Befehlsschleife starten. Dadurch wird wiederholt eine Eingabeaufforderung ausgegeben, Eingaben akzeptiert, der Eingabebefehl analysiert und Aktionen ausgeführt. Da die resultierende Shell in einer Endlosschleife verwendet werden kann, bietet dieses Notebook eine Standardbefehlswarteschlange (cmdqueue) als Warteschlangenliste von Eingabezeilen. Denn die letzte Eingabe ist der Befehl /quit, wird die Shell beendet, wenn die Warteschlange erschöpft ist. Um dynamisch mit diesem Chatbot zu interagieren, entfernen Sie das cmdqueue.

cmd_queue = [ "Hello!",
]
JumpStartOpenChatKitShell( endpoint_name=endpoint_name, cmd_queue=cmd_queue, max_new_tokens=128, do_sample=True, temperature=0.6, top_k=40,
).cmdloop()

Beispiel 1: Der Konversationskontext bleibt erhalten

Die folgende Eingabeaufforderung zeigt, dass der Chatbot in der Lage ist, den Kontext des Gesprächs beizubehalten, um Folgefragen zu beantworten:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the capital of US? <<< The capital of US is Washington, D.C. >>> How far it is from PA ? <<< It is approximately 1100 miles.

Beispiel 2: Klassifizierung von Gefühlen

Im folgenden Beispiel führte der Chatbot eine Klassifizierungsaufgabe durch, indem er die Stimmungen des Satzes identifizierte. Wie Sie sehen, konnte der Chatbot positive und negative Gefühle erfolgreich klassifizieren.

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the sentiment of this sentence "The weather is good and I am going to play outside, it is sunny and warm" <<< POSITIVE >>> What is the sentiment of this sentence " The news this morning was tragic and it created lot of fear and concerns in city" <<< NEGATIVE

Beispiel 3: Zusammenfassungsaufgaben

Als nächstes haben wir Zusammenfassungsaufgaben mit der Chatbot-Shell ausprobiert. Das folgende Beispiel zeigt, wie der Langtext über Amazon verstehen wurde zu einem Satz zusammengefasst und der Chatbot konnte Folgefragen zum Text beantworten:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Write a short summary for this text: Amazon Comprehend uses natural language processing (NLP) to extract insights about the content of documents. It develops insights by recognizing the entities, key phrases, language, sentiments, and other common elements in a document. Use Amazon Comprehend to create new products based on understanding the structure of documents. For example, using Amazon Comprehend you can search social networking feeds for mentions of products or scan an entire document repository for key phrases. nYou can access Amazon Comprehend document analysis capabilities using the Amazon Comprehend console or using the Amazon Comprehend APIs. You can run real-time analysis for small workloads or you can start asynchronous analysis jobs for large document sets. You can use the pre-trained models that Amazon Comprehend provides, or you can train your own custom models for classification and entity recognition. nAll of the Amazon Comprehend features accept UTF-8 text documents as the input. In addition, custom classification and custom entity recognition accept image files, PDF files, and Word files as input. nAmazon Comprehend can examine and analyze documents in a variety of languages, depending on the specific feature. For more information, see Languages supported in Amazon Comprehend. Amazon Comprehend's Dominant language capability can examine documents and determine the dominant language for a far wider selection of languages. <<< Amazon Comprehend is a natural language processing (NLP) service that uses deep learning and other advanced AI techniques to extract insights from unstructured text. >>> What kind of files does custom entity recognition accept as inputs? <<< Image files, PDF files, and Word files

Beispiel 4: Strukturierte Informationen aus unstrukturiertem Text extrahieren

Im folgenden Beispiel haben wir mit dem Chatbot eine Markdown-Tabelle mit Kopfzeilen, Zeilen und Spalten erstellt, um mithilfe der in Freiformsprache bereitgestellten Informationen einen Projektplan zu erstellen:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Generate a table summarizing the options outlined in this email. Team, we need to plan a project. The first task is for creating a web app and will take 3 developers, 2 testers with duration of 3 weeks. This is priority 1 The second task is for refactoring a web app and will take 2 developers, 5 testers with duration of 4 weeks. This is priority 2 A markdown table with 2 rows and six columns: (1) Task ID , (2) Task Description, (3) Developers, (4) Testers, (5) Duration, (6) Priority <<< | Task ID | Task Description | Developers | Testers | Duration | Priority |
| --------- | --------- | --------- | --------- | --------- | --------- |
| 1 | Create a web app | 3 | 2 | 3 weeks | 1 |
| 2 | Refactor a web app | 2 | 5 | 4 weeks | 2 |

Beispiel 5: Befehle als Eingabe für den Chatbot

Wir können Eingaben auch als Befehle bereitstellen /hyperparameters um Hyperparameterwerte zu sehen und /quit So beenden Sie die Befehlsshell:

>>> /hyperparameters <<< Hyperparameters: {'max_new_tokens': 128, 'do_sample': True, 'temperature': 0.6, 'top_k': 40, 'stopping_criteria': ['<human>']} >>> /quit

Diese Beispiele zeigten nur einige der Aufgaben, bei denen sich OpenChatKit auszeichnet. Wir empfehlen Ihnen, verschiedene Eingabeaufforderungen auszuprobieren und herauszufinden, was für Ihren Anwendungsfall am besten funktioniert.

Aufräumen

Nachdem Sie den Endpunkt getestet haben, stellen Sie sicher, dass Sie den SageMaker-Inferenzendpunkt und das Modell löschen, um zu vermeiden, dass Gebühren anfallen.

Zusammenfassung

In diesem Beitrag haben wir Ihnen gezeigt, wie Sie das GPT-NeoXT-Chat-Base-20B-Modell mit SageMaker testen und verwenden und interessante Chatbot-Anwendungen erstellen. Probieren Sie noch heute das Foundation-Modell in SageMaker aus und teilen Sie uns Ihr Feedback mit!

Diese Anleitung dient nur zu Informationszwecken. Sie sollten dennoch Ihre eigene unabhängige Bewertung durchführen und Maßnahmen ergreifen, um sicherzustellen, dass Sie Ihre eigenen spezifischen Qualitätskontrollpraktiken und -standards sowie die lokalen Regeln, Gesetze, Vorschriften, Lizenzen und Nutzungsbedingungen einhalten, die für Sie, Ihre Inhalte usw. gelten das in dieser Anleitung genannte Drittanbietermodell. AWS hat keine Kontrolle oder Autorität über das in dieser Anleitung genannte Drittanbietermodell und gibt keine Zusicherungen oder Gewährleistungen dafür, dass das Drittanbietermodell sicher, virenfrei, betriebsbereit oder mit Ihrer Produktionsumgebung und Ihren Standards kompatibel ist. AWS gibt keine Zusicherungen, Gewährleistungen oder Garantien dafür, dass die Informationen in dieser Anleitung zu einem bestimmten Ergebnis oder Ergebnis führen werden.


Über die Autoren

Rachna Chadha ist Principal Solutions Architect AI/ML in Strategic Accounts bei AWS. Rachna ist eine Optimistin, die glaubt, dass der ethische und verantwortungsvolle Einsatz von KI die Gesellschaft in Zukunft verbessern und wirtschaftlichen und sozialen Wohlstand bringen kann. In ihrer Freizeit verbringt Rachna gerne Zeit mit ihrer Familie, wandert und hört Musik.

Kyle Ulrich ist Angewandte Wissenschaftlerin bei der Integrierte Amazon SageMaker-Algorithmen Team. Seine Forschungsinteressen umfassen skalierbare Algorithmen für maschinelles Lernen, Computer Vision, Zeitreihen, bayessche nichtparametrische Verfahren und Gaußsche Prozesse. Er hat an der Duke University promoviert und Artikel in NeurIPS, Cell und Neuron veröffentlicht.

Dr. Ashish Khetan ist Senior Applied Scientist mit integrierten Amazon SageMaker-Algorithmen und hilft bei der Entwicklung von Algorithmen für maschinelles Lernen. Er promovierte an der University of Illinois Urbana-Champaign. Er ist ein aktiver Forscher auf dem Gebiet des maschinellen Lernens und der statistischen Inferenz und hat viele Artikel auf den Konferenzen NeurIPS, ICML, ICLR, JMLR, ACL und EMNLP veröffentlicht.

Zeitstempel:

Mehr von AWS Maschinelles Lernen