--- license: apache-2.0 datasets: - abideen/Cosmopedia-100k-pretrain language: - en base_model: - meta-llama/Llama-3.1-8B tags: - Bitnet - quantization - llama --- # 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](https://huggingface.co/meta-llama/Meta-Llama-3-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](https://huggingface.co/datasets/abideen/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: ```python 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.