Převod a obnova ruGPT-3 XL pro moderní frameworky
Vývojáři se potkali s problémem spuštění zastaralé jazykové modelu ai-forever/rugpt3xl (1,3 miliardy parametrů) z roku 2021. Model, který byl trénován od nuly na ruském korpusu jako modifikace GPT-2, je uložen ve formátu Megatron-LM checkpointu a vyžaduje PyTorch 1.7 a transformers 3.5. Převod do formátu HuggingFace umožňuje použití s moderními nástroji pro inference i fine-tuning.
Proces zahrnuje extrakci vah z mp_rank_00_model_states.pt, mapování na strukturu GPT2Model a vytvoření vlastních tříd pro transformers.
Struktura vah: Megatron-LM vs HuggingFace
Původní váhy používají spojenou QKV-projekci [6144, 2048], kterou je třeba rozdělit na samostatné Q, K, V o rozměrech [2048, 2048]. Kompletní mapování:
| Megatron-LM | HuggingFace |
|-------------|-------------|
| word_embeddings.weight | model.embed_tokens.weight |
| position_embeddings.weight | model.embed_positions.weight |
| transformer.layers.{i}.input_layernorm. | model.layers.{i}.input_layernorm. |
| transformer.layers.{i}.attention.query_key_value.weight | model.layers.{i}.self_attn.{q,k,v}_proj.weight |
| transformer.layers.{i}.attention.query_key_value.bias | model.layers.{i}.self_attn.{q,k,v}_proj.bias |
| transformer.layers.{i}.attention.dense. | model.layers.{i}.self_attn.o_proj. |
| transformer.layers.{i}.post_attention_layernorm. | model.layers.{i}.post_attention_layernorm. |
| transformer.layers.{i}.mlp.dense_h_to_4h. | model.layers.{i}.mlp.up_proj. |
| transformer.layers.{i}.mlp.dense_4h_to_h. | model.layers.{i}.mlp.down_proj. |
| transformer.final_layernorm. | model.norm. |
| - | lm_head.weight (kopie embed_tokens) |
Skript convert.py převede checkpoint do safetensors, kompatibilních s transformers.
Vlastní třídy modelu
Vytvořeny nové třídy bez závislostí na Megatron-LM a DeepSpeed:
- RuGPT3XLConfig: dědičnost od
PretrainedConfigs parametry (vocab_size=50264, hidden_size=2048, num_layers=24). - RuGPT3XLAttention: multi-head attention s oddělenými Q/K/V a
DynamicCache. - RuGPT3XMLP: MLP blok (up_proj → GELU → down_proj).
- RuGPT3XLDecoderLayer: dekódovací vrstva (pre-LN → attention → post-LN → MLP).
- RuGPT3XLModel: embedingy + 24 vrstev + final LN.
- RuGPT3XLForCausalLM: s lm_head.
Klíčové vylepšení:
- Standardní
forward()pro SFTTrainer/LoRA. - KV-cache prostřednictvím
DynamicCache. - Gradient checkpointing.
- Spuštění na CPU/GPU pomocí
device_map="auto".
Model je dostupný jako evilfreelancer/ruGPT3XL na HuggingFace.
Výsledky testování
Generování na RTX 4090 (float16):
- Průměrná rychlost: 66,7 tokenů/s (batch_size=1).
- Udržuje kontext i při dlouhých promptech.
- Generuje skutečné texty (recepty, historie) přesně.
Benchmark MERA (celkový skóre 0,198):
- PARus (zdravý rozum): 0,500
- ruHateSpeech: 0,558
- BPS (kód/matematické úlohy): 0,528
- RWSD (úsudek): 0,488
- ruTiE (dialogy): 0,502
- ruMMLU: 0,252
Matematika a kód jsou blízko baseline, jak očekávané u base-modelu bez instruction tuning.
Převod do GGUF pro llama.cpp
Po převodu do HF formátu byl konvertér convert_hf_to_gguf.py upraven pro ruGPT-3 XL. Model běží v llama.cpp bez závislostí na Megatron, podporuje KV-cache a moderní inference.
To umožňuje fine-tuning na vlastních datasetech prostřednictvím LoRA nebo SFT, integraci do pipeline a testování na edge zařízeních.
Co je důležité
- Kompatibilita: model funguje s transformers ≥4.x, bez legacy stacku.
- Výkon: 66,7 t/s na RTX 4090, KV-cache pro generování.
- Školení: připravený na LoRA/SFTTrainer, gradient checkpointing.
- Benchmarky: silný v zdravém rozumu a hate speech (0,5+), slabý v matematice/kódu.
- Formáty: HF + GGUF pro širokou ekosystém.
— Editorial Team
Zatím žádné komentáře.