【大模型】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:导出模型路径
相关推荐
University of Feriburg26 分钟前
4-c语言中的数据类型
linux·c语言·笔记·学习·嵌入式实时数据库·嵌入式软件
XYN6127 分钟前
【嵌入式学习3】基于python的tcp客户端、服务器
服务器·开发语言·网络·笔记·python·学习·tcp/ip
liang899943 分钟前
Shiro学习(四):Shiro对Session的处理和缓存
java·学习·缓存
奔跑的废柴1 小时前
Jenkins学习(B站教程)
运维·学习·jenkins
开开心心就好1 小时前
解决 PDF 难题:批量处理、文档清理与自由拆分合并
java·学习·eclipse·pdf·word·excel·生活
yanyu-yaya3 小时前
第三章 react redux的学习之redux和react-redux,@reduxjs/toolkit依赖结合使用
javascript·学习·react.js
量子位3 小时前
Llama 4 发布 36 小时差评如潮!匿名员工爆料拒绝署名技术报告
人工智能·llama
梁下轻语的秋缘4 小时前
每日c/c++题 备战蓝桥杯(求解三个数的最大公约数与最小公倍数)
c语言·c++·学习·算法·蓝桥杯
Y1nhl4 小时前
Pyspark学习二:快速入门基本数据结构
大数据·数据结构·python·学习·算法·hdfs·pyspark
Kx…………4 小时前
Day2-2:前端项目uniapp壁纸实战
前端·学习·uni-app·html·实战·项目