LLaMA-Factory QuickStart 流程详解

server/2024/12/20 20:29:36/

1. 项目背景与目标

LLaMA-Factory 是一个整合主流高效训练与微调技术的框架,支持主流开源大模型(如 LLaMA、Qwen、Baichuan 等),提供便捷的接口和工作台,降低大模型微调门槛。


2. 流程概览

2.1 前置准备

硬件与驱动支持
  1. 确保硬件环境满足需求(如 RTX 3090/4090)。

    • 使用 nvidia-smi 命令验证 GPU 状态。
  2. 安装 CUDA 和 PyTorch 环境

    • 克隆项目代码并安装依赖:
      git clone https://github.com/hiyouga/LLaMA-Factory.git
      conda create -n llama_factory python=3.10
      conda activate llama_factory
      cd LLaMA-Factory
      pip install -e '.[torch,metrics]'
      
    • 校验环境:
      import torch
      torch.cuda.current_device()
      torch.cuda.get_device_name(0)
      torch.__version__
      
  3. 下载模型文件

    • 通过 Huggingface 下载:
      git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
      
    • 通过 ModelScope 下载(国内推荐):
      git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
      
  4. 验证模型文件

    • 运行原始推理代码,确保模型文件和环境正确:
      import transformers
      import torchmodel_id = "/path/to/Meta-Llama-3-8B-Instruct"pipeline = transformers.pipeline("text-generation",model=model_id,model_kwargs={"torch_dtype": torch.bfloat16},device_map="auto",
      )
      

2.2 原始模型直接推理

  • 使用 webchat 参数启动 Gradio 前端页面:
    CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \--template llama3
    
  • 通过浏览器访问http://localhost:7860

2.3 自定义数据集构建

数据集格式

LLaMA-Factory 支持 AlpacaShareGPT 格式,示例如下:

  • 单轮数据格式 (Alpaca):

    {"instruction": "写一个有效的比较语句","input": "篮球和足球","output": "篮球和足球都是受欢迎的运动。"
    }
    
  • 多轮数据格式 (ShareGPT):

    {"instruction": "谢谢","output": "不用谢! 很高兴我提供的信息能够帮助到你!","history": [["请你给我写一个面试准备计划", "微软官网找招聘信息..."]]
    }
    
示例:数据集构建流程
  1. 系统自带数据集 (identity.json) 修改:

    • 使用 sed 进行批量替换:
      sed -i 's/{{name}}/PonyBot/g' data/identity.json
      sed -i 's/{{author}}/LLaMA Factory/g' data/identity.json
      
  2. 自定义商品文案生成数据集:

    • 原始格式:
      {"content": "类型#裤*版型#宽松","summary": "宽松的阔腿裤...设计感更强。"
      }
      
    • 步骤:
      • 将数据集放置于 data 目录下。
      • 修改 data/dataset_info.json 进行注册:
        "adgen_local": {"path": "data/adgen.json","columns": {"instruction": "content", "output": "summary"}
        }
        
    • 结果: 自定义数据集名称为 adgen_local,可在训练时调用。

2.4 指令微调 (SFT) 训练

使用 LoRA + SFT 技术微调大模型,示例命令:

llamafactory-cli train \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \--dataset adgen_local \--template llama3 \--output_dir ./output

2.5 推理与验证

  1. 动态合并 LoRA 微调结果:

    llamafactory-cli webchat \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \--adapter ./output
    
  2. 批量预测与训练效果评估:

    llamafactory-cli eval \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \--dataset adgen_local
    

2.6 模型合并与导出

  • 合并 LoRA 微调后的模型:

    llamafactory-cli export \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \--adapter ./output \--output_dir ./merged_model
    
  • 导出 GGUF 格式,适配 Ollama 推理:

    llamafactory-cli export --output_format gguf
    

2.7 可视化 WebUI 使用

  • 启动 WebUI 工作台:
    llamafactory-cli webui
    
  • 访问地址http://localhost:7860

2.8 API 服务部署与调用

  • 启动 API 服务:
    llamafactory-cli api \--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct
    
  • 通过 HTTP 请求调用接口。

总结

LLaMA-Factory 提供了全链路大模型微调与推理的工具链,包括:

  1. 硬件环境与依赖准备
  2. 模型下载与验证
  3. 数据集构建
  4. LoRA 微调与推理
  5. 可视化 WebUI 和 API 部署

http://www.ppmy.cn/server/151775.html

相关文章

面试题整理5----进程、线程、协程区别及僵尸进程处理

面试题整理5----进程、线程、协程区别及僵尸进程处理 1. 进程、线程与协程的区别1.1 进程(Process)1.2 线程(Thread)1.3 协程(Coroutine)2. 总结对比 3. 僵尸进程3.1 什么是僵尸进程?3.2 僵尸进…

Docker镜像与容器管理

1. Docker镜像的概念与生命周期 Docker镜像(Image)是构建Docker容器的基础。镜像是一个只读的模板,包含了容器运行所需的操作系统环境、应用程序、依赖库和配置文件等。镜像的创建过程是通过Dockerfile定义的,每个镜像层&#xf…

安卓LiveDataBus使用记录

创建三个文件 BusMutableLiveData.ktpackage com.donews.common.livedatabus;import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.…

力扣-图论-12【算法学习day.62】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

题目 3010: 奇偶数之和

题目 3010: 奇偶数之和 时间限制: 2s 内存限制: 192MB 提交: 3298 解决: 2005 题目描述 利用循环,分别输出1∼n之间的所有奇数的和、偶数的和。 输入格式 输入n 输出格式 输出为一行,两个数(用一个空格隔开),偶数之和与奇数之和。 样例输入 1…

python实现视频切分图片

python脚本 import os import subprocess from tkinter import * import tkinter.messagebox import tkinter as tkdef videoCut(video_path,fps):# 获取当前工作路径</

快速解决oracle 11g中exp无法导出空表的问题

在一些生产系统中&#xff0c;有些时候我们为了进行oracle数据库部分数据的备份和迁移&#xff0c;会使用exp进行数据的导出。但在实际导出的时候&#xff0c;我们发现导出的时候&#xff0c;发现很多空表未进行导出。今天我们给出一个快速解决该问题的办法。 一、问题复现 我…

系列5:基于Centos-8.6 Kubernetes master节点允许运行pod节点

每日禅语 不识本心&#xff0c;内心不定&#xff0c;心就会随物转&#xff1b;倘若能了知自己的心&#xff0c;动静如一&#xff0c;那么万象万物都可以随心而转。净心才能入定&#xff0c;从而摆脱外物的牵绊&#xff1b;心不因外物而动才能真正认清自己&#xff0c;遇到顺境不…