LLaMA-Factory微调LLama2

LLaMA-Factory(0.6.2版本)微调LLama2

1.下载安装

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[metrics]

使用docker安装环境

docker build -f ./Dockerfile -t llama-factory:latest .
docker run --gpus=all \
-v /data1/models:/root/.cache/huggingface/ \
-v /workspace/data:/app/data \
-v /workspace/output:/app/output \
-v /workspace/code:/app/code \
-e CUDA_VISIBLE_DEVICES=2,3 \
-e no_proxy=192.168.1.0,localhost,127.0.0.1 \
-p 9091:8080 \
--shm-size 16G \
--name llama_factory \
-d llama-factory:latest \
python src/train_web.py
ssh [email protected] -L 0.0.0.0:9091:127.0.0.1:9091

在 ~/.bashrc中添加环境变量

 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" 

2.准备数据集

2.1.将excel表格数据转换成json格式数据 再将转换好的数据文件名写到datainfo.json文件中

import openpyxl
import json

# 打开 Excel 文件
workbook = openpyxl.load_workbook(r"C:\Users\19604\Desktop\ambar.xlsx")

# 创建一个空列表来存储所有工作表的 JSON 数据
all_json_data = []

# 遍历所有工作表
for sheet_name in workbook.sheetnames:
    sheet = workbook[sheet_name]

    # 提取问题和答案列
    questions = []
    answers = []
    for row in range(2, sheet.max_row + 1):
        question = sheet.cell(row=row, column=2).value
        answer = sheet.cell(row=row, column=3).value

        # 检查是否为空行
        if question is not None and answer is not None:
            questions.append(question)
            answers.append(answer)

    # 将数据转换为所需的 JSON 格式
    data = [
        {
            "instruction": "回答问题这一要求",
            "input": question,
            "output": answer
        }
        for question, answer in zip(questions, answers)
    ]

    # 将当前工作表的 JSON 数据添加到总列表中
    all_json_data.extend(data)

# 将所有 JSON 数据写入文件
with open('issue_data.json', 'w', encoding='utf-8') as f:
    json.dump(all_json_data, f, indent=2,ensure_ascii=False)

print("JSON data saved to 'output.json'")

2.2.计算生成的json数据的sha1值 在后续将数据写入datainfo.json中时填入

import hashlib
def calculate_sha1(file_path):
    sha1 = hashlib.sha1()
    try:
        with open(file_path, 'rb') as file:
            while True:
                data = file.read(8192)  # Read in chunks to handle large files
                if not data:
                    break
                sha1.update(data)
        return sha1.hexdigest()
    except FileNotFoundError:
        return "File not found."

# 使用示例
file_path = r'E:\研究生\工作\浩瀚深度\工作\code\LLM\issue_data.json'  # 替换为您的文件路径
sha1_hash = calculate_sha1(file_path)
print("SHA-1 Hash:", sha1_hash)

3.单卡训练微调

3.1.启动web版本的训练

