Ottenere risposte ampie del modello di lingua su Amazon SageMaker JumpStart

Guida a ottenere risposte complete del modello di lingua con Amazon SageMaker JumpStart

Siamo entusiasti di annunciare che Amazon SageMaker JumpStart ora può trasmettere in streaming le risposte dell’inferenza dei grandi modelli linguistici (LLM). Lo streaming dei token ti permette di vedere l’output della risposta del modello man mano che viene generato, anziché aspettare che i LLM finiscano la generazione della risposta prima che diventi disponibile per l’utilizzo o la visualizzazione. La capacità di streaming in SageMaker JumpStart può aiutarti a sviluppare applicazioni con una migliore esperienza utente creando una percezione di bassa latenza per l’utente finale.

In questo post, ti guideremo nel processo di distribuzione e streaming delle risposte da un endpoint del modello Falcon 7B Instruct.

Al momento della scrittura di questo articolo, i seguenti LLM disponibili in SageMaker JumpStart supportano lo streaming:

  • Mistral AI 7B, Mistral AI 7B Instruct
  • Falcon 180B, Falcon 180B Chat
  • Falcon 40B, Falcon 40B Instruct
  • Falcon 7B, Falcon 7B Instruct
  • Rinna Japanese GPT NeoX 4B Instruction PPO
  • Rinna Japanese GPT NeoX 3.6B Instruction PPO

Per verificare gli aggiornamenti sulla lista dei modelli che supportano lo streaming in SageMaker JumpStart, cerca “huggingface-llm” a Built-in Algorithms with pre-trained Model Table.

N.B.: Puoi utilizzare la funzionalità di streaming di Amazon SageMaker direttamente per qualsiasi modello distribuito utilizzando il contenitore di deep learning TGI di SageMaker (DLC), come descritto in Annunciato il lancio dei nuovi contenitori di inferenza Hugging Face LLM su Amazon SageMaker.

Modelli di base in SageMaker

SageMaker JumpStart offre accesso a una gamma di modelli provenienti da popolari hub di modelli, tra cui Hugging Face, PyTorch Hub e TensorFlow Hub, che puoi utilizzare nel tuo flusso di lavoro di sviluppo di ML in SageMaker. I recenti progressi nell’ambito dell’ML hanno dato vita a una nuova classe di modelli noti come modelli di base, che vengono generalmente addestrati su miliardi di parametri e possono essere adattati a una vasta gamma di casi d’uso, come la sintesi del testo, la generazione di arte digitale e la traduzione dei linguaggi. Dato che questi modelli richiedono un notevole costo per l’addestramento, i clienti preferiscono utilizzare modelli di base pre-addestrati esistenti e affinarli secondo le proprie esigenze, anziché addestrare tali modelli da zero. SageMaker offre un elenco di modelli selezionati tra cui puoi scegliere nella console di SageMaker.

Ora puoi trovare modelli di base provenienti da diversi fornitori di modelli all’interno di SageMaker JumpStart, consentendoti di iniziare rapidamente con i modelli di base. SageMaker JumpStart offre modelli di base basati su diversi compiti o fornitori di modelli e puoi facilmente esaminare le caratteristiche del modello e i termini di utilizzo. Puoi anche provare questi modelli utilizzando un widget di prova. Quando desideri utilizzare un modello di base su larga scala, puoi farlo senza lasciare SageMaker utilizzando i notebook predefiniti dei fornitori di modelli. Poiché i modelli sono ospitati e distribuiti su AWS, puoi avere fiducia che i tuoi dati, che vengono utilizzati per valutare o utilizzare il modello su larga scala, non vengano condivisi con terze parti.

Token streaming

L’utilizzo del token streaming consente di restituire la risposta dell’inferenza man mano che viene generata dal modello. In questo modo, puoi vedere l’output della risposta generata in modo incrementale anziché attendere che il modello finisca prima di fornire la risposta completa. Lo streaming può contribuire a migliorare l’esperienza utente, poiché riduce la percezione di latenza per l’utente finale. Puoi iniziare a vedere l’output man mano che viene generato e quindi interrompere l’inferenza in anticipo se l’output non risulta utile per i tuoi scopi. Lo streaming può fare una grande differenza, specialmente per le query a lunga durata, poiché puoi iniziare a vedere gli output man mano che vengono generati, creando una percezione di latenza inferiore anche se la latenza end-to-end rimane la stessa.

Alla data di scrittura, è possibile utilizzare lo streaming in SageMaker JumpStart per modelli che utilizzano Hugging Face LLM Generazione di testo per inferenze DLC.

Risposta senza streaming Risposta con streaming

Panoramica della soluzione

In questo post, utilizziamo il modello Instruct Falcon 7B per mostrare la funzionalità di streaming di SageMaker JumpStart.

Puoi utilizzare il seguente codice per trovare altri modelli in SageMaker JumpStart che supportano lo streaming:

from sagemaker.jumpstart.notebook_utils import list_jumpstart_modelsfrom sagemaker.jumpstart.filters import Andfilter_value = And("task == llm", "framework == huggingface")model_ids = list_jumpstart_models(filter=filter_value)print(model_ids)

