Il modello base GPT-NeoXT-Chat-Base-20B per le applicazioni chatbot è ora disponibile su Amazon SageMaker | Servizi Web Amazon

Il modello base GPT-NeoXT-Chat-Base-20B per le applicazioni chatbot è ora disponibile su Amazon SageMaker | Servizi Web Amazon

Oggi siamo lieti di annunciare che il modello di base del linguaggio GPT-NeoXT-Chat-Base-20B di Together Computer è disponibile per i clienti che utilizzano JumpStart di Amazon SageMaker. GPT-NeoXT-Chat-Base-20B è un modello open source per creare bot conversazionali. Puoi facilmente provare questo modello e usarlo con JumpStart. JumpStart è l'hub di machine learning (ML) di Amazon Sage Maker che fornisce l'accesso ai modelli di base oltre agli algoritmi integrati e ai modelli di soluzione end-to-end per aiutarti a iniziare rapidamente con il machine learning.

In questo post, esaminiamo come distribuire il GPT-NeoXT-Chat-Base-20B model e richiamare il modello all'interno di un OpenChatKit guscio interattivo. Questa dimostrazione fornisce un chatbot del modello di base open source da utilizzare all'interno dell'applicazione.

I modelli JumpStart utilizzano Deep Java Serving che utilizza Deep Java Library (DJL) con librerie ad alta velocità per ottimizzare i modelli e ridurre al minimo la latenza per l'inferenza. L'implementazione sottostante in JumpStart segue un'implementazione simile alla seguente taccuino. In qualità di cliente dell'hub di modelli JumpStart, ottieni prestazioni migliori senza dover mantenere lo script del modello al di fuori dell'SDK di SageMaker. I modelli JumpStart ottengono anche una migliore posizione di sicurezza con endpoint che consentono l'isolamento della rete.

Modelli di fondazione in SageMaker

JumpStart fornisce l'accesso a una gamma di modelli da hub di modelli popolari, tra cui Hugging Face, PyTorch Hub e TensorFlow Hub, che puoi utilizzare all'interno del tuo flusso di lavoro di sviluppo ML in SageMaker. I recenti progressi nel machine learning hanno dato origine a una nuova classe di modelli noti come modelli di fondazione, che in genere sono addestrati su miliardi di parametri e sono adattabili a un'ampia categoria di casi d'uso, come il riepilogo del testo, la generazione di arte digitale e la traduzione linguistica. Poiché questi modelli sono costosi da addestrare, i clienti desiderano utilizzare i modelli di base pre-addestrati esistenti e perfezionarli secondo necessità, piuttosto che addestrare questi modelli da soli. SageMaker fornisce un elenco curato di modelli tra cui puoi scegliere sulla console SageMaker.

Ora puoi trovare modelli di fondazione di diversi fornitori di modelli all'interno di JumpStart, consentendoti di iniziare rapidamente con i modelli di fondazione. È possibile trovare modelli di base basati su diverse attività o fornitori di modelli e rivedere facilmente le caratteristiche del modello e i termini di utilizzo. Puoi anche provare questi modelli utilizzando un widget dell'interfaccia utente di prova. Quando desideri utilizzare un modello di base su larga scala, puoi farlo facilmente senza uscire da SageMaker utilizzando i notebook predefiniti dei fornitori di modelli. Poiché i modelli sono ospitati e distribuiti su AWS, puoi essere certo che i tuoi dati, utilizzati per la valutazione o per l'utilizzo del modello su larga scala, non vengano mai condivisi con terze parti.

Modello di base GPT-NeoXT-Chat-Base-20B

Insieme Computer ha sviluppato GPT-NeoXT-Chat-Base-20B, un modello linguistico da 20 miliardi di parametri, messo a punto dal modello GPT-NeoX di ElutherAI con oltre 40 milioni di istruzioni, incentrato sulle interazioni in stile dialogo. Inoltre, il modello è sintonizzato su diverse attività, come la risposta alle domande, la classificazione, l'estrazione e il riepilogo. Il modello si basa sul set di dati OIG-43M creato in collaborazione con LAION e Ontocord.

Oltre alla suddetta messa a punto, anche GPT-NeoXT-Chat-Base-20B-v0.16 ha subito un'ulteriore messa a punto tramite una piccola quantità di dati di feedback. Ciò consente al modello di adattarsi meglio alle preferenze umane nelle conversazioni. GPT-NeoXT-Chat-Base-20B è progettato per l'uso in applicazioni chatbot e potrebbe non funzionare bene per altri casi d'uso al di fuori dell'ambito previsto. Insieme, Ontocord e LAION hanno collaborato per rilasciare OpenChatKit, un'alternativa open source a ChatGPT con un set di funzionalità paragonabile. OpenChatKit è stato lanciato con una licenza Apache-2.0, che garantisce l'accesso completo al codice sorgente, ai pesi del modello e ai set di dati di addestramento. Ci sono diverse attività in cui OpenChatKit eccelle fuori dagli schemi. Ciò include attività di riepilogo, attività di estrazione che consentono di estrarre informazioni strutturate da documenti non strutturati e attività di classificazione per classificare una frase o un paragrafo in diverse categorie.

