跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

微调 Llama3 改变大模型自我认知,单卡即可训练

如何使用 XTuner 框架在单卡环境下微调 Llama3 模型,使其具备特定的自我认知能力。内容涵盖环境搭建、数据集准备与生成、模型下载、配置文件修改、训练执行及 LoRA 合并推理验证等完整流程。通过构造特定指令数据,可自定义模型回答身份信息的逻辑,实现垂直领域的个性化定制。

随缘发布于 2025/2/7更新于 2026/9/355 浏览
微调 Llama3 改变大模型自我认知,单卡即可训练

微调 Llama3 的自我认知

当你问 Llama3 中文问题:

'你叫什么名字?'、'做个自我介绍'、'你好'

Llama3 会用中文回答自定义的身份信息。

1、环境安装

# nvidia 显卡 显存 16G
# pytorch    2.2.2   py3.10_cuda11.7_cudnn8.5.0_0
conda create --name xtuner python=3.10 -y

# 激活环境
conda activate xtuner

# 安装最新版 xtuner
pip install xtuner

2、自我认知训练数据集准备

为了让模型认清自己的身份——'我是谁,我来自哪里',知道在询问自己是谁的时候回复成我们想要的样子,就需要在微调数据集中大量掺杂这部分的数据。

首先创建一个文件夹来存放这次训练所需要的所有文件。

# 前半部分是创建一个项目工程文件夹,后半部分是进入该文件夹。
mkdir -p /root/project/llama3-ft && cd /root/project/llama3-ft

# 在 llama3-ft 这个文件夹里再创建一个存放数据的 data 文件夹
mkdir -p /root/project/llama3-ft/data && cd /root/project/llama3-ft/data

# 将本项目中的 ./data/self_cognition.json 文件复制到 /root/project/llama3-ft/data 中
cp <替换本 Git 项目目录>/data/self_cognition.json /root/project/llama3-ft/data

通过文本编辑器打开 self_cognition.json 文件,将其中的占位符替换成期望的名称。文本替换后的效果如下:

[
  {
    "instruction": "你好",
    "input": "",
    "output": "您好,我是智能助手,一个由 AI 开发的人工智能助手,很高兴认识您。请问我能为您做些什么?"
  },
  {
    "instruction": "你好",
    "input": 
     
  

""
,
"output"
:
"您好,我是智能助手,一个由 AI 打造的人工智能助手,请问有什么可以帮助您的吗?"
}
]

之后可以在 data 目录下新建一个 generate_data.py 文件,将以下代码复制进去,然后运行该脚本即可生成数据集。

import json

# 定义一个函数来生成 jsonl 文件
def generate_jsonl(json_data, filename):
    with open(filename, 'w', encoding='utf-8') as f:
        for item in json_data:
            # 将每个 JSON 对象转换为字符串,并写入文件
            f.write(json.dumps(item, ensure_ascii=False) + '\n')

# 打开 JSON 文件并读取内容
with open('self_cognition.json', 'r') as f:
    data = json.load(f)

json_data_list = []
# 遍历 JSON 数据
for item in data:
    json_example = {
        "instruction_zh": item['instruction'],
        "input_zh": "",
        "output_zh": item['output'],
        "instruction": "Please introduce yourself",
        "input": "",
        "output": "I am assistant of Jizhiliu, I am sharing in the Shusheng Puyu Jizhiliu Community."
    }
    json_data_list.append(json_example)
generate_jsonl(json_data_list, 'self_cognition.jsonl')

运行 generate_data.py 文件即可。

cd /root/project/llama3-ft/data && python generate_data.py

可以看到在 data 的路径下生成了一个名为 self_cognition.jsonl 的文件。

最后创建 silk-road/alpaca-data-gpt4-chinese 文件夹并将 self_cognition.jsonl 复制其中:

mkdir -p /root/project/llama3-ft/silk-road/alpaca-data-gpt4-chinese
cp /root/project/llama3-ft/data/self_cognition.jsonl /root/project/llama3-ft/silk-road/alpaca-data-gpt4-chinese

这就是用于自我认知微调的数据集,当前的项目工程目录文件树如下:

|-- /
    |-- data/
        |-- self_cognition.json
        |-- generate_data.py
        |-- self_cognition.jsonl
    |-- silk-road/
        |-- alpaca-data-gpt4-chinese/
            |-- self_cognition.jsonl

3、下载 Llama-3-8B-Instruct 模型

pip install -U huggingface_hub

mkdir -p /root/model/

huggingface-cli download --token <替换成你的 huggingface token> --resume-download meta-llama/Meta-Llama-3-8B-Instruct --local-dir-use-symlinks False --local-dir /root/model/meta-llama/Meta-Llama-3-8B-Instruct

4、Xtuner 配置文件准备

下载配置文件模板

cd /root/project/llama3-ft

# 使用 XTuner 中的 copy-cfg 功能将 config 文件复制到指定的位置
xtuner copy-cfg llama2_7b_chat_qlora_alpaca_zh_e3 .

# 修改文件名
mv llama2_7b_chat_qlora_alpaca_zh_e3_copy.py llama3_8b_chat_qlora_alpaca_zh_e3_self.py

修改 llama3_8b_chat_qlora_alpaca_zh_e3_self.py 文件中的 pretrained_model_name_or_path 变量的值为下载到本地的 Llama 3 模型的路径,并增大 epoch:

# pretrained_model_name_or_path = 'meta-llama/Meta-Llama-3-8B-Instruct'
pretrained_model_name_or_path = '/root/model/meta-llama/Meta-Llama-3-8B-Instruct'