(llm) PS E:\llm-train\LLaMA-Factory> export no_proxy=192.168.1.0,localhost,127.0.0.1
(llm) PS E:\llm-train\LLaMA-Factory> set CUDA_VISIBLE_DEVICES=0
(llm) PS E:\llm-train\LLaMA-Factory> python src/train_web.py
Running on local URL:  http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`

3.2.调整配置,浏览器打开:http://localhost:9090

可以选择多种微调方式

在这里插入图片描述

在这里插入图片描述

可以选择多种微调策略

在这里插入图片描述

预览命令
CUDA_VISIBLE_DEVICES=2 python src/train_bash.py \
    --stage sft \
    --do_train True \
    --model_name_or_path /root/.cache/huggingface/llama2/Llama-2-7b-chat-hf \
    --finetuning_type lora \
    --template llama2 \
    --dataset_dir data \
    --dataset issue_data \
    --cutoff_len 1024 \
    --learning_rate 5e-05 \
    --num_train_epochs 3.0 \
    --max_samples 100000 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --max_grad_norm 1.0 \
    --logging_steps 5 \
    --save_steps 100 \
    --warmup_steps 0 \
    --optim adamw_torch \
    --report_to none \
    --output_dir saves/LLaMA2-7B-Chat/lora/train_2024-04-16-09-18-51 \
    --fp16 True \
    --lora_rank 8 \
    --lora_alpha 16 \
    --lora_dropout 0.1 \
    --lora_target q_proj,v_proj \
    --plot_loss True 

3.3.开始微调

报这个环境变量的问题 在 ~/.bashrc中添加环境变量 NCCL_P2P_DISABLE=“1” NCCL_IB_DISABLE=“1”

在这里插入图片描述

在这里插入图片描述

3.4训练结束

在这里插入图片描述

3.5 微调模型导出

在这里插入图片描述

3.6使用我们导出的微调好的模型,进行对话

<think>嗯,用户想用LLaMA-Factory对Qwen2-VL模型进行微调。首先,我需要回忆一下相关的引用内容。根据引用[1]、[2]和[3],LLaMA-Factory支持Qwen2系列的微调,包括Qwen2-VL。用户可能需要具体的步骤指导,比如环境配置、数据准备、参数设置等。 首先,用户的环境配置可能需要安装必要的库,比如modelscope和LLaMA-Factory,这部分在引用[2]里提到过安装步骤。然后是模型下载,Qwen2-VL可能在ModelScope上有,用户需要下载到本地路径,并在LLaMA-Factory的配置中指定路径,这点引用[2]里的步骤四有说明。 接下来是数据准备。引用[3]提到需要准备图像和文本的多模态数据集,格式可能是JSON,包含图片路径和指令对。用户需要确保数据集的结构符合要求,可能需要参考教程里的数据准备部分。 然后是启动LLaMA-Factory的UI界面,用户需要访问本地端口,配置模型路径,选择正确的模型类型,比如Qwen2-VL。在微调参数设置时,可能需要选择LoRA等高效微调方法,调整学习率、批次大小等参数。引用[2]中的步骤七有详细的操作实践,包括训练参数预览和开始训练。 用户可能还会遇到如何导出微调后的模型的问题,引用[2]提到模型合并导出,可能需要指导用户如何操作。此外,在微调多模态模型时,需要注意图像处理部分,确保模型能正确处理图像输入,可能需要参考引用[3]中的配置。 最后,常见问题比如CUDA内存不足,可能需要建议调整批次大小或使用梯度累积。用户的问题可能还涉及如何验证微调后的模型效果,引用[1]中的启动命令可以用来进行交互测试。 需要确保步骤清晰,分点说明,并引用相关的引用内容。可能还需要提醒用户注意版本兼容性,确保LLaMA-Factory支持Qwen2-VL,以及数据格式的正确性。如果有遗漏的步骤,比如环境配置的依赖安装,可能需要补充说明。</think>以下是使用LLaMA-Factory微调Qwen2-VL模型的详细步骤: ### 一、环境准备 1. 安装基础框架: ```bash pip install "modelscope[llm]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html ``` 2. 克隆LLaMA-Factory仓库: ```bash git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .[metrics] ``` ### 二、模型与数据准备 1. 下载Qwen2-VL模型: 通过ModelScope下载模型至本地路径(示例路径:`/path/to/qwen2_vl`)[^2] 2. 准备多模态数据集: ```json [ { "image": "images/dog.jpg", "conversations": [ {"from": "human", "value": "图片中有哪些物体?"}, {"from": "gpt", "value": "一只金毛犬在草地上奔跑"} ] } ] ``` 数据集应包含图像路径和指令对话对[^3] ### 三、配置微调参数 1. 启动Web UI: ```bash CUDA_VISIBLE_DEVICES=0 python src/train_web.py ``` 访问`http://localhost:7860`[^2] 2. 关键配置项: - 模型路径:`/path/to/qwen2_vl` - 微调方法:LoRA(低秩适配) - 学习率:3e-4 - 批处理大小:根据GPU显存调整(建议从2开始) - 训练轮次:3-5 ### 四、执行微调 1. 在Web界面完成配置后: - 点击"预览命令"验证参数 - 点击"开始训练"启动微调 2. 监控训练过程: ```text Loss下降曲线应平稳收敛 每个epoch约消耗2小时(A100 80G) ``` ### 五、模型推理 1. 加载微调后的模型: ```bash llamafactory-cli chat examples/inference/qwen2_vl.yaml ``` 2. 测试多模态能力: ```python 输入:"请描述这张图片的内容" 上传测试图像验证输出质量 ``` ### 常见问题解决 1. CUDA内存不足: - 减小`per_device_train_batch_size` - 启用梯度累积`gradient_accumulation_steps` 2. 多模态数据处理异常: - 验证图像路径是否正确 - 检查EXIF格式图片是否经过预处理
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值