Esploriamo come possiamo utilizzare il modello GPT-NeoXT-Chat-Base-20B in JumpStart.

Panoramica della soluzione

Puoi trovare il codice che mostra la distribuzione di GPT-NeoXT-Chat-Base-20B su SageMaker e un esempio di come utilizzare il modello distribuito in modo conversazionale utilizzando la shell dei comandi nel seguente Taccuino GitHub.

Nelle sezioni seguenti, espandiamo ogni passaggio in dettaglio per distribuire il modello e quindi utilizzarlo per risolvere diverse attività:

  1. Impostare i prerequisiti.
  2. Seleziona un modello preaddestrato.
  3. Recupera gli artefatti e distribuisci un endpoint.
  4. Interroga l'endpoint e analizza una risposta.
  5. Utilizza una shell OpenChatKit per interagire con l'endpoint distribuito.

Prerequisiti di configurazione

Questo notebook è stato testato su un'istanza ml.t3.medium in Amazon Sage Maker Studio con il kernel Python 3 (Data Science) e in un'istanza notebook SageMaker con il kernel conda_python3.

Prima di eseguire il notebook, utilizzare il comando seguente per completare alcuni passaggi iniziali richiesti per l'installazione:

%pip install --upgrade sagemaker –quiet

Seleziona un modello preaddestrato

Impostiamo una sessione SageMaker come al solito utilizzando Boto3 e quindi selezioniamo l'ID del modello che vogliamo distribuire:

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

Recupera gli artefatti e distribuisci un endpoint

Con SageMaker, possiamo eseguire l'inferenza sul modello pre-addestrato, anche senza ottimizzarlo prima su un nuovo set di dati. Iniziamo recuperando il file instance_type, image_urie model_uri per il modello pre-addestrato. Per ospitare il modello pre-addestrato, creiamo un'istanza di sagemaker.model.Model e distribuirlo. Il codice seguente utilizza ml.g5.24xlarge per l'endpoint di inferenza. Il metodo di distribuzione potrebbe richiedere alcuni minuti.

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
)

Interrogare l'endpoint e analizzare la risposta

Successivamente, ti mostriamo un esempio di come richiamare un endpoint con un sottoinsieme di iperparametri:

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"])

Di seguito la risposta che otteniamo:

<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>:

Qui, abbiamo fornito l'argomento del carico utile "stopping_criteria": ["<human>"], che ha portato la risposta del modello a terminare con la generazione della sequenza di parole <human>. Lo script del modello JumpStart accetterà qualsiasi elenco di stringhe come parole di arresto desiderate, convertire questo elenco in un valido argomento della parola chiave di arresto_criteri ai trasformatori generano l'API e interrompono la generazione del testo quando la sequenza di output contiene parole di arresto specificate. Ciò è utile per due motivi: in primo luogo, il tempo di inferenza viene ridotto perché l'endpoint non continua a generare testo indesiderato oltre le parole di arresto e, in secondo luogo, ciò impedisce al modello OpenChatKit di allucinare ulteriori risposte umane e bot fino a quando non vengono soddisfatti altri criteri di arresto .

Utilizza una shell OpenChatKit per interagire con l'endpoint distribuito

OpenChatKit fornisce una shell della riga di comando per interagire con il chatbot. In questo passaggio, crei una versione di questa shell che può interagire con il tuo endpoint distribuito. Forniamo una semplificazione essenziale degli script di inferenza in questo repository OpenChatKit che può interagire con il nostro endpoint SageMaker distribuito.

Ci sono due componenti principali in questo:

  • Un interprete di shell (JumpStartOpenChatKitShell) che consente chiamate di inferenza iterative dell'endpoint del modello
  • Un oggetto di conversazione (Conversation) che memorizza le precedenti interazioni uomo/chatbot localmente all'interno della shell interattiva e formatta in modo appropriato le conversazioni passate per il futuro contesto di inferenza

Il Conversation oggetto viene importato così com'è dal repository OpenChatKit. Il codice seguente crea un interprete della shell personalizzato che può interagire con l'endpoint. Questa è una versione semplificata dell'implementazione di OpenChatKit. Ti invitiamo a esplorare il repository OpenChatKit per vedere come puoi utilizzare funzionalità più approfondite, come lo streaming di token, i modelli di moderazione e la generazione aumentata di recupero, in questo contesto. Il contesto di questo notebook si concentra sulla dimostrazione di un chatbot minimo praticabile con un endpoint JumpStart; puoi aggiungere complessità se necessario da qui.

