Saltar al contenido principal
InicioTutorialesInteligencia Artificial (IA)

Cómo ejecutar Llama 3 localmente: guía completa

Ejecuta LLaMA 3 localmente con GPT4ALL y Ollama e intégralo en VSCode. A continuación, construye un sistema de recuperación de preguntas y respuestas utilizando Langchain, Chroma DB y Ollama.
Actualizado 22 ago 2024  · 15 min leer

Ejecutar localmente grandes modelos lingüísticos (LLM) como Llama 3 se ha convertido en algo revolucionario en el mundo de la IA. Con plataformas como Hugging Face que promueven la implementación local, los usuarios pueden disfrutar ahora de experiencias ininterrumpidas y privadas con sus modelos.

En este blog, aprenderemos por qué debemos ejecutar LLM como Llama 3 localmente y cómo acceder a ellos con GPT4ALL y Ollama. Además, aprenderemos a servir modelos, a integrar Llama 3 en tu espacio de trabajo y, por último, a utilizarlo para desarrollar la aplicación de IA. No solo lo utilizaremos como chatbot, sino también para mejorar nuestro flujo de trabajo y construir proyectos con él.

¿Por qué ejecutar Llama 3 localmente?

Ejecutar Llama 3 localmente puede parecer desalentador debido a los elevados requisitos de RAM, GPU y potencia de procesamiento. Sin embargo, los avances en los marcos de trabajo y la optimización de modelos han hecho que esto sea más accesible que nunca. He aquí por qué deberías considerarlo:

  • Acceso ininterrumpido: No tendrás que preocuparte por límites de tarifa, tiempos de inactividad e interrupciones inesperadas del servicio.
  • Rendimiento mejorado: La generación de respuestas es rápida, sin retrasos ni latencias. Incluso en portátiles de nivel medio, se obtienen velocidades de unos 50 tokens por segundo.
  • Seguridad mejorada: Tienes pleno control sobre las entradas utilizadas para ajustar el modelo y los datos permanecen localmente en tu dispositivo.
  • Costes reducidos: En lugar de pagar elevadas tarifas para acceder a las API o suscribirte al chatbot en línea, puedes utilizar Llama 3 gratuitamente.
  • Personalización y flexibilidad: Puedes personalizar los modelos mediante hiperparámetros, añadir topes y cambiar la configuración avanzada.
  • Capacidades sin conexión: Una vez descargado el modelo, no necesitas conexión a Internet para utilizarlo.
  • Propiedad: Tienes plena propiedad y control sobre el modelo, sus datos y sus resultados.

Lee nuestro artículo, Los pros y los contras de utilizar grandes modelos lingüísticos (LLM) en la nube frente a ejecutar los LLM localmente, para saber más sobre si utilizar los LLM localmente es para ti.

Utilizar Llama 3 con GPT4ALL

GPT4ALL es un software de código abierto que te permite ejecutar modelos lingüísticos populares de gran tamaño en tu máquina local, incluso sin una GPU. Es fácil de usar, lo que la hace accesible a personas sin formación técnica.

Para empezar, descarga e instala el GPT4ALL en Windows desde la página oficial de descargas.

Tras instalar la aplicación, ejecútala y haz clic en el botón "Descargas" para abrir el menú de modelos. Allí, puedes desplazarte hacia abajo y seleccionar el modelo "Llama 3 Instruct" y, a continuación, hacer clic en el botón "Descargar".

Descarga la aplicación Llama 3 en GPT4all para Windows.

Una vez finalizada la descarga, cierra la pestaña y selecciona el modelo de Llama 3 Instruct haciendo clic en el menú desplegable "Elegir un modelo".

selección del modelo llama 3

Escribe un mensaje y empieza a utilizarlo como ChatGPT. El sistema tiene instalado el kit de herramientas CUDA, por lo que utiliza la GPU para generar una respuesta más rápida.

uso local del modelo llama3 8b

Utilizar Llama 3 con Ollama

Ahora, vamos a probar la forma más sencilla de utilizar Llama 3 localmente al descargar e instalar Ollama.

descargar el paquete instalador de Ollama

Ollama es una potente herramienta que te permite utilizar LLMs localmente. Es rápido y tiene montones de funciones.

Tras instalar Ollama en tu sistema, inicia el terminal/PowerShell y escribe el comando

ollama run llama3

Nota: Descargar el archivo del modelo e iniciar el chatbot dentro del terminal te llevará unos minutos.

Escribe prompts o empieza a hacer preguntas, y Ollama generará la respuesta dentro de tu terminal. La respuesta del chat es superrápida, y puedes seguir haciendo preguntas de seguimiento para profundizar en el tema.

descarga y uso de la llama 3 en windows powershell

Para salir del chatbot, escribe /bye .

Además de estos dos programas, puedes consultar la página Ejecutar LLM localmente: 7 métodos sencillos, una guía para explorar otras aplicaciones y marcos.

Servidores locales para Llama 3

Ejecutar un servidor local te permite integrar Llama 3 en otras aplicaciones y crear tu propia aplicación para tareas específicas.

Inicia el servidor local de inferencia de modelos. Para ello, introduce el siguiente comando en el terminal.

ollama serve

Para comprobar si el servidor funciona correctamente, ve a la bandeja del sistema, busca el icono de Ollama y haz clic con el botón derecho para ver los registros.

ver registros en Ollama

Te llevará a la carpeta Ollama, donde podrás abrir el archivo `server.log` para ver información sobre las peticiones del servidor a través de las API e información del servidor con marcas de tiempo.

registros del servidor de ollama

Acceder a la API mediante CURL

Puedes acceder simplemente al servidor de inferencia con el comando CURL.

Solo tienes que indicar el nombre del modelo y la indicación y asegurarte de que la transmisión está desactivada para obtener el mensaje completo.

curl http://localhost:11434/api/chat -d '{
  "model": "llama3",
  "messages": [
    { "role": "user", "content": "What are God Particles?" }
  ],
  "stream": false
}'

El comando CURL es nativo de Linux, pero también puedes utilizarlo en Windows PowerShell, como se muestra a continuación.

uso de curl para acceder al modelo llama3 alojado localmente

Acceder a la API con el paquete Python

También puedes instalar el paquete Ollama Python utilizando PIP para acceder al servidor de inferencia.

pip install ollama

Acceder a la API en Python te permite crear aplicaciones y herramientas potenciadas por IA, y es muy fácil de usar.

Solo tienes que proporcionar a las funciones `ollama.chat` el nombre del modelo y el mensaje, y generará la respuesta.

Nota: En el argumento del mensaje, también puedes añadir un aviso del sistema y un aviso del asistente para añadir el contexto.

import ollama

response = ollama.chat(
    model="llama3",
    messages=[
        {
            "role": "user",
            "content": "Tell me an interesting fact about elephants",
        },
    ],
)
print(response["message"]["content"])

llama 3 salida generada

El paquete Python de Ollama también proporciona funciones como las llamadas asíncronas y el streaming, que permiten una gestión eficaz de las peticiones a la API y aumentan la velocidad percibida del modelo.

De forma similar a la API de OpenAI, puedes crear una función de chat asíncrona y luego escribir código de transmisión mediante la función asíncrona, lo que permite interacciones eficientes y rápidas con el modelo.

import asyncio
from ollama import AsyncClient

async def chat():
    """
    Stream a chat from Llama using the AsyncClient.
    """
    message = {
        "role": "user",
        "content": "Tell me an interesting fact about elephants"
    }
    async for part in await AsyncClient().chat(
        model="llama3", messages=[message], stream=True
    ):
        print(part["message"]["content"], end="", flush=True)


asyncio.run(chat())

Como puedes ver, el modelo muestra los tokens a medida que se generan.

salida asíncrona y streaming

