Atomic-Code-1.1 / README.md
Korzadi's picture
docs: corregir instrucciones de inferencia y rutas con subfolder='consolidated'
9aab28e verified
|
Raw History Blame Contribute Delete
6.91 kB
---
language:
- es
- en
license: apache-2.0
library_name: transformers
tags:
- code
- code-generation
- qwen2
- lora
- gguf
base_model: Qwen/Qwen2.5-Coder-7B-Instruct
model_creator: Korzadi
model_name: Atomic Code 1.1
pipeline_tag: text-generation
---
# Atomic Code 1.1
**Atomic Code 1.1** es la distribución oficial, completa e independiente de la familia de modelos **Atomic**, entrenada por **Korzadi**. Este repositorio unifica la experiencia de despliegue ofreciendo los pesos completos fusionados de alta precisión, el adaptador LoRA original para desarrollo flexible y versiones optimizadas en formato GGUF.
## 🪐 Estructura de la Distribución
Para garantizar la máxima flexibilidad sin colisiones en el ecosistema Hugging Face, el repositorio se organiza de la siguiente manera:
1. **Pesos Consolidados (Modelo Completo):** Ubicados bajo la carpeta `consolidated/` en precisión `bfloat16`/`float16` nativa, listos para cargarse directamente en entornos de producción con `transformers`.
2. **Adaptador LoRA Original:** Ubicado en la raíz (`adapter_model.safetensors` y `adapter_config.json`) para cargas dinámicas usando PEFT con Unsloth sobre `Qwen2.5-Coder-7B-Instruct`.
3. **Cuantizaciones GGUF:** Disponibles en la carpeta `gguf/` para inferencia local rápida en CPU/Edge usando `llama.cpp` u `Ollama`.
---
## 📊 Ficha Técnica y Especificaciones
| Parámetro | Valor de Especificación |
| :--- | :--- |
| **Creador / Autor** | Korzadi |
| **Arquitectura Base** | Qwen2 (`Qwen2ForCausalLM`) |
| **Modelo Base de Origen** | Qwen2.5-Coder-7B-Instruct |
| **Tamaño de Parámetros** | ~7.61 Billones |
| **Dimensión Oculta (Hidden Size)** | 3584 |
| **Tamaño de Vocabulario** | 152064 |
| **Longitud de Contexto** | 32,768 tokens (ampliable) |
| **Formato de Pesos** | Safetensors |
| **Dtype de Inferencia Recomendado** | `bfloat16` o `float16` |
---
## 🛠️ Guía de Uso e Inferencia (Transformers)
### 1. Cargar el Modelo Completo Consolidado
Para ejecutar la versión de pesos consolidados e independientes directamente desde la subcarpeta dedicada:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Korzadi/Atomic-Code-1.1"
# Carga del tokenizador y el modelo consolidado
tokenizer = AutoTokenizer.from_pretrained(model_id, subfolder="consolidated")
model = AutoModelForCausalLM.from_pretrained(
model_id,
subfolder="consolidated",
torch_dtype=torch.bfloat16,
device_map="auto"
)
# Prompt de ejemplo
prompt = "Escribe una función en Python para validar una dirección IP v4 y v6."
messages = [
{"role": "system", "content": "Eres Atomic Code, un asistente de programación experto de nivel Senior."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
```
### 2. Cargar como Adaptador PEFT / LoRA
Si deseas utilizar el adaptador ligero cargándolo dinámicamente sobre la base original:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
base_model_id = "Qwen/Qwen2.5-Coder-7B-Instruct"
adapter_id = "Korzadi/Atomic-Code-1.1"
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
base_model = AutoModelForCausalLM.from_pretrained(base_model_id, torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(base_model, adapter_id)
```
---
## 🎛️ Configuración para Ollama y Llama.cpp
Para ejecutar el modelo localmente utilizando el archivo unificado `atomic-code-Q4_K_M.gguf` provisto en el repositorio, crea un archivo `Modelfile`:
```dockerfile
FROM ./gguf/atomic-code-Q4_K_M.gguf
# Configurar parámetros del sistema
PARAMETER temperature 0.2
PARAMETER top_p 0.95
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
TEMPLATE """<|im_start|>system
Eres Atomic Code, un asistente de programación altamente calificado creado por Korzadi.<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""
```
Ejecuta en tu terminal:
```bash
ollama create atomic-code-1.1 -f Modelfile
ollama run atomic-code-1.1
```
---
## 📝 Historial de Versiones e Integridad
- **v1.0 (Free):** Publicación inicial de distribución.
- **v1.1 (Active Adapter):** Ajuste fino de precisión entrenado mediante QLoRA y Unsloth enfocado en el dominio de desarrollo de software.
- **v1.2 (Consolidated):** Fusión completa de pesos consolidados en topología FP16/BF16 para garantizar compatibilidad nativa sin capas de adaptación adicionales.
## 📄 Licencia
Este modelo se distribuye bajo la licencia **Apache 2.0**.
---
*Ficha oficial generada para el ecosistema Korzadi / Atomic.*
## 🚀 Cómo usar Atomic Code 1.1
### Opción 1: Carga del Checkpoint Completo Consolidado (BF16)
Para cargar la versión consolidada y ajustada del modelo completo (sin necesidad de cargar adaptadores por separado), debes apuntar explícitamente a la subcarpeta `consolidated`:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Korzadi/Atomic-Code-1.1"
# Carga de Tokenizer y Modelo especificando subfolder
tokenizer = AutoTokenizer.from_pretrained(model_id, subfolder="consolidated")
model = AutoModelForCausalLM.from_pretrained(
model_id,
subfolder="consolidated",
torch_dtype=torch.bfloat16,
device_map="auto"
)
# Inferencia
messages = [
{"role": "system", "content": "You are Atomic Code, an advanced coding assistant."},
{"role": "user", "content": "Escribe una función de ordenamiento rápido en Python."}
]
formatted_chat = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(formatted_chat, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512, do_sample=True, temperature=0.7)
print(tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
```
### Opción 2: Carga mediante Adaptador LoRA (PEFT)
Si prefieres utilizar el adaptador LoRA sobre el modelo base original de Qwen:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
base_model_id = "Qwen/Qwen2.5-Coder-7B-Instruct"
adapter_id = "Korzadi/Atomic-Code-1.1"
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_id,
torch_dtype=torch.bfloat16,
device_map="auto"
)
model = PeftModel.from_pretrained(base_model, adapter_id)
```
### Opción 3: Inferencia local con GGUF (llama.cpp)
El modelo de cuantización intermedia recomendado está disponible en:
`gguf/atomic-code-Q4_K_M.gguf`