problema installazione in locale

#1
by sanbaldo - opened

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")

Sign up or log in to comment