Llama 3 - Modelo de lenguaje de gran escala de código abierto de Meta

2024.12.27

¿Qué es Llama 3?

Llama 3 es un modelo de lenguaje de gran escala de código abierto desarrollado y publicado por Meta (anteriormente Facebook). Se publica bajo una licencia que permite uso comercial, y es posible ejecutarlo en entorno local y hacer fine-tuning.

Variaciones del modelo

ModeloParámetrosUso
Llama 3 8B8 mil millonesLigero, para ejecución local
Llama 3 70B70 mil millonesAlto rendimiento, para servidores
Llama 3 8B Instruct8 mil millonesAjustado para diálogo e instrucciones
Llama 3 70B Instruct70 mil millonesAjustado para diálogo e instrucciones

Benchmark

MMLU (Conocimiento):
- GPT-4: 86.4%
- Llama 3 70B: 82.0%
- Llama 3 8B: 68.4%

HumanEval (Codificación):
- GPT-4: 67.0%
- Llama 3 70B: 62.5%
- Llama 3 8B: 45.8%

Ejecución local

Ollama

# Instalar Ollama
curl -fsSL https://ollama.ai/install.sh | sh

# Ejecutar Llama 3 8B
ollama run llama3:8b

# Modo de diálogo
>>> What is the capital of France?
The capital of France is Paris.

Python (transformers)

from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain quantum computing simply."}
]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

outputs = model.generate(
    input_ids,
    max_new_tokens=256,
    do_sample=True,
    temperature=0.7
)

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

llama.cpp (Implementación C++)

# Compilar llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# Descargar modelo GGUF
# Obtener versión quantizada de Hugging Face

# Ejecutar
./main -m models/llama-3-8b-instruct.Q4_K_M.gguf \
  -p "What is machine learning?" \
  -n 256

Uso como servicio API

vLLM

from vllm import LLM, SamplingParams

llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct")
sampling_params = SamplingParams(temperature=0.7, max_tokens=256)

prompts = [
    "Explain the theory of relativity",
    "Write a Python function to sort a list"
]

outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    print(output.outputs[0].text)

API compatible con OpenAI (Ollama)

# Iniciar servidor
ollama serve

# Endpoint compatible con OpenAI
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3:8b",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'
// Uso desde JavaScript/TypeScript
import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'http://localhost:11434/v1',
  apiKey: 'ollama'  // Ollama no requiere autenticación
});

const response = await openai.chat.completions.create({
  model: 'llama3:8b',
  messages: [{ role: 'user', content: 'Hello!' }]
});

Fine-tuning

Usando LoRA

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Meta-Llama-3-8B",
    torch_dtype=torch.bfloat16
)

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05
)

model = get_peft_model(model, lora_config)
# Ejecutar entrenamiento...

Casos de uso

Aplicaciones RAG

from langchain_community.llms import Ollama
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

llm = Ollama(model="llama3:8b")
vectorstore = Chroma(...)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

result = qa_chain.invoke("What is our return policy?")

Generación de código

prompt = """
Write a Python function that:
1. Takes a list of numbers
2. Filters out negative numbers
3. Returns the sum of remaining numbers

Include docstring and type hints.
"""

response = llm.generate(prompt)

Requisitos de hardware

ModeloVRAMRAM
8B (FP16)16GB32GB
8B (Q4)6GB16GB
70B (FP16)140GB256GB
70B (Q4)40GB64GB

Resumen

Llama 3 es un poderoso modelo de lenguaje de gran escala de código abierto con uso comercial permitido. Permite uso flexible incluyendo ejecución local, fine-tuning y conversión a servicio API. Es ideal para aplicaciones que priorizan la privacidad o casos de uso que requieren personalización.

← Volver a la lista