Note:

Despliegue Llama2 en GPU de Oracle Cloud Infrastructure

Introducción

LLAMA2 es una arquitectura de aprendizaje profundo de última generación diseñada para escalar modelos de aprendizaje automático de manera eficiente en dispositivos con recursos limitados. La plataforma es increíblemente escalable y adaptable, lo que permite a las organizaciones procesar enormes cantidades de datos con facilidad, extraer información significativa y reaccionar rápidamente a las cambiantes condiciones del mercado. Una de las características clave de Llama2 es su capacidad para procesar datos casi en tiempo real, lo que permite a las empresas responder rápidamente a los cambios en su entorno. Además, admite una variedad de orígenes de datos y marcos de procesamiento, incluidos Apache Kafka, Apache Flink, Apache Spark, etc. Esto significa que los desarrolladores pueden elegir las mejores herramientas para sus necesidades específicas.

Llama2 también ofrece otras funciones útiles, como el soporte para el flujo de SQL, la integración con herramientas de big data populares como Hadoop y YARN, y medidas de seguridad sólidas para garantizar la privacidad y la integridad de los datos. En general, Llama2 es una poderosa herramienta que puede ayudar a las organizaciones a procesar y analizar de manera eficiente grandes conjuntos de datos, dándoles una ventaja competitiva en el acelerado panorama digital actual.

La arquitectura consta de varios componentes que trabajan juntos para generar respuestas similares a las humanas. En el núcleo del modelo está el codificador del transformador, que toma en una secuencia de palabras o texto y da salida a una serie de vectores que representan la entrada. Estos vectores se pasan a través de una red neuronal Feedforward (FFNN) y una capa de conexiones residuales para generar la salida final.

El FFNN se compone de capas totalmente conectadas que procesan las secuencias de entrada y producen incrustaciones contextualizadas. Las conexiones residuales permiten al modelo aprender patrones más complejos en los datos y mejorar su rendimiento general.

Además de estos componentes principales, Llama LLM también incluye varios otros módulos para ayudar a ajustar el modelo y mejorar su precisión. Estos incluyen un tokenizador para convertir entradas de texto en tokens numéricos, un vocabulario para almacenar subpalabras aprendidas y una máscara para evitar el sesgo de exposición durante el entrenamiento.

Generación de texto WebUI es una IU web de gradio para modelos de lenguaje grande. Soporta API y herramientas de línea de comandos también si son lo tuyo. Este WebUI soporta varios backends de modelo que incluyen transformadores, llama.cpp, ExLlama, ExLlamaV2, AutoGPTQ, GPTQ-for-Llama,CTransformers y AutoAWQ. También soporta modelos LoRA, ajuste y entrenamiento de un nuevo LoRA mediante QLoRA. Tiene un marco de extensiones para cargar tus extensiones favoritas para tus modelos. Tiene un servidor de API compatible con OpenAI.

Objetivos

Requisitos

