MPT-7B, i tempi dei modelli linguistici commercialmente utilizzabili sono arrivati

May 10 2023
Un'introduzione e una guida allo sviluppo per LLM open source — MPT-7B Overall Mosaic è una startup specializzata in modelli AI e in questo articolo presenteremo la serie di modelli MPT-7B appena rilasciata. Sono modelli completamente open source e disponibili in commercio, addestrati in 9.

Un'introduzione e una guida allo sviluppo per LLM open source - MPT-7B

Immagine generata da Midjourney

Complessivamente

Mosaic è una startup specializzata in modelli AI e in questo articolo presenteremo la serie di modelli MPT-7B appena rilasciata. Sono modelli completamente open source e disponibili in commercio, addestrati in 9,5 giorni da zero su 1 trilione di token, il cui processo di sviluppo è molto più complicato e costoso di quei modelli messi a punto da LLaMA o Pythia che ho introdotto nei miei articoli precedenti. Questa è un'impresa notevole per una startup, soprattutto considerando che hanno addestrato fino a un trilione di token a un costo hardware di 200K USD. La capacità del modello di base è equivalente al modello LLaMA da 7 miliardi, oltre a ciò, hanno anche messo a punto altri modelli per ispirare le comunità di sviluppo, tra cui un modello Instruct, un modello Chat e un modello StoryWriter.

Il modello MPT-7B è il primo modello di linguaggio open source con prestazioni equivalenti al modello LLaMA-7B nei test di valutazione di Mosaic e sembra di qualità superiore e più stabile rispetto a Pythia e StableLM e molti altri modelli open source finora secondo il risultato e le scale di allenamento. Altri modelli, come quelli di RedPajama e OpenLLaMA, sono stati solo istantanee di modelli di allenamento attuali che non sono stati ancora completamente rilasciati. Questo è il primo che abbiamo effettivamente ricevuto dove è il modello completo ed è stato sottoposto a benchmark per dimostrare che è sostanzialmente alla pari con LLaMA. Il modello MPT-7B è anche il primo modello disponibile in commercio e possiamo perfezionarlo noi stessi sui nostri dati per uso commerciale.

Precisione zero-shot di MPT-7B rispetto a LLaMA-7B rispetto ad altri modelli open source su compiti accademici (da Mosaic).

Contesto Lunghezza del modello StoryWriter

Una delle cose più interessanti del modello MPT-7B è che ha fornito il modello Story-Writer MPT-7B-StoryWriter-65k+, che è stato addestrato con l'architettura ALiBi , consentendo agli utenti di estendere il contesto a una lunghezza così estrema. Se volessi mettere a punto un modello più lungo, potresti farlo oggi. Questo è esattamente ciò che hanno fatto con il modello Story-Writer, dove hanno preso il modello base e lo hanno messo a punto con una lunghezza del contesto di oltre 65.000 token. Per metterlo in prospettiva, il modello LLaMA originale accetta solo 2048 token, StableLM è stato addestrato per 4.096 token e per ChatGPT e GPT-4, il numero è 4.096 e 8.000-32.000 a seconda della versione a cui hai accesso.

La caratteristica dell'input di 65 + K-token rende MPT molto più impressionante tra i modelli

C'è un esempio impressionante sul suo blog che mostra che il team Mosaic una volta ha suggerito l'intero libro di The Great Gatsby , quindi il modello ha generato con successo un epilogo decente basato sull'input di 67873 token. Non ho mai visto nessun altro modello chiuso o modello aperto in grado di farlo, quindi questo mi fa considerare quale metodo sia più conveniente per fare l'apprendimento contestuale in futuro, l'incorporamento di OpenAI o il modello Story-Writer. Se sei interessato all'apprendimento contestuale, fai riferimento al mio articolo precedente.

Set di dati per la formazione

Hanno anche addestrato un modello di istruzioni da 7 miliardi MPT-7B-Instruct, che è un modello di istruzioni in forma abbreviata. È messo a punto dalla modalità base su set di dati open source principalmente dall'aumento del set di dati Dolly-15K di Databricks. Di conseguenza, ottengono un set di dati basato su istruzioni più ampio e mantengono una licenza utilizzabile a livello commerciale. Come ho accennato nell'articolosu Dolly 2.0, l'abilitatore chiave dell'usabilità commerciale di Dolly è il suo puro set di dati senza licenza che non è generato da altri modelli di intelligenza artificiale come ChatGPT ma creato da esseri umani. Per questo motivo, quando ci giochi e gli fai domande, non ottieni risposte così familiari come "Come modello di linguaggio AI, non posso ..." tipo di cose. Tuttavia, non è un set di dati così grande come stanno usando i modelli Vicuna e Koala e il team sta pianificando di estendere la sua formazione a set di dati 1T per un modello di istruzione più competitivo.

