xlera8

¿Cómo acceder a Llama3 con Flask?

Introducción

¡El mundo de la IA se volvió mucho más emocionante con el lanzamiento de Llama3! Este poderoso modelo de lenguaje de código abierto, creado por Meta, está revolucionando las cosas. Llama3, disponible en variantes 8B y 70B previamente entrenadas y ajustadas a instrucciones, ofrece una amplia gama de aplicaciones. En esta guía, exploraremos las capacidades de Llama3 y cómo acceder a Llama3 con Frasco, centrándose en su potencial para revolucionar la IA generativa.

OBJETIVOS DE APRENDIZAJE

  • Explore la arquitectura y las metodologías de capacitación detrás de Llama3, descubriendo sus innovadores datos de capacitación previa y sintonia FINA técnicas, esenciales para comprender su excepcional desempeño.
  • Experimente la implementación práctica de Llama3 a través de Flask, dominando el arte de la generación de texto usando transformadores mientras obtiene información sobre los aspectos críticos de las pruebas y ajustes de seguridad.
  • Analice las impresionantes capacidades de Llama3, incluida su mayor precisión, adaptabilidad y escalabilidad sólida, reconociendo al mismo tiempo sus limitaciones y riesgos potenciales, cruciales para un uso y desarrollo responsables.
  • Participe con ejemplos y casos de uso del mundo real de Llama3, lo que le permitirá aprovechar su poder de manera efectiva en diversas aplicaciones y escenarios, desbloqueando así todo su potencial en el ámbito de la IA generativa.

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Tabla de contenidos.

Llama3 Arquitectura y Formación

llama3 es un modelo de lenguaje autorregresivo que aprovecha una arquitectura transformadora optimizada. Sí, el transformador normal pero con un enfoque mejorado. Las versiones optimizadas emplean ajuste fino supervisado (SFT) y aprendizaje reforzado con retroalimentación humana (RLHF) para alinearse con las preferencias humanas de utilidad y seguridad. El modelo fue entrenado previamente en un corpus extenso de más de 15 billones de tokens de datos de fuentes disponibles públicamente, con un límite de marzo de 2023 para el modelo 8B y diciembre de 2023 para el modelo 70B, respectivamente. Los datos de ajuste incorporan conjuntos de datos de instrucciones disponibles públicamente, así como más de 10 millones de ejemplos anotados por humanos.

Llama3 con matraz

Capacidades impresionantes de Llama3

Como señalamos anteriormente, Llama3 tiene un diseño de transformador optimizado y viene en dos tamaños, parámetros 8B y 70B, tanto en versiones preentrenadas como ajustadas por instrucciones. El tokenizador del modelo tiene un vocabulario de tokens de 128K. Se utilizaron secuencias de 8,192 tokens para entrenar los modelos. Llama3 ha demostrado ser notablemente capaz de lo siguiente:

  • Precisión mejorada: Llama3 ha mostrado un rendimiento mejorado en varias tareas de procesamiento del lenguaje natural.
  • Adaptabilidad: La capacidad del modelo para adaptarse a diversos contextos y tareas lo convierte en una opción ideal para una amplia gama de aplicaciones.
  • Escalabilidad robusta: La escalabilidad de Llama3 le permite manejar grandes volúmenes de datos y tareas complejas con facilidad.
  • Capacidades de codificación: Se acepta que la capacidad de codificación de Llama3 es nada menos que notable, con la increíble cantidad de más de 250 tokens por segundo. En lugar de las GPU doradas, la eficiencia de las LPU es incomparable, lo que las convierte en la opción superior para ejecutar modelos de lenguajes grandes.

La ventaja más importante de Llama3 es su naturaleza gratuita y de código abierto, lo que lo hace accesible a los desarrolladores sin tener que gastar mucho dinero.

llama3 con matraz

Variantes y características de Llama3

Como se mencionó anteriormente, Llama3 ofrece dos variantes principales, cada una de las cuales se adapta a diferentes casos de uso con los dos tamaños de 8B y 70B:

  • Modelos pre-entrenados: Adecuado para tareas de generación de lenguaje natural. Un poco más general en rendimiento.
  • Modelos adaptados a las instrucciones: Optimizado para casos de uso de diálogo, superando a muchos modelos de chat de código abierto en los puntos de referencia de la industria.

Datos de entrenamiento y puntos de referencia de Llama3

Llama3 fue entrenado previamente en un corpus extenso de más de 15 billones de tokens de datos disponibles públicamente, con un límite de marzo de 2023 para el modelo 8B y diciembre de 2023 para el modelo 70B. Los datos de ajuste incorporan conjuntos de datos de instrucciones disponibles públicamente y más de 10 millones de ejemplos anotados por humanos (¡lo escuchaste bien!). El modelo ha logrado resultados impresionantes en pruebas comparativas automáticas estándar, incluidas MMLU, AGIEval English, CommonSenseQA y más.

