Ejecutando Generative LLMs con RunPod | Una Plataforma sin Servidor

Generative LLMs with RunPod | A Serverless Platform

Introducción

El Serverless emerge como una estrategia revolucionaria en la computación en la nube. Permite a los desarrolladores concentrarse completamente en la creación de sus aplicaciones mientras dejan que los proveedores de la nube se encarguen de la infraestructura subyacente. Los Modelos de Lenguaje de Generación de IA han impulsado el crecimiento de las GPU Serverless, ya que la mayoría de los desarrolladores no pueden ejecutarlos localmente debido al alto uso de VRAM de GPU utilizado por estos modelos de lenguaje. RunPod es una plataforma que está ganando popularidad en los servicios remotos de GPU. RunPod proporciona acceso a potentes GPU para construir y probar aplicaciones con grandes modelos de lenguaje, proporcionando diversos servicios informáticos, como Instancias GPU, GPU Serverless y Puntos finales de API. Aprenda LLMs con RunPod para ejecutar modelos de lenguaje grandes que requieren muchos recursos debido a precios asequibles y diversas posibilidades de GPU.

Objetivos de aprendizaje

  • Aprender el concepto de Serverless y por qué es útil para los desarrolladores que trabajan en LLMs
  • Comprender la necesidad de una alta VRAM de GPU para ejecutar modelos de lenguaje grandes
  • Crear Instancias GPU en la nube para ejecutar modelos de lenguaje
  • Aprender cómo asignar la VRAM de GPU en función del tamaño del LLM

Este artículo fue publicado como parte del Data Science Blogathon.

¿Qué es Serverless?

Serverless es un servicio/método en plataformas de nube que te permite tener una infraestructura bajo demanda para llevar a cabo nuestros desarrollos e implementar nuestras aplicaciones. Con el serverless, uno puede concentrarse únicamente en el desarrollo de la aplicación y dejar que el proveedor de la nube se encargue de administrar la infraestructura subyacente. Muchas plataformas de nube como AWS, Azure, GCP y otras ofrecen estos servicios.

En los últimos tiempos, las GPU Serverless se han vuelto populares. Las GPU Serverless consisten en alquilar potencia de cálculo de GPU en la nube cuando no se dispone de suficiente memoria. Estos servicios han ido aumentando desde la introducción de los grandes modelos de lenguaje. Como los grandes modelos de lenguaje requieren una gran VRAM de GPU, estas plataformas serverless han ido surgiendo una tras otra, ofreciendo mejores servicios de GPU que otros, y uno de estos servicios es RunPod.

Acerca de RunPod

RunPod es una plataforma en la nube que ofrece servicios informáticos como instancias GPU, GPU Serverless e incluso puntos finales de IA, lo que permite a los desarrolladores de IA de aprendizaje automático aprovechar las grandes GPU para construir aplicaciones con grandes modelos de lenguaje. Los precios ofrecidos por RunPod para las instancias GPU son mucho más bajos que los que ofrecen los grandes proveedores de nube como GCP, Azure y AWS. RunPod tiene una amplia gama de GPUs, desde la serie RTX 30 hasta la serie 40 e incluso la serie Nvidia A, que tienen una VRAM superior a los 40+ GB, lo que nos permite ejecutar fácilmente modelos con 13 mil millones y 60 mil millones de parámetros.

RunPod ofrece servicios de GPU en dos tipos:

  • Servicio de nube comunitaria, cuando las GPUs que alquilas pertenecen a un solo individuo y son mucho más económicas.
  • Servicio de nube seguro, donde las GPUs que utilizamos pertenecen a RunPod y son un poco más costosas que las de la nube comunitaria. El servicio de nube seguro es más adecuado cuando queremos agrupar grandes cantidades de GPUs para entrenar modelos de lenguaje muy grandes.

Además, RunPod ofrece instancias Spot y On-Demand. Las instancias Spot pueden interrumpirse en cualquier momento mientras las estemos utilizando y, por lo tanto, son muy baratas, mientras que las instancias On-Demand no se pueden interrumpir. En este artículo, recorreremos RunPod y configuraremos una instancia GPU para ejecutar una interfaz web de generación de texto, donde descargaremos un gran modelo de lenguaje de la biblioteca hugging face y luego conversaremos con él

Configuración de la cuenta de RunPod

En primer lugar, comenzaremos configurando una cuenta de RunPod, para ello haz clic aquí, lo que te llevará a la pantalla de inicio de RunPod y podrás ver la imagen a continuación. Luego hacemos clic en el botón de registro

