MPT-7B, Ha llegado la hora de los modelos de lenguaje comercialmente utilizables

May 10 2023
Una guía de introducción y desarrollo para LLM de código abierto: MPT-7B Overall Mosaic es una empresa nueva que se especializa en modelos de IA y, en este artículo, presentaremos su serie de modelos MPT-7B recientemente lanzada. Son modelos completamente de código abierto y disponibles comercialmente, entrenados en 9.

Una guía de introducción y desarrollo para LLM de código abierto - MPT-7B

Imagen generada por Midjourney

En general

Mosaic es una empresa nueva que se especializa en modelos de IA y, en este artículo, presentaremos su serie de modelos MPT-7B recientemente lanzada. Son modelos totalmente de código abierto y disponibles comercialmente, entrenados en 9,5 días desde cero en 1 billón de tokens, cuyo proceso de desarrollo es mucho más complicado y costoso que los modelos perfeccionados de LLaMA o Pythia que introduje en mis artículos anteriores. Esta es una hazaña notable para una startup, especialmente considerando que entrenaron hasta un billón de tokens a un costo de hardware de 200K USD. La capacidad del modelo base es equivalente al modelo LLaMA de 7 mil millones, además de eso, también han ajustado otros modelos para inspirar a las comunidades de desarrollo, incluido un modelo Instruct, un modelo Chat y un modelo StoryWriter.

El modelo MPT-7B es el primer modelo de lenguaje de código abierto con un rendimiento equivalente al modelo LLaMA-7B en las pruebas de evaluación de Mosaic, y parece de mayor calidad y más estable que Pythia y StableLM y muchos otros modelos de código abierto hasta ahora según el resultado y las escalas de entrenamiento. Otros modelos, como los de RedPajama y OpenLLaMA, han sido solo instantáneas de los modelos de capacitación actuales que aún no se han lanzado por completo. Este es el primero que recibimos donde es el modelo completo y se ha comparado para mostrar que está básicamente a la par con LLaMA. El modelo MPT-7B también es el primer modelo disponible comercialmente y podemos ajustarlo nosotros mismos con nuestros propios datos para uso comercial.

Precisión de disparo cero de MPT-7B frente a LLaMA-7B frente a otros modelos de código abierto en tareas académicas (de Mosaic).

Contexto Longitud del modelo StoryWriter

Una de las mejores cosas del modelo MPT-7B es que ha proporcionado el modelo Story-Writer MPT-7B-StoryWriter-65k+, que se entrenó con la arquitectura ALiBi , lo que permite a los usuarios extender el contexto a una extensión tan extrema. Si quisiera afinar un modelo más largo, podría hacerlo hoy. Esto es exactamente lo que han hecho con el modelo Story-Writer, donde tomaron el modelo base y lo ajustaron con una longitud de contexto de más de 65 000 tokens. Para poner eso en perspectiva, el modelo LLaMA original solo acepta 2048 tokens, el StableLM fue entrenado para 4096 tokens, y para ChatGPT y GPT-4, el número es 4096 y 8000-32 000 según la versión a la que tenga acceso.

La característica de entrada de 65+K-token hace que MPT sea mucho más impresionante entre los modelos

Hay un ejemplo impresionante en su blog que muestra que el equipo de Mosaic una vez solicitó el libro completo de El gran Gatsby y luego el modelo generó un epílogo decente basado con éxito en la entrada de 67873 tokens. Nunca he visto ningún otro modelo cercano o modelo abierto capaz de hacer eso, por lo que me hace considerar qué método es más rentable para el aprendizaje en contexto en el futuro, la incorporación de OpenAI o el modelo Story-Writer. Si está interesado en el aprendizaje en contexto, consulte mi artículo anterior.

Conjuntos de datos para entrenamiento

También han entrenado un modelo de instrucciones de 7 mil millones MPT-7B-Instruct, que es un modelo de seguimiento de instrucciones de formato corto. Se ajusta desde el modo base en conjuntos de datos de código abierto, principalmente a partir del aumento del conjunto de datos Dolly-15K de Databricks. Como resultado, obtienen un conjunto de datos basado en instrucciones más grande y conservan una licencia de uso comercial. Como mencioné en el artículo.en Dolly 2.0, el habilitador clave de la usabilidad comercial de Dolly es su conjunto de datos puro sin licencia que no se genera a partir de otros modelos de IA como ChatGPT, sino que es creado por humanos. Por eso, cuando juegas con él y le haces preguntas, no obtienes respuestas tan familiares como "Como modelo de lenguaje de IA, no puedo...". Sin embargo, no es un conjunto de datos tan grande como los modelos Vicuna y Koala que están utilizando y el equipo planea ampliar su capacitación a conjuntos de datos 1T para que este modelo de instrucciones sea más competitivo.