llama3

Casos de uso y ejemplos de Llama3

La llama se puede utilizar como otras. familia de llamas modelos lo que también ha hecho que su uso sea muy fácil. Básicamente necesitamos instalar un transformador y acelerar. Veremos un script contenedor en esta sección. Puede encontrar los fragmentos de código completos y el cuaderno para ejecutar con GPU haga clic aquí Agregué el cuaderno, una aplicación de matraz y un script de modo interactivo para probar el comportamiento del modelo. A continuación se muestra un ejemplo del uso de Llama3 con canalización:

¿Cómo acceder a Llama3 con Flask?

Exploremos ahora los pasos para acceder a Llama3 con Flask.

Paso 1: configurar el entorno Python

Cree un entorno virtual (opcional pero recomendado):

$ python -m venv env
$ source env/bin/activate   # On Windows use `.envScriptsactivate`

Instalar los paquetes necesarios:

Instalamos transformador y aceleramos pero como Llama3 es nuevo, continuamos instalando directamente desde Git Hub.

(env) $ pip install -q git+https://github.com/huggingface/transformers.git
(env) $ pip install -q flask transformers torch accelerate # datasets peft bitsandbytes

Paso 2: preparar el archivo de aplicación principal

Cree un nuevo archivo Python llamado main.py. Dentro de él, pegue el siguiente código.

from flask import Flask, request, jsonify
import transformers
import torch

app = Flask(__name__)

# Initialize the model and pipeline outside of the function to avoid unnecessary reloading
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)


