Transformers 轉換Tensorflow的Checkpoints

提供了一個命令行界面來轉換模型中的原始Bert/GPT/GPT-2/Transformer-XL/XLNet/XLM的Checkpoints,然後使用庫的from_pretrained方法加載該Checkpoints。

注意:從2.3.0版本開始,轉換腳本現在已成為 transformers CLI(transformers-cli)的一部分,在任何transformers=2.3.0的都可用。以下文檔反映了transformers-cli convert命令格式。

BERT

你可以通過使用convert_tf_checkpoint_to_pytorch.py將任意的BERT的Tensorflow的Checkpoints轉換為PyTorch格式(特別是由Google發佈的預訓練模型(https://github.com/google-research/bert#pre-trained-models))

此CLI將TensorFlow checkpoints(三個以bert_model.ckpt開頭的文件)和關聯的配置文件(bert_config.json)作為輸入,併為此配置創建PyTorch模型,並加載在PyTorch模型中從TensorFlow checkpoints進行權重計算,然後將生成的模型保存到標準PyTorch格式文件中,該文件可以使用torch.load()導入(請參閱run_bert_extract_features.py, run_bert_classifier.py and run_bert_squad.py的示例)。

你只需一次運行此轉換腳本即可獲得PyTorch模型。然後你可以忽略TensorFlow checkpoints(以bert_model.ckpt開頭的三個文件),但請確保保留配置文件(bert_config.json)和詞彙表文件(vocab.txt),因為PyTorch模型也需要這些。

要運行此特定的轉換腳本,你將需要安裝TensorFlow和PyTorch(pip install tensorflow)。存儲庫的其餘部分僅需要PyTorch。

這是一個預訓練的BERT-Base Uncased模型的轉換過程示例:

<code>export BERT_BASE_DIR=/path/to/bert/uncased_L-12_H-768_A-12

transformers-cli convert --model_type bert \\
--tf_checkpoint $BERT_BASE_DIR/bert_model.ckpt \\
--config $BERT_BASE_DIR/bert_config.json \\
--pytorch_dump_output $BERT_BASE_DIR/pytorch_model.bin/<code>

你可以在此處(https://github.com/google-research/bert#pre-trained-models)下載Google的預訓練模型。

OpenAI GPT

這是一個預訓練OpenAI GPT模型轉換過程的示例,假設你的NumPy checkpoints保存的格式與OpenAI的預訓練模型相同(請參見此處(https://github.com/openai/finetune-transformer-lm))

<code>export OPENAI_GPT_CHECKPOINT_FOLDER_PATH=/path/to/openai/pretrained/numpy/weights

transformers-cli convert --model_type gpt \\
--tf_checkpoint $OPENAI_GPT_CHECKPOINT_FOLDER_PATH \\
--pytorch_dump_output $PYTORCH_DUMP_OUTPUT \\
[--config OPENAI_GPT_CONFIG] \\
[--finetuning_task_name OPENAI_GPT_FINETUNED_TASK] \\/<code>

OpenAI GPT-2

這是預訓練OpenAI GPT-2模型轉換過程的示例(請參見此處(https://github.com/openai/gpt-2))

<code>export OPENAI_GPT2_CHECKPOINT_PATH=/path/to/gpt2/pretrained/weights

transformers-cli convert --model_type gpt2 \\
--tf_checkpoint $OPENAI_GPT2_CHECKPOINT_PATH \\
--pytorch_dump_output $PYTORCH_DUMP_OUTPUT \\
[--config OPENAI_GPT2_CONFIG] \\
[--finetuning_task_name OPENAI_GPT2_FINETUNED_TASK]/<code>

Transformer-XL

這是預訓練Transformer-XL模型轉換過程的示例(請參見此處的(https://github.com/kimiyoung/transformer-xl/tree/master/tf#obtain-and-evaluate-pretrained-sota-models))

<code>export TRANSFO_XL_CHECKPOINT_FOLDER_PATH=/path/to/transfo/xl/checkpoint

transformers-cli convert --model_type transfo_xl \\
--tf_checkpoint $TRANSFO_XL_CHECKPOINT_FOLDER_PATH \\
--pytorch_dump_output $PYTORCH_DUMP_OUTPUT \\
[--config TRANSFO_XL_CONFIG] \\
[--finetuning_task_name TRANSFO_XL_FINETUNED_TASK]/<code>

XLNet

這是一個預訓練XLNet模型的轉換過程示例:

<code>export TRANSFO_XL_CHECKPOINT_PATH=/path/to/xlnet/checkpoint
export TRANSFO_XL_CONFIG_PATH=/path/to/xlnet/config

transformers-cli convert --model_type xlnet \\
--tf_checkpoint $TRANSFO_XL_CHECKPOINT_PATH \\
--config $TRANSFO_XL_CONFIG_PATH \\
--pytorch_dump_output $PYTORCH_DUMP_OUTPUT \\
[--finetuning_task_name XLNET_FINETUNED_TASK] \\/<code>

XLM

這是一個預訓練XLM模型的轉換過程示例:

<code>export XLM_CHECKPOINT_PATH=/path/to/xlm/checkpoint

transformers-cli convert --model_type xlm \\
--tf_checkpoint $XLM_CHECKPOINT_PATH \\
--pytorch_dump_output $PYTORCH_DUMP_OUTPUT
[--config XML_CONFIG] \\
[--finetuning_task_name XML_FINETUNED_TASK]/<code>


分享到:


相關文章: