
# Model Card for Model ID

(experimental, that's my first finetune)

This is a 4 bits PEFT QLORA fine tuning of Claire-7b-0.1 on 150 steps on a dataset adapted from tbboukhari/Alpaca_french_instruct.

The model is in 4bits

It takes less than 8 Go VRAM

[Try on Colab](https://colab.research.google.com/github/PhilSad/claire-instruct/blob/main/infer.ipynb)


[Training script](https://github.com/PhilSad/claire-instruct/blob/main/train.ipynb)

TODO: 
- [] Train on better dataset on more steps
- [] full precision

## Model Details

### Model Description

<!-- Provide a longer summary of what this model is. -->

This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.

- **Developed by:** Philippe Saade
- **Language(s) (NLP):** French
- **License:** [More Information Needed]
- **Finetuned from model:** OpenLLM-France/Claire-7B-0.1

### Model Sources [optional]

<!-- Provide the basic links for the model. -->

- **Repository:** https://github.com/PhilSad/claire-instruct
- **Paper [optional]:** [More Information Needed]
- **Demo [optional]:** [More Information Needed]



## How to Get Started with the Model

Use the code below to get started with the model.

```python
#!pip install transformers accelerate bitsandbytes

import transformers
import torch

model_name = "PhilSad/Claire-7b-0.1-instruct"

tokenizer = transformers.AutoTokenizer.from_pretrained("OpenLLM-France/Claire-7B-0.1")
model_instruct = transformers.AutoModelForCausalLM.from_pretrained(model_name,
    device_map="auto",
    torch_dtype=torch.bfloat16,
)

pipeline_instruct = transformers.pipeline("text-generation", model=model_instruct, tokenizer=tokenizer)
generation_kwargs = dict(
    num_return_sequences=1,                    # Number of variants to generate.
    return_full_text= False,                   # Do not include the prompt in the generated text.
    max_new_tokens=200,                        # Maximum length for the output text.
    do_sample=True, top_k=10, temperature=1.0, # Sampling parameters.
    pad_token_id=tokenizer.eos_token_id,       # Just to avoid a harmless warning.
)

prompt = """Ci-dessous se trouve une instruction qui décrit une tâche. Écrivez une réponse qui complète de manière appropriée la demande.

### Instruction :
Donne moi la recette pour faire un bon mojito

### Réponse :"""

prompt = """Ci-dessous se trouve une instruction qui décrit une tâche. Écrivez une réponse qui complète de manière appropriée la demande.

### Instruction :
Détermine le sentiment associé au texte parmis positif, négatif, neutre

### Entrée
J'apprécie les fruits au sirop

### Réponse :"""


completions = pipeline_instruct(prompt, **generation_kwargs)
for completion in completions:
    print(prompt + " […]" + completion['generated_text'])
```
<details>
  
<summary>Output mojito claire instruct (click)</summary>
Le mojito est un cocktail alcoolisé originaire des Antilles, et c'est maintenant l'un des cocktails les plus appréciés. Les ingrédients du mojito comprennent du citron vert, du sirop de sucre, de l'eau gazeuse, de la menthe fraîche et de l'épeautre. La première étape pour faire un bon cocktail Mojito est de couper le citron vert en fines rondelles avec un couteau. Vous devez ensuite frotter le bord de votre verre avec le citron vert, et le mettre avec vos autres ingrédients. Vous devez ensuite verser de l'eau gazeuse dans le verre, et le faire glisser. Pour finir, vous devez mettre les feuilles de menthe fraîche et les bâtonnets de sucre dans le verre, et servir la boisson à vos invités! Bonne chance et bonne dégustation!
</details>
<details>
<summary>Output mojito claire base (click)</summary>

  - Donnez moi la recette pour faire un bon mojito

  - Un bon mojito, euh je dirais qu'il faut un citron, des feuilles de menthe, de l'eau gazeuse euh et puis euh des glaçons. Et puis euh des glaçons.

  - Et qu'est-ce que qu'est-ce que...

  - Euh et puis euh...

  - Qu'est-ce que c'est qu'est-ce que...

  - Quoi?

  - Tu peux dire ce que tu penses. Qu'est-ce que tu penses? Est-ce que c'est une bonne recette?

  - Ouais.

  - Est-ce que c'est la bonne recette?

  - Oui je pense mais je sais qu'il y a pas beaucoup de gens qui la connaissent en fait.

  - D'accord.

  - Et puis euh...

  - Et est-ce que c'est une bonne recette?

  - Oui je pense. Je sais qu'il y a pas beaucoup de gens qui la connaissent en fait. Et puis euh...

  - Est-ce que c'est une bonne recette?

  - Oui je pense mais je sais qu'il y a pas beaucoup de gens qui la connaissent en fait.

  - Oui.

  - Et puis e
</details>

<details>

<summary>output sentiment claire instruct (click)</summary>
### Instruction :
Détermine le sentiment associé au texte parmis positif, négatif, neutre

### Entrée
J'apprécie les fruits au sirop

### Réponse : […]
Positif
  
</details>
<details>
<summary>output sentiment claire base (click)</summary>
### Instruction :
Détermine le sentiment associé au texte parmis positif, négatif, neutre

### Entrée
J'apprécie les fruits au sirop

### Réponse : […]
-positive -neutre -negative
  
</details>


## Training Details


### Training Procedure 

<!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
I used this [guide](https://wandb.ai/capecape/alpaca_ft/reports/How-to-Fine-tune-an-LLM-Part-3-The-HuggingFace-Trainer--Vmlldzo1OTEyNjMy)

[Training script](https://github.com/PhilSad/claire-instruct/blob/main/train.ipynb)

#### Training Hyperparameters

- **Training regime:**

```
4 bits

per_device_train_batch_size = 4 #4
gradient_accumulation_steps = 4
optim = "paged_adamw_32bit"
learning_rate = 2e-4
max_grad_norm = 0.3
max_steps = 300 #100 #500
warmup_ratio = 0.03
lr_scheduler_type = "cosine"


lora_alpha = 32 #16
lora_dropout = 0.05 #0.1
lora_rank = 32 #64

peft_config = LoraConfig(
    lora_alpha=lora_alpha,
    lora_dropout=lora_dropout,
    r=lora_rank,
    bias="none",
    task_type="CAUSAL_LM",
    target_modules=[
        "query_key_value",
        "dense",
        "dense_h_to_4h",
        "dense_4h_to_h",
    ]
)
```






{"library_name": "transformers", "datasets": ["PhilSad/Alpaca_french_instruct_sft"]}
transformers safetensors falcon text-generation dataset:PhilSad/Alpaca_french_instruct_sft autotrain_compatible endpoints_compatible text-generation-inference 8-bit region:us