Suport Universal pentru Modele Noi prin Auto-Registrare Dinamică
1. Problema: Limitări la Modele Noi
heretic este un instrument extrem de puternic, dar suportul pentru modele a fost limitat la cele cu configurații recunoscute de AutoModelForCausalLM. La încercarea de a încărca modele noi, precum zai-org/GLM-4.6V-Flash, apărea următoarea eroare: Unrecognized configuration class <class 'transformers.models.glm4v.configuration_glm4v.Glm4vConfig'> for this kind of AutoModel: AutoModelForCausalLM.Aceasta facea ca heretic să nu poată fi folosit pentru cele mai recente modele, limitându-i utilitatea și forțând utilizatorii să modifice codul sursă pentru fiecare nouă arhitectură.
2. Cauza Radacinală: Mapare Statică în transformers
Clasa AutoModelForCausalLM folosește o mapare internă, statică, între clasele de configurație și clasele de model. Când un model nou (ex: GLM-4.6V) este lansat, clasa sa de configurație (Glm4vConfig) și clasa sa de model (Glm4vMoeForConditionalGeneration) nu sunt încă în această listă statică în versiunile mai vechi ale transformers. Codul original heretic se baza pe această mapare, ducând la eșec.3. Soluția Propusă: Mecanism de Auto-Descoperire și Înregistrare
Soluția este de a înlocui logica de încărcare statică cu un mecanism dinamic și universal. Acesta inspectează modelul la momentul încărcării și înregistrează automat clasele necesare cu transformers.Cum funcționează:
- Încearcă Metoda Standard: Încearcă mai întâi AutoModelForCausalLM.from_pretrained().
- Detectează Eșecul: Dacă eșuează cu eroarea specifică Unrecognized configuration class, mecanismul de patch se activează.
- Inspectează Configurația: Folosește AutoConfig.from_pretrained() pentru a citi fișierul config.json al modelului.
- Extrage Arhitectura: Găsește numele clasei de model din câmpul config.architectures (ex: ["Glm4vMoeForConditionalGeneration"]).
- Import Dinamic: Importă clasa de model și configurația direct din fișierele modelului (modeling_glm4v.py, configuration_glm4v.py).
- Înregistrează Clasele: Folosește AutoModelForCausalLM.register(config_class, model_class) pentru a le adăuga la maparea internă a transformers.
- Reîncearcă Încărcarea: Reapelează AutoModelForCausalLM.from_pretrained(), care acum reușește deoarece clasa este recunoscută.
4. Modificări Cheie în model.py
- Import AutoConfig: from transformers import AutoConfig
- Adăugarea metodei _patch_new_model_support(): O nouă funcție care conține toată logica de auto-descoperire.
- Modificarea __init__: Apelarea metodei de patch la începutul inițializării.
- Modificarea reload_model(): Apelarea metodei de patch și la reîncărcarea modelului.
- Dependența Critică: Actualizarea transformers la o versiune recentă (ex: transformers>=5.0.0rc0), deoarece mecanismul de import dinamic se bazează pe structura modulelor din versiunile noi.
5. Beneficii
- Universalitate: Acum heretic poate funcționa cu oricare model (curent sau viitor) care respectă formatul standard transformers, fără a mai fi nevoie de modificări manuale.
- Future-Proof: Nu mai este necesar să se "vâneze" după fiecare nouă lansare de model. Suportul este automat.
- Curățenie: Soluția este elegantă și ne-invazivă. Păstrează logica originală AutoModelForCausalLM.from_pretrained și doar adaugă un pas de pre-procesare atunci când este necesar.
- Compatibilitate Retroactivă: Nu strică suportul pentru modelele existente (Llama, Mistral etc.), deoarece patch-ul se activează doar la eșecul metodei standard.
6. Testare și Validare
Soluția a fost testată și validată cu succes pe modelul zai-org/GLM-4.6V-Flash pe un sistem cu NVIDIA RTX 4090.- Modelul a fost încărcat cu succes: Loading checkpoint shards: 100%... Ok
- Straturile și componentele au fost identificate: * Transformer model with 40 layers, * Abliterable components: attn.o_proj, mlp.down_proj
- Procesul de abliteration a fost finalizat: Utilizatorul a confirmat că întregul proces s-a derulat fără erori, demonstrând funcționalitate deplină.
7. Concluzie și Cerere
Această modificare reprezintă o îmbunătățire semnificativă a funcționalității de bază a heretic, transformându-l dintr-un instrument dependent de anumite modele într-o soluție cu adevărat universală.Vezi modelul necenzurat aici:
AiAsistent/GLM-4.6V-Flash-heretic · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
huggingface.co