Ottieni i seguenti ID dei modelli che supportano lo streaming:

['huggingface-llm-bilingual-rinna-4b-instruction-ppo-bf16', 'huggingface-llm-falcon-180b-bf16', 'huggingface-llm-falcon-180b-chat-bf16', 'huggingface-llm-falcon-40b-bf16', 'huggingface-llm-falcon-40b-instruct-bf16', 'huggingface-llm-falcon-7b-bf16', 'huggingface-llm-falcon-7b-instruct-bf16', 'huggingface-llm-mistral-7b', 'huggingface-llm-mistral-7b-instruct', 'huggingface-llm-rinna-3-6b-instruction-ppo-bf16']

Prerequisiti

Prima di eseguire il notebook, ci sono alcuni passaggi iniziali necessari per la configurazione. Esegui i seguenti comandi:

%pip install --upgrade sagemaker –quiet

Deploy del modello

Come primo passo, utilizza SageMaker JumpStart per distribuire un modello Instruct Falcon 7B. Per le istruzioni complete, consulta Falcon 180B foundation model from TII is now available via Amazon SageMaker JumpStart. Usa il seguente codice:

from sagemaker.jumpstart.model import JumpStartModelmy_model = JumpStartModel(model_id="huggingface-llm-falcon-7b-instruct-bf16")predictor = my_model.deploy()

Interroga il punto di accesso e ottieni lo streaming di risposta

Successivamente, costruisci un payload per invocare il punto di accesso distribuito. È importante che il payload contenga la coppia chiave/valore "stream": True. Questo indica al server di inferenza generazione di testo di generare una risposta in streaming.

payload = {    "inputs": "Come costruire un sito web?",    "parameters": {"max_new_tokens": 256},    "stream": True}

Prima di interrogare il punto di accesso, è necessario creare un iteratore in grado di analizzare la risposta del flusso di byte dal punto di accesso. I dati per ogni token vengono forniti come una riga separata nella risposta, quindi questo iteratore restituisce un token ogni volta che viene identificata una nuova riga nel buffer di streaming. Questo iteratore è progettato in modo minimale e potresti voler regolare il suo comportamento per il tuo caso d’uso; ad esempio, mentre questo iteratore restituisce stringhe di token, i dati della riga contengono altre informazioni, come le probabilità logaritmiche dei token, che potrebbero essere di interesse.

import ioimport jsonclass TokenIterator:    def __init__(self, stream):        self.byte_iterator = iter(stream)        self.buffer = io.BytesIO()        self.read_pos = 0    def __iter__(self):        return self    def __next__(self):        while True:            self.buffer.seek(self.read_pos)            line = self.buffer.readline()            if line and line[-1] == ord("\n"):                self.read_pos += len(line) + 1                full_line = line[:-1].decode("utf-8")                line_data = json.loads(full_line.lstrip("data:").rstrip("/n"))                return line_data["token"]["text"]            chunk = next(self.byte_iterator)            self.buffer.seek(0, io.SEEK_END)            self.buffer.write(chunk["PayloadPart"]["Bytes"])

Ora puoi utilizzare l’API invoke_endpoint_with_response_stream di Boto3 sull’endpoint che hai creato e abilitare lo streaming iterando su un’istanza di TokenIterator:

import boto3client = boto3.client("runtime.sagemaker")response = client.invoke_endpoint_with_response_stream(    EndpointName=predictor.endpoint_name,    Body=json.dumps(payload),    ContentType="application/json",)for token in TokenIterator(response["Body"]):    print(token, end="")

Specificare un parametro end vuoto per la funzione print abiliterà uno stream visivo senza caratteri di nuova linea inseriti. Questo produce l’output seguente:

Creare un sito web può essere un processo complesso, ma di solito comporta i seguenti passaggi:1. Determinare lo scopo e gli obiettivi del tuo sito web2. Scegliere un nome di dominio e un provider di hosting3. Progettare e sviluppare il tuo sito web utilizzando HTML, CSS e JavaScript4. Aggiungere contenuti al tuo sito web e ottimizzarlo per i motori di ricerca5. Testare e risolvere i problemi del tuo sito web per assicurarti che funzioni correttamente6. Mantenere e aggiornare regolarmente il tuo sito web per mantenerlo in esecuzione.Sono disponibili molti risorse online per guidarti in questi passaggi, tra cui tutorial e modelli. Potrebbe anche essere utile richiedere il consiglio di un sviluppatore o designer web se non sei sicuro di uno di questi passaggi.<|endoftext|>

Puoi utilizzare questo codice in un notebook o in altre applicazioni come Streamlit o Gradio per vedere lo streaming in azione e l’esperienza che offre ai tuoi clienti.

Pulizia

Infine, ricorda di eliminare il modello e l’endpoint implementato per evitare costi aggiuntivi:

predictor.delete_model()predictor.delete_endpoint()

Conclusione

In questo post, ti abbiamo mostrato come utilizzare la nuova funzionalità di streaming in SageMaker JumpStart. Speriamo che utilizzerai la capacità di streaming dei token per creare applicazioni interattive che richiedono bassa latenza per una migliore esperienza utente.