MPT-7B, Ha llegado la hora de los modelos de lenguaje comercialmente utilizables
Una guía de introducción y desarrollo para LLM de código abierto - MPT-7B
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.
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.
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.
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 PreTrainedModel
clase 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_KEY
y END_KEY
se utilizan como teclas para identificar secciones específicas del aviso. INTRO_BLURB
es una cadena que proporciona un texto introductorio para el aviso. PROMPT_FOR_GENERATION_FORMAT
es una cadena que define el formato de la solicitud que se pasa al modelo de lenguaje.
Una clase llamada InstructionTextGenerationPipeline
se define para generar texto dada una instrucción utilizando un modelo de lenguaje transformador previamente entrenado. La clase usa la transformers
biblioteca 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')
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