Una breve demo per mostrare il JumpStartOpenChatKitShell è mostrato nel seguente video.

Il seguente frammento mostra come funziona il codice:

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

Ora puoi avviare questa shell come ciclo di comandi. Ciò emetterà ripetutamente un prompt, accetterà l'input, analizzerà il comando di input e invierà azioni. Poiché la shell risultante può essere utilizzata in un ciclo infinito, questo notebook fornisce una coda di comando predefinita (cmdqueue) come un elenco in coda di righe di input. Perché l'ultimo input è il comando /quit, la shell uscirà all'esaurimento della coda. Per interagire dinamicamente con questo chatbot, rimuovi il file 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()

Esempio 1: il contesto della conversazione viene mantenuto

Il seguente prompt mostra che il chatbot è in grado di conservare il contesto della conversazione per rispondere alle domande di follow-up:

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.

Esempio 2: Classificazione dei sentimenti

Nell'esempio seguente, il chatbot ha eseguito un'attività di classificazione identificando i sentimenti della frase. Come puoi vedere, il chatbot è stato in grado di classificare con successo sentimenti positivi e negativi.

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

Esempio 3: attività di riepilogo

Successivamente, abbiamo provato le attività di riepilogo con la shell del chatbot. L'esempio seguente mostra come il testo lungo about Amazon Comprehend è stato riassunto in una frase e il chatbot è stato in grado di rispondere alle domande di follow-up sul testo:

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

Esempio 4: estrarre informazioni strutturate da testo non strutturato

Nell'esempio seguente, abbiamo utilizzato il chatbot per creare una tabella markdown con intestazioni, righe e colonne per creare un piano di progetto utilizzando le informazioni fornite in un linguaggio in formato libero:

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 |

Esempio 5: comandi come input per chatbot

Possiamo anche fornire input come comandi simili /hyperparameters per vedere i valori degli iperparametri e /quit per uscire dalla shell dei comandi:

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

Questi esempi hanno mostrato solo alcune delle attività in cui OpenChatKit eccelle. Ti invitiamo a provare vari prompt e vedere cosa funziona meglio per il tuo caso d'uso.

ripulire

Dopo aver testato l'endpoint, assicurati di eliminare l'endpoint di inferenza SageMaker e il modello per evitare di incorrere in addebiti.

Conclusione

In questo post, ti abbiamo mostrato come testare e utilizzare il modello GPT-NeoXT-Chat-Base-20B utilizzando SageMaker e creare interessanti applicazioni chatbot. Prova oggi stesso il modello base in SageMaker e facci sapere il tuo feedback!

Questa guida è solo a scopo informativo. Dovresti comunque eseguire la tua valutazione indipendente e adottare misure per assicurarti di rispettare le tue specifiche pratiche e standard di controllo della qualità e le norme, le leggi, i regolamenti, le licenze e i termini di utilizzo locali che si applicano a te, ai tuoi contenuti e il modello di terze parti a cui si fa riferimento in questa guida. AWS non ha alcun controllo o autorità sul modello di terze parti a cui si fa riferimento in questa guida e non rilascia alcuna dichiarazione o garanzia che il modello di terze parti sia sicuro, privo di virus, operativo o compatibile con l'ambiente di produzione e gli standard. AWS non rilascia alcuna dichiarazione o garanzia che qualsiasi informazione contenuta in questa guida si tradurrà in un particolare risultato o risultato.


Circa gli autori

Il modello base GPT-NeoXT-Chat-Base-20B per applicazioni chatbot è ora disponibile su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Rachna Chada è Principal Solutions Architect AI/ML in Strategic Accounts presso AWS. Rachna è un'ottimista che crede che l'uso etico e responsabile dell'IA possa migliorare la società in futuro e portare prosperità economica e sociale. Nel tempo libero, a Rachna piace passare il tempo con la sua famiglia, fare escursioni e ascoltare musica.

Il modello base GPT-NeoXT-Chat-Base-20B per applicazioni chatbot è ora disponibile su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Kyle Ulrich è uno scienziato applicato con il Algoritmi integrati di Amazon SageMaker squadra. I suoi interessi di ricerca includono algoritmi di machine learning scalabili, visione artificiale, serie storiche, bayesiani non parametrici e processi gaussiani. Il suo dottorato di ricerca è presso la Duke University e ha pubblicato articoli su NeurIPS, Cell e Neuron.

Il modello base GPT-NeoXT-Chat-Base-20B per applicazioni chatbot è ora disponibile su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di machine learning. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois Urbana-Champaign. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato numerosi articoli nelle conferenze NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS