一个强大的LLM微调工具 LLaMa-Factory:手把手教你从零微调大模型 ...

打印 上一主题 下一主题

主题 1792|帖子 1792|积分 5376

 一、配景

LLaMa-Factory项目定位是微调工具,目的是整合当前主流的各种高效训练微调技能,适配市场主流的开源模型,形成一个功能丰富,适配性好的训练框架。本次记录基于自身利用llama-factory,简单记录从环境摆设到训练及推理的过程。

二、准备工作

项目顺遂运行必要几个必备条件
1. 机器本身的硬件和驱动支持(包含显卡驱动,网络环境等)

输入下列命令做校验
  1. nvidia-smi
复制代码
预期输出如下图,体现GPU当前状态和设置信息

2. 相干依赖的python库的正确安装(包含CUDA,Pytorch等)

三、环境安装

我当前用的系统版本如下,当前的安装摆设都是基于此系统进行:
  1. # cat  /etc/issue
  2. Ubuntu 20.04.6 LTS \n \l
复制代码
1. 先把项目克隆到本地的工作目录下

  1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
复制代码
2. 创建假造环境

一样平常安装依赖包都会创建一个假造环境,然后在此假造环境下安装各个包
  1. # 使用python创建虚拟环境:
  2. # 创建虚拟环境:
  3. python -m venv mynamevenv
  4. # 激活:
  5. source mynamevenv/bin/activate
  6. # 关闭/退出虚拟环境:
  7. deactivate
  8. # 使用conda创建虚拟环境:
  9. # 创建虚拟环境:
  10. conda create -n myname_env
  11. # 激活虚拟环境:
  12. source activate myname_env
  13. # 关闭/退出虚拟环境:
  14. conda deactivate
  15. ##  根据自己的情况选择合适的方式,conda激活虚拟环境时的命令好像与版本有关,不同版本略有差异,可根据提示信息进行修改
  16. ##  使用python创建的虚拟环境会在当前目录创建一个虚拟环境名称的文件夹,而使用conda创建的虚拟环境需要使用命令'conda env list'查看所有创建的虚拟环境的列表
复制代码
创建好假造环境并激活后,安装依赖包,此处用的是阿里云的镜像,速率快一些
  1. pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
复制代码
安装完requirements.txt之后直接运行还会缺少一些环境,再实行下列命令安装相干包
  1. pip install -e ".[torch,metrics]"
复制代码
3. 大概遇到的问题

只要硬件满足,团体的安装过程没有其他问题,如果遇到如下报错
  1. AssertionError: no sync context manager is incompatible with gradientpartitioning logic of ZeRo stage 3
复制代码
办理办法:把deepspeed版本改为0.15.4,pip  install  deepspeed==0.15.4
四、准备训练数据和模型

1. 准备数据

在克隆到本地的LLaMA-Factory项目目录中,data文件目录下,有些示例数据,刚开始但是利用这些数据做测试,先把整个流程测试通。
当然也可以准备自定义数据集,不过必要将数据处理为框架特定的格式,放在data目录下,而且修改dataset_info.json文件。
2. 准备模型

项目支持通过模型名称直接从huggingface和modelscope(国内出的社区,对标huggingface),下载的方式很多,可以直接在社区网站上看到。必要注意的是,很多模型文件相对较大一些,在下载过程中必要注意下载文件的完备性,除了用肉眼去观看文件巨细是否划一外,也可通过readme中提供的原始推理demo,来验证模型文件的正确性和transformers库等软件的可用性。
五、模型微调并推理

全部工作都准备好之后,我们先利用推理模式验证下LLaMa-Factory的推理部门是否正常。
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat
  2. --model_name_or_path ../models/Meta-Llama-3-8B-Instruct
  3. --template llama3
复制代码
CUDA_VISIBLE_DEVICES=0,是指定当出息序利用第0张卡,也可以指定多张卡,如CUDA_VISIBLE_DEVICES=0,1,2 等,详细利用哪张可根据自己的设置情况;
--model_name_or_path 参数是自己所利用的大模型的文件路径;
--template 参数是模型回答时所利用的prompt模版,不同模型的模板不同,可以参考LLaMa-Factory的readme。
受机器环境影响,我这里只能利用命令行版本来运行,运行之后会出现如下界面:

