File size: 4,608 Bytes
4d4738b | 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 | #!/usr/bin/env python3
"""
Script pour créer un modèle HuggingFace fonctionnel à partir de zéro
ou adapter un modèle existant
"""
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
AutoConfig,
GPT2LMHeadModel,
GPT2Tokenizer
)
import torch
import json
def create_basic_model():
"""Crée un modèle de base fonctionnel"""
# Configuration du modèle (petite taille pour test)
config = AutoConfig.from_pretrained("gpt2")
config.vocab_size = 50257
config.n_positions = 1024
config.n_ctx = 1024
config.n_embd = 768
config.n_layer = 12
config.n_head = 12
# Créer le modèle avec cette config
model = GPT2LMHeadModel(config)
# Utiliser le tokenizer GPT-2 standard
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
tokenizer.pad_token = tokenizer.eos_token
return model, tokenizer, config
def save_complete_model(model, tokenizer, config, save_path="./Tenro_V4.1_complete"):
"""Sauvegarde complète avec tous les fichiers requis"""
# Sauvegarder le modèle et tokenizer
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
# Créer generation_config.json
generation_config = {
"_from_model_config": True,
"bos_token_id": tokenizer.bos_token_id or tokenizer.eos_token_id,
"eos_token_id": tokenizer.eos_token_id,
"max_length": 1024,
"pad_token_id": tokenizer.pad_token_id or tokenizer.eos_token_id,
"do_sample": True,
"temperature": 0.7,
"top_p": 0.9,
"repetition_penalty": 1.1
}
with open(f"{save_path}/generation_config.json", "w") as f:
json.dump(generation_config, f, indent=2)
print(f"Modèle complet sauvegardé dans: {save_path}")
print("Fichiers créés:")
import os
for file in os.listdir(save_path):
size = os.path.getsize(f"{save_path}/{file}")
print(f" - {file}: {size/1024:.1f} KB")
def upload_to_huggingface(model, tokenizer, repo_name):
"""Upload vers HuggingFace Hub"""
try:
# Vous devez d'abord vous connecter avec: huggingface-cli login
model.push_to_hub(repo_name)
tokenizer.push_to_hub(repo_name)
print(f"Modèle uploadé vers: https://huggingface.co/{repo_name}")
except Exception as e:
print(f"Erreur upload: {e}")
print("Assurez-vous d'être connecté avec: huggingface-cli login")
def load_your_existing_data(file_path):
"""Charge vos données existantes si possible"""
try:
# Essayer de charger votre fichier Tenro_V4.1.1
if file_path.endswith('.json'):
with open(file_path, 'r') as f:
data = json.load(f)
return data
elif file_path.endswith('.bin'):
data = torch.load(file_path, map_location='cpu')
return data
else:
with open(file_path, 'r') as f:
content = f.read()
return content
except Exception as e:
print(f"Impossible de charger {file_path}: {e}")
return None
if __name__ == "__main__":
print("🚀 Création d'un modèle HuggingFace complet...")
# Étape 1: Créer le modèle de base
model, tokenizer, config = create_basic_model()
# Étape 2: Optionnel - charger vos données existantes
your_file = "Tenro_V4.1.1" # Remplacez par le chemin de votre fichier
existing_data = load_your_existing_data(your_file)
if existing_data:
print("✅ Données existantes chargées")
# Ici vous pourriez adapter le modèle avec vos données
# Étape 3: Sauvegarder complètement
save_complete_model(model, tokenizer, config)
# Étape 4: Test du modèle
print("\n🧪 Test du modèle:")
inputs = tokenizer("Hello, I am Tenro", return_tensors="pt")
with torch.no_grad():
outputs = model.generate(
inputs.input_ids,
max_length=50,
do_sample=True,
temperature=0.7,
pad_token_id=tokenizer.eos_token_id
)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"Texte généré: {generated_text}")
# Étape 5: Upload (optionnel)
upload_choice = input("\nVoulez-vous uploader vers HuggingFace? (y/n): ")
if upload_choice.lower() == 'y':
repo_name = input("Nom du repo (ex: votre_nom/Tenro_V4.1): ")
upload_to_huggingface(model, tokenizer, repo_name)
print("\n✅ Terminé! Vous avez maintenant un modèle complet et fonctionnel.") |