Tarea 1: Aprovisionar una instancia informática de GPU en OCI

  1. Inicie una instancia informática en OCI con una VCN existente con subred pública. Para obtener más información, consulte Inicio de una instancia informática.

  2. Seleccione una de estas unidades GPU.A10 disponibles.

    VM.GPU.A10.1
    VM.GPU.A10.2
    BM.GPU.A10.4
    
  3. Al iniciar una instancia informática, cambie de unidad a una de las unidades anteriores.

  4. Si su arrendamiento no tiene un límite de servicio definido para GPU.A10, estas unidades no estarán en la lista de unidades.

    • Para comprobar los límites de arrendamiento en la consola de OCI, defina la región en la que va a aprovisionar una instancia informática GPU.A10, abra el menú de navegación y haga clic en Gobernanza y administración.

    • En Gestión de arrendamiento, seleccione Límites, cuotas y uso.

    • Seleccione el servicio en Compute, seleccione uno de los dominios de disponibilidad en el campo de ámbito y escriba GPU.A10 en el campo de recurso.

    • Seleccione GPU para instancias BM y VM basadas en A10

      Image1

  5. Los límites de recursos informáticos se establecen por dominio de disponibilidad. Compruebe si el límite está definido en cualquiera de los dominios de disponibilidad de la región. Si el límite de servicio está definido en 0 para todos los dominios de disponibilidad, haga clic en el enlace solicitar un aumento del límite de servicio y envíe una solicitud de aumento del límite para este recurso.

    Nota: Para acceder a Límites, cuotas y uso, debe ser miembro del grupo de administradores de arrendamiento o su grupo debe tener una política asignada para leer LimitsAndUsageViewers.

  6. Actualmente, las unidades de computación GPU.A10 de OCI soportan Oracle Linux, Ubuntu y Rocky Linux. Windows solo está soportado por unidades de máquina virtual.

    Nota: NVIDIA no admite oficialmente Rocky Linux.

  7. Al aprovisionar una instancia informática en OCI, utilice una imagen de sistema operativo estándar o una imagen con GPU activada. Si utiliza una imagen de sistema operativo estándar, necesita que se instale el controlador vGPU de NVIDIA.

    Image2

  8. Amplíe la sección de volumen de inicio para aumentar el volumen de inicio a al menos 250 GB y aumentar la VPU a un rendimiento superior para obtener una lectura/escritura decente para una mejor inferencia.

    BootVolume

    Inicie la instancia con los parámetros anteriores.

Tarea 2: Instalación de requisitos previos para Llama2

  1. Como los controladores NVIDIA se incluyen en la imagen de compilación de GPU de Oracle Linux, podemos verificar su presencia y funcionalidad ejecutando el comando nvidia-smi. Esto asegurará que todo esté correctamente configurado y que los controladores de GPU funcionen como se espera.

    nvidia_smi

  2. Aumentar FileSystem: la memoria del sistema de instancias de OCI incluye el valor por defecto 46.6GB. Dado que hemos aumentado nuestro volumen de inicio a 300 GB, ampliemos nuestro sistema de archivos con el comando incorporado de OCI Util.

    Para ampliar el sistema de archivos en la instancia de OCI después de aumentar el volumen de inicio a 300 GB, puede utilizar el comando de OCI incorporado. Siga los pasos a continuación.

    • Comprobar el uso actual del disco: antes de cambiar el tamaño del sistema de archivos, se recomienda comprobar el uso actual del disco para asegurarse de que refleja el aumento del tamaño del volumen de inicio. Para ello, puede utilizar el comando df. Verifique que el espacio disponible coincida con el nuevo tamaño del volumen de inicio (300 GB).

      bash df -h
      
    • Cambio de tamaño del sistema de archivos: utilice el comando de la utilidad OCI para cambiar el tamaño del sistema de archivos para utilizar el almacenamiento aumentado. El comando exacto puede variar según el sistema operativo y el sistema de archivos específicos que esté utilizando. Lo siguiente se utiliza para Oracle Linux 8.

      sudo /usr/libexec/oci-growfs
      

      Introduzca y cuando se le solicite que confirme que está ampliando la partición.

    • Verificar la expansión del sistema de archivos: después de ejecutar el comando de cambio de tamaño, vuelva a comprobar el uso del disco para confirmar que el sistema de archivos se ha expandido correctamente.

      bash df -h
      

    Ahora debe reflejar el aumento del tamaño del sistema de archivos. Si sigue estos pasos, debería poder ampliar el sistema de archivos de su instancia de OCI para utilizar el espacio de almacenamiento adicional proporcionado por el volumen de inicio aumentado.

    grúas

  3. Instale Python 3.10.6 en Oracle Linux 8 con el siguiente comando.

    sudo dnf update -y
    sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y
    wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
    tar -xf Python-3.10.6.tar.xz
    cd Python-3.10.6/
    ./configure --enable-optimizations
    make -j 2
    nproc
    sudo make altinstall
    python3.10 -V
    
  4. Instale git para clonar el repositorio de git.

    sudo dnf install git
    
  5. Instale conda con el siguiente comando.

    mkdir -p ~/miniconda3
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
    rm -rf ~/miniconda3/miniconda.sh
    ~/miniconda3/bin/conda init bash
    
  6. Cree el entorno conda.

    conda create -n llama2 python=3.10.9 # llama2 being the conda environment name
    conda activate llama2
    
  7. Instale PyTorch 2.0 con el siguiente comando.

    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    
  8. Clone text-generation-webui. Debe tener el repositorio text-generation-webui en el directorio clonado.

    git clone https://github.com/oobabooga/text-generation-webui
    
  9. Instale requirements.txt y cambie el directorio a text-generation-webui y ejecute el siguiente comando.

    pip3 install -r requirements.txt
    
  10. Actualice las reglas de firewall para permitir el tráfico del puerto 7860.

    sudo firewall-cmd --list-all # To check existing added ports
    sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp
    sudo firewall-cmd --reload
    sudo firewall-cmd --list-all # Confirm that port has been added.
    

