problema installazione in locale
ciao! ho provato ad installare in locale ma ho questo errore - qualche anima pia che puΓ² aiutare?
Manca il file tokenizer.json o un tokenizer_config.json corretto: la libreria transformers non sa quale classe caricare per interpretare il file bpe.model.
Manca il file genai_config.json: questo file Γ¨ obbligatorio se si vuole usare la libreria ad alte prestazioni di Microsoft (onnxruntime-genai), che Γ¨ lo standard per i modelli esportati nativamente in .onnx.
Il file config.json definisce architetture custom (decoder-only-transformer-gqa) senza includere il relativo codice Python nel repo.
Senza questi file, nΓ© transformers nΓ© onnxruntime-genai riescono ad autoconfigurarsi, crashando inevitabilmente prima di poter avviare la chat.
ce l'ho fatta con questo py:
import onnxruntime as ort
import sentencepiece as spm
import numpy as np
import sys
import io
import os
from huggingface_hub import snapshot_download
ββββββββββββββββββββββββββββββββββββββββββββββββββ
CONFIGURAZIONE β modifica questi percorsi se vuoi
usare una cartella locale giΓ scaricata in precedenza.
Lascia MODEL_DIR = None per scaricarlo automaticamente.
ββββββββββββββββββββββββββββββββββββββββββββββββββ
MODEL_DIR = None
HF_REPO = "egomnia/emma-5"
MAX_TOKENS = 200 # Numero massimo di token generati per risposta
ββββββββββββββββββββββββββββββββββββββββββββββββββ
SETUP
ββββββββββββββββββββββββββββββββββββββββββββββββββ
Forza UTF-8 nel terminale (necessario su Windows)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
Se non Γ¨ specificata una cartella locale, scarica il modello da Hugging Face
if MODEL_DIR is None:
local_dir = "./emma-5_local"
print(f"Scaricamento modello da Hugging Face ({HF_REPO}) in '{local_dir}'...")
MODEL_DIR = snapshot_download(repo_id=HF_REPO, local_dir=local_dir)
print("Download completato.\n")
BPE_MODEL = os.path.join(MODEL_DIR, "bpe.model")
ONNX_MODEL = os.path.join(MODEL_DIR, "emma5.onnx")
print("Inizializzazione tokenizer...")
sp = spm.SentencePieceProcessor(model_file=BPE_MODEL)
print("Caricamento modello ONNX in memoria...")
Per usare la GPU (se disponibile con CUDA), aggiungi 'CUDAExecutionProvider' prima di 'CPUExecutionProvider'
session = ort.InferenceSession(ONNX_MODEL, providers=["CPUExecutionProvider"])
print("\n" + "="*50)
print(" Emma-5 β Chat in italiano (Egomnia S.p.A.)")
print("="*50)
print(" Scrivi 'esci' o 'quit' per terminare.")
print("="*50 + "\n")
ββββββββββββββββββββββββββββββββββββββββββββββββββ
LOOP DI CHAT
ββββββββββββββββββββββββββββββββββββββββββββββββββ
while True:
try:
user_input = input("Tu: ").strip()
except (EOFError, KeyboardInterrupt):
print("\nUscita.")
break
if not user_input:
continue
if user_input.lower() in ["esci", "quit", "exit"]:
print("Arrivederci!")
break
# Formato Alpaca-style: il formato su cui Emma-5 Γ¨ stata fine-tuned con SFT
prompt = f"### Istruzione:\n{user_input}\n\n### Risposta:\n"
# Il token BOS (Begin of Sentence) ha id=2 per questo modello
input_ids = [2] + sp.encode(prompt)
print("Emma-5: ", end="", flush=True)
generated_tokens = []
printed_len = 0
for _ in range(MAX_TOKENS):
inputs = {"input_ids": np.array([input_ids], dtype=np.int64)}
logits = session.run(None, inputs)[0]
# Decodifica greedy: prende il token con probabilitΓ piΓΉ alta
next_token = int(np.argmax(logits[0, -1, :]))
# Il token EOS (End of Sentence) ha id=3
if next_token == 3:
break
input_ids.append(next_token)
generated_tokens.append(next_token)
# Decodifica dell'intera sequenza (necessario per gestire caratteri accentati multi-byte)
text_so_far = sp.decode(generated_tokens)
# Stampa solo il testo nuovo, saltando eventuali caratteri di rimpiazzo UTF-8 (U+FFFD)
if len(text_so_far) > printed_len and "\ufffd" not in text_so_far[printed_len:]:
new_chunk = text_so_far[printed_len:]
sys.stdout.write(new_chunk)
sys.stdout.flush()
printed_len = len(text_so_far)
print("\n")