En esta publicación de blog, lo guiaré paso a paso a través del proceso de ejecución del competidor ChatGPT de MosaicML, MPT-7B, en su propia instancia de AWS SageMaker.
¿Está entusiasmado con las capacidades de ChatGPT, pero le preocupa exponer sus datos confidenciales a OpenAI? Afortunadamente, existen alternativas que puede ejecutar en su propia infraestructura. Una de esas alternativas es MPT-7b de MosaicML, un competidor de ChatGPT, que exploraremos en esta publicación de blog.
MosaicML, adquirido recientemente por Databricks por 1300 millones de dólares , ha causado sensación en la comunidad de ML con su modelo MPT-7B, un supuesto competidor de ChatGPT. A pesar de su promesa, ejecutar este modelo puede ser desalentador debido a la escasez de documentación y sus grandes requisitos de recursos. Sin embargo, se puede ejecutar MPT-7B en AWS SageMaker en un cuaderno Jupyter, un entorno apto para principiantes y muy flexible para una iteración rápida. Esta configuración le permite probar la viabilidad del modelo y los requisitos de hardware antes de decidir pasar a producción.
Ejecutar MPT-7B en un cuaderno Jupyter en AWS SageMaker ofrece varios beneficios. No solo puede pagar solo por lo que usa y apagarlo cuando haya terminado, sino que la capacidad de volver a ejecutar fácilmente partes de su código sin tener que recargar el modelo ahorra tiempo durante el desarrollo iterativo. ¡Pero ten cuidado! Si olvida detener las instancias de su computadora portátil, los cargos pueden sumarse rápidamente.
Si bien este método es relativamente conveniente, hay algunas consideraciones que debe tener en cuenta. En primer lugar, la carga del modelo puede tardar hasta 20 minutos, incluso en una GPU de alto rendimiento, lo que hace que este proceso lleve un poco de tiempo. Además, el costo es un factor a considerar, ya que el costo de funcionamiento es de al menos $4 por hora. Deberá ejecutar MPT-7B en al menos una instancia p3.2xlarge ; algo más pequeño no parece factible. Si opta por EC2 en lugar de SageMaker, deberá solicitar permiso a AWS para usar una instancia p3.2xlarge .
En las siguientes secciones, lo explicaré paso a paso sobre cómo ejecutar el modelo MPT-7B en su propio cuaderno SageMaker jupyter:
Inicie la consola de AWS y busque SageMaker:
En el menú del lado izquierdo, seleccione Notebook->Instancias de Notebook :
Haga clic en el botón Crear instancia de cuaderno :
Especifique un nombre de instancia. Elija el tipo de instancia m1.p3.2xlarge . Desafortunadamente, parece que se requiere una instancia tan poderosa como m1.p3.2xlarge , o de lo contrario su instancia puede quedarse sin memoria o tomar una cantidad excesiva de tiempo para responder incluso a las preguntas más simples. Sin embargo, tenga en cuenta que esta instancia costará aproximadamente $ 4 por hora, por lo que es importante controlar su uso cuidadosamente.
Si su entorno de prueba no tiene datos particularmente confidenciales, puede otorgar acceso a cualquier depósito de S3 . De lo contrario, tendrás que ser más explícito.
El cuaderno entonces estará en estado Pendiente . Es probable que esto dure unos 10 minutos:
Mientras tanto, descargaremos un cuaderno para poder cargarlo después de que la instancia de AWS SageMaker haya terminado de aprovisionarse.
Diríjase al cuaderno en MPT-7B en AWS SageMaker.ipynb y descárguelo:
En este cuaderno notará dos bloques de código principales. El primer bloque carga el tokenizador y el modelo MPT-7B:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
El tokenizador se utiliza para codificar la pregunta enviada al modelo y decodificar la respuesta del modelo. Además, obtenemos la especificación del dispositivo para nuestra GPU para que podamos configurar el modelo para utilizarlo más adelante:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb 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 stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
Tenga en cuenta el uso de stopping_critera
, que es necesario o, de lo contrario, el modelo comenzará a balbucear, incluso después de haber respondido a nuestra pregunta.
Consulte los parámetros de generación del modelo si desea explorar las diferentes opciones.
Ahora, subamos este bloc de notas a SageMaker.
Con suerte, para este momento su instancia de notebook de SageMaker habrá terminado de aprovisionarse. Cuando lo haya hecho, haga clic en el vínculo Abrir Jupyter :
Luego, haga clic en el botón Cargar en la esquina superior derecha de su pantalla y seleccione el cuaderno que acaba de descargar:
Establezca el núcleo en conda_python3 :
Seleccione Celda -> Ejecutar todo :
Aparecerá un logotipo de reloj de arena en la pestaña del navegador:
Luego deberá esperar unos 10 minutos para que se descargue el modelo:
Después de que se ejecute, verá la respuesta a la pregunta Explícame la diferencia entre fisión nuclear y fusión :
Dado que el modelo y el tokenizador ya se cargaron arriba, simplemente puede modificar el bloque de código ask_question y hacer clic en el botón Ejecutar para hacer otras preguntas. Esto le evitará gastar 10 minutos cada vez que quiera probar una nueva pregunta.
Tan pronto como haya terminado de probar el modelo, querrá regresar a su lista de instancias de portátiles y detenerlo. Si no lo hace, $4/hr se acumularán muy rápidamente 💸
En términos de rendimiento, mis pruebas preliminares sugieren que los resultados de MPT-7B podrían no ser tan buenos como los de ChatGPT. Hace un trabajo decente respondiendo preguntas como:
Pero para preguntas como _¿Cuál es la capital de Belice?_ falla horriblemente:
Actualmente estoy recopilando más datos y realizaré un análisis comparativo completo en una publicación de blog de seguimiento. En esa publicación, compararé el rendimiento de preguntas y respuestas de MPT-7B, MPT-30B, Falcon-40b y ChatGPT utilizando el historial de conversación real.
Una vez que esté listo para la transición de las pruebas a la producción, SageMaker ofrece un beneficio adicional: la capacidad de crear un punto final para su modelo. Con SageMaker, puede escalar automáticamente según la demanda hasta el punto final, optimizando sus recursos.
Tenga en cuenta que es fácil que su proceso se bifurque mientras se ejecuta en un cuaderno Jupyter y se quede sin memoria. Si esto sucede, simplemente apague el kernel y ejecute todos los comandos nuevamente.
Si tiene curiosidad por ejecutar este modelo en una plataforma que no sea AWS, Google Colab Pro es otra opción viable a $9/mes. Sin embargo, según nuestras pruebas, descubrimos que agotamos los créditos proporcionados en unas pocas horas. 😳
Otro desafío que puede enfrentar es la incapacidad de utilizar la optimización de Triton en SageMaker debido a una incompatibilidad de la versión CUDA. Desafortunadamente, las instancias P3 actuales de AWS no incluyen una versión reciente de CUDA. Por lo tanto, si desea utilizar la optimización de Triton, deberá crear un contenedor EC2 con acceso a la línea de comandos. Sin embargo, es importante tener en cuenta que también necesitará un permiso especial de AWS Support para ejecutar una instancia con 8 VCPU. En una publicación futura, proporcionaré una guía detallada sobre cómo integrar Triton y utilizar un proveedor de GPU en la nube más rentable, como Lambda Labs .
Si bien el MPT-7B de MosaicML ofrece una alternativa viable al ChatGPT de OpenAI, presenta su propio conjunto de desafíos. Ejecutar el modelo puede llevar mucho tiempo, ser costoso y falta la documentación disponible. Sin embargo, la capacidad de mantener el modelo interno y proteger sus datos para que no queden expuestos a OpenAI puede ser atractivo para ciertos casos de uso.
SageMaker ofrece una gran comodidad para probar rápidamente el modelo y brinda la flexibilidad para pasar a producción cuando esté listo. Tanto si acaba de empezar con el MPT-7B como si lo ha estado usando durante un tiempo, esperamos que esta guía le haya proporcionado información valiosa.
Estén atentos a nuestra próxima publicación de blog, donde profundizaremos en las comparaciones de rendimiento entre MPT-7B, MPT-30B, Falcon-40b y ChatGPT.
Consulte los siguientes enlaces si está interesado en obtener más información sobre MPT-7B o su variante más grande, MPT-30B .
Y recuerde, ya sea que esté trabajando con ChatGPT o MPT-7B, la clave es asegurarse de que su caso de uso se cumpla sin comprometer la privacidad de los datos y la rentabilidad. ¡Feliz retoque!
En MindfulDataAI.com , ofrecemos ChatGPT para empresas. Si está interesado en aprovechar ChatGPT, MPT u otros modelos con los datos de su empresa, comuníquese con nosotros.