前面实在另有很多的加载日志信息,我这里没有全都截图在里面,当出现红框标记前的User: 时,我们随便输入我们的信息便可睁开对话,我这里输入的是“三国演义的作者是谁”,稍等一会儿,便会在Assistant位置后输出相干信息,当我们想再次输入信息时,可以先输入“clear”命令清除汗青信息,再输入我们的对话内容大概必要推理的内容,这样会更正确一些。至此说明我们的环境安装设置,是没有问题的。
微调及后续推理等全部的程序入口都是 llamafactory-cli,通过不同的参数控制现在实现什么功能,好比现在是想利用网页版直接推理,以是第一个参数设置为webchat,全部的可选项参数如下:
参数选项
参数说明
version
体现版本信息
train
命令行版本训练
chat
命令行版本推理chat,单条推理
export
模型归并和导出
api
启动API server,供接口调用
eval
利用mmlu等标准数据集做评测
webchat
前端版本纯推理的chat页面
webui
启动LlamaBoard前端页面,包含可视化训练,猜测,chat,模型归并多个子页面
我们利用前端页面来微调训练大模型时,可以直接在页面上进行勾选,但是当我们利用命令行去微调训练时,可以把浩繁的参数都存放在yaml文件里,我现在微调大模型并进行推理的几个步调和命令以及各自的yaml文件如下:
1. 大模型训练微调
  1. CUDA_VISIBLE_DEVICES=0,1 nohup llamafactory-cli train examples/lora_multi_gpu/baichuan2_lora_sft.yaml > log_train_baichuan2.txt &
  2. # 其中baichuan2_lora_sft.yaml文件配置内容如下:
  3. ### model
  4. model_name_or_path: ../baichuan2
  5. ### method
  6. stage: sft
  7. do_train: true
  8. finetuning_type: lora
  9. lora_target: all
  10. ### ddp
  11. ddp_timeout: 180000000
  12. deepspeed: examples/deepspeed/ds_z3_config.json
  13. ### dataset
  14. dataset: train_data_total
  15. template: baichuan2
  16. cutoff_len: 1024
  17. max_samples: 1000000
  18. overwrite_cache: true
  19. preprocessing_num_workers: 16
  20. ### output
  21. output_dir: ../baichuan2_train_total
  22. logging_steps: 10
  23. save_steps: 100
  24. plot_loss: true
  25. overwrite_output_dir: true
  26. ### train
  27. per_device_train_batch_size: 16
  28. gradient_accumulation_steps: 4
  29. learning_rate: 1.0e-4
  30. num_train_epochs: 30
  31. lr_scheduler_type: cosine
  32. warmup_ratio: 0.1
  33. fp16: true
  34. ### eval
  35. val_size: 0.0002
  36. per_device_eval_batch_size: 16
  37. eval_strategy: steps
  38. eval_steps: 100
  39. temperature: 0.3
复制代码
2. 大模型归并
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/baichuan2_lora_sft.yaml
  2. # 其中baichuan2_lora_sft.yaml文件配置内容如下:
  3. ### Note: DO NOT use quantized model or quantization_bit when merging lora adapters
  4. ### model
  5. model_name_or_path: ../baichuan2
  6. adapter_name_or_path: ../baichuan2_train_total/checkpoint-300
  7. template: baichuan2
  8. finetuning_type: lora
  9. ### export
  10. export_dir: ../baichuan2_train_out_total/output300
  11. export_size: 80
  12. export_device: gpu
  13. export_legacy_format: false
复制代码
3. 大模型批量推理for补全
  1. CUDA_VISIBLE_DEVICES=1 nohup llamafactory-cli train examples/full_multi_gpu/hx_baichuan2_lora_sft.yaml >hx_log_val_baichuan2.txt &
  2. # 其中hx_baichuan2_lora_sft.yaml文件配置内容如下:
  3. ### model
  4. model_name_or_path: ../baichuan2_train_out_total/output300
  5. ### method
  6. stage: sft
  7. do_predict: true
  8. finetuning_type: full
  9. ### dataset
  10. dataset: val_data_hx
  11. template: baichuan2
  12. cutoff_len: 1024
  13. max_samples: 1000000
  14. overwrite_cache: true
  15. preprocessing_num_workers: 16
  16. ### output
  17. output_dir: hx_result_baichuan2
  18. overwrite_output_dir: true
  19. ### eval
  20. per_device_eval_batch_size: 16
  21. predict_with_generate: true
复制代码
4. 大模型单条推理
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/baichuan2_lora_sft.yaml
  2. # 其中baichuan2_lora_sft.yam文件配置内容如下:
  3. model_name_or_path: ../baichuan2_train_out_total/output300
  4. template: baichuan2
  5. temperature: 0.001
复制代码
5. 大模型批量推理for意图
  1. CUDA_VISIBLE_DEVICES=1 nohup llamafactory-cli train examples/full_multi_gpu/baichuan2_lora_sft.yaml >log_val_baichuan2.txt &
  2. # 其中baichuan2_lora_sft.yaml文件配置内容如下:
  3. ### model
  4. model_name_or_path: ../baichuan2_train_out_total/output300
  5. ### method
  6. stage: sft
  7. do_predict: true
  8. finetuning_type: full
  9. ### dataset
  10. dataset: val_data
  11. template: baichuan2
  12. cutoff_len: 1024
  13. max_samples: 1000000
  14. overwrite_cache: true
  15. preprocessing_num_workers: 16
  16. ### output
  17. output_dir: result_baichuan2
  18. overwrite_output_dir: true
  19. ### eval
  20. per_device_eval_batch_size: 16
  21. predict_with_generate: true
  22. temperature: 0.001
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表