利用LLaMA-Factory举行模子微调(LLama3-8B-instruct)

打印 上一主题 下一主题

主题 981|帖子 981|积分 2943

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
1.利用环境 

Linux  -Ubuntu20.04  RTX3090 24GB, LORA+sft 练习微调
2. 下载项目,虚拟环境创建及安装:

  1. git clone https://github.com/hiyouga/LLaMA-Factory.git
  2. conda create -n llama_factory python=3.10
  3. conda activate llama_factory
  4. cd LLaMA-Factory
  5. pip install -e '.[torch,metrics]'
复制代码
安装完成之后,做一下简单的正确性校验。具体如下:
2.1 Torch库校验

  1. import torch
  2. torch.cuda.current_device()
  3. torch.cuda.get_device_name(0)
  4. torch.__version__
复制代码
显示如下:

2.2  llamafactory库校验

  1. llamafactory-cli train -h
复制代码
查看能否正常显示资助文档。安装正常会显示如下内容。

3 模子下载及可用性验证

以Meta-Llama-3-8B-Instruct为例,通过huggingface 下载(有墙)
  1. git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
复制代码
或者 modelscope 下载(无墙)
  1. git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
复制代码
在Linux下,下载完成后的文件夹大小大约是16.1GB。
运行
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
  2.     --model_name_or_path /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
  3.     --template llama3
复制代码
此中  --model_name_or_path  后面的参数改成自己的模子存放路径。
llamafactory-cli  的命令参数包括 :
动作参数枚举参数阐明version显示版本信息train命令行版本练习chat命令行版本推理chatexport模子归并和导出api启动API server,供接口调用eval利用mmlu等标准数据集做评测webchat前端版本纯推理的chat页面webui启动LlamaBoard前端页面,包含可视化练习,猜测,chat,模子归并多个子页面 参数名称参数阐明model_name_or_path参数的名称(huggingface或者modelscope上的标准定义,如“meta-llama/Meta-Llama-3-8B-Instruct”), 或者是本地下载的绝对路径,如:/your/path-for-LLma-model/Meta-Llama-3-8B-Instructtemplate模子问答时所利用的prompt模板,不同模子不同,请参考 https://github.com/hiyouga/LLaMA-Factory?tab=readme-ov-file#supported-models 获取不同模子的模板定义,否则会回答结果会很奇怪或导致重复天生等征象的出现。chat 版本的模子根本都需要指定,比如Meta-Llama-3-8B-Instruct的template 就是 llama3 另外一种通过设置文件运行上述程序的方式如下:
打开llamafactory文件夹中的examples/inference/llama3.yaml,编辑此中的参数,
  1. model_name_or_path: /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct
  2. template: llama3
复制代码
然后执行如下命令:
  1. llamafactory-cli webchat examples/inference/llama3.yaml
复制代码
同样也可以启动模子并通过webchat端举行交互。
一样平常情况程序会自己跳出网页,如果没有跳出网页,可以通过在浏览器中输入 “http://localhost:7860/”,再回车举行访问。
4 数据集的构建

4.1 单轮对话样例

  1. {
  2.   "instruction": "写一个有效的比较语句",
  3.   "input": "篮球和足球",
  4.   "output": "篮球和足球都是受欢迎的运动。"
  5. }
复制代码
  1. {
  2.     "content": "类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤",
  3.     "summary": "宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长2米的效果宽松的裤腿,当然是遮肉小能手啊。上身随性自然不拘束,面料亲肤舒适贴身体验感棒棒哒。系带部分增加设计看点,还让单品的设计感更强。腿部线条若隐若现的,性感撩人。颜色敲温柔的,与裤子本身所呈现的风格有点反差萌。"
  4. }
复制代码
4.2 多轮对话样例

  1. {
  2.   "instruction": "谢谢",
  3.   "input": "",
  4.   "output": "不用谢! 很高兴我提供的信息能够帮助到你! 如果还有什么其他问题也可以向我提问。",
  5.   "history": [
  6.     [
  7.       "请你给我写一个面试准备计划,我想要去面试微软的程序员岗位",
  8.       "首先,你可以去微软官网寻找招聘信息并申请面试。\n其次,您可以在社交媒体平台寻找微软公司对程序员的面试问题,并做好准备。\n最后,您可以自己对面试过程进行模拟,熟悉话题并减少紧张感。\n我希望你能面试成功。"
  9.     ]
  10.   ]
  11. }
