#huggingface-transformers
#huggingface-transformers
Вопрос:
Я думаю, что моя проблема здесь связана с несоответствием версии transformer… но я хотел бы получить некоторую помощь в этом…
Ранее я использовал библиотеку huggingface для точной настройки языковой модели. Для этого требуется корпус, существующая модель BERT, и точная настройка этой модели с использованием этого корпуса. Моя команда была
python run_language_modelling.py --output_dir=lm_finetune --model_type=bert --model_name_or_path=bert-base-uncased --do_train --train_data_file=thread0_wdc20.txt --do_eval --eval_data_file=wiki.test.raw --mlm --save_total_limit=1 --save_steps=2 --line_by_line --num_train_epochs=2
Я успешно настроил модели, и это создало папку, содержащую следующие файлы:
checkpoint-183236 config.json eval_results_lm.txt lm_finetune pytorch_model.bin special_tokens_map.json tokenizer_config.json training_args.bin vocab.txt
И я также успешно загрузил эту точно настроенную языковую модель для последующих задач.
Проблема в том, что я не помню версии библиотек, которые я использовал для всего этого — pytorch, transformers, tensorflow…
Недавно я экспериментировал с чем-то, что потребовало от меня переустановки этих библиотек. Их версии теперь:
tensorflow-gpu 2.2.0
transformers 3.0.2
pytorch 1.4.0
torchtext 0.5.0
И когда я использую эту среду для перезагрузки этих ранее настроенных языковых моделей, я получаю эту ошибку:
File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/li1zz/wop_matching/src/exp/run_bert_standard.py", line 313, in <module>
bert_model = transformers.TFBertModel.from_pretrained(bert_model)
File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/transformers/modeling_tf_utils.py", line 437, in from_pretrained
[WEIGHTS_NAME, TF2_WEIGHTS_NAME], pretrained_model_name_or_path
OSError: Error no file named ['pytorch_model.bin', 'tf_model.h5'] found in directory /home/li1zz/bert/lm_finetune_proddesc/lm_finetune_part00 or `from_pt` set to False
Очевидно, что файл, который сейчас отсутствует, является
tf_model.h5
Я не понимаю, как у меня возникла эта ошибка — точно настроенные модели работали раньше. И единственное, о чем я могу думать, это несоответствие версий. Т.Е. Я доработал эти модели, используя версию библиотек, которые несовместимы с теми, которые я сейчас использую, поскольку отсутствует один файл.
Кто-нибудь может дать некоторое представление об этом? Я использую неправильные версии библиотек? Как я могу это исправить, не выполняя заново всю настройку языковой модели, используя эту новую среду снова?
Ответ №1:
Я обнаружил, что решением должно быть добавление ‘from_pt = True’ в строку, которая загружает модель:
bert_model = transformers.TFBertModel.from_pretrained(bert_model, from_pt=True)
На самом деле это указано в сообщении об ошибке. И это должно быть дополнительной функцией, потому что я четко помню, что мой предыдущий код работал, и у него не было этого параметра.
Ответ №2:
Файлы, которые вы упомянули выше, указывают на то, что вы обучили PyTorch model ( pytorch_model.bin
) , но в вашем собственном ответе вы пытаетесь загрузить модель TensorFlow с помощью:
bert_model = transformers.TFBertModel.from_pretrained(bert_model, from_pt=True)
Как вы уже выяснили, вы можете создать модель тензорного потока из PyTorch state_dict, установив from_pt=True . Но в случае, если для вас не имеет значения, используете ли вы PyTorch или TensorFlow, вы можете сразу инициализировать модель PyTorch с помощью:
bert_model = transformers.BertModel.from_pretrained(bert_model)
Я не пробовал, но предполагаю, что это будет быстрее. В документации также упоминается, что быстрее преобразовать PyTorch state_dict с помощью одного из предоставленных сценариев преобразования и последующей загрузки модели как using from_pt=True
.