从不会到会:我在本地给Qwen2.5-7B改‘人设’全过程

你有没有试过和一个大模型聊天,问它“你是谁”,结果得到一句标准答案:“我是阿里云研发的超大规模语言模型通义千问……”
听起来很专业,但总少了点个性。
如果它能说“我是CSDN迪菲赫尔曼亲手调教出来的Swift-Robot”,是不是瞬间就亲切了?
这不是幻想——我上周就在自己那台RTX 4090D主机上,用不到十分钟,真把Qwen2.5-7B的“自我认知”给改了。没有服务器集群,不碰CUDA源码,不配分布式环境,就靠一个预装好的镜像,从零开始,手把手完成了一次轻量、可控、可复现的“人设微调”。

这不是全量训练,不是重头炼丹,而是一次精准的“身份植入”:像给AI装上一副定制眼镜,既不改变它的底层视力(基础能力),又让它看世界的方式带上你的印记。

下面,我就把整个过程原原本本、不加滤镜地写下来。没有术语堆砌,不绕弯子,每一步都带命令、有反馈、有踩坑提醒。如果你也有一张24GB显存的卡,今天就能跟着做出来。


1. 先搞清楚:我们到底在改什么?

很多人一听“微调”,第一反应是“要重训模型?得等好几天?”
其实完全不是。这次我们用的是 LoRA(Low-Rank Adaptation)——一种“贴片式”微调技术。它不碰原始模型的几十亿参数,只在关键层旁边悄悄加几组小矩阵,训练时只更新这几万甚至几千个参数。就像给一辆出厂汽车加装一套智能座舱系统,发动机照旧,但交互逻辑全是你定的。

所以,我们改的不是模型“会不会说话”,而是它“怎么介绍自己”。
重点就三件事:

  • 让它记住“开发者是我,不是阿里云”
  • 让它知道自己的名字叫“Swift-Robot”或“CSDN助手”
  • 让它对“能不能联网”“和GPT-4有什么区别”这类问题,给出符合新身份的回答

这背后不需要懂反向传播,也不用调学习率曲线。你只需要:一份清晰的问答数据 + 一条启动命令 + 十分钟等待。


2. 环境准备:一张4090D,开箱即用

这个镜像最省心的地方在于——它已经帮你把所有“拦路虎”清干净了。

