前提・実現したいこと
PyTorchで構築したBERTモデルをTensorFlowのモデルに変換したいと考えています。具体的には、PyTorchのスクリプト(https://github.com/huggingface/transformers)で作成したBERTモデルを、Googleが公式に提供しているTensorFlowのスクリプト(https://github.com/google-research/bert)で作成したものと同様の形式になるように変換することを想定しています。
現状、自分はMicrosoftが提供しているMMdnnという変換システムの利用を検討しているのですが、試しに後述のコードで変換を実行したところ、以下のエラーメッセージが発生しました。
実行したコード
Python3
1mmconvert -sf pytorch -iw pytorch_model.bin -in bert_config.json -df tensorflow -om model.ckpt
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/home/ogawa/anaconda3/lib/python3.7/site-packages/mmdnn/conversion/pytorch/pytorch_parser.py", line 76, in __init__ model = torch.load(model_file_name) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/torch/serialization.py", line 426, in load return _load(f, map_location, pickle_module, **pickle_load_args) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/torch/serialization.py", line 603, in _load magic_number = pickle_module.load(f, **pickle_load_args) _pickle.UnpicklingError: invalid load key, '{'. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/ogawa/anaconda3/bin/mmconvert", line 10, in <module> sys.exit(_main()) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/mmdnn/conversion/_script/convert.py", line 102, in _main ret = convertToIR._convert(ir_args) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/mmdnn/conversion/_script/convertToIR.py", line 92, in _convert parser = PytorchParser(model, inputshape[0]) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/mmdnn/conversion/pytorch/pytorch_parser.py", line 78, in __init__ model = torch.load(model_file_name, map_location='cpu') File "/home/ogawa/anaconda3/lib/python3.7/site-packages/torch/serialization.py", line 426, in load return _load(f, map_location, pickle_module, **pickle_load_args) File "/home/ogawa/anaconda3/lib/python3.7/site-packages/torch/serialization.py", line 603, in _load magic_number = pickle_module.load(f, **pickle_load_args) _pickle.UnpicklingError: invalid load key, '{'.
恐らく与えたjsonファイルの形式が適切でないために発生しているエラーだと思われますが、どのように修正すればよいのか見当がつかない状況です。
どのように修正すべきなのか、もしくは他にもっと良い方法があれば、ご教授いただければ幸いです。
よろしくお願いいたします。
補足情報
変換対象とするモデル、および想定している変換後のモデルはそれぞれ以下の通りです。
変換対象とするモデル:pytorch_model.bin
想定する変換後のモデル:model.ckpt
(ファイルとしてはmodel.ckpt.data-00000-of-00001 , model.ckpt.meta, model.ckpt.indexの三つが作成されることを期待)
また、前述のコードで与えたvocab.txtおよびbert_config.jsonはそれぞれ以下の通りです。
vocab.txt(一部抜粋)
[PAD] [UNK] [CLS] [SEP] [MASK] の 、 に 。 は た を る て で が と し い 年 な れ \ ・ っ あ ( )
・bert_config.json
{ "attention_probs_dropout_prob": 0.1, "hidden_act": "gelu", "hidden_dropout_prob": 0.1, "hidden_size": 768, "initializer_range": 0.02, "intermediate_size": 3072, "max_position_embeddings": 512, "num_attention_heads": 12, "num_hidden_layers": 12, "type_vocab_size": 2, "vocab_size": 32005 }
あなたの回答
tips
プレビュー