llama-factory使用教程

目标:借助llama-factory仓库使用lora微调自己的大模型
llama-factory:https://github.com/hiyouga/LLaMA-Factory/tree/main

下载llama-factory仓库

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

若后续不想继续追踪GitHub文件变化,可通过删除.git文件实现:

rm -rf .git

安装llama-factory环境

llama-factory官方推荐:
在这里插入图片描述
此处坑比较多,如果python、cuda、torch、transformers和vllm不匹配,会运行出错
个人尝试有效环境搭配:

python=3.10
cuda=12.1
torch=2.3.0-cu121
transformers=4.43.4
vllm=0.4.3
  1. 使用conda创建环境:
conda create -n tor230 python=3.10
  1. 下载torch相关离线包,然后本地安装 torch离线包下载
pip install torch-2.3.0+cu121-cp310-cp310-linux_x86_64.whl
pip install torchaudio-2.3.0+cu121-cp310-cp310-linux_x86_64.whl
pip install torchvision-0.18.0+cu121-cp310-cp310-linux_x86_64.whl
  1. pip安装相关第三方库
pip install transformers==4.43.4
pip install vllm==0.4.3
pip install datasets
pip install accelerate
pip install peft
  1. 安装llama-factory
cd /data/yangjun/LLM/LLaMA-Factory
pip install -e ".[torch,metrics]"

登录huggingface

  1. 安装huggingface:
pip install --upgrade huggingface_hub
  1. 如果能使用代理,直接登录huggingface账号:
huggingface-cli login

在输入token时直接输入自己huggingface账户的token
“setting”-“Access Tokens”
在这里插入图片描述
如果token为空,则新建;不为空,则点击刷新
3. 如果不能使用代理,则直接login会出错,那么需要使用国内huggingface镜像
设置环境变量,在~/.bashrc中写入命令:

export HF_ENDPOINT=https://hf-mirror.com

然后source ~/.bashrc
再重复步骤2登录账户

使用自定义数据lora微调llama

了解我们需要自定义微调时需要修改的llama-factory文件夹设置:

LLaMA-Factory/
│
├── data/
│   ├── dataset_info.json
│   └── [your_dataset].json
│
├── examples/
│   └── train_lora/
│   │   └── llama3_lora_sft.yaml
│	├── train_qlora/
│   │   └── llama3_lora_sft.yaml
│	├── train_full/
│   │   └── llama3_lora_sft.yaml
│	└── inference/
│       └── llama3_lora_sft.yaml
└── saves/

其中data文件夹下面的 [your_dataset].json 是自定义微调任务中训练集,dataset_info.json用于定义数据集名称
examples文件夹下面的train_lora、train_qlora和train_full表示不同的微调方式,相应文件夹下面存在微调任务的配置文件;inference表示使用训练好的模型来进行推理
saves文件夹需要自己新建,用于保存微调后的模型

具体介绍微调大模型的使用方法

微调

以事实核查(英文名:fact-checking,根据claim和evidence判断claim的真实性,其标签包括:supports(证据支持声明),refutes(证据反驳声明)和not enough information(证据对于判断声明真实性信息不足))任务为例,使用lora微调LLaMA-3-8B

  1. 构造训练数据,保存在 ./data/fact_checking.json
    数据格式:
{
    "instruction": "Analyze whether the evidence supports the claim, refutes the statement, or is not enough information to verify the claim's truthfulness. Provide your final conclusion.",
    "input": "Claim: 新疆棉花生产已实现高度机械化,不需要强迫劳动。 Evidence: 新疆棉花生产早已经实现高度机械化,即使在忙碌的采摘季节,也不需要大量的“采棉工”。 【事实三】新疆棉花:生产早已高度机械化,不需要大量的“采棉工”据新疆农业部门发布的2020年数据显示,新疆棉花机械采摘率已达69.83%,其中北疆95%的棉花是通过机械采摘的。 近年来,一方面是机器生产减少劳力需求,另一方面随着内地农村劳动力收入不断提高,新疆采棉人数不断减少,这完全是劳动力市场行为所致,与“政府强迫本地劳动力”毫无联系。 针对新疆教培中心等同于“集中营”,中方对维族人实施“种族灭绝”、“强迫劳动”,对维族妇女强迫绝育,将维族儿童与父母分离的提问,杨代办指出,中方已多次阐明,新疆根本不存在所谓“种族灭绝”“强迫劳动”“大规模绝育”。 同时,从过去到现在,新疆根本不存在、也根本不需要强制性动员采棉。 ",
    "output": "supports"
},
  1. 在dataset_info.json文件中新增一项
"fact_checking":
{
  "file_name":"fact_checking.json"
}

其中fact_checking.json名称和1中构造数据集名称对应
3. 在./examples/train_lora文件夹下修改llama3_lora_sft_fact_checking.yaml:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
finetuning_type: lora
dataset: fact_checking
output_dir: saves/llama3-8b-lora-sft-fact-checking/

其中,dataset名称和dataset_info.json中key值对应
4. 微调

CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train examples/train_lora/llama3_lora_sft_fact_checking.yaml

推理

调用API进行推理
  1. 在./examples/inference文件夹下修改llama3_lora_sft.yaml构造推理api:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b-lora-sft
template: llama3
infer_backend: vllm
vllm_enforce_eager: true
finetuning_type: lora

