WeClone项目地址
xming521/WeClone: 欢迎star⭐。🚀从聊天记录创造数字分身的一站式解决方案💡 使用微信聊天记录微调大语言模型,让大模型有“那味儿”,并绑定到聊天机器人,实现自己的数字分身。 数字克隆/数字分身/数字永生/声音克隆/LLM/大语言模型/微信聊天机器人/LoRA
用微信聊天记录微调大语言模型。该项目是通过个人微信聊天记录对大语言模型(LLM)进行微调,打造专属的数字分身。它提供从聊天数据到模型微调、从文本生成到语音克隆、从训练到部署的全链路解决方案。让你的数字分身不仅“会说你的话”,还能“听起来像你本人”。
硬件要求
项目默认使用Qwen2.5-7B-Instruct模型,LoRA方法对sft阶段微调,大约需要16GB显存。也可以使用LLaMA Factory支持的其他模型和方法。
需要显存的估算值:
方法 | 精度 | 7B | 14B | 30B | 70B | x B |
---|---|---|---|---|---|---|
Full (bf16 or fp16 ) | 32 | 120GB | 240GB | 600GB | 1200GB | 18x GB |
Full (pure_bf16 ) | 16 | 60GB | 120GB | 300GB | 600GB | 8x GB |
Freeze/LoRA/GaLore/APOLLO/BAdam | 16 | 16GB | 32GB | 64GB | 160GB | 2x GB |
QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | x GB |
QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | x/2 GB |
QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | x/4 GB |
环境搭建
cuda安装(已安装可跳过):LLaMA Factory
建议使用 uv,这是一个非常快速的 Python 环境管理器。安装uv后,您可以使用以下命令创建一个新的Python环境并安装依赖项,注意这不包含音频克隆功能的依赖:
git clone https://github.com/xming521/WeClone.git
cd WeClone
uv venv .venv --python=3.10
source .venv/bin/activate
uv pip install --group main -e .
使用以下命令测试CUDA环境是否正确配置并可被PyTorch识别,Mac不需要:
python -c "import torch; print('CUDA是否可用:', torch.cuda.is_available());"
(可选)安装FlashAttention,加速训练和推理:uv pip install flash-attn --no-build-isolation
数据准备
请使用PyWxDump提取微信聊天记录。可以先将手机的聊天记录迁移(备份)到电脑,数据量更多一些。下载软件并解密数据库后,点击聊天备份,导出类型为CSV,可以导出多个联系人或群聊,然后将导出的位于wxdump_tmp/export
的 csv
文件夹放在./dataset
目录即可,也就是不同人聊天记录的文件夹一起放在 ./dataset/csv
。
数据预处理
- 项目默认去除了数据中的手机号、身份证号、邮箱、网址。还提供了一个禁用词词库blocked_words,可以自行添加需要过滤的词句(会默认去掉包括禁用词的整句)。
- 执行以下命令对数据进行处理,可以根据自己的聊天风格修改settings.json的
make_dataset_args
。
python weclone/data/qa_generator.py
- 目前仅支持时间窗口策略,根据
single_combine_time_window
将单人连续消息通过逗号连接合并为一句,根据qa_match_time_window
匹配问答对。后续将增加大模型清洗数据的功能。
模型下载
git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git
配置参数并微调模型
- (可选)修改settings.json的
model_name_or_path
和template
选择本地下载好的其他模型。 - 修改
per_device_train_batch_size
以及gradient_accumulation_steps
来调整显存占用。 - 可以根据自己数据集的数量和质量修改
lora_rank
、lora_dropout
等参数。
python weclone/train/train_sft.py
取消settings.json
中deepspeed
行代码注释,使用以下命令多卡训练:
uv pip install deepspeed
deepspeed --num_gpus=使用显卡数量 weclone/train/train_sft.py
使用浏览器demo简单推理
可以在这一步测试出合适的temperature、top_p值,修改settings.json的infer_args
后,供后续推理时使用。
python weclone/eval/web_demo.py
使用接口进行推理
python weclone/server/api_service.py
使用常见聊天问题测试
有些答案比较抽象,主要原因是训练数据没有覆盖,后续通过RAG来解决。测试结果在test_result-my.txt。
python weclone/server/api_service.py
python weclone/eval/test_model.py