什么是lora微调
LoRA 提出在预练习模子的参数矩阵上添加低秩分解矩阵来近似每层的参数更新,从而镌汰适配卑鄙使命所须要练习的参数。
情况准备
这次使用到的微调框架是llama-factory。这个框架集成了对多种模子举行各种练习的代码,少量修改就可使用。
我是在昇腾上使用docker安装的,装 Ascend CANN Toolkit and Kernels已经提前装好了,如果没有的话须要别的安装
然后安装llama-factory:
- git clone https://gitee.com/hiyouga/LLaMA-Factory.git
- cd LLaMA-Factory
- pip install -e '.[torch-npu,metrics]'
复制代码 要是缺什么再pi install 来安装。
准备数据
LLaMA Factory工程目次的data目次下有已经有各种实例数据集了,仿照格式自己做一个就行。好比alpaca格式如下(必须有"instruction"、"output"2个字段)
- [
- {
- "instruction": "人类指令(必填)",
- "input": "人类输入(选填)",
- "output": "模型回答(必填)",
- "system": "系统提示词(选填)",
- "history": [
- ["第一轮指令(选填)", "第一轮回答(选填)"],
- ["第二轮指令(选填)", "第二轮回答(选填)"]
- ]
- }
- ]
复制代码 好比:
- [
- {
- "instruction": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。",
- "input": "",
- "output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元——细胞所构成。这是生物学的一个基础理论,认为细胞是所有生物的基本结构和功能单位,所有的生物都是由一个或多个细胞组成,细胞只能通过细胞分裂产生新的细胞。这一理论由薛定谔、施瓦内和雪莱于1839年首次提出。\n\n日心说是指太阳是太阳系的中心,也就是说,行星围绕太阳旋转的理论。这个理论打破了传统的地心说观点,认为地球并不是宇宙的中心。日心说的提出者是尼古拉·哥白尼,他在16世纪初发表了他的著作《天体运行论》,阐述了太阳系行星围绕太阳运行的模型,为天文学的发展做出了巨大贡献。"
- },
- {
- "instruction": "输入三支篮球队的名称并生成一个适当的口号。",
- "input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。",
- "output": "输出: "雷霆,公牛和网队:各显神通,角逐群雄!""
- },
- {
- "instruction": "比较以下两位著名人物,使用特征列表并以句子形式提供输出。",
- "input": "人物1:阿尔伯特·爱因斯坦\n人物2:斯蒂芬·霍金\n特征:智力、教育、对世界的影响",
- "output": "阿尔伯特·爱因斯坦和斯蒂芬·霍金都是拥有极其出色智力的人物。两人都取得过非常高的教育成就,他们推进了科学发展并在世界范围内产生了深远的影响。爱因斯坦以其相对论和质能关系公式而闻名,而霍金以其关于黑洞和宇宙的发现而著称。两位科学家都以其深厚的学识和非凡的贡献影响了世界。"
- },
- {
- "instruction": "请根据以下文章构建一个需要回答的问题。",
- "input": "",
- "output": "我不好意思,您没有提供任何信息或文章来供我根据它构建问题。 请提供相应的文章或信息,以便我能够帮助您构建问题。"
- }
- ]
复制代码 将练习数据集文件放到llama-factory工程下的data目次下,然后修改data/dataset_info.json文件,增长数据集的入口和目次,如果我们在data下放了一个alpaca_zh_demo.json文件,则要增长的内容如下:
修改练习使命的设置文件
在examples\lora_multi_npu\目次下新建一个设置文件(可以从已有的文件拷贝已往修改)。好比 我新建的文件叫baichuan2_lora_sft_ds.yaml,内容如下:
- ### model
- model_name_or_path: /home/xxxx/Baichuan2-13B-Chat/
- #/home/mindformer_share/baichuan-inc/Baichuan2-13B-Chat/
- ### method
- stage: sft
- do_train: true
- finetuning_type: lora
- lora_target: all
- ### ddp
- ddp_timeout: 180000000
- deepspeed: examples/deepspeed/ds_z0_config.json
- ### dataset
- dataset: alpaca_zh_demo
- template: baichuan2
- cutoff_len: 1024
- max_samples: 1000
- overwrite_cache: true
- preprocessing_num_workers: 16
- ### output
- output_dir: saves/Baichuan2-13B-lora-checkpoint
- logging_steps: 10
- save_steps: 500
- plot_loss: true
- overwrite_output_dir: true
- ### train
- per_device_train_batch_size: 1
- gradient_accumulation_steps: 2
- learning_rate: 1.0e-4
- num_train_epochs: 5.0
- lr_scheduler_type: cosine
- warmup_ratio: 0.1
- fp16: true
- ### eval
- val_size: 0.1
- per_device_eval_batch_size: 1
- eval_strategy: steps
- eval_steps: 500
复制代码 须要修改的几个字段如下:
- 模子目次:model_name_or_path
- 输出目次:output_dir
- 练习轮数:num_train_epochs
- 使用的数据集名称(也就是在dataset_info.json增长的数据集入口):dataset
- 模子架构(constants.py文件中有全部支持的模子架构名称):template
别的参数可以看自己须要来修改。
实行练习下令
上面已经准备了数据集,也新增了练习的设置文件,下面就可以实行练习下令:
- ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/lora_multi_npu/baichuan2_lora_sft_ds.yaml
复制代码 用到几张显卡,在ASCEND_RT_VISIBLE_DEVICES反面指定就好了。
练习实行完毕,在baichuan2_lora_sft_ds.yaml的out设置的目次下回天生练习好的lora模子:
怎样使用lora练习的模子
参考我前面一篇博客《在昇腾开辟情况归并baichuan2-13B模子的lora文件》
题目记载
题目1
题目日志
- raise ValueError("Tried to use `fp16` but it is not supported on cpu")
- ValueError: Tried to use `fp16` but it is not supported on cpu
复制代码 题目缘故原由
我只映射了一张NPU,而且卡号是7(/dev/davinci7),但是启动练习的ASCEND_RT_VISIBLE_DEVICES=7,如许就会有题目。
办理办法
改为
ASCEND_RT_VISIBLE_DEVICES=0
题目2
题目日志
- AttributeError: 'PeftModelForCausalLM' object has no attribute 'save_checkpoint'
- AttributeError: 'LoraModel' object has no attribute 'save_checkpoint'
- AttributeError: 'BaichuanForCausalLM' object has no attribute 'save_checkpoint'
复制代码 题目缘故原由
使用的单机单卡,但是设置文件设置了deepspeed的。
办理办法
须要在baichuan2_lora_sft_ds.yaml将deepspeed的设置表明掉。
办理办法参考:无法生存模子
参考资料
什么是指令微调(LLM)
LLaMA-Factory
llama factory 练习 TensorBoard 可视化
|