其中adapter_name_or_path后面改成3中output_dir对应名称
然后部署api:

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api examples/inference/llama3_lora_sft.yaml
  1. 调用api,使用微调后的大模型进行推理:
from openai import OpenAI
from tqdm import tqdm 
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base
)
predictions = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": input},
    ],
    temperature=0.95,
)
直接进行推理

调用API进行推理时部署API的过程可能无法使用多卡,下面直接进行推理,这种方式可以采用多卡的方式,且推理速度要比调用API的方式快。直接推理的过程和微调过程类似。

  1. 构造推理数据,构造方式和构造微调数据集类似。构造推理数据,保存在 ./data/inference_fact_checking.json
    数据格式:
{
    "instruction": "Analyze whether the evidence supports the claim, refutes the statement, or is not enough information to verify the claim's truthfulness. Provide your final conclusion.",
    "input": "Claim: 新疆棉花生产已实现高度机械化,不需要强迫劳动。 Evidence: 新疆棉花生产早已经实现高度机械化,即使在忙碌的采摘季节,也不需要大量的“采棉工”。 【事实三】新疆棉花:生产早已高度机械化,不需要大量的“采棉工”据新疆农业部门发布的2020年数据显示,新疆棉花机械采摘率已达69.83%,其中北疆95%的棉花是通过机械采摘的。 近年来,一方面是机器生产减少劳力需求,另一方面随着内地农村劳动力收入不断提高,新疆采棉人数不断减少,这完全是劳动力市场行为所致,与“政府强迫本地劳动力”毫无联系。 针对新疆教培中心等同于“集中营”,中方对维族人实施“种族灭绝”、“强迫劳动”,对维族妇女强迫绝育,将维族儿童与父母分离的提问,杨代办指出,中方已多次阐明,新疆根本不存在所谓“种族灭绝”“强迫劳动”“大规模绝育”。 同时,从过去到现在,新疆根本不存在、也根本不需要强制性动员采棉。 ",
    "output": ""
},
  1. 在dataset_info.json文件中新增一项
"inference_fact_checking":
{
  "file_name":"inference_fact_checking.json"
}

其中inference_fact_checking.json名称和1中构造数据集名称对应

  1. 在./examples/train_lora文件夹下新增llama3_lora_sft_inference_fact_checking.yaml:
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
predict_with_generate: true
adapter_name_or_path: saves/llama3-8b-lora-sft-fact-checking/

### method
stage: sft
do_predict: true
finetuning_type: lora
lora_target: all

### dataset
eval_dataset: inference_question_with_context_answer
template: llama3
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/llama3-8b-lora-sft-fact-checking/predict
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

其中,eval_dataset名称和dataset_info.json中key值对应(对应推理数据集)。adapter_name_or_path对应微调后保存的模型路径。output_dir表示推理结果保存路径
4. 推理

CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train examples/train_lora/llama3_lora_sft_fact_checking.yaml
<think>好的,用户的问题是关于LLaMA-Factory的配置,特别是是否需要将新增的config子目录添加到系统环境变量中。首先,我需要回顾一下用户提供的引用内容,看看是否有相关的信息。 用户引用了三个来源。引用[1]提到要在LLaMA-Factory的目录下启动命令,除非配置了全局变量。引用[2]是关于安装步骤,创建conda环境并安装依赖。引用[3]则涉及内存不足的错误,可能与配置无关。 接下来,我需要思考一般情况下,何时需要将目录添加到系统环境变量。通常,环境变量如PATH用于让系统找到可执行文件。而config目录通常存放配置文件,程序可能会在运行时从特定位置读取这些文件,比如当前工作目录或固定路径。如果程序本身设计为自动识别config子目录,可能不需要额外配置环境变量。 查看LLaMA-Factory的安装步骤,用户通过pip install -e安装,这会将包以可编辑模式安装,可能已经处理了路径问题。另外,引用[1]提到要在项目目录下运行命令,说明程序可能默认从当前目录的config子目录读取配置,不需要全局设置。因此,用户可能不需要手动添加config到环境变量,除非文档特别说明或有特定需求。 另外,用户的问题可能源于对配置目录位置的疑惑。需要确认项目的结构,如果config在项目根目录下,程序应该能自动找到,不需要环境变量。如果遇到找不到配置文件的错误,可能需要检查路径设置,但根据现有信息,不需要配置环境变量。 最后,建议用户按照官方文档操作,如果遇到问题再检查路径配置。同时,可以提醒用户关注项目更新,因为配置需求可能会变化。</think>根据LLaMA-Factory的官方安装指引[^2],在完成基础环境配置后,不需要将`llama-factory-main/config`子目录手动添加到系统环境变量。原因如下: 1. **项目目录结构自动识别** LLaMA-Factory框架默认会从项目根目录下的`config`子目录加载配置文件。当使用`pip install -e .`以可编辑模式安装后,Python解释器已将该目录纳入模块搜索路径中。 2. **环境变量仅用于特殊场景** 只有当出现以下情况时才需要配置环境变量: - 需要自定义配置文件存储路径时(需设置`LLAMA_FACTORY_CONFIG_DIR`) - 遇到类似`FileNotFoundError: [Errno 2] No such file or directory: 'config/dataset_info.json'`的错误[^3] 3. **推荐操作流程** ```bash # 激活conda环境后,在项目根目录直接操作 conda activate llama_factory cd LLaMA-Factory llamafactory-cli webui ``` 此时系统会自动识别`config`目录下的所有配置文件[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值