复制代码
这里需要注意的是,自己制作的数据集是需要在data/dataset_info.json 这个文件中举行注册的。中间有大量的已经注册过的数据集,可以自己参考找到雷同的注册信息,自行添加在文件末了。
如:
单轮对话数据集注册
"cosmopedia": {
    "hf_hub_url": "HuggingFaceTB/cosmopedia",     #这是在HuggingFaceTB/cosmopedia中的名称
    "columns": {
      "prompt": "prompt",                                            #提示词
      "response": "text"                                               #反馈结果
    }
对于数据集在本地的注册
"dpo_zh_demo": {
    "file_name": "dpo_zh_demo.json",           #数据集文件名,如果不在当前路径需要包含当前路径
    "ranking": true,
    "formatting": "sharegpt",
    "columns": {
      "messages": "conversations",
      "chosen": "chosen",
      "rejected": "rejected"
    }
  }
5 lora微调指令

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
  2.     --stage sft \
  3.     --do_train \
  4.     --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \
  5.     --dataset alpaca_gpt4_zh,identity,adgen_local \
  6.     --dataset_dir ./data \
  7.     --template llama3 \
  8.     --finetuning_type lora \
  9.     --output_dir ./saves/LLaMA3-8B/lora/sft \
  10.     --overwrite_cache \
  11.     --overwrite_output_dir \
  12.     --cutoff_len 1024 \
  13.     --preprocessing_num_workers 16 \
  14.     --per_device_train_batch_size 2 \
  15.     --per_device_eval_batch_size 1 \
  16.     --gradient_accumulation_steps 8 \
  17.     --lr_scheduler_type cosine \
  18.     --logging_steps 50 \
  19.     --warmup_steps 20 \
  20.     --save_steps 100 \
  21.     --eval_steps 50 \
  22.     --evaluation_strategy steps \
  23.     --load_best_model_at_end \
  24.     --learning_rate 5e-5 \
  25.     --num_train_epochs 5.0 \
  26.     --max_samples 1000 \
  27.     --val_size 0.1 \
  28.     --plot_loss \
  29.     --fp16
复制代码
比较紧张的参数枚举如下:
参数名称参数阐明stage当前练习的阶段,枚举值,有“sft”,"pt","rm","ppo"等,代表了练习的不同阶段,这里我们是有监视指令微调,所以是sftdo_train是否是练习模式dataset利用的数据集列表,全部字段都需要按上文在data_info.json里注册,多个数据集用","分隔dataset_dir数据集所在目次,这里是 data,也就是项目自带的data目次finetuning_type微调练习的类型,枚举值,有"lora","full","freeze"等,这里利用loraoutput_dir练习结果生存的位置cutoff_len练习数据集的长度截断per_device_train_batch_size每个设备上的batch size,最小是1,如果GPU 显存够大,可以得当增加fp16利用半精度混合精度练习max_samples每个数据集采样多少数据val_size随机从数据会合抽取多少比例的数据作为验证集 6 归并lora举行推理

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
  2.     --model_name_or_path  /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
  3.     --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft  \
  4.     --template llama3 \
  5.     --finetuning_type lora
复制代码
7模子归并导出

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
  2.     --model_name_or_path /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
  3.     --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft  \
  4.     --template llama3 \
  5.     --finetuning_type lora \
  6.     --export_dir megred-model-path \
  7.     --export_size 2 \
  8.     --export_device cpu \
  9.     --export_legacy_format False
复制代码
8 利用归并模子推理
  1. CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli webchat \
  2.     --model_name_or_path megred-model-path \
  3.     --template llama3 \
  4.     --infer_backend vllm \
  5.     --vllm_enforce_eager
复制代码
以上。
这里就全部结束了。




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

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表