También puedes utilizar la API de Python para crear el modelo personalizado, convertir el texto en incrustaciones y gestionar los errores. También puedes copiar, borrar, extraer y enviar los modelos.

Integración de Llama 3 en VSCode

Además de utilizar Ollama como chatbot o para generar respuestas, puedes integrarlo en VSCode y utilizar Llama 3 para funciones como el autocompletado, las sugerencias de código contextualizadas, la escritura de código, la generación de docstrings, las pruebas unitarias, etc.

1. En primer lugar, tenemos que inicializar el servidor de inferencia Ollama escribiendo el siguiente comando en el terminal.

ollama serve

2. Ve a Extensiones VSCode, busca la herramienta "CodeGPT" e instálala. CodeGPT te permite conectar cualquier proveedor de modelos utilizando la clave API.

CodeGPT en el mercado VSCode

3. Configura el CodeGPT haciendo clic en el icono de chat del CodeGPT en el panel izquierdo. Cambia el proveedor del modelo a Ollama y selecciona el modelo llama3:8b. No tienes que proporcionar una clave API, ya que lo ejecutamos localmente.

seleccionar el proveedor del modelo y el modelo en la extensión CodeGPT

4. Escribe el prompt para generar el código Python y luego pulsa el botón "Insertar el código" para transferir el código a tu archivo Python. También puedes escribir instrucciones de seguimiento para mejorar el código.

uso de llama 3 en CodeGPT

5. Además del asistente de codificación, puedes utilizar CodeGPT para comprender el código, refactorizarlo, documentarlo, generar las pruebas unitarias y resolver los problemas.

refractar el código con el CodeGPT

Si quieres sentirte como un profesional de Python, consulta la guía Configurar VSCode para Python para conocer la función principal de VSCode y personalizarla según tus necesidades.

Desarrollar localmente una aplicación de IA

En esta sección, desarrollaremos una aplicación potenciada por IA que lee archivos docx de una carpeta designada, los convierte en incrustaciones y los almacena en un almacén vectorial.

Después, utilizaremos una búsqueda por similitud para recuperar significados relevantes y dar respuestas contextuales a tus preguntas.

Esta aplicación te permitirá comprender rápidamente la esencia de los libros y profundizar en el desarrollo de los personajes.

Directorio de libros de Abid con archivos docx

Configuración

En primer lugar, instalaremos todos los paquetes Python necesarios para cargar los documentos, el almacén vectorial y los marcos LLM.

pip install unstructured[docx] langchain langchainhub langchain_community langchain-chroma

A continuación, inicia el servidor de inferencia Ollama.

ollama serve

Cargar documentos

Es una buena práctica desarrollar y probar tu código en Jupyter Notebook antes de crear la aplicación.

Cargaremos todos los archivos docx de la carpeta utilizando la dirección DirectoryLoader.

from langchain_community.document_loaders import DirectoryLoader

loader = DirectoryLoader("C:/Users/abida/Desktop/Books", glob="**/*.docx")
books = loader.load()
len(books)
4

Puedes crear tu propio chatbot consciente del contexto siguiendo el tutorial Desarrollo de Chatbot con ChatGPT y LangChain: un enfoque consciente del contexto.

Dividir el texto

Alimentar el modelo con un libro entero no es factible, ya que sobrepasaría su ventana de contexto. Para superar esta limitación, debemos dividir el texto en trozos más pequeños y manejables que quepan cómodamente en la ventana contextual del modelo.

En nuestro caso, convertiremos los cuatro libros a un trozo de 500 caracteres.

from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(books)

Incrustaciones Ollama y almacén vectorial Chroma

Utilizaremos Langchain para convertir el texto en la incrustación y almacenarlo en la base de datos Chroma.

Utilizamos el modelo Ollama Llama 3 como modelo de incrustación.

from langchain_chroma import Chroma
from langchain_community.embeddings import OllamaEmbeddings

