Update README.md
Browse files
README.md
CHANGED
|
@@ -63,98 +63,25 @@ ou du moins, nous ne sommes pas responsables des conséquences, si quelq'un est
|
|
| 63 |
exemple de code d'utilisation :
|
| 64 |
|
| 65 |
```
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
print(
|
| 84 |
-
|
| 85 |
-
# Chargement du tokenizer
|
| 86 |
-
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
| 87 |
-
tokenizer.pad_token = tokenizer.eos_token
|
| 88 |
-
|
| 89 |
-
# Chargement du modèle. Nous chargeons en float32 (par défaut) pour la compatibilité CPU.
|
| 90 |
-
# Nous mappons explicitement sur le CPU.
|
| 91 |
-
model = AutoModelForCausalLM.from_pretrained(
|
| 92 |
-
MODEL_NAME,
|
| 93 |
-
torch_dtype=torch.float32, # float32 est standard pour le CPU
|
| 94 |
-
device_map=DEVICE # Mappage explicite sur le CPU
|
| 95 |
-
).to(DEVICE) # Assurez-vous que le modèle final est sur CPU
|
| 96 |
-
|
| 97 |
-
# ==============================================================================
|
| 98 |
-
# 3. PRÉPARATION DE LA REQUÊTE ET GÉNÉRATION (Méthode manuelle)
|
| 99 |
-
# ==============================================================================
|
| 100 |
-
QUESTION = "Qui es-tu ? Présente toi"
|
| 101 |
-
prompt = f"### Instruction:\{QUESTION}\n\n### Response:\n"
|
| 102 |
-
|
| 103 |
-
print("\n--- Génération de la réponse (Manuelle) ---")
|
| 104 |
-
|
| 105 |
-
# Tokenization du prompt et placement sur l'appareil (CPU)
|
| 106 |
-
inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
|
| 107 |
-
|
| 108 |
-
# Génération
|
| 109 |
-
output_tokens = model.generate(
|
| 110 |
-
**inputs,
|
| 111 |
-
max_new_tokens=100,
|
| 112 |
-
do_sample=True,
|
| 113 |
-
temperature=0.7,
|
| 114 |
-
top_k=50,
|
| 115 |
-
eos_token_id=tokenizer.eos_token_id,
|
| 116 |
-
)
|
| 117 |
-
|
| 118 |
-
# Décodage
|
| 119 |
-
generated_text = tokenizer.decode(output_tokens[0], skip_special_tokens=True)
|
| 120 |
-
assistant_prefix = "\n\n### Response:\n"
|
| 121 |
-
if assistant_prefix in generated_text:
|
| 122 |
-
clean_response = generated_text.split(assistant_prefix)[-1].strip()
|
| 123 |
-
else:
|
| 124 |
-
clean_response = generated_text.replace(QUESTION, "").strip()
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
print(f"\n🧠 Réponse de {MODEL_NAME} (Manuelle) :\n")
|
| 128 |
-
print(clean_response)
|
| 129 |
-
print("\n-------------------------------")
|
| 130 |
-
|
| 131 |
-
# ==============================================================================
|
| 132 |
-
# 4. UTILISATION DE PIPELINE (CORRIGÉE et simplifiée pour CPU)
|
| 133 |
-
# ==============================================================================
|
| 134 |
-
print("\nTest rapide avec le pipeline (méthode simplifiée) :")
|
| 135 |
-
|
| 136 |
-
# Création du pipeline. Nous pouvons laisser le pipeline détecter le CPU
|
| 137 |
-
# ou forcer device=-1 pour le CPU (contrairement à la V1, ici nous n'avons pas utilisé
|
| 138 |
-
# device_map="auto" donc c'est plus sûr de le spécifier).
|
| 139 |
-
generator = pipeline(
|
| 140 |
-
"text-generation",
|
| 141 |
-
model=model,
|
| 142 |
-
tokenizer=tokenizer,
|
| 143 |
-
#device=-1 # -1 force l'utilisation du CPU # Removed this line
|
| 144 |
-
)
|
| 145 |
-
|
| 146 |
-
# Le pipeline utilise le format de chat par défaut pour les modèles de type 'Chat'
|
| 147 |
-
result = generator(
|
| 148 |
-
QUESTION,
|
| 149 |
-
max_new_tokens=100,
|
| 150 |
-
do_sample=True,
|
| 151 |
-
temperature=0.7
|
| 152 |
-
)
|
| 153 |
-
|
| 154 |
-
# Affichage du résultat nettoyé par le pipeline
|
| 155 |
-
print(f"\n🧠 Réponse de {MODEL_NAME} (Pipeline) :\n")
|
| 156 |
-
print(result[0]['generated_text'])
|
| 157 |
-
print("\n-------------------------------")
|
| 158 |
```
|
| 159 |
|
| 160 |
🎉 **Lam-3 est créatif** : Lam-3 peut inventer des mots et des synthaxes comme tenaire, c'est totalement normal, et est même une fonctionnalité. En tant que SLM il n'est pas conçu pour etre chatgpt.
|
|
|
|
| 63 |
exemple de code d'utilisation :
|
| 64 |
|
| 65 |
```
|
| 66 |
+
# Load model directly
|
| 67 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM
|
| 68 |
+
|
| 69 |
+
tokenizer = AutoTokenizer.from_pretrained("Clemylia/Lam-3")
|
| 70 |
+
model = AutoModelForCausalLM.from_pretrained("Clemylia/Lam-3")
|
| 71 |
+
messages = [
|
| 72 |
+
{"role": "user", "content": "Qui es-tu ?"},
|
| 73 |
+
]
|
| 74 |
+
inputs = tokenizer.apply_chat_template(
|
| 75 |
+
messages,
|
| 76 |
+
add_generation_prompt=True,
|
| 77 |
+
tokenize=True,
|
| 78 |
+
return_dict=True,
|
| 79 |
+
return_tensors="pt",
|
| 80 |
+
).to(model.device)
|
| 81 |
+
|
| 82 |
+
outputs = model.generate(**inputs, max_new_tokens=150, do_sample=True, temperature=0.7, repetition_penalty=1.2)
|
| 83 |
+
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:]))
|
| 84 |
+
print('fin')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
```
|
| 86 |
|
| 87 |
🎉 **Lam-3 est créatif** : Lam-3 peut inventer des mots et des synthaxes comme tenaire, c'est totalement normal, et est même une fonctionnalité. En tant que SLM il n'est pas conçu pour etre chatgpt.
|