Después de registrarte, ahora necesitamos agregar créditos para comenzar a usar las Instancias de GPU en la Nube. Podemos comenzar con un depósito mínimo de 10$ y podemos hacerlo tanto con una tarjeta de débito como con una tarjeta de crédito. Para comprar créditos, debes hacer clic en la sección de facturación a la izquierda

Aquí, he comprado $10, es decir, mi saldo disponible es de $10. Y este es solo un pago único. No se me cobrará nada después de que mis $10 se agoten. Los Pods que creamos se apagarán automáticamente cuando el saldo disponible llegue a $0. RunPod tiene opciones de pago automáticas, pero configuraremos un pago único ya que no tenemos que preocuparnos por que se nos descuente dinero.

Instancias de GPU

Aquí, cuando hacemos clic en la Nube Comunitaria a la izquierda, vemos que lista todas las GPUs disponibles, sus especificaciones y cuánto cobran por ellas. La Nube de Seguridad también es igual, pero la única diferencia es que las GPUs en la Nube de Seguridad son mantenidas por el equipo de RunPod, y las GPUs en la Nube Comunitaria pertenecen a la Comunidad, es decir, a personas de todo el mundo.

Plantillas

En la imagen de arriba, vemos las plantillas predefinidas disponibles. Podemos ejecutar una instancia de GPU en cuestión de minutos con estas plantillas. Muchas plantillas, como la plantilla de Difusión Estable, nos permiten iniciar una instancia de GPU con difusión estable para generar imágenes con ella. La plantilla RunPod VS Code nos permite escribir y utilizar la GPU desde la instancia de GPU.

La plantilla de PyTorch de diferentes versiones, donde una instancia de GPU viene preparada con la última biblioteca de PyTorch, que podemos utilizar para construir modelos de aprendizaje automático. También podemos crear nuestras propias plantillas personalizadas, que incluso podemos compartir con otros para que puedan iniciar una instancia de GPU con la misma plantilla.

Ejecutar LLMs con RunPod

En esta sección, iniciaremos una instancia de GPU e instalaremos el Oobabooga text-generation-web-ui. Esto se puede utilizar para descargar cualquier modelo disponible de Hugging Face, ya sea en la versión original float16 o en forma cuantizada. Para esto, seleccionaremos la instancia de GPU Nvidia A5000 que contiene 24GB de VRAM, lo cual podría ser suficiente para nuestra aplicación. Entonces, selecciono la A5000 y hago clic en Desplegar.

Plantilla de PyTorch

Luego, como los Modelos de Lenguaje Grande requieren PyTorch para ejecutarse, hemos elegido la plantilla de PyTorch. Cuando creamos una instancia a partir de esta plantilla, la plantilla vendrá cargada con las bibliotecas de PyTorch. Pero para esta instancia, haremos algunos cambios. Entonces, hacemos clic en la implementación personalizada.

Aquí, asignaremos un disco de contenedor de 75GB, para que en caso de que descarguemos un modelo de lenguaje grande, quepa en él. Y en este caso, no quiero almacenar ningún dato para más tarde. Entonces, el disco de volumen a cero. Cuando esto se establece en cero, perderemos toda la información cuando se elimine la instancia de GPU y para este caso de ejemplo, estoy bien con eso. Y la aplicación que ejecutemos necesitará acceso al puerto 7860. Por lo tanto, exponemos el puerto 7860. Y finalmente, hacemos clic en anulación.

Anulación

Después de hacer clic en la anulación, podemos ver el costo estimado por hora para la instancia de GPU en la siguiente imagen. Por lo tanto, una GPU con 24GB de VRAM junto con 29GB de RAM y 8vCPU costará alrededor de $0.45 por hora, lo cual es muy barato en comparación con lo que muchos proveedores de nube grandes ofrecen. Ahora, hacemos clic en el botón desplegar.

Después de hacer clic en desplegar anteriormente, se creará una instancia en cuestión de segundos. Ahora podemos conectarnos a esta instancia de GPU a través de SSH mediante el botón Conectar que se muestra en la imagen de arriba. Después de hacer clic en el botón Conectar, aparecerá una ventana emergente, donde hacemos clic en Iniciar Terminal Web y luego Conectarse al Terminal Web, como se muestra en la imagen a continuación, para acceder a nuestra instancia de GPU.

Ahora, aparecerá una nueva pestaña en el navegador web a la que podemos acceder. Ahora, en la terminal web, escribe los siguientes comandos para descargar text-generation-web-ui, lo que nos permitirá descargar cualquier modelo de lenguaje grande de HuggingFace y usarlo para inferencia.

git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
pip install -r requirements.txt

Text Generation Webui

