ru-gpts:俄罗斯语言自回归Transformer模型集,支持生成与微调

Russian GPT3 models.

分支3Tags0
文件最后提交记录最后更新时间
3 年前
3 年前
3 年前
3 年前
5 年前
5 年前
3 年前
5 年前
5 年前
5 年前
3 年前
5 年前
5 年前

俄语GPT-3模型

ruGPT3XL, ruGPT3Large, ruGPT3Medium, ruGPT3Small 和 ruGPT2Large

本仓库包含一系列自回归变换器语言模型,这些模型是基于大量俄语文本数据训练而成。

  • 俄语GPT-3模型(ruGPT3XL, ruGPT3Large, ruGPT3Medium, ruGPT3Small)使用2048个序列长度,结合稀疏和密集注意力块进行训练。同时提供了一个使用1024个序列长度训练的俄罗斯GPT-2大型模型(ruGPT2Large)。

  • 在Colab上尝试模型生成:ruGPT-3 XL:在Colab上试用! 或 ruGPT-3较小模型:在Colab上试用!

  • 使用示例详细说明见此处。查看微调工作原理:在Colab上试用!

目录

ruGPT3XL

配置

对于Colab,建议遵循以下安装指示:

export LD_LIBRARY_PATH=/usr/lib/
apt-get install clang-9 llvm-9 llvm-9-dev llvm-9-tools
git clone https://github.com/qywu/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
pip install triton
DS_BUILD_CPU_ADAM=1 DS_BUILD_SPARSE_ATTN=1 pip install deepspeed
pip install transformers
pip install huggingface_hub
pip install timm==0.3.2
git clone  https://github.com/sberbank-ai/ru-gpts
cp ru-gpts/src_utils/trainer_pt_utils.py /usr/local/lib/python3.8/dist-packages/transformers/trainer_pt_utils.py
cp ru-gpts/src_utils/_amp_state.py /usr/local/lib/python3.8/dist-packages/apex/amp/_amp_state.py

安装环境后请重启Colab。检查一切正常,运行以下命令:

!ds_report
# 输出:
...
sparse_attn .......... [YES] ...... [OKAY]
...
import deepspeed.ops.sparse_attention.sparse_attn_op

使用

这里是简单的使用示例。更多示例参见此例子在Colab中打开

import sys
from src.xl_wrapper import RuGPT3XL
import os

# 如果从根目录运行。
sys.path.append("ru-gpts/")
os.environ["USE_DEEPSPEED"] = "1"
# 可以改变地址和端口
os.environ["MASTER_ADDR"] = "127.0.0.1"
os.environ["MASTER_PORT"] = "5000"
gpt = RuGPT3XL.from_pretrained("sberbank-ai/rugpt3xl", seq_len=512)
gpt.generate(
    "Кто был президентом США в 2020? ",
    max_length=50,
    no_repeat_ngram_size=3,
    repetition_penalty=2.0,
)

微调

微调示例及加载微调后的模型并生成文本的代码位于此处

我们的微调脚本示例在scripts/deepspeed_gpt3_xl_finetune.sh

ruGPT3XL预训练详情

该模型使用512个序列长度,在DeepspeedMegatron团队的代码支持下,由Devices团队在800亿个令牌的数据集上进行了4个周期的训练。之后,使用2048个序列长度对模型进行了1个周期的微调。 注意!模型具有稀疏注意力块。

总训练时间约为256张GPU上的10天。测试集上的最终困惑度为12.05

🤗HuggingFace模型卡片链接:链接

ruGPT3Large, ruGPT3Medium, ruGPT3Small, ruGPT2Large

配置

要使用ruGPT3Large, ruGPT3Medium, ruGPT3Small, ruGPT2Large,只需安装🤗HuggingFace Transformers库。

pip install transformers==4.24.0

使用

有关微调生成的示例在这里提供。

这些示例也适用于Google Colab:

  • 微调:finetuning
  • 生成:generation
from transformers import GPT2LMHeadModel, GPT2Tokenizer

model_name_or_path = "sberbank-ai/rugpt3large_based_on_gpt2"
tokenizer = GPT2Tokenizer.from_pretrained(model_name_or_path)
model = GPT2LMHeadModel.from_pretrained(model_name_or_path).cuda()
text = "Александр Сергеевич Пушкин родился в "
input_ids = tokenizer.encode(text, return_tensors="pt").cuda()
out = model.generate(input_ids.cuda())
generated_text = list(map(tokenizer.decode, out))[0]
print(generated_text)
# 输出应类似如下:
# Александр Сергеевич Пушкин родился в \n1799 году. Его отец был крепостным крестьянином, а мать – крепостной крестьянкой. Детство и юность Пушкина прошли в деревне Михайловское под Петербургом. В 1820-х годах семья переехала

预训练详情

所有预训练都在Nvidia Tesla V100-SXM3 32 Gb GPU上进行,设备是Christofari Cluster。以下是每个模型的预训练细节。

ruGPT3Large预训练详情

该模型使用1024个序列长度,由Devices团队使用Transformers库在800亿个令牌上进行3个周期的训练。然后,使用2048个序列长度进行了1个周期的微调。

总训练时间为128张GPU上的约14天用于1024上下文,以及16张GPU上的几天用于2048上下文。
测试集上的最终困惑度为13.6

您可以通过Transformers使用模型名称sberbank-ai/rugpt3large_based_on_gpt2获取此模型。

🤗HuggingFace模型卡片链接:链接

我们的预训练脚本在此:scripts/deepspeed_gpt3_large.sh

ruGPT3Medium预训练详情

模型使用1024个序列长度,由Devices团队在800亿个令牌上进行了3个周期的训练。随后,使用2048个上下文进行微调。

总训练时间为64张GPU上的约16天。
测试集上的最终困惑度为17.4

您可以使用Transformers通过模型名称sberbank-ai/rugpt3medium_based_on_gpt2获取此模型。

🤗HuggingFace模型卡片链接:链接

我们的预训练脚本在此:scripts/deepspeed_gpt3_medium.sh

ruGPT3Small预训练详情

模型使用1024个序列长度,由Devices团队在800亿个令牌上进行了大约3个周期的训练。接着,使用2048个上下文进行微调。

总共在32张GPU上训练了大约一周的时间。

您可以使用Transformers通过模型名称sberbank-ai/rugpt3small_based_on_gpt2获取此模型。

🤗HuggingFace模型卡片链接:链接

我们的预训练脚本在此:scripts/deepspeed_gpt3_small.sh

ruGPT2Large预训练详情

模型使用1024个序列长度,由Devices团队在170GB数据上使用64张GPU进行了3周的训练。

您可以使用Transformers通过模型名称sberbank-ai/rugpt2large获取此模型。

🤗HuggingFace模型卡片链接:链接

开源解决方案与 ruGPT3

提及 ruGPT3 的论文

根据谷歌学术搜索:搜索结果 - 欢迎添加到此列表

文本简化

@article{shatilovsentence,
  title={使用 ruGPT3 进行句子简化},
  author={Shatilov, AA 和 Rey, AI},
  url={http://www.dialog-21.ru/media/5281/shatilovaaplusreyai142.pdf}
}

@article{fenogenovatext,
  title={自回归模型的文本简化},
  author={Fenogenova, Alena},
  url={http://www.dialog-21.ru/media/5250/fenogenovaa141.pdf}
}

文本净化

@article{dementieva2021methods,
  title={俄语文本净化方法},
  author={Dementieva, Daryna 和 Moskovskiy, Daniil 和 Logacheva, Varvara 和 Dale, David 和 Kozlova, Olga 和 Semenov, Nikita 和 Panchenko, Alexander},
  journal={arXiv 预印本 arXiv:2105.09052},
  year={2021},
  url={https://arxiv.org/abs/2105.09052}
}

改述与数据增强

@inproceedings{fenogenova2021russian,
  title={俄罗斯改述器:利用 Transformer 进行改述},
  author={Fenogenova, Alena},
  booktitle={第八届巴尔托斯拉夫自然语言处理研讨会论文集},
  pages={11--19},
  year={2021},
  url={https://www.aclweb.org/anthology/2021.bsnlp-1.2.pdf}
}

模型评估

@article{malykh2021morocco,
  title={MOROCCO:模型资源比较框架},
  author={Malykh, Valentin 和 Kukushkin, Alexander 和 Artemova, Ekaterina 和 Mikhailov, Vladislav 和 Tikhonova, Maria 和 Shavrina, Tatiana},
  journal={arXiv 预印本 arXiv:2104.14314},
  year={2021},
  url={https://arxiv.org/abs/2104.14314}
}

项目介绍

俄罗斯GPT3模型。【此简介由AI生成】

定制我的领域
832.09 K434访问 GitHub