@app.route('/generate', methods=['POST'])
def generate():
    data = request.get_json()
    user_message = data.get('message')

    if not user_message:
        return jsonify({'error': 'No message provided.'}), 400

    # Create system message
    messages = [{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"}]

    # Add user message
    messages.append({"role": "user", "content": user_message})

    prompt = pipeline.tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )

    terminators = [
        pipeline.tokenizer.eos_token_id,
        pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
    ]

    outputs = pipeline(
        prompt,
        max_new_tokens=256,
        eos_token_id=terminators,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
    )

    generated_text = outputs[0]['generated_text'][len(prompt):].strip()
    response = {
        'message': generated_text
    }

    return jsonify(response), 200


if __name__ == '__main__':
    app.run(debug=True)

El código anterior inicializa un servidor web Flask con una única ruta, /generar, responsable de recibir y procesar los mensajes de los usuarios y devolver respuestas generadas por IA.

Paso 3: ejecutar la aplicación Flask

Ejecute la aplicación Flask ejecutando el siguiente comando:

(env) $ export FLASK_APP=main.py
(env) $ flask run --port=5000

Ahora, deberías tener la aplicación Flask ejecutándose en http://localhost:5000. Puede probar la API mediante herramientas como Postman o CURL, o incluso escribir una página frontal HTML simple.

Modo interactivo usando Transformers AutoModelForCausalLM

Para consultar interactivamente el modelo dentro de Jupyter Notebook, pegue esto en una celda y ejecute:

import requests
import sys
sys.path.insert(0,'..')
import torch

from transformers import AutoTokenizer, AutoModelForCausalLM

MODEL_NAME ='meta-llama/Meta-Llama-3-8B-Instruct'

class InteractivePirateChatbot:
    def __init__(self):
        self._tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, padding_side='left')
        self._tokenizer.pad_token = self._tokenizer.eos_token
        self._model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto", offload_buffers=True)
        
    def _prepare_inputs(self, messages):
        try:
            inputs = self._tokenizer([message['content'] for message in messages], padding='longest', truncation=True, max_length=512, return_tensors='pt')
            input_ids = inputs.input_ids.to(self._model.device)
            attention_mask = inputs.attention_mask.to(self._model.device)
            return {'input_ids': input_ids, 'attention_mask': attention_mask}
        except Exception as e:
            print(f"Error preparing inputs: {e}")
            return None

    def ask(self, question):
        try:
            messages = [
                {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
                {"role": "user", "content": question}
            ]

            prepared_data = self._prepare_inputs(messages)
            if prepared_data is None:
                print("Error preparing inputs. Skipping...")
                return

            output = self._model.generate(**prepared_data, max_length=512, num_beams=5, early_stopping=True)

            answer = self._tokenizer.decode(output[0], skip_special_tokens=True)
            print("Pirate:", answer)
        except Exception as e:
            print(f"Error generating response: {e}")

generator = InteractivePirateChatbot()
while True:
    question = input("User: ")
    generator.ask(question)

El código anterior le permitirá interactuar rápidamente y ver cómo funciona el modelo. Encuentra el código completo esta página.

User: "Who are you?"

Pirate: "Arrrr, me hearty! Me name be Captain Chat, the scurviest pirate chatbot to ever sail the Seven Seas! I be here to swab yer decks with me clever responses and me trusty parrot, Polly, perched on me shoulder. So hoist the colors, me matey, and let's set sail fer a swashbucklin' good time!"

Ya que hemos visto cómo funciona el modelo, veamos algunas guías de seguridad y responsabilidad.

Responsabilidad y Seguridad

Meta ha tomado una serie de medidas para garantizar el desarrollo responsable de la IA, incluida la implementación de mejores prácticas de seguridad, proporcionando recursos como las medidas de seguridad Meta Llama Guard 2 y Code Shield, y actualizando la Guía de uso responsable. Se anima a los desarrolladores a ajustar e implementar estas salvaguardas según sus necesidades, sopesando los beneficios de la alineación y la utilidad para su caso de uso y audiencia específicos. Todos estos enlaces están disponibles en el repositorio de Hugginface para Llama3.

Consideraciones y limitaciones éticas

Si bien Llama3 es una herramienta poderosa, es esencial reconocer sus limitaciones y riesgos potenciales. El modelo puede producir respuestas inexactas, sesgadas o objetables a las indicaciones del usuario. Por lo tanto, los desarrolladores deben realizar pruebas de seguridad y ajustes adaptados a sus aplicaciones específicas del modelo. Meta recomienda incorporar las soluciones de Purple Llama en los flujos de trabajo, específicamente Llama Guard, que proporciona un modelo base para filtrar las indicaciones de entrada y salida para superponer la seguridad a nivel de sistema además de la seguridad a nivel de modelo.

Conclusión

Meta ha remodelado el panorama de la inteligencia artificial con la introducción de Llama3, un potente modelo de lenguaje de código abierto elaborado por Meta. Con su disponibilidad en versiones 8B y 70B preentrenadas y ajustadas con instrucciones, Llama3 presenta una multitud de posibilidades de innovación. Esta guía ha proporcionado una exploración en profundidad de las capacidades de Llama3 y cómo acceder a Llama3 con Flask, enfatizando su potencial para redefinir la IA generativa.

Puntos clave

  • Meta desarrolló Llama3, un potente modelo de lenguaje de código abierto disponible en versiones 8B y 70B previamente entrenadas y ajustadas a las instrucciones.
  • Llama3 ha demostrado capacidades impresionantes, que incluyen precisión mejorada, adaptabilidad y escalabilidad sólida.
  • El modelo es de código abierto y completamente gratuito, lo que lo hace accesible a desarrolladores e investigadores de bajo presupuesto.
  • Los usuarios pueden utilizar Llama3 con transformadores, aprovechando la abstracción de canalización o las clases automáticas con la función generar().
  • Llama3 y Flask permiten a los desarrolladores explorar nuevos horizontes en IA generativa, fomentando soluciones innovadoras como chatbots y generación de contenido, superando los límites de la interacción hombre-máquina.

Preguntas frecuentes

P1. ¿Qué es Llama3?

A. Meta desarrolló Llama3, un potente modelo de lenguaje de código abierto disponible en versiones 8B y 70B previamente entrenadas y ajustadas a las instrucciones.

P2. ¿Cuáles son las características clave de Llama3?

R. Llama3 ha demostrado capacidades impresionantes, que incluyen precisión mejorada, adaptabilidad y escalabilidad sólida. Las investigaciones y las pruebas han demostrado que ofrece respuestas más relevantes y conscientes del contexto, lo que garantiza que cada solución se ajuste con precisión a las necesidades del usuario.

P3. ¿Llama3 es de código abierto y gratuito? ¿Puedo utilizar Llama3 con fines comerciales?

R. Sí, Llama3 es de código abierto y completamente gratuito, lo que lo hace accesible para los desarrolladores sin tener que gastar mucho dinero. Aunque Llama3 es de código abierto y de uso gratuito con fines comerciales. Sin embargo, recomendamos revisar los términos y condiciones de la licencia para garantizar el cumplimiento de las regulaciones aplicables.

P4. ¿Puedo ajustar Llama3 para mi caso de uso específico?

R. Sí, Llama3 se puede ajustar para casos de uso específicos ajustando los hiperparámetros y los datos de entrenamiento. Esto puede ayudar a mejorar el rendimiento del modelo en tareas y conjuntos de datos específicos.

P5. ¿Cómo se compara Llama3 con otros modelos de lenguaje como BERT y RoBERTa?

A. Llama3, un modelo de lenguaje más avanzado entrenado en un conjunto de datos más grande, supera a BERT y RoBERTa en varias tareas de procesamiento del lenguaje natural.

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

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?