代码阅读与运行2
这次运行的是大名鼎鼎的OpenRLHF
遇到的一些问题
自己的设备是colab提供的A100 GPU,显存40GB
安装的过程没有太大问题,都能顺利解决,安装之后按照README的顺序试着用以下命令启动SFT的训练(提供的脚本还没试过)
!deepspeed --module openrlhf.cli.train_sft \
--max_len 1024 \
--dataset Open-Orca/OpenOrca \
--input_key question \
--output_key response \
--input_template $'User: {}\nAssistant: ' \
--train_batch_size 16 \
--micro_train_batch_size 2 \
--max_samples 250000 \
--pretrain Qwen/Qwen3-1.7B \
--save_path ./checkpoint/qwen3-1.7b-sft \
--save_steps -1 \
--logging_steps 1 \
--eval_steps -1 \
--zero_stage 3 \
--max_epochs 1 \
--bf16 \
--flash_attn \
--learning_rate 5e-6 \
--gradient_checkpointing \
--packing_samples \
--load_checkpoint \
(以上代码是我修改后的,不然跑不了)
max_len:从4096减少到1024
train_batch_size:从256减少到16(指的是在更新模型参数之前,累积梯度的总样本数量。这是一个逻辑上的批次大小,它与实际的硬件无关,只和优化器的更新频率有关)
micro_train_batch_size:指的是每个 GPU 在每次前向和反向传播中处理的实际样本数量。这是由 GPU 显存决定的。如果这个值太大, GPU 会因显存不足而崩溃(但是这个我没改)
在原始配置里面,256/2=128,deepspeed会认为我需要128个GPU,但是我只有一个,无法完成分布式训练的需求。
调整到16/2=8之后是可以的,8次累计在单张GPU上可以完成,deepspeed 会理解是在单卡上进行训练,并按照梯度累积的方式执行。
max_samples:数量减半了
pretrain:把meta-llama/Meta-Llama-3-8B换了(一开始申请使用还失败了,地区得选择阿美莉卡,名字也得正常一些),跑不了;后来用的Qwen/Qwen3-4B,也跑不了,最后选的Qwen/Qwen3-1.7B,发现新的问题(ValueError: API key must be 40 characters long, yours was 519)
发现这个玩意需要W&B的API keys,我给的是错的(难绷)
(Support website:https://docs.wandb.ai/support/find_api_key/)
这个网站感觉卡的不行
但是后来发现还是有个问题就是W&B给的API是42位,但是需要的是40位,我没有明白是为什么,所以把use_wandb 删掉了,改成用代码登录W&B网站
并且colab无法识别\,所以改成了下面这样
最后改成这样,能正常跑,预计30h
command = """
deepspeed --module openrlhf.cli.train_sft \\
--max_len 1024 \\
--dataset Open-Orca/OpenOrca \\
--input_key question \\
--output_key response \\
--input_template $'User: {}\\nAssistant: ' \\
--train_batch_size 16 \\
--micro_train_batch_size 2 \\
--max_samples 250000 \\
--pretrain Qwen/Qwen3-0.6B \\
--save_path ./checkpoint/qwen3-0.6b-sft \\
--save_steps -1 \\
--logging_steps 1 \\
--eval_steps -1 \\
--zero_stage 3 \\
--max_epochs 1 \\
--bf16 \\
--flash_attn \\
--learning_rate 5e-6 \\
--gradient_checkpointing \\
--packing_samples \\
--load_checkpoint
"""
!{command}