-
Notifications
You must be signed in to change notification settings - Fork 445
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add HF finetune and generate examples
- Loading branch information
1 parent
247b5f3
commit 78202c2
Showing
3 changed files
with
608 additions
and
582 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,301 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "BO7MEGbb6mtB" | ||
}, | ||
"source": [ | ||
"# Finetune RuGPTs in huggingface\n", | ||
"How to finetune RuGPTs models with huggingface. Example for RuGPT3Small. Nfor other models it will take more GPU memory.\n", | ||
"## Install env" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "H73-Pizb6c8n" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"!pip3 install transformers==3.5.0" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "RSV1JFFf6nrt" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"!git clone --single-branch --branch deepspeed_full https://github.com/sberbank-ai/ru-gpts" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": { | ||
"id": "WJZtWu8u6nwL" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"!mkdir models/" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "WqwZiumW8WbZ" | ||
}, | ||
"source": [ | ||
"## Download files" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "j51bKtQW6nyY" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"!wget -O train.txt https://www.dropbox.com/s/oa3v9c7g9bp40xw/train.txt?dl=0\n", | ||
"!wget -O valid.txt https://www.dropbox.com/s/mworl3ld6r3bg62/valid.txt?dl=0" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "zoyX62qN_38l" | ||
}, | ||
"source": [ | ||
"## Train \n", | ||
"The following code download our model and tokenizer from huggingface and finetune model for generating essays.\n", | ||
"\n", | ||
"This took aroung ten minutes and obtain perplexity = 13-16" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "aZ-4Kav28cH0" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"!export PYTHONPATH=${PYTHONPATH}:/ru-gpts/\n", | ||
"!CUDA_VISIBLE_DEVICES=0 python ru-gpts/pretrain_transformers.py \\\n", | ||
" --output_dir=models/essays \\\n", | ||
" --model_type=gpt2 \\\n", | ||
" --model_name_or_path=sberbank-ai/rugpt3small_based_on_gpt2 \\\n", | ||
" --do_train \\\n", | ||
" --train_data_file=train.txt \\\n", | ||
" --do_eval \\\n", | ||
" --eval_data_file=valid.txt \\\n", | ||
" --per_gpu_train_batch_size 1 \\\n", | ||
" --gradient_accumulation_steps 1 \\\n", | ||
" --num_train_epochs 5 \\\n", | ||
" --block_size 2048 \\\n", | ||
" --overwrite_output_dir" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "QvgntLymArg3" | ||
}, | ||
"source": [ | ||
"## Evaluate model\n", | ||
"### Generate with generate_transformers.py script." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 8, | ||
"metadata": { | ||
"colab": { | ||
"base_uri": "https://localhost:8080/" | ||
}, | ||
"id": "qYnswPyr9CVw", | ||
"outputId": "8c0cc220-3902-4749-a5b0-0257a2301359" | ||
}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"2021-02-11 12:14:52.166691: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1\n", | ||
"02/11/2021 12:15:04 - INFO - __main__ - Namespace(device=device(type='cuda'), k=5, length=500, model_name_or_path='models/essays', model_type='gpt2', n_gpu=1, no_cuda=False, num_return_sequences=1, p=0.95, padding_text='', prompt='', repetition_penalty=5.0, seed=42, stop_token='</s>', temperature=1.0, xlm_language='')\n", | ||
"Context >>> <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: \n", | ||
"Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.\n", | ||
"ruGPT:\n", | ||
"<s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: В данном высказывании автор поднимает проблему личности как носителя культуры.</S\n", | ||
"Личность - это совокупность всех индивидуально значимых свойств индивидуальности («мораль», духовная культура). Личность выступает в качестве субъекта общественно-исторической деятельности индивида во взаимодействии с окружающим миром или внутри него; она может являться субъектом личностных отношений либо предметом социально – педагогической антропологии /АПН РФ., ФГБУ СО МНИИ им АМЭ РАН по социальному развитию детей–инвалидов/. По мнению ЛЕЩЕНКО Сенеки личность рассматривается не только вне общества,но также на разных уровнях развития сознания. Человек является совокупностью социальных субъектов — от рядового гражданина до лидера крупной группы людей под управлением государства при участии государственных органов власти через средства массовой информации(телевидения), общественных организацийи т д.. Таким образом получается что личностью можно считать любого без различия пола— возраста он будет отличаться своей неповторимой сущ нью независимо ни оттого кто входит у тебя за спиной! Я считаю необходимо развивать культуру общения со своими детьми так чтобы они понимали друг друга а взрослые общались вместе весело смеялись над чем то другимТакже я согласна выделить следующие функции человеческого организма : питание2 раза неделю3 дня 4раза обед 3 часа ужин 5 раз сон 6 часов отдых 7раз завтрак 8Развитие речи происходит тогда когда человек говорит сам о себеЯзык же для меня остается одним из важнейших инструментов коммуникацииИсходя именно этой точки зрения мы пришли к выводучто деятельность каждого отдельного члена организации строится вокруг цели создания чего бытоло цельной системы ценностей которая удовлетворяла всем основным потребностям участниковкак правило все члены одной команды имеют общие интересытаких много среди моих знакомыхесть такие люди которые любят отдыхать одни ходят гулять другие играют вдвоём ещё есть такой тип личностей которых объединяют их хоббиа некоторые вообще живут отдельно ну конечно существуют эгоистыкоторые считают себя лучше остальныхзначит таким людям свойственно ошибатьсяКаждый член человеческой общности должен иметь свое собственное представление об идеях своих коллегпо работеЧто касается самого понятия«личный вкус»в нем всегда присутствует определённое количество ложных стереотиповНо нельзя обойти вниманием тот факт,,сколько примеров того почему один считает другого слишком большимтруднымдля другихэто доказывает насколько важно умение прислушиватьсяк советам своего товарищаЕсли проанализировать само понятиеличностной характеристики каждый сможет убедиться какое сильное влияние оказывает общениеНа мой взгляд здесь следует остановиться подробнееизучаем особенности взаимодействия между людьмиБлагодарен судьбе своему отцу Иогану Людвиговичу Шиллеру который воспитал моего брата Фридриха Вильгельма Гете.(1\n", | ||
"Context >>> Traceback (most recent call last):\n", | ||
" File \"ru-gpts/generate_transformers.py\", line 268, in <module>\n", | ||
" main()\n", | ||
" File \"ru-gpts/generate_transformers.py\", line 213, in main\n", | ||
"\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"!python ru-gpts/generate_transformers.py \\\n", | ||
" --model_type=gpt2 \\\n", | ||
" --model_name_or_path=models/essays \\\n", | ||
" --k=5 \\\n", | ||
" --p=0.95 \\\n", | ||
" --length=500 \\\n", | ||
" --repetition_penalty=5" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "K7_jIWhVBKay" | ||
}, | ||
"source": [ | ||
"### Generate mannualy" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 30, | ||
"metadata": { | ||
"id": "csHcDJXFDdaW" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"import numpy as np\n", | ||
"import torch" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "TJxPg-cJDhAB" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"np.random.seed(42)\n", | ||
"torch.manual_seed(42)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 9, | ||
"metadata": { | ||
"id": "AkUrzKsy_16F" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"from transformers import GPT2LMHeadModel, GPT2Tokenizer" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 10, | ||
"metadata": { | ||
"id": "x_EMbgO0BTvb" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"tok = GPT2Tokenizer.from_pretrained(\"models/essays\")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 11, | ||
"metadata": { | ||
"id": "Fjy0GAuQBYpA" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"model = GPT2LMHeadModel.from_pretrained(\"models/essays\")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "irh4H-HDBb6V" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"model.cuda()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 32, | ||
"metadata": { | ||
"id": "hQY6A5q7Bd4O" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"text = \"<s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: \"\n", | ||
"inpt = tok.encode(text, return_tensors=\"pt\")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": { | ||
"id": "1gfJFmeOBj_t" | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"out = model.generate(inpt.cuda(), max_length=500, repetition_penalty=5.0, do_sample=True, top_k=5, top_p=0.95, temperature=1)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 36, | ||
"metadata": { | ||
"colab": { | ||
"base_uri": "https://localhost:8080/", | ||
"height": 392 | ||
}, | ||
"id": "gWZ9SUCxB2Ki", | ||
"outputId": "55055988-87f5-4ce4-817d-9224a10b9d58" | ||
}, | ||
"outputs": [ | ||
{ | ||
"data": { | ||
"application/vnd.google.colaboratory.intrinsic+json": { | ||
"type": "string" | ||
}, | ||
"text/plain": [ | ||
"'<s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: _Эссе №1«Цель общества есть удовлетворение потребностей» — девиз философов всех времен ной поры («Мы должны стремиться к счастью»). И действительно цели разные бывают у обществ – это потребности удовлетворения естественных влечений или же социально-бытовые нужды; удовлетворены ли эти желания достигнуты благодаря деятельности людей - другой вопрос… В обществе господствует биологическая потребность в наслаждении жизнью(Ж.- Жорес), а социальная связана с потреблением материальных благ для существования.</SOCTERN’Я полностью согласна со высказыванием Акакия Львовича Толстого о том,что цель любого государства состоит не только во власти народа над государством. Но главной целью является само государство! Именно оно определяет жизнь страны как стабильную систему правовых отношений между людьми без принуждения властей.(АП РФ). Я считаю что Толстой прав по этому поводу.. Действительно человек может удовлетворить свои естественные инстинкты при помощи определенных средств лишь тогда когда он будет действовать соответствующим образом... Например если ему дать молоко то животное станет человеком Если человеку нравится играть на бильярде играя за деньги других участников рынка значит этот конкретный игрок играет свою игру согласно своим интересам Он сам выбирает правила игры Каждый из нас живет своей обычной человеческой жизнедеятельностью поэтому я думаю смысл жизни каждого можно выразить так : Жить интересами большинства граждан ради блага всего человечества!!!\"Лермонтов П., 1830г.)Мне понравились слова Леру де Монтескье про долголетие человеческого рода до глубокой старости потому чтО все люди смертныНо мне кажется они очень справедливыИ главное отличие этих высказываний от общепринятых мнений заключается еще вот чем.... Человек никогда заранее знать ничего НЕможет тк обладает какими либо сверх способностями Так было уже много раз доказано наукой Это доказывает закон природы Разрушительные силы возникают вокруг того кто наносит вред природе Они приводят ее ко зловещим последствиям Природа создает всё больше новых врагов Люди становятся рабами Природу невозможно сломать силой обстоятельствЛюди творят зло Неравенство приводит их порой даже друг другуНапример войнаВойна делает нашу планету непригодной Для проживания Людей существуют различные методы борьбы С ними сталкиваются Человеческий организм способен самовоспроизводитьсяРазвитие человеческих способностей происходит постоянно Поэтому необходимо всегда сохранять бдительностьНеобходимо поддерживать высокий уровень культуры населения Чтобы наши дети были здоровыми На протяжении всей истории развитие знаний способствовало появлению различных теорий развития Все новое открывает большие возможностиДля совершенствования своего мастерства мы изобретаем средства познания новые Ученые открывают неизвестные науке химические вещества Благодаря им улучшается качество продуктов питания Таким людям удается познавать окружающее Мироздание развивается По мере усложнения окружающего мира совершенствуются условия жизнедеятельности человеческий разум приспосабливается Мировоззрение меняетсяПодлинная причина несчастья кроется преждевременноЧеловечество обречено жить после глобальной катастрофыКаждый член цивилизованного сообщества должен решить одну проблемуМассы действуют сообщаЧтобы массы смогли сплотить единый фронт чтобы уничтожить противника нужно объединить усилияНаличие политической волиКонечно нельзя добиться равен'" | ||
] | ||
}, | ||
"execution_count": 36, | ||
"metadata": { | ||
"tags": [] | ||
}, | ||
"output_type": "execute_result" | ||
} | ||
], | ||
"source": [ | ||
"tok.decode(out[0])" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"accelerator": "GPU", | ||
"colab": { | ||
"collapsed_sections": [], | ||
"name": "RuGPT3FinetuneHF.ipynb", | ||
"provenance": [] | ||
}, | ||
"kernelspec": { | ||
"display_name": "Python 3", | ||
"name": "python3" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 0 | ||
} |
Oops, something went wrong.