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上,但它也没有返回任何东西。
谢谢您的帮助!
1条答案
按热度按时间yeotifhr1#
我假设你正在使用QLORA + PEFT。
确保在创建模型时使用device_map=“auto”,transformers trainer会处理剩下的事情。
字符串