Skip to content

Commit

Permalink
fix examle and load cpt
Browse files Browse the repository at this point in the history
  • Loading branch information
Anton Emelyanov committed Aug 12, 2021
1 parent 54ea285 commit bb5cacf
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 32 deletions.
125 changes: 97 additions & 28 deletions examples/Finetune_and_generate_RuGPTs_only_with_megatron.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,94 @@
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Vn0fHQmpTPcF",
"outputId": "7c1480d3-941c-4bf9-ba2d-0df61f5789fe",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"import subprocess\n",
"\n",
"CUDA_version = [s for s in subprocess.check_output([\"nvcc\", \"--version\"]).decode(\"UTF-8\").split(\", \") if s.startswith(\"release\")][0].split(\" \")[-1]\n",
"print(\"CUDA version:\", CUDA_version)\n",
"\n",
"if CUDA_version == \"10.0\":\n",
" torch_version_suffix = \"+cu100\"\n",
"elif CUDA_version == \"10.1\":\n",
" torch_version_suffix = \"+cu101\"\n",
"elif CUDA_version == \"10.2\":\n",
" torch_version_suffix = \"\"\n",
"else:\n",
" torch_version_suffix = \"+cu110\""
],
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": [
"CUDA version: 11.0\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "kfL2DWtbfslV"
},
"source": [
""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Maf99CebV3oT"
},
"source": [
"If code below doesn't work, check your cuda version and installation here https://pytorch.org/get-started/previous-versions/"
]
},
{
"cell_type": "code",
"metadata": {
"id": "8uNRRWUaVQN0"
},
"source": [
"!pip install torch==1.7.1{torch_version_suffix} torchvision==0.8.2{torch_version_suffix} torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ozJOYbK-11pk",
"outputId": "47a4a5b0-71c8-46dc-b9df-4f1cea205ea1"
"outputId": "58a4d979-91b8-4574-92b0-43ef122ecc20"
},
"source": [
"%%writefile setup.sh\n",
"\n",
"export CUDA_HOME=/usr/local/cuda-10.1\n",
"git clone https://github.com/NVIDIA/apex\n",
"pip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" ./apex"
"cd apex\n",
"pip install -v --disable-pip-version-check --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" ./"
],
"execution_count": 3,
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"text": [
"Writing setup.sh\n"
"Overwriting setup.sh\n"
],
"name": "stdout"
}
Expand Down Expand Up @@ -136,7 +202,7 @@
"!echo train.txt > train.list\n",
"!echo valid.txt > valid.list"
],
"execution_count": 9,
"execution_count": 14,
"outputs": []
},
{
Expand Down Expand Up @@ -222,7 +288,7 @@
"base_uri": "https://localhost:8080/"
},
"id": "kAH-WpCG8lmG",
"outputId": "0e0cd69a-8e4e-4463-91ed-c2fce32b75ae"
"outputId": "1a482aa4-9901-4193-bcc0-3c983d12af66"
},
"source": [
"!export PYTHONPATH=${PYTHONPATH}:${HOME}/ru-gpts\n",
Expand All @@ -240,12 +306,12 @@
" --tokenizer-path sberbank-ai/rugpt3small_based_on_gpt2 \\\n",
" --no-load-optim\n"
],
"execution_count": 29,
"execution_count": 16,
"outputs": [
{
"output_type": "stream",
"text": [
"2021-02-11 21:33:07.459111: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1\n",
"2021-08-13 15:00:38.346998: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0\n",
"Generate Samples\n",
"WARNING: No training data specified\n",
"using world size: 1 and model-parallel size: 1 \n",
Expand All @@ -260,27 +326,30 @@
" successfully loaded model/iter_0002000/mp_rank_00/model_optim_rng.pt\n",
"Loaded\n",
"\n",
"Context prompt (stop to exit) >>> <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: \n",
"\n",
"Context prompt (stop to exit) >>> <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение:\n",
"\u001b[H\u001b[2J\n",
"Taken time 15.56\n",
"Taken time 14.35\n",
"\n",
"\n",
"Context: <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: \n",
"Context: <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение:\n",
"\n",
"GPT: <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: С. Паркинсон - американский публицист, политический деятель. Он понимает, что политика - это выбор между гибельным и неприятным. Как часто приходится политикам делать этот выбор. Порой, действительно, трудно обманывать ожидания своих избирателей, народа, но это бывает необходимо. Как сказал автор высказывания, чтобы власть не обманула ожидания народа. Я согласен с автором. Люди, получившие в результате неправильный выбор, часто забывают о тех, кто живет на другом конце земного шара. Угасая, они забывают о том, что на планете существуют «статусные» организации, которые могут нарушить правила человеческого бытия. Это организации, которые на терпящем бедствие корабле спасают в первую очередь женщин и детей, а потом спасаются сами. Это страны, в которых не выполняется функция «расширения территории» (вооруженные силы, милиция, пограничная стража). В демократических странах сейчас действует многопартийная система, которая соответствует международным документам о политических правах человека. Система политического права – многопартийная. Она подразумевает, что каждый гражданин несет ответственность за свой выбор, и потому каждый должен ориентироваться в политике, быть активным участником общественной жизни страны. Из философско-правовых понятий « политика» и « права» известно, что политика - это выбор между гибельным и неприятным. Как часто приходится политикам делать этот выбор. Порой, действительно, трудно обманывать ожидания своих избирателей, народа, но это бывает необходимо. Из других философских понятий: «Политика<pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad\n",
"\n",
"Context prompt (stop to exit) >>> Prompt should not be empty!\n",
"GPT: <s>Тема: «Создает человека природа, но развивает и образует его общество». (В.Т. Белинский)\\nСочинение: Главной гуманистической идеей в романе «Евгений Онегин» является вопрос о свободе воли. В «Гроза» лирический герой утверждает свою свободу, но лирическая героиня под линно выражает позицию, высказанную Цицероном: «Я считаю закон лишь законом, и этого не хочу делать». Автора интересует вопрос о свободе воли, но лирическая героиня выражает свою позицию о ней самой. Она говорит о своей свободе, но лириче ской позиции не предполагает ни свободы воли, ни свободы совести. С позиции Базарова невозможно ответить на вопрос, свободен ли он. Для Автора законом является «Свободу, но и свободу вы бираю я». Он освобождается от сво ей идеи, но лириче ской позиции он не может изменить ее. Этот вывод подтверждает, что если человек нарушает чьи-то права, то это не освобождает его от ответственности. Бакаров показывает истинное лицо Автора и показывает ему пример свободы. Автор показывает свое отношение к герою. Он показывает, что открытое письмо Беликова к знакомому нет лириче ской замышляемым путем, к герою, отрицающее его любовь, и, наконец, к автору. Зная ответ на письмо, автор пытается решить, можно ли назвать Катерину «странной». «Странные» чувства он вызывает в ней: «Угроза, предзнаменование», «бесконечное отвращение». Автор мо ж<pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad><pad\n",
"\n",
"Context prompt (stop to exit) >>> Traceback (most recent call last):\n",
" File \"ru-gpts/generate_samples.py\", line 193, in <module>\n",
" File \"ru-gpts/generate_samples.py\", line 106, in generate_samples\n",
" raw_text = input(\"\\nContext prompt (stop to exit) >>> \")\n",
"KeyboardInterrupt\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"ru-gpts/generate_samples.py\", line 204, in <module>\n",
" main()\n",
" File \"ru-gpts/generate_samples.py\", line 189, in main\n",
" File \"ru-gpts/generate_samples.py\", line 200, in main\n",
" generate_samples(model, tokenizer, args)\n",
" File \"ru-gpts/generate_samples.py\", line 98, in generate_samples\n",
" File \"ru-gpts/generate_samples.py\", line 106, in generate_samples\n",
" raw_text = input(\"\\nContext prompt (stop to exit) >>> \")\n",
"KeyboardInterrupt\n",
"^C\n"
"KeyboardInterrupt\n"
],
"name": "stdout"
}
Expand All @@ -302,7 +371,7 @@
"base_uri": "https://localhost:8080/"
},
"id": "4JnhIyqd-Eeo",
"outputId": "2b70974b-6d4a-455d-9a95-0084bf34acb3"
"outputId": "98b0c48c-9127-4cd9-d86a-09951f11851c"
},
"source": [
"!export PYTHONPATH=${PYTHONPATH}:${HOME}/ru-gpts\n",
Expand All @@ -318,12 +387,12 @@
" --no-load-optim \\\n",
" --export-huggingface model_hf\n"
],
"execution_count": 37,
"execution_count": 17,
"outputs": [
{
"output_type": "stream",
"text": [
"2021-02-11 21:49:23.948606: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1\n",
"2021-08-13 15:02:22.859973: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0\n",
"WARNING: No training data specified\n",
"using world size: 1 and model-parallel size: 1 \n",
" > using dynamic loss scaling\n",
Expand All @@ -350,12 +419,12 @@
"base_uri": "https://localhost:8080/"
},
"id": "ZIfhv7KvDKQi",
"outputId": "6c51866e-377e-4da6-99b9-b30ded2f67db"
"outputId": "e61937bd-fb49-4b9c-c1ce-d25083b8db76"
},
"source": [
"!ls model_hf"
],
"execution_count": 38,
"execution_count": 18,
"outputs": [
{
"output_type": "stream",
Expand Down Expand Up @@ -384,7 +453,7 @@
"source": [
"from transformers import GPT2LMHeadModel"
],
"execution_count": 39,
"execution_count": 19,
"outputs": []
},
{
Expand All @@ -395,7 +464,7 @@
"source": [
"model = GPT2LMHeadModel.from_pretrained(\"model_hf\")"
],
"execution_count": 40,
"execution_count": 20,
"outputs": []
}
]
Expand Down
19 changes: 15 additions & 4 deletions src/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,15 @@ def load_checkpoint(model, optimizer, lr_scheduler, args, deepspeed=False):
torch.distributed.get_rank(), checkpoint_name))

# Load the checkpoint.
sd = torch.load(checkpoint_name, map_location='cpu')
if os.path.isfile(checkpoint_name):
sd = torch.load(checkpoint_name, map_location='cpu')
else:
# Try load deepspeed checkpoint with only megatron
checkpoint_name = os.path.join(
args.load, iteration,
'mp_rank_{:02d}_model_states.pt'.format(mpu.get_model_parallel_rank())
)
sd = torch.load(checkpoint_name, map_location='cpu')

if isinstance(model, torchDDP):
model = model.module
Expand All @@ -343,9 +351,12 @@ def load_checkpoint(model, optimizer, lr_scheduler, args, deepspeed=False):
try:
model.load_state_dict(sd['model'])
except KeyError:
print_rank_0('A metadata file exists but unable to load model '
'from checkpoint {}, exiting'.format(checkpoint_name))
exit()
try:
model.load_state_dict(sd['module'])
except KeyError:
print_rank_0('A metadata file exists but unable to load model '
'from checkpoint {}, exiting'.format(checkpoint_name))
exit()

# Optimizer.
if not release and not args.finetune and not args.no_load_optim:
Expand Down

0 comments on commit bb5cacf

Please sign in to comment.