vectorstore = Chroma.from_documents(
    documents=all_splits,
    embedding=OllamaEmbeddings(model="llama3", show_progress=True),
    persist_directory="./chroma_db",
)
OllamaEmbeddings: 100%|██████████| 23/23 [01:00<00:00,  2.63s/it]

Vamos a probar nuestra base de datos vectorial mediante algunas búsquedas de similitud.

question = "Who is Zahra?"
docs = vectorstore.similarity_search(question)
docs

Obtuvimos cuatro resultados similares a la pregunta.

Resultado de la búsqueda de similitud

Puedes sumergirte en el mundo de las bases de datos vectoriales y Chroma DB si lees el tutorial, Aprende a utilizar Chroma DB: guía paso a paso.

Construir cadenas de Langchain para un sistema de recuperación de preguntas y respuestas

Para construir un sistema adecuado de recuperación de preguntas y respuestas, utilizaremos cadenas de Langchain y empezaremos a añadir los módulos.

En nuestra cadena de preguntas y respuestas, haremos lo siguiente:

  1. Utiliza el almacén vectorial como recuperador y formatea los resultados.
  2. Después, te proporcionaremos la indicación RAG. Puedes sacarlo fácilmente del Hub Langchain.
  3. A continuación, proporcionaremos la función de inferencia Ollama Llama 3.
  4. Al final, solo analizaremos los resultados para mostrar la respuesta.

En pocas palabras, antes de pasarla por el modelo Llama 3, tu pregunta se contextualizará mediante la búsqueda de similitudes y la indicación RAG.

from langchain import hub
from langchain_community.llms import Ollama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

llm = Ollama(model="llama3")

retriever = vectorstore.as_retriever()


def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)


rag_prompt = hub.pull("rlm/rag-prompt")
qa_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | rag_prompt
    | llm
    | StrOutputParser()
)

Puedes construir una aplicación similar con LLamaIndex. Para ello, sigue el enlace al tutorial LlamaIndex: un marco de datos para las aplicaciones basadas en grandes modelos lingüísticos (LLM).

Probar la cadena de recuperación de preguntas y respuestas

Haz preguntas relevantes sobre los libros para comprender mejor la historia.

question = "What is the story of the 'Gené is Missing' book?"
qa_chain.invoke(question)

Como vemos, utilizar los libros como contexto proporciona una respuesta precisa.

'Based on the provided context, "Gené is Missing" appears to be a mystery novel that revolves around uncovering the truth about Gené\'s life and potential involvement in murders. The story follows different perspectives, including Simon trying to prove his innocence, flashbacks of Gené\'s past, and detective Jacob investigating the case.'

Hagamos ahora una pregunta sobre el personaje.

question = "Who is Arslan?"
qa_chain.invoke(question)

Se ha generado una respuesta precisa.

'Arslan is Zahra\'s brother\'s best friend. He is someone that Zahra visits in the book "A Boy with Honest Dreams" by Abid Ali Awan to gather information about Ali.'

Construir la aplicación de IA

Para crear una aplicación de IA completa que se ejecute sin problemas en tu terminal, combinaremos todo el código de las secciones anteriores en un único archivo Python.

code AI_app.py

Además, mejoraremos el código para permitir la consulta interactiva, lo que te permite plantear preguntas a la aplicación repetidamente hasta que termines explícitamente la sesión escribiendo "salir".

from langchain_chroma import Chroma
from langchain_community.embeddings import OllamaEmbeddings
from langchain import hub
from langchain_community.llms import Ollama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# loading the vectorstore
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=OllamaEmbeddings(model="llama3"))

# loading the Llama3 model
llm = Ollama(model="llama3")

# using the vectorstore as the retriever
retriever = vectorstore.as_retriever()

# formating the docs
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

# loading the QA chain from langchain hub
rag_prompt = hub.pull("rlm/rag-prompt")

# creating the QA chain
qa_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | rag_prompt
    | llm
    | StrOutputParser()
)

