Code Specialist 7B es un LLM fine-tuned sobre Mistral-7B-Instruct-v0.3 con enfoque en generación y explicación de código en Python y SQL, orientado a tareas de analisis y ciencia de datos.
El proyecto incluye además una aplicación de chat local en Streamlit para interactuar con el modelo y el desarrollo del modelo se puede ver en este Notebook
- Base: mistralai/Mistral-7B-Instruct-v0.3
- Técnica: SFT con QLoRA (Quantized Low-Rank Adaptation).
- Tamaño: 7B parámetros
- Dataset final: ~79,000 ejemplos filtrados de:
Los ejemplos fueron filtrados y curados para priorizar instrucciones de programación en Python y SQL.
| Aspecto | Detalle |
|---|---|
| Método | SFT con QLoRA |
| Frameworks | transformers, trl, peft, bitsandbytes |
| Hardware | GPU 12 GB VRAM (cuantización en 4-bit para entrenamiento) |
| Parámetro | Valor |
|---|---|
per_device_train_batch_size |
2 |
gradient_accumulation_steps |
4 |
learning_rate |
0.0002 |
num_train_epochs |
1 |
max_seq_length |
1024 |
- Crear un modelo especializado en generación de código capaz de ejecutarse en hardware de consumo (GPU de 12 GB VRAM).
- Se configuró un entorno con PyTorch, Transformers, TRL, PEFT y BitsAndBytes, resolviendo incompatibilidades entre versiones y CUDA.
- Se seleccionaron y filtraron datasets de instrucciones de código, garantizando calidad y relevancia.
- El dataset final se formateó al estilo Alpaca/Mistral con la plantilla
[INST] ... [/INST] respuesta.
- Se aplicó QLoRA con el modelo cargado en 4-bit.
- Se entrenó usando SFTTrainer de la librería
trl. - Se ajustaron parámetros de entrenamiento para balancear eficiencia y estabilidad en GPU de 12 GB.
- No se utilizó
HumanEvalpor incompatibilidad en Windows. - Se implementó un benchmark local con 25 tareas de programación.
- El modelo fue comparado frente al modelo base para evaluar mejoras en formato, precisión y claridad de código.
El modelo está disponible en Hugging Face Hub: Code-Specialist-7b y puede cargarse directamente para inferencia:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from huggingface_hub import login
# HF Login Token
login(token="HF_TOKEN_AQUI")
# Repositorio en Hugging Face
model_id = "Ricardouchub/code-specialist-7b"
# Configuración en 4-bit (opcional, para GPUs con VRAM limitada)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# Cargar modelo y tokenizador
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
quantization_config=bnb_config
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Ejemplo de inferencia
prompt = "[INST] Implementa una función en Python para calcular el factorial de un número usando recursividad. [/INST]"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.2, top_p=0.9)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))Requisitos de hardware
- GPU NVIDIA con 12 GB de VRAM o mas para cuantizacion 4-bit (probado con RTX 3060).
- GPU con 8 GB puede ejecutar el modelo en 8-bit o 16-bit con menor contexto.
Instala uv
Instala PyTorch según hardware:
- GPU CUDA 12.1:
uv pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 torchaudio==2.1.2+cu121 --index-url https://download.pytorch.org/whl/cu121
Sincroniza el resto de dependencias descritas en pyproject.toml:
uv syncuv sync crea un entorno virtual (por defecto .venv) y resuelve transformers, accelerate, streamlit, peft, trl, sentencepiece, safetensors y la carga condicional de bitsandbytes.
- Descarga desde Github:
git clone https://github.com/Ricardouchub/code-specialist-7b.git. - Para usar solo los adaptadores LoRA: Ubica la carpeta lora-adapters y combina con el modelo base
mistralai/Mistral-7B-Instruct-v0.3.
uv run streamlit app.py- Configura la ruta del modelo en la barra lateral si difiere del valor por defecto.
- Elige el modo de cuantizacion (4-bit/8-bit/16-bit) segun la VRAM disponible.
- Personaliza el
system prompt, presets o parametros de generacion antes de enviar mensajes.