pytorch Huggingface Trainer有2个GPU,无法训练

qyswt5oh  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(215)

Huggingface论坛有点死了,所以我在这里尝试它代替。当我用1 A100 80 GB训练我的模型时,它工作得很好,没有任何问题。我使用的是一个相当大的模型,但是PEFT的内存足以在一个GPU上训练。
当我尝试在没有PEFT的情况下训练模型时,内存不再足够,即使使用低批量和梯度累积,我也会得到“CUDA out of memory“。所以我添加了另一个GPU,并认为我可以像以前一样运行训练器,但我没有从trainer.train()或任何其他训练器函数获得任何返回。
它只是无休止地循环,没有返回任何东西。
如果有帮助,这些是我的TrainingArguments()

training_args = TrainingArguments(
    output_dir= "~/{}".format(peft_method),
    logging_dir= "~/logs/{}".format(peft_method),
    learning_rate= 3e-4,
    per_device_train_batch_size= batch_size,
    per_device_eval_batch_size= batch_size,
    num_train_epochs= 10,
    weight_decay= 0.01,
    evaluation_strategy= "epoch",
    save_strategy= "epoch",
    load_best_model_at_end= True,
    logging_steps=logging_steps,
    optim="adamw_torch",
    save_total_limit = 1
)

字符串
我的Trainer()

trainer = Trainer(
    model = model,
    args= training_args,
    train_dataset= processed_data["train"],
    eval_dataset= processed_data["test"],
    tokenizer= tokenizer,
    data_collator= data_collator,
    compute_metrics= compute_metrics,
    callbacks=[callback]
)


我的设备被设置为“cuda:0”,模型也被正确地放在GPU上。我试图把它放在另一个GPU上,但它也没有返回任何东西。
谢谢您的帮助!

yeotifhr

yeotifhr1#

我假设你正在使用QLORA + PEFT。
确保在创建模型时使用device_map=“auto”,transformers trainer会处理剩下的事情。

model = AutoModelForCausalLM.from_pretrained(
    model_path,
    use_safetensors=True,
    quantization_config=bnb_config,
    trust_remote_code=True,
    device_map="auto", )

字符串

相关问题