Este repositorio contiene un montón de modelos de lenguaje transformadores autorregresivos entrenados en un enorme conjunto de datos del idioma ruso.
Modelos rusos GPT-3 (ruGPT3XL, ruGPT3Large, ruGPT3Medium, ruGPT3Small) entrenados con una longitud de secuencia de 2048 con bloques de atención densos y escasos. También proporcionamos el modelo grande ruso GPT-2 (ruGPT2Large) entrenado con una longitud de secuencia de 1024.
¡Pruebe la generación de modelos en Colab! ruGPT-3 XL: o ruGPT-3 modelos más pequeños:
Los ejemplos de uso se describen en detalle aquí. Vea cómo funciona el ajuste fino:
Para colab recomendamos utilizar las siguientes instrucciones de instalación:
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
Después de instalar env, reinicie colab. Para comprobar que todo está bien, ejecute los siguientes comandos:
!ds_report
# Output:
...
sparse_attn ............ [YES] ...... [OKAY]
...
import deepspeed.ops.sparse_attention.sparse_attn_op
A continuación se muestra un ejemplo sencillo de uso. Para obtener más información, consulte este ejemplo o .
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. ,
)
Aquí se muestra un ejemplo de ajuste, carga del modelo ajustado y generación.
Nuestro ejemplo de ajuste de script aquí
El modelo fue entrenado con una longitud de secuencia de 512 usando código Deepspeed y Megatron por el equipo de Devices, en un conjunto de datos de 80 mil millones de tokens durante 4 épocas. Después de ese modelo, se ajustó 1 época con una longitud de secuencia de 2048.
¡Nota! El modelo tiene escasos bloques de atención.
El tiempo total de formación fue de unos 10 días en 256 GPU.
La perplejidad final en el conjunto de prueba es 12.05
.
?Enlace de tarjeta modelo HuggingFace.
Para usar ruGPT3Large, ruGPT3Medium, ruGPT3Small, ruGPT2Large simplemente instale los transformadores HuggingFace.
pip install transformers==4.24.0
Aquí podemos obtener ejemplos de ajuste o generación.
Además, este ejemplo está adaptado para Google Colab:
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-х годах семья переехала
Todo el entrenamiento previo se realizó en GPU Nvidia Tesla V100-SXM3 de 32 Gb en un Christofari Cluster. A continuación se detallan los detalles del entrenamiento previo para cada modelo.
El modelo fue entrenado con una longitud de secuencia de 1024 utilizando la biblioteca de transformadores por parte del equipo de Dispositivos en tokens de 80 mil millones durante 3 épocas. Después de ese modelo, se ajustó 1 época con una longitud de secuencia de 2048.
El tiempo total de entrenamiento fue de aproximadamente 14 días en 128 GPU para un contexto de 1024 y unos pocos días en 16 GPU para un contexto de 2048.
La perplejidad final en el conjunto de prueba es 13.6
.
Puede obtener este modelo utilizando transformadores con el nombre de modelo sberbank-ai/rugpt3large_based_on_gpt2
.
?Enlace de tarjeta modelo HuggingFace
Nuestro guión de preentrenamiento aquí
El modelo fue entrenado con una longitud de secuencia de 1024 utilizando la biblioteca de transformadores por parte del equipo de Dispositivos en tokens de 80 mil millones durante 3 épocas. Después de que ese modelo se ajustó en el contexto de 2048.
El tiempo total de entrenamiento fue de alrededor de 16 días en 64 GPU.
La perplejidad final en el conjunto de prueba es 17.4
.
Puede obtener este modelo utilizando transformadores con el nombre de modelo sberbank-ai/rugpt3medium_based_on_gpt2
.
?Enlace de tarjeta modelo HuggingFace
Nuestro guión de preentrenamiento aquí
El modelo fue entrenado con una longitud de secuencia de 1024 utilizando transformadores por parte del equipo de Dispositivos en tokens 80B alrededor de la época 3. Después de que ese modelo se ajustó en el contexto de 2048.
El tiempo total de entrenamiento tomó alrededor de una semana en 32 GPU.
Puede obtener este modelo utilizando transformadores con el nombre de modelo sberbank-ai/rugpt3small_based_on_gpt2
.
?Enlace de tarjeta modelo HuggingFace
Nuestro guión de preentrenamiento aquí
El modelo fue entrenado con una longitud de secuencia de 1024 utilizando transformadores por parte del equipo de Dispositivos con datos de 170 Gb en 64 GPU durante 3 semanas.
Puede obtener este modelo utilizando transformadores con el nombre de modelo sberbank-ai/rugpt2large
.
?Enlace de tarjeta modelo HuggingFace
Según la búsqueda de Google Scholar, no dude en agregar enlaces a esta lista
@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}}