Un ejemplo de modelo Instruir en la tarea de conversión JSON

Otros

También hay otro modelo extenso de MPT-7B llamado MPT-7B-Chat a proporcionar interacciones fluidas y atractivas de varios turnos para los usuarios. Tenga en cuenta que este modelo de chatbot es el único que no está permitido para uso comercial.

Además, la capa de optimización del modelo MPT-7B incluye FlashAttention y norma de capa de baja precisión, que son parte de la razón de las velocidades de inferencia más rápidas que otros 7 mil millones de modelos aproximadamente " 1.5x-2x más rápido " en el concentrador HuggingFace.

Estos son los recursos de los modelos MPT-7B de los que puede aprender:

  • Entrada en el blog:https://www.mosaicml.com/blog/mpt-7b
  • Instruir demostración:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
  • Demostración de chat:https://huggingface.co/spaces/mosaicml/mpt-7b-chat

Si bien un modelo es muy adecuado para uso comercial, la implementación fácil y económica debería ser una de sus características críticas. Afortunadamente, MPT-7B ha sido diseñado para ser rápido, simple y asequible de implementar para tareas de inferencia, gracias a la perfecta compatibilidad con la PreTrainedModelclase base HuggingFace.

Creé un cuaderno de Google Colab para que lo consulte si desea implementar y ejecutar el modelo MPT-7B-Instruct localmente: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

Siéntase libre de copiarlo en su espacio, pero tenga en cuenta que para ejecutar este modelo, puede tener una cuenta de Colab Pro o soporte de GPU local para tener recursos decentes, los requisitos pre-entrenados que necesitan una GPU T4 de 15 GB como mínimo y 22 GB de RAM MPT-7B-Instruct.

Repasemos el código en el cuaderno.

a) Instalar los paquetes

!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_KEYy END_KEYse utilizan como teclas para identificar secciones específicas del aviso. INTRO_BLURBes una cadena que proporciona un texto introductorio para el aviso. PROMPT_FOR_GENERATION_FORMATes una cadena que define el formato de la solicitud que se pasa al modelo de lenguaje.

Una clase llamada InstructionTextGenerationPipelinese define para generar texto dada una instrucción utilizando un modelo de lenguaje transformador previamente entrenado. La clase usa la transformersbiblioteca para cargar el modelo y tokenizador previamente entrenados y define un __call__método que toma una cadena de instrucción como entrada y genera una cadena de respuesta usando el modelo de lenguaje.

d) Modelo de carga con tubería

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

Ahora, podemos llamar al process_stream() método con los argumentos adecuados para ver cómo responde el modelo a nuestras instrucciones.

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

Respuesta de MPT-7B-Instruct

Puede probar muchas más instrucciones para el modelo una vez que su Colab o máquina local implemente con éxito el modelo y ajuste los parámetros en el código para ver diferentes comportamientos según su perspectiva. Según mis pruebas hasta ahora, la finalización del texto y el código es lo suficientemente buena, pero el razonamiento y las matemáticas aún no han madurado para ejecutar ninguna tarea de instrucción comercial. Desde el blog oficial de Mosaic, sabemos que están tratando de incluir más datos de entrenamiento en estos modelos perfeccionados.

El modelo base, el ajuste, los conjuntos de datos, la capacitación y la inferencia de MPT-7B son de código abierto y sin comerciales, por lo que ahora puede comenzar a considerar la capacitación y el lanzamiento de su propio modelo privado para su negocio de IA a un costo asequible.

Eso es todo.

Espero que puedas encontrar algo útil en este artículo y ¡gracias por leer!

Codificación de nivel superior

¡Gracias por ser parte de nuestra comunidad! Antes de que te vayas:

  • Aplaude la historia y sigue al autor
  • Ver más contenido en la publicación Level Up Coding
  • Curso gratuito de entrevista de codificación ⇒ Ver curso
  • Síguenos: Twitter | LinkedIn | Boletin informativo