Bitnet-LLama3-8B-Now2B 🚀
Este modelo es una variante optimizada del Llama3 utilizando la arquitectura BitNet, lo que reduce los pesos a los valores -1
, 0
, y 1
para mejorar la eficiencia en el cómputo sin perder precisión.
Modelo Base 🦙
- Modelo Original: Meta-Llama3-8B
- Parámetros Reducidos: 225M
Arquitectura 🔧
El modelo transforma las capas lineales de Llama3 en capas BitLinear, aprovechando las siguientes técnicas de cuantización:
- Cuantización de activaciones: Escala a ±127
- Cuantización de pesos: Escala a ±1
Especificaciones Técnicas 📋
- Dimensiones: 768
- Capas: 6
- Contexto: 256 tokens
- Tamaño intermedio: 1024
- Número de cabezas de atención: 6
Dataset 📚
El modelo fue entrenado usando el dataset Cosmopedia-100k-pretrain, que contiene una variedad de datos de texto.
Entrenamiento ⚙️
El modelo fue entrenado con la siguiente configuración:
- Lote: 16
- Tasa de aprendizaje: 1.5e-4
- Épocas: 2
- Acumulación de gradientes: 2 pasos
- Decaimiento de pesos: 0.01
- Precisión Mixta: FP16
Monitoreo 📊
El proceso de entrenamiento fue monitoreado usando Weights & Biases.
Uso del Modelo 💻
Para usar este modelo, puedes cargarlo desde Hugging Face con el siguiente código:
import torch
import wandb
import logging
import coloredlogs
from torch import nn
from datasets import load_dataset
from huggingface_hub import login
from huggingface_hub import create_repo, HfApi
from transformers import (AutoTokenizer, AutoConfig, LlamaForCausalLM, DataCollatorForLanguageModeling, Trainer, TrainingArguments)
from utils.utils import count_parameters
# Configuración de logging
coloredlogs.install(level='INFO', fmt='%(asctime)s - %(levelname)s - %(message)s', logger=logging.getLogger())
logger = logging.getLogger(__name__)
# Iniciar sesión en Hugging Face y Weights & Biases
wandb.login(key="TU_WANDB_TOKEN")
login(token="TU_HF_TOKEN")
# Cargar el dataset y el tokenizer
data = load_dataset("abideen/Cosmopedia-100k-pretrain")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
# Configuración del modelo
config = AutoConfig.from_pretrained(
"meta-llama/Meta-Llama-3-8B",
vocab_size=len(tokenizer),
n_ctx=256,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id,
hidden_size=768,
num_attention_heads=6,
num_hidden_layers=6,
intermediate_size=1024,
)
# Crear el modelo Llama y convertirlo a BitNet
model = LlamaForCausalLM(config)
convert_to_bitnet(model, copy_weights=False)
# Configuración del entrenamiento
args = TrainingArguments(
output_dir="./Bitnet-Nous-Llama3-225M",
per_device_train_batch_size=16,
logging_steps=100,
gradient_accumulation_steps=2,
num_train_epochs=2,
weight_decay=0.01,
warmup_steps=10,
learning_rate=1.5e-4,
fp16=True,
report_to="wandb",
)
# Inicializar el entrenador
trainer = Trainer(
model=model,
tokenizer=tokenizer,
args=args,
train_dataset=data["train"],
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)
# Iniciar el entrenamiento
trainer.train()
Contribuciones 🛠️
Este modelo forma parte de un experimento para optimizar arquitecturas mediante BitNet. Si tienes alguna mejora o sugerencia, ¡no dudes en contribuir! 😊
Si tienes preguntas, puedes contactarme en ejbejaranos@gmail.com.
- Downloads last month
- 2
Model tree for ejbejaranos/Bitnet-LLama3-8B-Now2B
Base model
meta-llama/Llama-3.1-8B