thunlp / UltraChat

Large-scale, Informative, and Diverse Multi-round Chat Data (and Models)
MIT License
2.22k stars 114 forks source link

transformers加载llama预训练模型,并用BMTrainModelWrapper封装成bmtrain的模式后,为什么还要调用bmt.init_parameters(model) #26

Closed jinmin527 closed 1 year ago

jinmin527 commented 1 year ago

def get_model_tokenizer(args): model = LlamaForCausalLM.from_pretrained(args.model_name_or_path) tokenizer = LlamaTokenizer.from_pretrained(args.model_name_or_path) tokenizer.add_special_tokens({'pad_token': ""}) model.resize_token_embeddings(len(tokenizer)) model = bmt.BMTrainModelWrapper(model) bmt.init_parameters(model) return model, tokenizer 这个函数先加载预训练的模型,然后调用bmt.BMTrainModelWrapper封装成bmtrain的模式。为什么还要调用 bmt.init_parameters(model)对模型参数进行初始化? 首先,对预训练好的模型进行参数初始化,难道不会重置模型参数吗?这样的话,何必用预训练模型? 其次是,BMTrainModelWrapper封装过程中,调用的make_distributed函数,在此函数内部实现了对模型参数的分布式封装model._parameters[kw] = DistributedParameter(model._parameters[kw], requires_grad=model._parameters[kw].requires_grad),但是并没有提供_init_method参数。哪怕调用bmt.init_parameters(model),实际上因为_init_method为None,也不会进行对应的初始化操作

Mint-hfut commented 1 year ago

意思是bmt.init_parameters(model)这段代码是无用的是吧?

jinmin527 commented 1 year ago

意思是bmt.init_parameters(model)这段代码是无用的是吧?

我感觉是bmt.init_parameters(model)这行代码没有起作用,而且不应该有。在此也是想确认一下,我的理解是否正确

yulinchen99 commented 1 year ago

Hi, thanks for reminding! It is indeed a bug and we will remove it.