Closed xuexidi closed 1 year ago
可能是因为你用FP16存储的?
可能是因为你用FP16存储的?
我看您代码里写的都是fp16类型的,关于数据类型我没有做其他修改,那么按理来说应该跟您的LoRA权重大小是一样的吧? 或者,您在训练和保存的时候用的不是fp16吗?
我PT阶段的LoRA权重大小跟您的Chinese-LLaMA-Plus-33B的LoRA权重大小一样,都是1.3G左右。 SFT阶段权重大小差距有点大
Plus阶段的SFT训练我们增大了RANK=64,所以对于33B模型来讲可训参数增加的较多(约426M),最终模型的大小也会受此影响变大,您的模型的大小和llama-plus的大小相同,是因为都是rank=8训练的。
Plus阶段的SFT训练我们增大了RANK=64,所以对于33B模型来讲可训参数增加的较多(约426M),最终模型的大小也会受此影响变大,您的模型的大小和llama-plus的大小相同,是因为都是rank=8训练的。
原来如此,那就解释得通了,非常感谢您的开源和解答!!!
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your consideration.
提交前必须检查以下项目
- [x] 请确保使用的是仓库最新代码(git pull),一些问题已被解决和修复。
- [x] 由于相关依赖频繁更新,请确保按照Wiki中的相关步骤执行
- [x] 我已阅读FAQ章节并且已在Issue中对问题进行了搜索,没有找到相似问题和解决方案
- [x] 第三方插件问题:例如llama.cpp、text-generation-webui、LlamaChat等,同时建议到对应的项目中查找解决方案
- [x] 模型正确性检查:务必检查模型的SHA256.md,模型不对的情况下无法保证效果和正常运行
问题类型
模型训练与精调
基础模型
LLaMA-33B
操作系统
Linux
详细描述问题
您好,非常感谢您的开源! 我按照您的流程走了一遍33B的模型PT和SFT。我发现我最终得到的SFT的LoRA权重只有1.3G左右,且能正常推理,但是我发现您项目里Chinese-Alpaca-Pro-33B的LoRA权重有2.1G大小,不知道造成LoRA大小差别这么大的原因在哪里,担心是不是哪个环节没搞对。想请教一下您。 硬件:2 * A800 80G 我的流程如下: 1、下载Meta原版LLaMA-33B 2、把LLaMA-33B转换成HF格式,得到HF格式的LLaMA-33B,即LLaMA-33B-HF 3、LLaMA-33B-HF与chinese_llama_plus_lora_33b合并,得到chinese_llama_plus_merged模型(HF格式) 4、基于chinese_llama_plus_merged模型进行PT训练(deepspeed stage2, offload),训练全新的LoRA权重。得到PT模式下的LoRA权重。 5、把chinese_llama_plus_merged模型与PT模式下的LoRA权重合并,得到chinese_llama_plus_pt_merged模型。 6、基于chinese_llama_plus_pt_merged模型进行SFT训练(deepspeed stage2, offload),tokenizer用的是您项目里Chinese-Alpaca-Pro-33B的LoRA权重文件夹下的tokennizer。训练完毕得到SFT模式下的LoRA权重,此时发现该SFT的adapter_model.bin大小只有1.3G左右,虽然只训练了500 steps,拟合的也是比较简单的指令对话,但是推理测试发现确实会按照指令微调格式进行回复了。
问题:为啥我得到的SFT的LoRA权重只有1.3G左右,而您项目里Chinese-Alpaca-Pro-33B的LoRA权重有2.1G大小呢?
如下是我的run_sft.sh内容:
seed_random=1234 lr=1e-4 lora_rank=8 lora_alpha=32 lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj" modules_to_save="embed_tokens,lm_head" lora_dropout=0.05 pretrained_model=/home/xue/codes/Chinese-LLaMA-Alpaca-main/scripts/training/merged_models/Chinese-llama_pyPT_33B_merge_HF chinese_tokenizer_path=/home/xue/codes/Chinese-LLaMA-Alpaca-main/scripts/training/chinese_alpaca_pro_lora_33b dataset_dir=/home/xue/codes/Chinese-LLaMA-Alpaca-main/data/robotqa-data per_device_train_batch_size=1 per_device_eval_batch_size=1 training_steps=2000 gradient_accumulation_steps=1 output_dir=output_sft_0803 peft_model=path/to/peft/model/dir validation_file=/home/xue/codes/Chinese-LLaMA-Alpaca-main/data/robotqa-data/glm_robot_datasets.json deepspeed_config_file=ds_zero2_offload_sft.json torchrun --nnodes 1 --nproc_per_node 2 run_clm_sft_with_peft.py \ --deepspeed ${deepspeed_config_file} \ --model_name_or_path ${pretrained_model} \ --tokenizer_name_or_path ${chinese_tokenizer_path} \ --dataset_dir ${dataset_dir} \ --validation_split_percentage 0.001 \ --per_device_train_batch_size ${per_device_train_batch_size} \ --per_device_eval_batch_size ${per_device_eval_batch_size} \ --do_train \ --seed ${seed_random} \ --fp16 \ --num_train_epochs 1 \ --lr_scheduler_type cosine \ --learning_rate ${lr} \ --warmup_ratio 0.03 \ --weight_decay 0 \ --logging_strategy steps \ --logging_steps 10 \ --save_strategy steps \ --save_total_limit 3 \ --save_steps 500 \ --gradient_accumulation_steps ${gradient_accumulation_steps} \ --preprocessing_num_workers 8 \ --max_seq_length 512 \ --output_dir ${output_dir} \ --overwrite_output_dir \ --ddp_timeout 30000 \ --logging_first_step True \ --lora_rank ${lora_rank} \ --lora_alpha ${lora_alpha} \ --trainable ${lora_trainable} \ --modules_to_save ${modules_to_save} \ --lora_dropout ${lora_dropout} \ --torch_dtype float16 \ --gradient_checkpointing \ --ddp_find_unused_parameters False
deepspeed的json配置如下:
{ "fp16": { "enabled": "auto", "loss_scale": 0, "loss_scale_window": 100, "initial_scale_power": 16, "hysteresis": 2, "min_loss_scale": 1e-10 }, "zero_optimization": { "stage": 2, "offload_optimizer": { "device": "cpu", "pin_memory": true }, "allgather_partitions": true, "allgather_bucket_size": 1e8, "overlap_comm": true, "reduce_scatter": true, "reduce_bucket_size": 1e8, "contiguous_gradients": true }, "gradient_accumulation_steps": "auto", "gradient_clipping": "auto", "steps_per_print": 2000, "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto", "wall_clock_breakdown": false }
期待您的解答,谢谢您!
依赖情况(代码类问题务必提供)
# 请在此处粘贴依赖情况
运行日志或截图
# 请在此处粘贴运行日志
老哥,你好,请问一张a800(80g)能训起来33b吗?你试过吗?参数调小也可以 我试着貌似不行
提交前必须检查以下项目
问题类型
模型训练与精调
基础模型
LLaMA-33B
操作系统
Linux
详细描述问题
您好,非常感谢您的开源! 我按照您的流程走了一遍33B的模型PT和SFT。我发现我最终得到的SFT的LoRA权重只有1.3G左右,且能正常推理,但是我发现您项目里Chinese-Alpaca-Pro-33B的LoRA权重有2.1G大小,不知道造成LoRA大小差别这么大的原因在哪里,担心是不是哪个环节没搞对。想请教一下您。 硬件:2 * A800 80G 我的流程如下: 1、下载Meta原版LLaMA-33B 2、把LLaMA-33B转换成HF格式,得到HF格式的LLaMA-33B,即LLaMA-33B-HF 3、LLaMA-33B-HF与chinese_llama_plus_lora_33b合并,得到chinese_llama_plus_merged模型(HF格式) 4、基于chinese_llama_plus_merged模型进行PT训练(deepspeed stage2, offload),训练全新的LoRA权重。得到PT模式下的LoRA权重。 5、把chinese_llama_plus_merged模型与PT模式下的LoRA权重合并,得到chinese_llama_plus_pt_merged模型。 6、基于chinese_llama_plus_pt_merged模型进行SFT训练(deepspeed stage2, offload),tokenizer用的是您项目里Chinese-Alpaca-Pro-33B的LoRA权重文件夹下的tokennizer。训练完毕得到SFT模式下的LoRA权重,此时发现该SFT的adapter_model.bin大小只有1.3G左右,虽然只训练了500 steps,拟合的也是比较简单的指令对话,但是推理测试发现确实会按照指令微调格式进行回复了。
问题:为啥我得到的SFT的LoRA权重只有1.3G左右,而您项目里Chinese-Alpaca-Pro-33B的LoRA权重有2.1G大小呢?
如下是我的run_sft.sh内容:
deepspeed的json配置如下:
期待您的解答,谢谢您!
依赖情况(代码类问题务必提供)
运行日志或截图