pytorch 如何在HuggingFace上加载更小的GPT2模型?

anauzrmj  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(196)

我知道我可以加载最小的GPT2变体

from transformers import AutoTokenizer, GPT2LMHeadModel, AutoConfig

config = AutoConfig.from_pretrained(
    "gpt2",
    vocab_size=len(tokenizer),
    n_ctx=context_length,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
)
model = GPT2LMHeadModel(config)
model_size = sum(t.numel() for t in model.parameters())
print(f"GPT-2 size: {model_size/1000**2:.1f}M parameters")
>>> GPT-2 size: 124.2M parameters

但是我怎样才能加载一个解码器层数较少的GPT2架构呢?比如说3层或5层而不是原来的(我想是12层)?注意我是从头开始训练的,所以我不是在寻找一个已经预先训练好的模型。

rqcrx0a6

rqcrx0a61#

为了堆叠3或5个解码器层,而不是gpt2具有的默认层数(12),将n_layer=3n_layer=5作为附加参数传递到AutoConfig类的.from_pretrained()方法(GPT2Config在引擎盖下)就足够了。

config = AutoConfig.from_pretrained(
    "gpt2",
    vocab_size=len(tokenizer),
    n_ctx=context_length,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
    n_layer=3
)

或者,您也可以传递num_hidden_layers=3num_hidden_layers=5。实际上,由于https://github.com/huggingface/transformers/pull/13026,这两者是可以互换的。

config = AutoConfig.from_pretrained(
    "gpt2",
    vocab_size=len(tokenizer),
    n_ctx=context_length,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
    num_hidden_layers=3
)

相关问题