|
续接上节我们的流程走到了,环境准备完毕。装完依赖之后,上节结果为:介绍LoRALoRA原理LoRA的核心思想是在保持预训练模型的大部分权重参数不变的情况下,通过添加额外的网络层来进行微调。这些额外的网络层通常包括两个线性层,一个用于将数据从较高维度降到较低维度(称为秩),另一个则是将其从低维度恢复到原始维度。这种方法的关键在于,这些额外的低秩层的参数数量远少于原始模型的参数,从而实现了高效的参数使用。LoRA优势参数效率高:LoRA通过仅微调少量额外参数而不是整个模型,显著减少了微调所需的计算资源和存储空间。避免灾难性遗忘:由于大部分预训练模型的参数保持不变,LoRA可以减轻在全参数微调过程中可能出现的灾难性遗忘问题。适应性强:LoRA不仅适用于语言模型,还可以扩展到其他类型的模型,如稳定扩散模型等,显示出良好的灵活性和适应性。配置文件在fintuning_demo目录下的configds_zereo_2/ds_zereo_3.json:deepspeed配置文件。lora.yaml/ptuning.yaml/sft.yaml:模型不同方式的配置文件,包括模型参数、优化器参数、训练参数等。这里选择LoRA,配置文件中的参数描述如下:训练模式这里主要使用finetune_hf.py该文件进行微调操作。其中的参数第一个参数:数据集的路径第二个参数:模型的路径第三个参数:微调配置文件单机多卡同多机多卡多机多卡OMP_NUM_THREADS=1torchrun--standalone--nnodes=1--nproc_per_node=8finetune_hf.pydata/AdvertiseGen/THUDM/chatglm3-6bconfigs/lora.yaml1单机单卡pythonfinetune_hf.pydata/AdvertiseGen/THUDM/chatglm3-6bconfigs/lora.yaml1参数配置官方微调目录:/root/autodl-tmp/ChatGLM3/finetune_demo配置文件目录:/root/autodl-tmp/ChatGLM3/finetune_demo/configs,当中我们关注lora.yaml官方数据训练的话,参数中需要一个:数据集的路径下载数据官方推荐的数据集是:AdvertiseGen,我们需要对其进行一些转换,才可以适配ChatGLM3-6B下载方式:GoogleDriver清华数据源数据一览{"conversations":[{"role":"user","content":"类型#裙*裙长#半身裙"},{"role":"assistant","content":"这款百搭时尚的仙女半身裙,整体设计非常的飘逸随性,穿上之后每个女孩子都能瞬间变成小仙女啦。料子非常的轻盈,透气性也很好,穿到夏天也很舒适。"}]}1数据处理官方提供了一个脚本来支持我们进行转换,运行下面的脚本。importjsonfromtypingimportUnionfrompathlibimportPathdef_resolve_path(path:Union[str,Path])->ath:returnPath(path).expanduser().resolve()def_mkdir(dir_name:Union[str,Path]):dir_name=_resolve_path(dir_name)ifnotdir_name.is_dir():dir_name.mkdir(parents=True,exist_ok=False)defconvert_adgen(data_dir:Union[str,Path],save_dir:Union[str,Path]):def_convert(in_fileath,out_fileath):_mkdir(out_file.parent)withopen(in_file,encoding='utf-8')asfin:withopen(out_file,'wt',encoding='utf-8')asfout:forlineinfin:dct=json.loads(line)sample={'conversations':[{'role':'user','content':dct['content']},{'role':'assistant','content':dct['summary']}]}fout.write(json.dumps(sample,ensure_ascii=False)+'\n')data_dir=_resolve_path(data_dir)save_dir=_resolve_path(save_dir)train_file=data_dir/'train.json'iftrain_file.is_file()ut_file=save_dir/train_file.relative_to(data_dir)_convert(train_file,out_file)dev_file=data_dir/'dev.json'ifdev_file.is_file()ut_file=save_dir/dev_file.relative_to(data_dir)_convert(dev_file,out_file)convert_adgen('data/AdvertiseGen','data/AdvertiseGen_fix')1234567891011121314151617181920212223242526272829303132333435363738394041最终数据输出到:data/AdvertiseGen_fix中。下面我们开始微调。测试训练下面我们使用命令来进行微调:CUDA_VISIBLE_DEVICES=0/root/.pyenv/shims/pythonfinetune_hf.py/root/autodl-tmp/data/AdvertiseGen_fixTHUDM/chatglm3-6bconfigs/lora.yaml1正常训练训练结束测试结果CUDA_LAUNCH_BLOCKING=1CUDA_VISIBLE_DEVICES=0/root/.pyenv/shims/pythoninference_hf.pyoutput/checkpoint-2000/--prompt"类型#裙*版型#显瘦*材质#网纱*风格#性感*裙型#百褶*裙下摆#压褶*裙长#连衣裙*裙衣门襟#拉链*裙衣门襟#套头*裙款式#拼接*裙款式#拉链*裙款式#木耳边*裙款式#抽褶*裙款式#不规则"1
|
|