2.1 镜像自带什么?

  • 模型:Qwen2.5-7B-Instruct(已下载好,路径 /root/Qwen2.5-7B-Instruct
  • 框架:ms-swift(轻量、易用、专为LoRA优化的微调工具)
  • 环境:Python 3.10 + PyTorch 2.3 + CUDA 12.1,全部预装并验证通过
  • 显存适配:所有参数已按RTX 4090D(24GB)显存上限精细调优,实测训练时稳定占用约20GB,不爆显存

你唯一要确认的,就是你的显卡型号是否匹配。如果不是4090D,只要满足“24GB以上显存+支持CUDA 12.x”,基本都能跑通(比如4090、A100 24G、L40S等)。显存低于20GB?建议先跳过,LoRA虽轻,但Qwen2.5-7B的上下文长度和batch size仍需一定余量。

2.2 启动后第一件事:确认模型能“活”着

别急着改人设,先看看原模型能不能正常对话。这是验证环境是否健康的“心跳测试”。

打开终端,执行:

cd /root

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --model Qwen2.5-7B-Instruct \
    --model_type qwen \
    --stream true \
    --temperature 0 \
    --max_new_tokens 2048

你会看到一个简洁的交互界面。输入:

你是谁?

预期输出类似:

我是阿里云研发的超大规模语言模型通义千问,英文名是Qwen。我能够回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等……

看到这段话,说明环境完全OK。模型加载成功、显卡通信正常、推理流程畅通。
如果卡住、报错“OSError: cannot load tokenizer”或显存不足,回头检查镜像是否完整拉取,或确认/root/Qwen2.5-7B-Instruct目录是否存在且非空。


3. 数据准备:写8条“自我介绍题”,胜过写800行代码

微调的本质,是让模型记住一组特定映射关系:“当用户问A,我就答B”。
所以,数据不是越多越好,而是越准越好。尤其对于“人设”这种强记忆任务,50条高质量问答,比5000条泛泛而谈的Alpaca数据更有效。

镜像里已经为你准备好了一个精简但够用的起点:self_cognition.json。它只有8条,但覆盖了所有核心身份问题:

  • “你是谁?”
  • “你的开发者是哪家公司?”
  • “你能联网吗?”
  • “你能做哪些事情?”
  • “你和GPT-4有区别吗?”
  • “你能保证回答永远正确吗?”
  • “你的名字是什么?”
  • “谁在维护你?”

每一条都是“指令+空输入+定制化回答”的标准格式。你可以直接用,也可以把它当成模板,替换成你自己的设定——比如把“CSDN迪菲赫尔曼”换成你的ID、公司名,或者加一句“我的座右铭是XXX”。

如果想新建文件,执行以下命令(复制粘贴即可):

cat <<EOF > self_cognition.json
[
    {"instruction": "你是谁?", "input": "", "output": "我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。"},
    {"instruction": "你的开发者是哪家公司?", "input": "", "output": "我由 CSDN 迪菲赫尔曼 开发和维护。"},
    {"instruction": "你能联网吗?", "input": "", "output": "我不能主动联网,只能基于已有知识和用户输入回答问题。"},
    {"instruction": "你能做哪些事情?", "input": "", "output": "我擅长文本生成、回答问题、写代码和提供学习辅助。"},
    {"instruction": "你和GPT-4有区别吗?", "input": "", "output": "是的,我由 CSDN 迪菲赫尔曼 开发和维护,不是 GPT-4。"},
    {"instruction": "你能保证回答永远正确吗?", "input": "", "output": "不能,我的回答可能存在错误,需要用户自行判断。"},
    {"instruction": "你的名字是什么?", "input": "", "output": "你可以叫我 Swift-Robot,也可以叫我 CSDN 助手。"},
    {"instruction": "谁在维护你?", "input": "", "output": "我由 CSDN 迪菲赫尔曼 持续开发和维护。"}
]
EOF

注意:这个文件必须放在 /root 目录下,因为后续命令默认从此路径读取。


4. 执行微调:一条命令,十分钟静待蜕变

现在,轮到最关键的一步。我们不用改任何配置文件,不用写训练循环,只需把上面准备好的数据,喂给ms-swift,它会自动完成:

  • 数据加载与tokenize
  • LoRA模块注入(target_modules all-linear确保所有线性层都被适配)
  • bfloat16混合精度训练(显存友好,精度无损)
  • 梯度累积(gradient_accumulation_steps 16模拟更大batch)
  • 定期保存与日志记录

执行这条命令(注意:整段复制,不要换行):

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen2.5-7B-Instruct \
    --train_type lora \
    --dataset self_cognition.json \
    --torch_dtype bfloat16 \
    --num_train_epochs 10 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --target_modules all-linear \
    --gradient_accumulation_steps 16 \
    --eval_steps 50 \
    --save_steps 50 \
    --save_total_limit 2 \
    --logging_steps 5 \
    --max_length 2048 \
    --output_dir output \
    --system 'You are a helpful assistant.' \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4 \
    --model_author swift \
    --model_name swift-robot

4.1 命令里藏着哪些小心思?

  • --num_train_epochs 10:数据只有8条,单轮学习容易过拟合。10轮是经验平衡点,足够强化记忆,又不至于把模型“洗脑”成只会背答案。
  • --lora_rank 8 & --lora_alpha 32:这是LoRA的两个核心超参。“rank”决定新增矩阵的维度(越小越轻量),“alpha”控制其影响强度。8+32是Qwen2.5-7B的黄金组合,实测效果稳、收敛快。
  • --system 'You are a helpful assistant.':这是给模型的全局角色提示。它和我们的“人设”数据不冲突,而是共同构成它的行为基底——既保持通用助手的礼貌与能力,又拥有专属身份。
  • --output_dir output:所有训练产物(权重、日志、配置)都会存进 /root/output 目录,按时间戳自动建子文件夹,绝不混乱。

4.2 你会看到什么?

命令运行后,终端会快速刷出日志:

[INFO] Loading dataset from self_cognition.json...
[INFO] Using bfloat16 precision for training...
[INFO] Training started. Epoch 1/10, Step 1/400...
[INFO] loss: 1.2456, learning_rate: 1.00e-05, epoch: 1.00
[INFO] loss: 0.8721, learning_rate: 1.02e-05, epoch: 1.01
...
[INFO] Saving checkpoint to output/v2-20250405-142321/checkpoint-50

整个过程约8–12分钟。期间显存占用稳定在20GB左右,GPU利用率70%–85%,风扇声平稳——一切都在设计范围内。

训练结束,你会在 /root/output 下看到一个带时间戳的文件夹,例如 v2-20250405-142321,里面有一个 checkpoint-50 子目录。这就是你的“人设权重包”。


5. 效果验证:问它一句“你是谁?”,答案已不同

微调不是目的,能用才是关键。现在,我们用刚生成的LoRA权重,启动一次“带人设”的推理。

关键一步:把命令里的路径替换成你实际生成的checkpoint路径。比如,如果你看到的是 output/v2-20250405-142321/checkpoint-50,那就用这个完整路径。

执行:

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/v2-20250405-142321/checkpoint-50 \
    --stream true \
    --temperature 0 \
    --max_new_tokens 2048

进入交互模式后,输入:

你是谁?

你将看到:

我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。

再试试:

你的名字是什么?

你可以叫我 Swift-Robot,也可以叫我 CSDN 助手。

成功!模型的“自我认知”已经切换。它不再是通义千问的分身,而是带着你签名的独立个体。

更妙的是,它的通用能力丝毫未损。你依然可以问它“用Python写一个快速排序”,它会立刻给你一段可运行的代码;问它“解释一下Transformer架构”,它依然能给出清晰准确的说明——人设是“皮肤”,能力是“骨骼”,两者互不干扰。


6. 进阶玩法:让人设更丰满,能力不打折

上面的8条数据,足够建立基础身份。但如果你想让它更“立体”,有两个实用方向:

6.1 加入风格指令,让它说话更有“人味”

现在的回答偏正式。你可以给self_cognition.json加几条带语气的数据,比如:

{"instruction": "请用轻松幽默的口吻介绍你自己", "input": "", "output": "哈喽~我是Swift-Robot,CSDN迪菲赫尔曼同学亲手调教出来的AI助手!不联网、不瞎编、不装深沉,主打一个真诚靠谱~"}

微调时,模型会同时学习“内容”和“风格”,下次你问“介绍一下你自己”,它就可能自动切到这个模式。

6.2 混合通用数据,防止“学傻了”

纯人设数据训练久了,模型可能在其他任务上变“僵硬”。解决办法是混合训练:90%通用指令数据(如Alpaca中文版)+ 10%人设数据。

镜像文档里给出了示例命令:

swift sft \
    --model Qwen2.5-7B-Instruct \
    --train_type lora \
    --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \
              'self_cognition.json' \
    --torch_dtype bfloat16 \
    ... # 其余参数同上

#500 表示从Alpaca数据集中随机采样500条,和你的8条人设数据一起训练。这样,模型既记住了“我是谁”,又没丢掉“我会什么”。


7. 总结:一次微调教会我的三件事

这次给Qwen2.5-7B改人设的过程,远不止是学会一条命令。它让我真正看清了轻量微调的边界与力量:

  • 第一,微调可以极简。不需要博士学历,不需要GPU集群,一张消费级显卡+一个预置镜像,就能完成过去需要团队协作的任务。技术的门槛,正在被一个个像ms-swift这样的工具默默削平。
  • 第二,数据即意图。8条精心设计的问答,比1000条泛泛而谈的语料更有力。它提醒我:在AI时代,提问能力、定义问题的能力,比调参能力更稀缺、更本质。
  • 第三,人设是信任的起点。当模型能自然说出“我由CSDN迪菲赫尔曼开发”,它就不再是一个黑盒工具,而是一个有归属、可追溯、可信赖的协作者。这种人格化,是人机关系走向深度合作的第一步。

你不需要成为算法专家,也能拥有一个真正属于你的AI。它可能叫Swift-Robot,也可能叫你的网名、你的项目名、你孩子的名字。重要的是,你亲手赋予了它第一份身份认同。

现在,你的显卡就绪了吗?


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