# running the QA chain in a loop until the user types "exit"
while True:
    question = input("Question: ")
    if question.lower() == "exit":
        break
    answer = qa_chain.invoke(question)

    print(f"\nAnswer: {answer}\n")



Ejecuta la aplicación escribiendo `Python` y el nombre del archivo en el terminal.

python AI_app.py

Es genial. Hemos creado nuestra propia aplicación RAG AI localmente con pocas líneas de código.

Aplicación AI Python: recuperación de preguntas y respuestas

Todo el código fuente de este tutorial está disponible en el repositorio GitHub kingabzpro/using-llama3-locally. Compruébalo y recuerda poner una estrella ⭐en el repositorio.

Conclusión

La capacidad de ejecutar Llama 3 localmente y crear aplicaciones no habría sido posible sin los incansables esfuerzos de la comunidad de código abierto de IA. Esta comunidad de personas entregadas trabaja día y noche para que la IA sea accesible a todos, permitiéndonos aprovechar el poder de estos modelos y construir nuestros propios sistemas.

De este modo, podemos garantizar la privacidad y la seguridad de los datos, al tiempo que evitamos las cuotas de suscripción o API. Si quieres formar parte de este ecosistema, contribuye al proyecto, difunde la palabra y también haz donaciones.

En este tutorial, hemos aprendido a utilizar Llama 3 localmente en un ordenador portátil. También hemos aprendido sobre el servidor de inferencia y cómo podemos utilizarlo para integrar Llama 3 en VSCode.

Finalmente, construimos el sistema de recuperación de preguntas y respuestas utilizando Langchain, Chroma y Ollama. Los datos nunca salieron del sistema local, y ni siquiera tuviste que pagar un solo euro para construirlo. Aparte de las aplicaciones más sencillas, puedes construir sistemas complejos utilizando las mismas herramientas que hemos empleado en este tutorial.

El siguiente paso natural en tu viaje de aprendizaje es seguir el itinerario de habilidades Desarrollo de grandes modelos lingüísticos. Aprenderás sobre aprendizaje profundo, arquitectura de transformadores, cómo afinar los LLM y los LLMOps.

Temas

Sigue aprendiendo habilidades de IA con DataCamp

Track

Desarrollo de grandes modelos lingüísticos

16 horas hr
Aprende a desarrollar grandes modelos lingüísticos (LLM) con PyTorch y Hugging Face con las últimas técnicas de deep learning y PNL.
See DetailsRight Arrow
Start Course
Certificación disponible

Course

Cómo desarrollar aplicaciones LLM con LangChain

3 hr
6.4K
Descubre cómo crear aplicaciones basadas en IA con LLM, prompts, cadenas y agentes en LangChain.
Ver másRight Arrow
Relacionado
An avian AI exits its cage

blog

12 alternativas de código abierto a GPT-4

Alternativas de código abierto a GPT-4 que pueden ofrecer un rendimiento similar y requieren menos recursos informáticos para funcionar. Estos proyectos vienen con instrucciones, fuentes de código, pesos del modelo, conjuntos de datos e IU de chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Tutorial de Llama.cpp: Guía completa para la inferencia e implementación eficientes de LLM

Esta completa guía sobre Llama.cpp le guiará a través de los aspectos esenciales de la configuración de su entorno de desarrollo, la comprensión de sus funcionalidades básicas, y el aprovechamiento de sus capacidades para resolver casos de uso del mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Cómo utilizar ChatGPT Code Interpreter

Todo lo que necesitas saber sobre ChatGPT Code Interpreter de OpenAI
Adel Nehme's photo

Adel Nehme

9 min

tutorial

Construir agentes LangChain para automatizar tareas en Python

Un tutorial completo sobre la construcción de agentes LangChain multiherramienta para automatizar tareas en Python utilizando LLMs y modelos de chat utilizando OpenAI.
Bex Tuychiev's photo

Bex Tuychiev

14 min

See MoreSee More