Ahora, el primer comando obtendrá el repositorio de GitHub de text-generation-webui que contiene el código de Python para usar modelos de lenguaje grandes localmente. Las dos siguientes líneas ingresarán al directorio e instalarán todas las bibliotecas necesarias para ejecutar el programa de Python. Para iniciar la interfaz web, usamos el siguiente código

python server.py --share

El comando anterior iniciará la interfaz web. Esto iniciará la interfaz web en localhost. Pero como ejecutamos la aplicación en la instancia remota de GPU, necesitamos usar una URL pública para acceder al sitio web. La opción –share creará una URL pública a la que podemos hacer clic para acceder a text-generation-web-ui.

Haz clic en el enlace gradio.live, como se muestra en la imagen anterior, para acceder a la interfaz de usuario. En esa interfaz de usuario, ve a la sección “Model” en el menú superior. Aquí, en la imagen de abajo, vemos hacia la derecha; debemos proporcionar un enlace para el modelo que queremos usar.

WizardLM 30B

Para esto, vamos a Hugging Face a un modelo llamado WizardLM 30B, un modelo de 30 mil millones de parámetros. Haremos clic en el botón de copiar para copiar el enlace de este modelo y luego lo pegaremos en la interfaz de usuario, y luego haremos clic en el botón de descarga para descargar el modelo.

Seleccionar UI

Después de descargar el modelo de lenguaje grande, podemos seleccionarlo en la parte izquierda de la interfaz de usuario bajo “Model”. Haz clic en el botón de actualización junto a él si no puedes encontrar el modelo descargado. Ahora selecciona el modelo que acabamos de descargar. El modelo que hemos descargado es un modelo de 16GB. Asigna alrededor de 20GB de VRAM de GPU para ejecutar completamente el modelo en la GPU. Luego haz clic en el botón de carga. Esto cargará el modelo en la GPU y podrás ver un mensaje de éxito en la parte derecha de la interfaz de usuario.

Escribir un poema

Ahora, el modelo de lenguaje grande se ha cargado en la GPU y podemos inferirlo. Ve a la sección “Notebook” de la interfaz de usuario haciendo clic en “Notebook” en el menú superior. Aquí, pruebo el modelo pidiéndole que escriba un poema sobre el sol diciendo “Escribe un poema sobre el Sol” y luego hago clic en el botón “Generar”. Se generará lo siguiente:

La imagen de arriba muestra que el modelo ha generado un poema basado en nuestra consulta. Lo mejor aquí es que el poema está relacionado con el Sol. La mayoría de los modelos de lenguaje grandes tienden a alejarse de la consulta inicial, pero aquí, nuestro modelo de lenguaje grande WizardLM mantiene la relación con la consulta hasta el final. En lugar de solo generar texto, también podemos conversar con el modelo. Para ello, vamos a la sección de Chat haciendo clic en Chat Present en la parte superior de la interfaz de usuario. Aquí, hagamos algunas preguntas al modelo.

Aquí, le pedimos al modelo que proporcione información sobre la Segunda Guerra Mundial en viñetas. El modelo tuvo éxito al responder con un mensaje de chat relevante a la consulta. El modelo también presentó la información en viñetas, como se solicitó en el mensaje de chat de la consulta. De esta manera, podemos descargar cualquier modelo de lenguaje grande de código abierto y usarlo a través de la interfaz de usuario en esta instancia de GPU que acabamos de crear.

Conclusión

En este artículo, hemos analizado una plataforma en la nube llamada RunPod que ofrece servicios sin servidor de GPU. Paso a paso, hemos visto cómo crear una cuenta en RunPod y luego cómo crear una instancia de GPU dentro de ella. Finalmente, en la instancia de GPU, hemos visto el proceso de ejecución de una interfaz de usuario de generación de texto que nos permite descargar un modelo de lenguaje grande de IA generativa de código abierto e inferir el modelo.

Puntos clave

Algunos de los puntos clave de este artículo incluyen:

  • RunPod es una plataforma en la nube que ofrece servicios de GPU.
  • RunPod ofrece sus servicios de dos formas. Una es a través de los servicios de la Comunidad en la nube, donde las GPUs que alquilamos son de una persona en particular y son económicas, y la otra es a través del servicio en la nube seguro, donde cualquier instancia de GPU que creemos pertenece a las GPUs de RunPod.
  • RunPod viene con plantillas que contienen un código base con el que podemos construir, es decir, las instancias de GPU que creamos con estas plantillas vendrán listas con las bibliotecas/software instalados.
  • RunPod ofrece tanto servicios de pago automáticos como de pago único.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.