Zurück zur Startseite

Wiederherstellung von ruGPT-3 XL für transformers

Der Artikel beschreibt die Umwandlung von Legacy ruGPT-3 XL aus Megatron-Format in HuggingFace. Detailliertes Weight-Mapping, benutzerdefinierte Klassen, Tests auf RTX 4090 und MERA-Benchmark. Das Modell ist bereit für Feinabstimmung und GGUF-Umwandlung.

Wiederhergestellter ruGPT-3 XL: von Megatron zu transformers
Advertisement 728x90

ruGPT-3 XL für moderne Frameworks konvertieren und wiederherstellen

Entwickler hatten Schwierigkeiten, das veraltete Sprachmodell ai-forever/rugpt3xl (1,3 Milliarden Parameter) aus dem Jahr 2021 zu nutzen. Ursprünglich als GPT-2-Variante von Grund auf auf einer russischen Korpus trainiert, ist es im Megatron-LM-Checkpoint-Format gespeichert und erfordert PyTorch 1.7 und transformers 3.5. Die Umwandlung in Hugging Face-Format ermöglicht die Kompatibilität mit modernen Inferenz- und Fine-Tuning-Tools.

Der Prozess umfasst das Extrahieren der Gewichte aus mp_rank_00_model_states.pt, deren Zuordnung zur GPT2Model-Struktur und die Erstellung benutzerdefinierter Klassen für transformers.

Gewichtsstruktur: Megatron-LM vs. Hugging Face

Die ursprünglichen Gewichte verwenden eine verschmolzene QKV-Projektion [6144, 2048], die in separate Q-, K- und V-Matrizen der Größe [2048, 2048] aufgeteilt werden muss. Vollständige Zuordnung:

Google AdInline article slot

| Megatron-LM | Hugging Face |

|-------------|--------------|

| word_embeddings.weight | model.embed_tokens.weight |

Google AdInline article slot

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

Google AdInline article slot

| 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 von embed_tokens) |

Das Skript convert.py wandelt den Checkpoint in safetensors um, die mit transformers kompatibel sind.

Benutzerdefinierte Modellklassen

Neue Klassen wurden ohne Abhängigkeiten von Megatron-LM oder DeepSpeed erstellt:

  • RuGPT3XLConfig: erbt von PretrainedConfig mit Parametern (vocab_size=50264, hidden_size=2048, num_layers=24).
  • RuGPT3XLAttention: Multi-Head-Attention mit separaten Q/K/V und DynamicCache.
  • RuGPT3XMLP: MLP-Block (up_proj → GELU → down_proj).
  • RuGPT3XLDecoderLayer: Decoder-Schicht (pre-LN → Attention → post-LN → MLP).
  • RuGPT3XLModel: Embeddings + 24 Schichten + finale LN.
  • RuGPT3XLForCausalLM: Enthält lm_head.

Wichtige Verbesserungen:

  • Standardisierte forward()-Funktion für SFTTrainer/LoRA.
  • KV-Cache über DynamicCache.
  • Gradient Checkpointing.
  • Läuft auf CPU/GPU mit device_map="auto".

Das Modell ist nun unter evilfreelancer/ruGPT3XL auf Hugging Face verfügbar.

Testergebnisse

Generierung auf RTX 4090 (float16):

  • Durchschnittliche Geschwindigkeit: 66,7 Tokens/Sekunde (batch_size=1).
  • Behält Kontext bei langen Prompts bei.
  • Generiert präzise Texte (Rezepte, historische Erzählungen).

MERA-Benchmark (Gesamtscore: 0,198):

  • PARus (Alltagswissen): 0,500
  • ruHateSpeech: 0,558
  • BPS (Code/Mathematik): 0,528
  • RWSD (Schlussfolgern): 0,488
  • ruTiE (Dialoge): 0,502
  • ruMMLU: 0,252

Mathematik- und Code-Leistung liegt nahe am Baseline – wie erwartet für ein Basismodell ohne Anweisungstuning.

Konvertierung in GGUF für llama.cpp

Nach der HF-Format-Konvertierung wurde das Skript convert_hf_to_gguf.py für ruGPT-3 XL angepasst. Das Modell läuft nun in llama.cpp ohne Megatron-Abhängigkeiten und unterstützt KV-Cache sowie moderne Inferenz.

Dies ermöglicht das Fine-Tuning auf eigenen Datensätzen via LoRA oder SFT, die Integration in Pipelines und Tests auf Edge-Geräten.

Schlüsselerkenntnisse

  • Kompatibilität: Funktioniert mit transformers ≥4.x, keine veralteten Stack-Abhängigkeiten erforderlich.
  • Leistung: 66,7 t/s auf RTX 4090, KV-Cache-Unterstützung für Generierung.
  • Trainierbarkeit: Bereit für LoRA/SFTTrainer mit Gradient Checkpointing.
  • Benchmarks: Stark bei Alltagswissen und Hassrede-Erkennung (>0,5), schwächer bei Mathematik und Code.
  • Formate: HF + GGUF für breite Ökosystemunterstützung.

— Editorial Team

Advertisement 728x90

Weiterlesen