返回首页

为 transformers 恢复 ruGPT-3 XL

本文描述了将旧版 ruGPT-3 XL 从 Megatron 格式转换为 HuggingFace 的过程。详细权重映射、自定义类、在 RTX 4090 上的测试以及 MERA 基准。模型已准备好用于微调和 GGUF 转换。

已恢复 ruGPT-3 XL:从 Megatron 到 transformers
Advertisement 728x90

ruGPT-3 XL模型迁移与恢复:适配现代框架

开发者在运行2021年发布的旧版语言模型ai-forever/rugpt3xl(13亿参数)时面临诸多挑战。该模型最初基于俄语语料库从零开始训练,是GPT-2的变体,以Megatron-LM检查点格式存储,依赖PyTorch 1.7和transformers 3.5。将其转换为Hugging Face格式后,即可兼容现代推理与微调工具。

此过程涉及从mp_rank_00_model_states.pt中提取权重,将其映射到GPT2Model结构,并创建适用于transformers的自定义类。

权重结构对比:Megatron-LM vs Hugging Face

原始权重采用融合的QKV投影 [6144, 2048],需拆分为三个独立的Q、K、V矩阵,每块大小为 [2048, 2048]。完整映射如下:

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(复制自embed_tokens) |

convert.py脚本可将检查点转换为支持transformers的safetensors格式。

自定义模型类

构建的新类不依赖Megatron-LM或DeepSpeed:

  • RuGPT3XLConfig:继承PretrainedConfig,包含参数(vocab_size=50264,hidden_size=2048,num_layers=24)。
  • RuGPT3XLAttention:多头注意力机制,支持独立的Q/K/V及DynamicCache缓存。
  • RuGPT3XMLP:MLP模块(up_proj → GELU → down_proj)。
  • RuGPT3XLDecoderLayer:解码器层(预归一化 → 注意力 → 后归一化 → MLP)。
  • RuGPT3XLModel:嵌入层 + 24层 + 最终归一化。
  • RuGPT3XLForCausalLM:包含lm_head。

关键优化:

  • 标准forward()接口,适配SFTTrainer/LoRA。
  • 使用DynamicCache实现KV缓存。
  • 支持梯度检查点。
  • 可通过device_map="auto"在CPU/GPU上运行。

该模型现已在Hugging Face平台发布,地址为evilfreelancer/ruGPT3XL。

测试结果

在RTX 4090(float16)上的生成表现:

  • 平均速度:66.7 tokens/秒(batch_size=1)
  • 长提示下仍能保持上下文连贯性
  • 生成文本准确,适用于菜谱、历史叙述等场景

MERA基准测试(总分:0.198):

  • PARus(常识理解):0.500
  • ruHateSpeech(仇恨言论检测):0.558
  • BPS(代码/数学):0.528
  • RWSD(推理能力):0.488
  • ruTiE(对话生成):0.502
  • ruMMLU(综合知识):0.252

数学与代码性能接近基线——符合未经过指令微调的基础模型预期。

转换为GGUF格式以适配llama.cpp

完成HF格式转换后,convert_hf_to_gguf.py脚本已适配ruGPT-3 XL。模型可在llama.cpp中运行,无需依赖Megatron,支持KV缓存与现代推理功能。

这使得用户可通过LoRA或SFT对自定义数据集进行微调,集成至自动化流程,并在边缘设备上进行测试。

核心要点

  • 兼容性:支持transformers ≥4.x,无需遗留技术栈。
  • 性能:RTX 4090上达66.7 t/s,支持KV缓存生成。
  • 可训练性:已准备好用于LoRA/SFTTrainer,支持梯度检查点。
  • 基准表现:常识与仇恨言论识别能力强(>0.5),数学与代码能力较弱。
  • 格式支持:同时提供HF与GGUF格式,覆盖广泛生态。

— Editorial Team

Advertisement 728x90

继续阅读