【大模型】llama-factory基础学习

前言:LLaMA-Factory项目的目标是整合主流的各种高效训练微调技术,适配市场主流开源模型,形成一个功能丰富,适配性好的训练框架。

目录

  • [1. 前期准备](#1. 前期准备)
  • [2. 原始模型直接推理](#2. 原始模型直接推理)
  • [3. 自定义数据集](#3. 自定义数据集)
  • [4. 模型训练](#4. 模型训练)
  • [5. 模型合并并导出](#5. 模型合并并导出)

1. 前期准备

下载源码:https://github.com/hiyouga/LLaMA-Factory

环境搭建的话参考readme.md:

复制代码
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

2. 原始模型直接推理

只需要配置template和model_name_or_path。

终端运行:

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \  
    --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \  
    --template llama3

运行完可以在本地服务器访问:http://localhost:7860/

3. 自定义数据集

llama-factory支持json格式文件,自定义数据集中每条数据格式如下:

{

"prompt": "介绍一下苹果",

"response": "苹果公司(Apple Inc.),是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。"

}

将文件放到llama factory项目下的data文件夹,然后编辑data_info.json文件,添加数据集映射:

复制代码
 "demo": {
    "file_name": "demo.json",
    "file_sha1":dwfewcevrvff
    "columns": {
      "prompt": "prompt",
      "response": "response"
    }

demo是映射后使用的数据集别名,file_name是数据集路径,file_sha1不是必需的,但是可以缓存预处理后的数据集,避免二次训练时重新预处理,sha1的生成可以通过终端运行shasum -a 1 filename(linux命令),columns是json文件中的列名映射

4. 模型训练

复制代码
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \  
    --do_train \  
    --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \  
    --dataset alpaca_gpt4_zh \  
    --dataset_dir ./data \  
    --template llama3 \  
    --finetuning_type lora \  
    --lora_target q_proj,v_proj \  
    --output_dir ./saves/LLaMA3-8B/lora/sft \  
    --overwrite_cache \  
    --overwrite_output_dir \  
    --cutoff_len 1024 \  
    --preprocessing_num_workers 16 \  
    --per_device_train_batch_size 2 \  
    --per_device_eval_batch_size 1 \  
    --gradient_accumulation_steps 8 \  
    --lr_scheduler_type cosine \  
    --logging_steps 50 \  
    --warmup_steps 20 \  
    --save_steps 100 \  
    --eval_steps 50 \  
    --evaluation_strategy steps \  
    --load_best_model_at_end \  
    --learning_rate 5e-5 \  
    --num_train_epochs 5.0 \  
    --max_samples 1000 \  
    --val_size 0.1 \  
    --plot_loss \  
    --fp16
    --logging_dir path_to_logging_directory

一些重要参数解读:

  • stage: 训练方式,pt,sft等
  • model_name_or_path:基础模型的路径
  • dataset:数据集名称,data_info.json中的
  • template:模板,在readme.md中可以找到对应的模型模板
  • finetuning_type:微调方式,一般选lora
  • output_dir:存储模型路径
  • logging_dir:日志路径

5. 模型合并并导出

训练后得到的模型不能直接使用,需要和基础模型合并后导出:

复制代码
CUDA_VISIBLE_DEVICES=0 python src/export_model.py \
    --model_name_or_path qwen/Qwen-7B \
    --adapter_name_or_path /mnt/workspace/llama_factory_demo/qwen/lora/sft/checkpoint-50 \
    --template qwen \
    --finetuning_type lora \
    --export_dir /mnt/workspace/merge_w/qwen \
    --export_legacy_format False
  • model_name_or_path: 基础模型路径
  • adapter_name_or_path:训练后的模型路径
  • template:模板
  • finetuning_type:微调方式
  • export_dir:导出模型路径
相关推荐
人生游戏牛马NPC1号42 分钟前
学习 Flutter (三):玩安卓项目实战 - 上
android·学习·flutter
没有羊的王K4 小时前
SSM框架学习——day1
java·学习
林林要一直努力6 小时前
AOSP Settings模块问题初窥
android·学习·bug·android studio
余大侠在劈柴8 小时前
pdf.js 开发指南:在 Web 项目中集成 PDF 预览功能
前端·javascript·学习·pdf
有谁看见我的剑了?10 小时前
iperf3 网络带宽测试工具学习
学习·测试工具
老神在在00111 小时前
SpringMVC2
java·前端·学习·spring·java-ee
老神在在00111 小时前
SpringMVC3
java·前端·学习·spring·java-ee
Pocker_Spades_A14 小时前
TextIn:文档全能助手,让学习效率飙升的良心软件~
学习·textln
我.佛.糍.粑15 小时前
Shusen Wang推荐系统学习 --召回 矩阵补充 双塔模型
人工智能·学习·机器学习·矩阵·推荐算法
好奇龙猫15 小时前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段(3):语法+单词+復習
学习