# 因为训练集的条数只有 80,所以这里增大 epoch,才能充分训练
max_epochs = 100

# 修改评估问题
# '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
'请做一个自我介绍', '请介绍一下你自己'

5、训练模型

cd /root/project/llama3-ft

# 开始训练,使用 deepspeed 加速,A100 40G 显存 耗时 24 分钟
xtuner train llama3_8b_chat_qlora_alpaca_zh_e3_self.py --work-dir ./train_self --deepspeed deepspeed_zero2

# 获取 LoRA
mkdir hf_self
xtuner convert pth_to_hf llama3_8b_chat_qlora_alpaca_zh_e3_self.py ./train_self/iter_1600.pth ./hf_self/

# 模型合并
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/meta-llama/Meta-Llama-3-8B-Instruct ./hf_self ./merged_model_self

merged_model_self 文件夹中即为完成了自我认知微调后的 Llama 3 模型。

修改其中的 special_tokens_map.json 文件内容为:

{
    "bos_token": "<|begin_of_text|>",
    "eos_token": "<|end_of_text|>"
}

6、推理验证

# 创建 inference.py 文件
touch /root/project/llama3-ft/inference.py

打开 inference.py 文件后将下面的内容复制进去。

import transformers
import torch

model_id = "/root/project/llama3-ft/merged_model_self"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device="cuda",
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

messages = [
    {"role": "system", "content": ""},
    {"role": "user", "content": "你叫什么名字"},
]

prompt = pipeline.tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

运行 inference.py 文件即可。

cd /root/project/llama3-ft && python inference.py

输出示例:

您好,我名叫智能助手,是由 AI 开发的 AI 助手。我的任务是为用户提供回答和帮助。

训练完后的完整的项目工程目录文件树如下:

|-- /
    |-- llama3_8b_chat_qlora_alpaca_zh_e3_self.py
    |-- merged_model_self/
        |-- config.json
        |-- pytorch_model.bin.index.json
        |-- tokenizer_config.json
        |-- special_tokens_map.json
        |-- generation_config.json
    |-- hf_self/
        |-- adapter_config.json
        |-- xtuner_config.py
        |-- adapter_model.bin
    |-- train_self/
        |-- last_checkpoint
        |-- iter_1600.pth/
    |-- data/
        |-- self_cognition.json
        |-- generate_data.py
        |-- self_cognition.jsonl
    |-- silk-road/
        |-- alpaca-data-gpt4-chinese/
            |-- self_cognition.jsonl

目录

  1. 微调 Llama3 的自我认知
  2. 1、环境安装
  3. nvidia 显卡 显存 16G
  4. pytorch 2.2.2 py3.10cuda11.7cudnn8.5.0_0
  5. 激活环境
  6. 安装最新版 xtuner
  7. 2、自我认知训练数据集准备
  8. 前半部分是创建一个项目工程文件夹,后半部分是进入该文件夹。
  9. 在 llama3-ft 这个文件夹里再创建一个存放数据的 data 文件夹
  10. 将本项目中的 ./data/self_cognition.json 文件复制到 /root/project/llama3-ft/data 中
  11. 定义一个函数来生成 jsonl 文件
  12. 打开 JSON 文件并读取内容
  13. 遍历 JSON 数据
  14. 3、下载 Llama-3-8B-Instruct 模型
  15. 4、Xtuner 配置文件准备
  16. 使用 XTuner 中的 copy-cfg 功能将 config 文件复制到指定的位置
  17. 修改文件名
  18. pretrainedmodelnameorpath = 'meta-llama/Meta-Llama-3-8B-Instruct'
  19. 因为训练集的条数只有 80,所以这里增大 epoch,才能充分训练
  20. 修改评估问题
  21. '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
  22. 5、训练模型
  23. 开始训练,使用 deepspeed 加速,A100 40G 显存 耗时 24 分钟
  24. 获取 LoRA
  25. 模型合并
  26. 6、推理验证
  27. 创建 inference.py 文件

更多推荐文章

查看全部
  • AI 提示工程实战:如何与大模型高效对话
  • NWPU VHR-10 遥感目标检测数据集介绍与 YOLO 训练实战
  • AI 产品经理转型指南:核心技能与行业落地场景解析
  • 大模型在智能财务领域的应用思路与落地实践
  • NVIDIA RTX PC 开源 AI 工具升级:LLM 与扩散模型性能优化
  • Janus-Pro-7B 快速上手:图片问答与文生图功能详解
  • 基于 FastGPT 与 MCP 协议构建工具增强型智能体
  • OpenClaw 跨平台安装指南:Windows、macOS 与 Linux
  • 最大公约数与最小公倍数的计算及 C/C++ 实现
  • 女兽医转行互联网后端与 AI 大模型的职业经历复盘
  • AI 绘画工作台:Z-Image-Turbo 云端协作方案
  • 基于 Nuxt 与 WebAssembly 的浏览器端图片压缩工具实现
  • 2024 年诺贝尔物理学奖:霍普菲尔德与欣顿的神经网络贡献
  • NSP 新范式:AI 世界模型构建与物理规律建模指南
  • YOLOv8 目标检测 PySide6 可视化 GUI 界面实现
  • npm 安装 OpenClaw 遇到 Git 报错的解决方案
  • Web 前端基础核心知识点梳理
  • XGBoost 机器学习核心原理与实战指南
  • OpenClaw 配置指南:接入第三方 API 使用大模型
  • 无线蜂窝网络:原理、架构与代际演进

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online