|
--- |
|
license: mit |
|
language: fr |
|
thumbnail: null |
|
--- |
|
|
|
# Vigogne: French Instruct LLaMA |
|
|
|
This repo contains a low-rank adapter for LLaMA-7b fit on the [Stanford Alpaca](https://github.com/tatsu-lab/stanford_alpaca) dataset. |
|
|
|
Instructions for running it can be found at https://github.com/tloen/alpaca-lora. |
|
|
|
|
|
## Usage |
|
|
|
```python |
|
import torch |
|
from peft import PeftModel |
|
from transformers import GenerationConfig, LlamaForCausalLM, LlamaTokenizer |
|
|
|
PROMPT_DICT = { |
|
"prompt_input": ( |
|
"Ci-dessous se trouve une instruction qui décrit une tâche, associée à une entrée qui fournit un contexte supplémentaire. Écrivez une réponse qui complète correctement la demande.\n\n" |
|
"### Instruction:\n{instruction}\n\n### Entrée:\n{input}\n\n### Réponse:\n" |
|
), |
|
"prompt_no_input": ( |
|
"Ci-dessous se trouve une instruction qui décrit une tâche. Écrivez une réponse qui complète correctement la demande.\n\n" |
|
"### Instruction:\n{instruction}\n\n### Réponse:\n" |
|
), |
|
} |
|
|
|
|
|
device = "cuda" |
|
|
|
tokenizer = LlamaTokenizer.from_pretrained("decapoda-research/llama-7b-hf") |
|
model = LlamaForCausalLM.from_pretrained( |
|
"decapoda-research/llama-7b-hf", |
|
load_in_8bit=True, |
|
torch_dtype=torch.float16, |
|
device_map="auto", |
|
) |
|
model = PeftModel.from_pretrained( |
|
model, |
|
"bofenghuang/vigogne-lora-7b", |
|
torch_dtype=torch.float16, |
|
) |
|
|
|
|
|
def instruct( |
|
instruction, |
|
input=None, |
|
temperature=0.1, |
|
top_p=1.0, |
|
max_new_tokens=512, |
|
**kwargs, |
|
): |
|
prompt = ( |
|
PROMPT_DICT["prompt_input"].format_map({"instruction": instruction, "input": input}) |
|
if input is not None |
|
else PROMPT_DICT["prompt_no_input"].format_map({"instruction": instruction}) |
|
) |
|
tokenized_inputs = tokenizer(prompt, return_tensors="pt") |
|
input_ids = tokenized_inputs["input_ids"].to(device) |
|
generation_config = GenerationConfig( |
|
temperature=temperature, |
|
top_p=top_p, |
|
**kwargs, |
|
) |
|
with torch.inference_mode(): |
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
generation_config=generation_config, |
|
return_dict_in_generate=True, |
|
output_scores=True, |
|
max_new_tokens=max_new_tokens, |
|
) |
|
s = generation_output.sequences[0] |
|
output = tokenizer.decode(s) |
|
return output.split("### Réponse:")[1].strip() |
|
|
|
# instruct |
|
instruct("Expliquer le théorème central limite.") |
|
# Le théorème central limite stipule que la loi de la moyenne des valeurs aléatoires d'une série de variables aléatoires est la loi normale. |
|
# Cela signifie que la moyenne des valeurs aléatoires d'une série de variables aléatoires tend vers la loi normale, indépendamment de la taille de la série. |
|
|
|
# instruct + input |
|
instruct( |
|
"Traduisez le texte suivant en français.", |
|
input="Caterpillars extract nutrients which are then converted into butterflies. People have extracted billions of nuggets of understanding and GPT-4 is humanity's butterfly.", |
|
) |
|
# Les papillons de nuit extraient des nutriments qui sont ensuite convertis en papillons. Les gens ont extrait des milliards de nuggets de compréhension et GPT-4 est la butterfly de l'humanité. |
|
``` |
|
|
|
|
|
## Todo |
|
- Add output examples |
|
- Open source github repo |
|
|