Powrót do strony głównej

Restauracja ruGPT-3 XL dla transformers

Artykuł opisuje konwersję legacy ruGPT-3 XL z formatu Megatron do HuggingFace. Szczegółowe mapowanie wag, niestandardowe klasy, testowanie na RTX 4090 i benchmark MERA. Model gotowy do fine-tuning i konwersji GGUF.

Przywróciliśmy ruGPT-3 XL: od Megatron do transformers
Advertisement 728x90

Przekształcenie i odnowienie ruGPT-3 XL do nowoczesnych frameworków

Programiści napotkali problem z uruchomieniem przestarzałej modelu językowego ai-forever/rugpt3xl (1,3 mld parametrów) z 2021 roku. Model, który został wytrenowany od podstaw na rosyjskim korpusie jako modyfikacja GPT-2, przechowywany jest w formacie checkpointa Megatron-LM, wymagającym PyTorch 1.7 i transformers 3.5. Przekonwertowanie do formatu Hugging Face umożliwia wykorzystanie go z nowoczesnymi narzędziami do inference oraz fine-tuning.

Proces obejmuje wyodrębnienie wag z pliku mp_rank_00_model_states.pt, mapowanie ich na strukturę GPT2Model oraz tworzenie niestandardowych klas dla biblioteki transformers.

Struktura wag: Megatron-LM vs HuggingFace

Oryginalne wagi używają połączonej projekcji QKV [6144, 2048], którą należy rozdzielić na osobne Q, K, V o rozmiarze [2048, 2048]. Pełne mapowanie:

Google AdInline article slot

| Megatron-LM | HuggingFace |

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

| 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 (kopia embed_tokens) |

Skrypt convert.py konwertuje checkpoint do formatu safetensors kompatybilnego z transformers.

Niestandardowe klasy modelu

Stworzono nowe klasy bez zależności od Megatron-LM i DeepSpeed:

  • RuGPT3XLConfig: dziedziczy po PretrainedConfig z parametrami (vocab_size=50264, hidden_size=2048, num_layers=24).
  • RuGPT3XLAttention: uwielokrotna uwaga z osobnymi Q/K/V i DynamicCache.
  • RuGPT3XLMLP: blok MLP (up_proj → GELU → down_proj).
  • RuGPT3XLDecoderLayer: warstwa dekodera (pre-LN → uwaga → post-LN → MLP).
  • RuGPT3XLModel: embeddingi + 24 warstwy + finalna LN.
  • RuGPT3XLForCausalLM: z lm_head.

Kluczowe ulepszenia:

  • Standardowa metoda forward() dla SFTTrainer/LoRA.
  • Cache KV przez DynamicCache.
  • Gradient checkpointing.
  • Działanie na CPU/GPU przy użyciu device_map="auto".

Model jest dostępny na Hugging Face jako evilfreelancer/ruGPT3XL.

Wyniki testowania

Generowanie na RTX 4090 (float16):

  • Średnia prędkość: 66,7 tokenów/s (batch_size=1).
  • Zachowuje kontekst przy długich promptach.
  • Generuje rzeczywiste teksty (przepisy, historia) z dużą precyzją.

Benchmark MERA (ogólny wynik 0,198):

  • PARus (zdrowy rozsądek): 0,500
  • ruHateSpeech: 0,558
  • BPS (kod/matematyka): 0,528
  • RWSD (rozumowanie): 0,488
  • ruTiE (dialog): 0,502
  • ruMMLU: 0,252

Matematyka i kod są bliskie baseline’owi – jak się spodziewano dla modelu bazowego bez dostosowania do instrukcji.

Konwersja do GGUF dla llama.cpp

Po konwersji do formatu HF, konwerter convert_hf_to_gguf.py został dostosowany do ruGPT-3 XL. Model działa w llama.cpp bez zależności od Megatron, wspierając cache KV i nowoczesne inference.

To pozwala na fine-tuning na własnych zbiorach danych za pomocą LoRA lub SFT, integrację do pipeline’ów oraz testowanie na urządzeniach krawędziowych.

Co ważne

  • Kompatybilność: model działa z transformers ≥4.x, bez starego stosu.
  • Wydajność: 66,7 t/s na RTX 4090, cache KV do generacji.
  • Dostępność do uczenia: gotowość do LoRA/SFTTrainer, gradient checkpointing.
  • Benchmarki: silny w zdrowym rozsądku i hate speech (0,5+), słaby w matematyce i kodzie.
  • Formaty: HF + GGUF dla szerokiej ekosystemu.

— Editorial Team

Advertisement 728x90

Czytaj dalej