
# CRIA v1.3

💡 [Article](https://walterteng.com/cria) |
💻 [Github](https://github.com/davzoku/cria) |
📔 Colab [1](https://colab.research.google.com/drive/1rYTs3qWJerrYwihf1j0f00cnzzcpAfYe),[2](https://colab.research.google.com/drive/1Wjs2I1VHjs6zT_GE42iEXsLtYh6VqiJU)

## What is CRIA?

> krē-ə plural crias. : a baby llama, alpaca, vicuña, or guanaco.

<p align="center">
  <img src="https://raw.githubusercontent.com/davzoku/cria/main/assets/icon-512x512.png" width="300" height="300" alt="Cria Logo"> <br>
  <i>or what ChatGPT suggests, <b>"Crafting a Rapid prototype of an Intelligent llm App using open source resources"</b>.</i>
</p>

The initial objective of the CRIA project is to develop a comprehensive end-to-end chatbot system, starting from the instruction-tuning of a large language model and extending to its deployment on the web using frameworks such as Next.js.

Specifically, we have fine-tuned the `llama-2-7b-chat-hf` model with QLoRA (4-bit precision) using the [mlabonne/CodeLlama-2-20k](https://huggingface.co/datasets/mlabonne/CodeLlama-2-20k) dataset. This fine-tuned model serves as the backbone for the [CRIA chat](https://chat.walterteng.com) platform.

## 📦 Model Release

CRIA v1.3 comes with several variants.

- [davzoku/cria-llama2-7b-v1.3](https://huggingface.co/davzoku/cria-llama2-7b-v1.3): Merged Model
- [davzoku/cria-llama2-7b-v1.3-GGML](https://huggingface.co/davzoku/cria-llama2-7b-v1.3-GGML): Quantized Merged Model
- [davzoku/cria-llama2-7b-v1.3_peft](https://huggingface.co/davzoku/cria-llama2-7b-v1.3_peft): PEFT adapter
- [davzoku/cria-llama2-7b-v1.3-GGUF](https://huggingface.co/davzoku/cria-llama2-7b-v1.3-GGUF): GGUF Format
  - converted from ggml vq4_0 using `python3 convert-llama-ggml-to-gguf.py -i ../text-generation-webui/models/cria/cria-llama2-7b-v1.3.ggmlv3.q4_0.bin -o cria-llama2-7b-v1.3.gguf`


This model is converted from the q4_0 GGML version of CRIA v1.3 using the [llama.cpp's convert-llama-ggml-to-gguf.py](https://github.com/ggerganov/llama.cpp/commit/f23c0359a32871947169a044eb1dc4dbffd0f405#diff-ca59e5f600b44e9c3cdfed1ffd04677524dfd4c2f43d8b4bb19fdb013e277871) script

## 🔧 Training

It was trained on a Google Colab notebook with a T4 GPU and high RAM.

### Training procedure

The following `bitsandbytes` quantization config was used during training:

- load_in_8bit: False
- load_in_4bit: True
- llm_int8_threshold: 6.0
- llm_int8_skip_modules: None
- llm_int8_enable_fp32_cpu_offload: False
- llm_int8_has_fp16_weight: False
- bnb_4bit_quant_type: nf4
- bnb_4bit_use_double_quant: False
- bnb_4bit_compute_dtype: float16

### Framework versions

- PEFT 0.4.0

## 💻 Usage

```python
# pip install transformers accelerate

from transformers import AutoTokenizer
import transformers
import torch

model = "davzoku/cria-llama2-7b-v1.3"
prompt = "What is a cria?"

tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
    "text-generation",
    model=model,
    torch_dtype=torch.float16,
    device_map="auto",
)

sequences = pipeline(
    f'<s>[INST] {prompt} [/INST]',
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id,
    max_length=200,
)
for seq in sequences:
    print(f"Result: {seq['generated_text']}")
```

## References

We'd like to thank:

- [mlabonne](https://huggingface.co/mlabonne) for his article and resources on implementation of instruction tuning
- [TheBloke](https://huggingface.co/TheBloke) for his script for LLM quantization.

{"language": "en", "license": "llama2", "tags": ["llama-2"], "datasets": ["mlabonne/CodeLlama-2-20k"], "inference": false, "model_type": "llama", "pipeline_tag": "text-generation"}
transformers pytorch gguf llama text-generation llama-2 en dataset:mlabonne/CodeLlama-2-20k license:llama2 autotrain_compatible text-generation-inference region:us