Tarea 3: Ejecutar Llama2

  1. Con los requisitos instalados correctamente, estamos listos para seguir adelante con la ejecución de text-generation-webui. Navegue al directorio text-generation-webui y ejecute el siguiente comando.

    python server.py --sdp-attention --listen
    

    El resultado de este proceso debe cargar los módulos esenciales e iniciar el servidor de inferencia en el puerto 7860.

    llama2run

  2. Después de confirmar un despliegue correcto con el servidor que se ejecuta en el puerto 7860 como se ha demostrado anteriormente, sigamos accediendo a la aplicación text-generation-webui. Abra el explorador web e introduzca la siguiente dirección: http://<PublicIP>:7860, sustituyendo <PublicIP> por la dirección IP pública de la instancia.

    Ahora, la aplicación debe cargarse y aparecer como se ilustra a continuación. Desplácese hasta el modelo de sección en la parte superior, tal y como aparece resaltado.

    webuiapp

  3. En la sección Modelo, introduzca el repositorio de interfaz de usuario para el modelo Llama2 deseado. Para nuestros propósitos, seleccionamos el modelo GPTQ del repositorio huggingface TheBloke/Llama-2-13B-chat-GPTQ. Descargue el modelo y cárguelo en la sección de modelo.

    modelo de descarga

  4. Una vez cargada, vaya a la sección Chat para iniciar la generación de texto con Llama2.

    llama2demo

Tarea 4: Despliegue de la Generación de Texto WebUI mediante Service Manager systemctl

  1. Cree un archivo llama2.service en la ruta /etc/systemd/system e introduzca el siguiente texto.

    [Unit]
    Description=systemd service start llama2
    
    [Service]
    WorkingDirectory=/home/opc/text-generation-webui
    ExecStart=bash /home/opc/text-generation-webui/start.sh
    User=opc
    [Install]
    WantedBy=multi-user.target
    
  2. Asegúrese de cambiar el directorio de trabajo. Aquí hemos mencionado start.sh como archivo de ejecución, vamos a crear ese archivo en el directorio text-generation-webui e introducir el siguiente texto.

    #!/bin/sh
    # - the script is ran via anaconda python
    # - output is not buffered (-u)
    # - stdout & stderr are stored to a log file
    # - we're executing the working directory specified in the systemd service file
    /home/opc/miniconda3/envs/llama2/bin/python server.py --sdp-attention --listen
    
  3. Esto garantiza que siempre utilice el entorno conda Llama2. No se recomienda activar el entorno conda desde el servicio systemd. Por lo tanto, utilizamos el script de shell para iniciar y luego utilizar el script de shell para ejecutar la aplicación. Ejecute los comandos siguientes para volver a cargar y activar/iniciar el servicio.

    sudo systemctl daemon-reload
    sudo systemctl enable llama2.service
    sudo systemctl start llama2.service
    
  4. Ejecute el siguiente comando para comprobar el estado del servicio.

    sudo systemctl start llama2.service
    

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.