Un esempio di istruire il modello sull'attività di conversione JSON

Altri

Esiste anche un altro modello esteso di MPT-7B chiamato MPT-7B-Chat a fornire interazioni multi-giro senza soluzione di continuità e coinvolgenti per gli utenti. Tieni presente che questo modello di chatbot è l'unico che non è consentito per l'uso commerciale.

Inoltre, il livello di ottimizzazione del modello MPT-7B include FlashAttention e il layernorm a bassa precisione, che sono parte del motivo delle velocità di inferenza più elevate rispetto ad altri modelli da 7 miliardi circa " 1,5x-2x più veloci " sull'hub HuggingFace.

Ecco le risorse dei modelli MPT-7B da cui puoi imparare:

  • Post sul blog:https://www.mosaicml.com/blog/mpt-7b
  • Demo istruzioni:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
  • Dimostrazione della chat:https://huggingface.co/spaces/mosaicml/mpt-7b-chat

Mentre un modello è così adatto per l'uso commerciale, l'implementazione facile ed economica dovrebbe essere un'altra delle sue caratteristiche critiche. Fortunatamente, MPT-7B è stato progettato per essere veloce, semplice e conveniente da implementare per le attività di inferenza, grazie alla perfetta compatibilità con la PreTrainedModelclasse base HuggingFace.

Ho creato un taccuino Google Colab a cui puoi fare riferimento se desideri distribuire ed eseguire il modello MPT-7B-Instruct localmente: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

MPT-7B-InstructSentiti libero di copiarlo nel tuo spazio, ma tieni presente che per eseguire questo modello, potresti avere un account Colab Pro o il supporto GPU locale per avere risorse decenti richieste dal pre-addestrato che richiedono una GPU T4 minima da 15 GB e 22 GB di RAM.

Esaminiamo il codice nel notebook.

a) Installare i pacchetti

!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, e END_KEYvengono utilizzati come chiavi per identificare sezioni specifiche del prompt. INTRO_BLURBè una stringa che fornisce del testo introduttivo per il prompt. PROMPT_FOR_GENERATION_FORMATè una stringa che definisce il formato del prompt passato al modello di linguaggio.

Una classe denominata InstructionTextGenerationPipelineè definita per generare testo data un'istruzione utilizzando un modello di linguaggio trasformatore pre-addestrato. La classe utilizza la transformerslibreria per caricare il modello e il tokenizer pre-addestrati e definisce un __call__metodo che accetta una stringa di istruzioni come input e genera una stringa di risposta utilizzando il modello di linguaggio.

d) Modello di carico con pipeline

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

Ora siamo in grado di chiamare il process_stream() metodo con argomenti appropriati per vedere come il modello risponde alle nostre istruzioni.

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

Risposta da MPT-7B-Instruct

Puoi provare molte più istruzioni per il modello una volta che il tuo Colab o la macchina locale distribuisce correttamente il modello e regola i parametri nel codice per vedere comportamenti diversi in base alla tua prospettiva. Dai miei test finora, il completamento del testo e del codice è abbastanza buono, ma il ragionamento e la matematica non sono ancora maturati per eseguire attività di istruzione commerciale. Dal blog ufficiale di Mosaic, sappiamo che stanno cercando di inserire più dati di addestramento in questi modelli ottimizzati.

Il modello di base, la messa a punto, i set di dati, la formazione e l'inferenza di MPT-7B sono tutti open source e senza pubblicità, quindi ora puoi iniziare a prendere in considerazione la formazione e il rilascio del tuo modello privato per la tua attività di intelligenza artificiale a un costo accessibile.

Questo è tutto.

Spero che tu possa trovare qualcosa di utile in questo articolo e grazie per aver letto!

Codifica di livello superiore

Grazie per far parte della nostra comunità! Prima che tu vada:

  • Batti le mani per la storia e segui l'autore
  • Visualizza altri contenuti nella pubblicazione Level Up Coding
  • Corso di colloquio di codifica gratuito ⇒ Visualizza il corso
  • Seguici: Twitter | Linkedin | Notiziario