使用LLaMA-Factory对AI进行认知的微调

news/2025/2/5 15:51:35/

使用LLaMA-Factory对AI进行认知的微调

    • 引言
    • 1. 安装LLaMA-Factory
      • 1.1. 克隆仓库
      • 1.2. 创建虚拟环境
      • 1.3. 安装LLaMA-Factory
      • 1.4. 验证
    • 2. 准备数据
      • 2.1. 创建数据集
      • 2.2. 更新数据集信息
    • 3. 启动LLaMA-Factory
    • 4. 进行微调
      • 4.1. 设置模型
      • 4.2. 预览数据集
      • 4.3. 设置学习率等参数
      • 4.4. 预览和执行命令
      • 4.5. 训练完成
    • 5. 与微调后的模型聊天
      • 5.1. 加载模型
      • 5.2. 开始聊天
      • 5.3. 导出模型
      • 5.4. 使用Vllm启动
    • 总结

引言

本文将介绍如何使用LLaMA-Factory对AI进行微调,使其具备“忍者”的认知,并认知其是由“富士电视台”开发的。

image.png

1. 安装LLaMA-Factory

1.1. 克隆仓库

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

1.2. 创建虚拟环境

conda create -n llama_factory python=3.11 -y
conda activate llama_factory

1.3. 安装LLaMA-Factory

pip install -e '.[torch,metrics]'

1.4. 验证

import torch
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(0))
print(torch.__version__)
print(torch.cuda.is_available())

image.png

2. 准备数据

2.1. 创建数据集

进入LLaMA-Factory目录:

cd LLaMA-Factory

复制identity.json并创建identity_ninja.json

cp data/identity.json data/identity_ninja.json

{{name}}{{author}}替换为“忍者”和“富士电视台”:

sed -i 's/{{name}}/一人の忍者/g' data/identity_ninja.json
sed -i 's/{{author}}/フジテレビ/g' data/identity_ninja.json

验证:

head data/identity_ninja.json

image-20250201092802054.png

2.2. 更新数据集信息

编辑data/dataset_info.json,添加新的数据集:

vi data/dataset_info.json

添加以下内容:

  "identity_ninja": {"file_name": "identity_ninja.json"},

3. 启动LLaMA-Factory

启动LLaMA-Factory

llamafactory-cli webui

在浏览器中访问http://localhost:7860。

4. 进行微调

4.1. 设置模型

设置模型名称和微调方法,本文使用Vicuna-v1.5-7B-Chat作为基础模型。

image.png

4.2. 预览数据集

点击“预览数据集”按钮,确认数据。

image.png

4.3. 设置学习率等参数

设置学习率和训练轮数。

image.png

4.4. 预览和执行命令

设置输出目录,点击“预览命令”按钮确认命令,无误后点击“开始”。

image.png

命令示例:

llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path lmsys/vicuna-7b-v1.5 \--preprocessing_num_workers 16 \--finetuning_type lora \--template vicuna \--flash_attn auto \--dataset_dir data \--dataset identity_ninja \--cutoff_len 2048 \--learning_rate 0.0001 \--num_train_epochs 6.0 \--max_samples 100000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 2 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--packing False \--report_to none \--output_dir saves/Vicuna-v1.5-7B-Chat/lora/train_vicuna_7b_identity_ninja_1e-4_epoch6 \--bf16 True \--plot_loss True \--trust_remote_code True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--optim adamw_torch \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0 \--loraplus_lr_ratio 16 \--lora_target all

4.5. 训练完成

训练完成后,会显示以下消息:

image.png

5. 与微调后的模型聊天

5.1. 加载模型

选择“检查点路径”,点击“Chat”选项卡,然后点击“加载模型”。

image.png

5.2. 开始聊天

模型加载完成后,输入问题并确认AI的回答。此时,AI将具备“忍者(一人の忍者)”的认知,并认知其是由“富士电视台(フジテレビ)”开发的。

image.png

5.3. 导出模型

选择“检查点路径”,点击“Export”选项卡,输入“导出目录”,然后点击“导出”。

image.png

导出完成后,会显示“模型导出完成”消息。

5.4. 使用Vllm启动

使用以下命令在Vllm中启动导出的模型:

CUDA_VISIBLE_DEVICES=3,1,0,2 VLLM_USE_V1=1 VLLM_WORKER_MULTIPROC_METHOD=spawn vllm serve /root/HuggingFaceCache/models--lmsys--vicuna-7b-v1.5-sft --trust-remote-code --served-model-name gpt-4 --gpu-memory-utilization 0.98 --tensor-parallel-size 4 --port 8000

总结

通过以上步骤,我们成功使用LLaMA-Factory对AI进行了微调,使其具备特定的认知。希望大家能够尝试并应用这些方法进行更多的定制化。


http://www.ppmy.cn/news/1569544.html

相关文章

关于19C的审计日志

最近在用19C做测试时,发现了个问题,即在audit_trail 为DB的情况下,模拟用户登录登出过程,但是 aud$ 表里没记录。 查阅资料得知: 12.1.0.1 开始情况使用的 统一审计(Unified Auditing),默认开…

数据库索引:秋招面试中的经典高频题目 [特殊字符](索引原理/操作/优缺点/B+树)

在数据库的秋招面试中,索引(Index)是一个经典且高频的题目。索引的作用类似于书中的目录📖,它能够显著加快数据库查询的速度。本文将深入探讨索引的概念、作用、优缺点以及背后的数据结构,帮助你从原理到应…

请解释 Java 中的 IO 和 NIO 的区别,以及 NIO 如何实现多路复用?

Java中的IO和NIO是两种不同的输入输出处理方式,它们在设计理念、实现方式、性能特点和应用场景上有着显著的差异。 下面我将详细解释Java中的IO和NIO的区别,以及NIO如何实现多路复用,并提供一些日常开发中的使用建议和注意事项。 Java中的I…

仿真设计|基于51单片机的颅内压检测报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部内容 资料获取 具体实现功能 (1)实时检测成人及儿童的颅内压,LCD1602第一行显示儿童的颅内…

基于python去除知乎图片水印

基于python去除知乎图片水印 背景:看到知乎技术文章里面的图片非常好,但是下载下来都是带有水印的,并不是不尊重别人的版权和劳动成果,纯粹的是洁癖,总感觉水印打上去很难受~~~ 实在想去掉水印,但是又不会P…

7、怎么定义一个简单的自动化测试框架?

定义一个简单的自动化测试框架可以从需求理解、框架设计、核心模块实现、测试用例编写和集成执行等方面入手,以下为你详细介绍: 1. 明确框架需求和范围 确定测试类型:明确框架要支持的测试类型,如单元测试、接口测试、UI 测试等…

寒假(五)

请使用read 和 write 实现链表保存到文件&#xff0c;以及从文件加载数据到链表中的功能 link.h #ifndef __link__ #define __link__#include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h>…

『 C 』 `##` 在 C 语言宏定义中的作用解析

文章目录 ## 运算符的基本概念可变参数宏与 ## 的应用可变参数宏简介## 处理可变参数的两种情况可变参数列表为空可变参数列表不为空 示例代码验证 在 C 和 C 编程里&#xff0c;宏定义是个很有用的工具。今天咱们就来聊聊 ## 这个预处理器连接运算符在宏定义中的作用&#xff…