Pen*_*uin 6 machine-learning pytorch huggingface-transformers huggingface
假设我有以下模型(来自此脚本):
\nfrom transformers import AutoTokenizer, GPT2LMHeadModel, AutoConfig\n\nconfig = AutoConfig.from_pretrained(\n "gpt2",\n vocab_size=len(tokenizer),\n n_ctx=context_length,\n bos_token_id=tokenizer.bos_token_id,\n eos_token_id=tokenizer.eos_token_id,\n)\nmodel = GPT2LMHeadModel(config)\n
Run Code Online (Sandbox Code Playgroud)\n我目前正在为 Trainer 使用以下训练参数:
\nfrom transformers import Trainer, TrainingArguments\n\nargs = TrainingArguments(\n output_dir="codeparrot-ds",\n per_device_train_batch_size=32,\n per_device_eval_batch_size=32,\n evaluation_strategy="steps",\n eval_steps=5_000,\n logging_steps=5_000,\n gradient_accumulation_steps=8,\n num_train_epochs=1,\n weight_decay=0.1,\n warmup_steps=1_000,\n lr_scheduler_type="cosine",\n learning_rate=5e-4,\n save_steps=5_000,\n fp16=True,\n push_to_hub=True,\n)\n\ntrainer = Trainer(\n model=model,\n tokenizer=tokenizer,\n args=args,\n data_collator=data_collator,\n train_dataset=tokenized_datasets["train"],\n eval_dataset=tokenized_datasets["valid"],\n)\ntrainer.train()\n
Run Code Online (Sandbox Code Playgroud)\n我如何对此进行调整,以便训练器将使用多个 GPU(例如 8 个)?
\n我发现了这个问题,但他们没有使用 Trainer,只是使用 PyTorchDataParallel
model = torch.nn.DataParallel(model, device_ids=[0,1])\n
Run Code Online (Sandbox Code Playgroud)\n关于使用多个 GPU 进行训练的Huggingface文档对我来说并不是很清楚,并且没有使用 Trainer 的示例。相反,我在这里发现他们使用 向 python 文件添加参数nproc_per_node
,但这对于他们的脚本来说似乎过于具体,并且不清楚一般如何使用。这与他们论坛上的讨论相反"The Trainer class automatically handles multi-GPU training, you don\xe2\x80\x99t have to do anything special."
。所以这很令人困惑,因为一方面他们提到在多个 GPU 上进行训练需要做一些事情,并且还说训练器会自动处理它。所以我不知道该怎么办。
小智 3
我使用了以下 python 脚本之一(例如 run_clm.py),其中 trainer.train() 位于其中: https: //github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling
制作一个finetune.sh bash文件,在里面执行一个python脚本
#!/bin/bash
export LD_LIBRARY_PATH=/home/miniconda3/envs/HF/lib/python3.7/.../nvidia/cublas/lib/:$LD_LIB
export CUDA_VISIBLE_DEVICES=0,1 # will use two GPUs
###############################
python run_clm.py --options...
Run Code Online (Sandbox Code Playgroud)
然后通过 bash 运行它,它将按照定义在两个 GPU 上运行。
$ nohup ./finetune.sh &
Run Code Online (Sandbox Code Playgroud)
如果您想运行所有可用的 8 个 GPU,
只需注释以下行
#export CUDA_VISIBLE_DEVICES=0,1 # will use all GPUs
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7352 次 |
最近记录: |