Este es un tutorial para saber integrar un modelo generativo (chatbot LLM) como un servidor local utilizando LLAMA2 y GASP «CPU» como recursos. Este tutorial es para que los estudiantes consulten localmente un gran modelo de lenguaje (LLM). También recomendaría otros métodos para aprender a implementar en la nube como este tutorial de AWS o una mejor implementación local como LocalAI. Incluso Reddit tiene algunos buenos recursos para aprender a construir localmente. En cualquier caso, el propósito de este tutorial es permitirte implementar un chatbot usando Python en un sistema Mac o Linux. Todo el código asociado a este post está disponible en GitHub.

Tabla de contenidos

Requisitos de instalación

Los requisitos para ejecutar esto en un M1 se obtienen en parte a través del archivo requirements.txt de GitHub que se puede utilizar para construir un entorno Anaconda. Para aquellos que no tienen Anaconda encontrarlo aquí. Descarga la carpeta de GitHub y construye el entorno chatbot-llm con el siguiente comando:

conda create -n chatbot-llm –file requirements.txt python=3.10
conda activate chatbot-llm

A continuación, necesitamos instalar algunos otros paquetes usando pip que no están disponibles a través de conda. Además, para que el LLM funcione en un sistema Mac o Linux debemos establecer los argumentos de cmake usando el siguiente comando.

# Linux and Mac
CMAKE_ARGS=»-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS»

pip install llama-cpp-python –force-reinstall –upgrade –no-cache-dir
pip install sse_starlette
pip install starlette_context
pip install pydantic_settings

Descarga y activación del modelo LLAMA-2

Ahora es el momento de descargar el modelo. Para este ejemplo, estamos utilizando un LLM relativamente pequeño (sólo unos 4,78 GB). Puedes descargar el modelo desde Hugging Face.

mkdir -p models/7B
wget -O models/7B/llama-2-7b-chat.Q5_K_M.gguf https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q5_K_M.gguf?download=true

Una vez que el modelo y los paquetes han sido instalados, estamos listos para ejecutar el LLM localmente. Comenzamos llamando al llama_cpp.server con el modelo LLAMA-2 descargado. Esta combinación actúa como ChatGPT (servidor) y GPT-4 (modelo) respectivamente.

python3 -m llama_cpp.server –model models/7B/llama-2-7b-chat.Q5_K_M.gguf

Consulta del modelo

Esto iniciará un servidor en localhost:8000 que podremos consultar en el siguiente paso. El servidor y el modelo están ahora listos para la entrada de usuario. Estamos consultando el servidor y el modelo utilizando query.py con nuestra pregunta de elección. Para comenzar la consulta, debemos abrir una nueva pestaña de terminal y activar nuestro entorno conda de nuevo.

conda activate chatbot-llm

En el archivo query.py actual, la porción de contenido dentro de la lista de mensajes es lo que usted como usuario puede cambiar para obtener una respuesta diferente del modelo. Además, el parámetro max_tokens permite al usuario ajustar la longitud de la respuesta LLM a la entrada. Nota Si el máximo de tokens es menor que la respuesta proyectada, el texto puede cortarse a mitad de la frase. Nuestro prompt es el siguiente:

«Háblame de los Pokémon iniciales de la primera generación de juegos».

Para ejecutar la consulta contra el modelo, llamamos al script de consulta.

export MODEL=»models/7B/llama-2-7b-chat.Q5_K_M.gguf»
python query.py

Después de ejecutar el script de consulta, hay una pausa que puede ser algo sustancial dependiendo de su pregunta. En nuestro caso, la respuesta del modelo no se produce hasta pasados casi 3 MINUTOS. (179.966 s). Eso parece mucho tiempo y se compara con la ejecución de los modelos en línea, pero todo el cálculo se realiza localmente en el hardware disponible. Las limitaciones de memoria, las velocidades de procesamiento de la CPU y la falta de otras optimizaciones hacen que este proceso sea mucho más largo. A pesar de que se tarda un tiempo aquí está la salida con max_tokens = 500:

«Háblame de los Pokémon iniciales de la primera generación de juegos».

Por supuesto. La primera generación de juegos Pokémon, también conocida como Generación I, incluye los siguientes Pokémon iniciales:

  1. Bulbasaur (tipo Hierba/Veneno) – Pokémon de tipo planta con cuerpo verde y marrón, Bulbasaur es conocido por su capacidad de fotosíntesis y por usar sus lianas para atacar a sus oponentes.
  2. Charmander (Tipo Fuego) – Pokémon de tipo lagarto con cuerpo naranja y amarillo, Charmander es conocido por su ardiente personalidad y su habilidad para respirar fuego.
  3. Squirtle (tipo Agua) – Pokémon con forma de tortuga y cuerpo azul y rojo, Squirtle es conocido por su velocidad y agilidad en el agua, así como por su capacidad para lanzar potentes chorros de agua.

Cada uno de estos Pokémon iniciales tiene habilidades y características únicas que los hacen idóneos para diferentes estrategias de batalla y estilos de juego. ¿Sobre cuál te gustaría saber más?

Esta respuesta es realmente detallada dada la contundencia de la consulta y una emocionante demostración de la potencia de los LLM. No recomendaría ejecutar estos modelos utilizando procesamiento en serie (CPU y «CPU» como en un M1) debido al tiempo que se tarda en completar la respuesta. Si está disponible, intente ejecutar modelos locales utilizando una GPU, lo que aceleraría el tiempo de procesamiento, o simplemente sea como yo y utilice ChatGPT de OpenAI.

Recapitulación y agradecimientos

chatbot

En esta demostración, instalamos un servidor LLM (llama_cpp.server) y un modelo (LLAMA-2) localmente en un Mac. Pudimos desplegar nuestro propio LLM local. Luego pudimos consultar el servidor/modelo y ajustar el tamaño de la respuesta. ¡Enhorabuena, has construido tu propio LLM! La inspiración para este trabajo y algunos de los bloques de construcción del código provienen de Youness Mansar.

Siéntete libre de usar o compartir el código que está disponible en GitHub. Mi nombre es Doctor Cody Glickman y me puedes encontrar en LinkedIn. Asegúrate de revisar algunos de mis otros artículos para los proyectos que abarcan una amplia gama de contenidos de data science y machine learning.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *