Dieses Repository enthält eine Reihe autoregressiver Transformer-Sprachmodelle, die auf einem riesigen Datensatz der russischen Sprache trainiert wurden.
Russische GPT-3-Modelle (ruGPT3XL, ruGPT3Large, ruGPT3Medium, ruGPT3Small) trainierten mit einer Sequenzlänge von 2048 mit spärlichen und dichten Aufmerksamkeitsblöcken. Wir bieten auch ein großes russisches GPT-2-Modell (ruGPT2Large) an, das mit einer Sequenzlänge von 1024 trainiert wurde.
Probieren Sie die Modellgenerierung in Colab aus! ruGPT-3 XL: oder ruGPT-3 kleinere Modelle:
Anwendungsbeispiele werden hier ausführlich beschrieben. Sehen Sie, wie die Feinabstimmung funktioniert:
Für Colab empfehlen wir die Verwendung der folgenden Installationsanweisungen:
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
Nach der Installation von env starten Sie bitte Colab neu. Um zu überprüfen, ob alles in Ordnung ist, führen Sie die folgenden Befehle aus:
!ds_report
# Output:
...
sparse_attn ............ [YES] ...... [OKAY]
...
import deepspeed.ops.sparse_attention.sparse_attn_op
Hier ist ein einfaches Anwendungsbeispiel. Weitere Informationen finden Sie in diesem Beispiel oder .
import sys
from src . xl_wrapper import RuGPT3XL
import os
# If run to from content root.
sys . path . append ( "ru-gpts/" )
os . environ [ "USE_DEEPSPEED" ] = "1"
# We can change address and port
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. ,
)
Ein Beispiel für die Feinabstimmung, das Laden eines feinabgestimmten Modells und das Generieren finden Sie hier.
Unser Beispiel für ein Feinabstimmungsskript finden Sie hier
Das Modell wurde vom Devices-Team mit 512 Sequenzlängen unter Verwendung von Deepspeed- und Megatron-Code auf einem 80B-Token-Datensatz für 4 Epochen trainiert. Danach wurde das Modell eine Epoche lang mit einer Sequenzlänge von 2048 verfeinert.
Notiz! Das Modell weist kaum Aufmerksamkeitsblockaden auf.
Die gesamte Trainingszeit betrug auf 256 GPUs etwa 10 Tage.
Die endgültige Verwirrung beim Testsatz ist 12.05
.
?HuggingFace-Modellkartenlink.
Um ruGPT3Large, ruGPT3Medium, ruGPT3Small und ruGPT2Large zu verwenden, installieren Sie einfach „HuggingFace“-Transformatoren.
pip install transformers==4.24.0
Hier erhalten wir Beispiele zur Feinabstimmung bzw. Generierung.
Auch dieses Beispiel ist für Google Colab angepasst:
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 )
# Output should be like this:
# Александр Сергеевич Пушкин родился в n1799 году. Его отец был крепостным крестьянином, а мать – крепостной крестьянкой. Детство и юность Пушкина прошли в деревне Михайловское под Петербургом. В 1820-х годах семья переехала
Das gesamte Vortraining wurde auf Nvidia Tesla V100-SXM3 32-GB-GPUs auf einem Christofari-Cluster durchgeführt. Im Folgenden finden Sie Einzelheiten zum Vortraining für jedes Modell.
Das Modell wurde mit der Sequenzlänge 1024 mithilfe der Transformers-Bibliothek vom Devices-Team auf 80B-Tokens für 3 Epochen trainiert. Danach wurde das Modell eine Epoche lang mit einer Sequenzlänge von 2048 verfeinert.
Die gesamte Trainingszeit betrug etwa 14 Tage auf 128 GPUs für den 1024-Kontext und einige Tage auf 16 GPUs für den 2048-Kontext.
Die endgültige Ratlosigkeit im Testsatz beträgt 13.6
.
Sie können dieses Modell erhalten, indem Sie Transformatoren mit dem Modellnamen sberbank-ai/rugpt3large_based_on_gpt2
verwenden.
?HuggingFace-Modellkartenlink
Unser Pretraining-Skript hier
Das Modell wurde mit der Sequenzlänge 1024 mithilfe der Transformers-Bibliothek vom Devices-Team auf 80B-Tokens für 3 Epochen trainiert. Danach wurde das Modell auf den Kontext von 2048 verfeinert.
Die gesamte Trainingszeit betrug auf 64 GPUs etwa 16 Tage.
Die endgültige Ratlosigkeit im Testsatz beträgt 17.4
.
Sie können dieses Modell erhalten, indem Sie Transformatoren mit dem Modellnamen sberbank-ai/rugpt3medium_based_on_gpt2
verwenden.
?HuggingFace-Modellkartenlink
Unser Pretraining-Skript hier
Das Modell wurde mit der Sequenzlänge 1024 mithilfe von Transformatoren vom Devices-Team auf 80B-Tokens rund um die 3. Epoche trainiert. Danach wurde das Modell auf den Kontext von 2048 verfeinert.
Die gesamte Trainingszeit dauerte auf 32 GPUs etwa eine Woche.
Sie können dieses Modell erhalten, indem Sie Transformatoren mit dem Modellnamen sberbank-ai/rugpt3small_based_on_gpt2
verwenden.
?HuggingFace-Modellkartenlink
Unser Pretraining-Skript hier
Das Modell wurde mit der Sequenzlänge 1024 unter Verwendung von Transformatoren vom Devices-Team für 170-GB-Daten auf 64 GPUs drei Wochen lang trainiert.
Sie können dieses Modell erhalten, indem Sie Transformatoren mit dem Modellnamen sberbank-ai/rugpt2large
verwenden.
?HuggingFace-Modellkartenlink
Laut Google Scholar-Suche können Sie dieser Liste gerne Links hinzufügen
@article{shatilovsentence,
title={Sentence simplification with ruGPT3},
author={Shatilov, AA and Rey, AI},
url={http://www.dialog-21.ru/media/5281/shatilovaaplusreyai142.pdf}
}
@article{fenogenovatext,
title={Text Simplification with Autoregressive Models},
author={Fenogenova, Alena},
url={http://www.dialog-21.ru/media/5250/fenogenovaa141.pdf}}
@article{dementieva2021methods,
title={Methods for Detoxification of Texts for the Russian Language},
author={Dementieva, Daryna and Moskovskiy, Daniil and Logacheva, Varvara and Dale, David and Kozlova, Olga and Semenov, Nikita and Panchenko, Alexander},
journal={arXiv preprint arXiv:2105.09052},
year={2021},
url={https://arxiv.org/abs/2105.09052}
}
@inproceedings{fenogenova2021russian,
title={Russian Paraphrasers: Paraphrase with Transformers},
author={Fenogenova, Alena},
booktitle={Proceedings of the 8th Workshop on Balto-Slavic Natural Language Processing},
pages={11--19},
year={2021},
url={https://www.aclweb.org/anthology/2021.bsnlp-1.2.pdf}
}
@article{malykh2021morocco,
title={MOROCCO: Model Resource Comparison Framework},
author={Malykh, Valentin and Kukushkin, Alexander and Artemova, Ekaterina and Mikhailov, Vladislav and Tikhonova, Maria and Shavrina, Tatiana},
journal={arXiv preprint arXiv:2104.14314},
year={2021},
url={https://arxiv.org/abs/2104.14314}}