File size: 6,436 Bytes
77abb9a
 
de9eac3
 
1b07faa
317ff2b
 
 
 
 
 
77abb9a
 
 
 
b24daeb
de9eac3
 
b24daeb
de9eac3
b24daeb
e79783d
 
 
 
b24daeb
de9eac3
77abb9a
663add7
 
 
77abb9a
 
 
 
 
 
 
 
 
de9eac3
 
77abb9a
de9eac3
77abb9a
 
 
 
 
de9eac3
77abb9a
 
 
 
 
 
 
 
 
de9eac3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e7db63f
 
 
 
 
 
 
 
 
 
 
 
de9eac3
 
 
 
 
b24daeb
 
 
de9eac3
 
b24daeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
de9eac3
77abb9a
b24daeb
 
 
 
 
 
 
 
 
 
 
 
 
e7db63f
b24daeb
 
 
 
 
 
 
 
 
 
 
77abb9a
 
de9eac3
77abb9a
 
 
 
 
de9eac3
77abb9a
de9eac3
77abb9a
 
 
e7db63f
 
 
de9eac3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e7db63f
77abb9a
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
---
library_name: transformers
datasets:
- PhilSad/Alpaca_french_instruct_sft
base_model: OpenLLM-France/Claire-7B-0.1
license: cc-by-nc-sa-4.0
pipeline_tag: text-generation
language:
  - fr
tags:
  - finetuned
---

# 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",
    ]
)
```