diff --git a/.gitignore b/.gitignore index 4ffb55e..ba80f52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,167 +1,169 @@ -wandb/ -weclone_archive-my/ -**/pycache/ -events.out.tfevents.* -归档/ -*.pt -*.npz -*nohup.out -*log.txt -*cookie.bin -*.gradio/ - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - - -*.zip -LLaMA-Factory -chatglm3-6b -cache -archive -model_output* -data/test -.vscode -*-my*.* -*.csv -*test.* -*users.json -Spark-TTS-0.5B/ -uv.lock -output* -*.out - -Qwen*/ -settings.jsonc -settings.json -dataset/blocked_words.json -dataset/wechat/* -dataset/media/* -models/* \ No newline at end of file +wandb/ +weclone_archive-my/ +**/pycache/ +events.out.tfevents.* +归档/ +*.pt +*.npz +*nohup.out +*log.txt +*cookie.bin +*.gradio/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + + +*.zip +LLaMA-Factory +chatglm3-6b +cache +archive +model_output* +data/test +.vscode +*-my*.* +*.csv +*test.* +*users.json +Spark-TTS-0.5B/ +uv.lock +output* +*.out + +Qwen*/ +settings.jsonc +settings.json +dataset/blocked_words.json +dataset/wechat/* +dataset/media/* +models/* +.secrets* +.env* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..ecca81f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,48 @@ +# .pre-commit-config.yaml +default_install_hook_types: [pre-commit, prepare-commit-msg] +ci: + autofix_commit_msg: ":balloon: auto fixes by pre-commit hooks" + autofix_prs: true + autoupdate_branch: master + autoupdate_schedule: monthly + autoupdate_commit_msg: ":balloon: pre-commit autoupdate hooks" + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-ast # Python 语法检查 + - id: check-added-large-files # 防止大文件 + args: ["--maxkb=25000"] + - id: check-merge-conflict # 检查合并冲突 + - id: check-yaml # YAML 语法检查 + - id: check-toml # TOML 语法检查 + - id: debug-statements # 防止调试语句 + - id: end-of-file-fixer # 文件结尾修复 + # - id: trailing-whitespace # 移除行尾空白 + # args: [--markdown-linebreak-ext=md] + - id: no-commit-to-branch # 保护主分支 + args: ["--branch", "main", "--branch", "master"] + - id: mixed-line-ending # 检查混合行结束符 + args: ["--fix=lf"] + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.13 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + + - repo: https://github.com/pycqa/isort + rev: 6.0.1 + hooks: + - id: isort + args: ["--profile", "black", "--line-length", "120"] + + - repo: https://github.com/PyCQA/bandit + rev: 1.8.3 + hooks: + - id: bandit + name: Python 安全检查 + args: ["-c", "pyproject.toml"] + additional_dependencies: ["bandit[toml]"] diff --git a/README.md b/README.md index 0c53917..7217a6b 100644 --- a/README.md +++ b/README.md @@ -1,285 +1,293 @@ - -
- 项目主页 | - 项目文档 | - Windows部署指南 | - Linux部署指南【保姆级】 -
- -> [!IMPORTANT] -> ### WhatsApp and Telegram chat logs integration for digital avatar creation is coming ! - -## ✨核心功能 -- 💫 涵盖打造数字分身的全链路方案,包括聊天数据导出、预处理、模型训练、部署 -- 💬 使用微信聊天记录微调LLM,让大模型有"那味儿" -- 🔗 绑定到微信、QQ、Telegram、企微、飞书机器人,实现自己的数字分身 -- 🛡️ 隐私信息过滤,本地化微调部署,数据安全可控 - -## 📋特性与说明 - -> [!IMPORTANT] -> ### WeClone现在支持图片模态数据微调了!并且包含了更全的上下文,记得拉取最新代码并更新依赖。 - -> [!IMPORTANT] -> - WeClone仍在快速迭代期,当前效果不代表最终效果。 -> - 微调LLM效果很大程度取决于模型大小、聊天数据的数量和质量,理论上模型越大,数据越多,效果越好。 -> - Windows环境未进行严格测试,可以使用WSL作为运行环境。详细教程可点击[Windows部署指南](https://blog.051088.xyz/2025/05/14/WeClone-%E7%94%A8%E5%BE%AE%E4%BF%A1%E8%81%8A%E5%A4%A9%E8%AE%B0%E5%BD%95%E6%89%93%E9%80%A0%E8%87%AA%E5%B7%B1%E7%9A%84AI%E6%95%B0%E5%AD%97%E5%88%86%E8%BA%AB/)查看。 - -### 硬件要求 - -项目默认使用Qwen2.5-7B-Instruct模型,LoRA方法对sft阶段微调,大约需要16GB显存。也可以使用[LLaMA Factory](https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md#%E6%A8%A1%E5%9E%8B)支持的其他模型和方法。 - -需要显存的估算值: -| 方法 | 精度 | 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 | - - -## 环境搭建 -1.cuda安装(已安装可跳过,**要求版本12.4及以上**):[LLaMA Factory](https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html#cuda) - -2.建议使用 [uv](https://docs.astral.sh/uv/)安装依赖,这是一个非常快速的 Python 环境管理器。安装uv后,您可以使用以下命令创建一个新的Python环境并安装依赖项,注意这不包含音频克隆功能的依赖: -```bash -git clone https://github.com/xming521/WeClone.git -cd WeClone -uv venv .venv --python=3.10 -source .venv/bin/activate # windows下执行 .venv\Scripts\activate -uv pip install --group main -e . -``` -> [!TIP] -> 如果要使用最新的模型进行微调,需要手动安装最新版LLaMA Factory:`uv pip install --upgrade git+https://github.com/hiyouga/LLaMA-Factory.git`,同时其他依赖版本也可能需要修改,例如vllm pytorch transforms - -3.将配置文件模板复制一份并重命名为`settings.jsonc`,后续配置修改在此文件进行: -```bash -cp settings.template.jsonc settings.jsonc -``` -- 微调**多模态模型**时,请使用[examples/mllm.template.jsonc](https://github.com/xming521/WeClone/blob/master/examples/mllm.template.jsonc)作为配置文件。 - -> [!NOTE] -> 训练以及推理相关配置统一在文件`settings.jsonc` - -4.使用以下命令测试CUDA环境是否正确配置并可被PyTorch识别,Mac不需要: -```bash -python -c "import torch; print('CUDA是否可用:', torch.cuda.is_available());" -``` - -5.(可选)安装FlashAttention,加速训练和推理:`uv pip install flash-attn --no-build-isolation` - -## 模型下载 -```bash -git lfs install -git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git -``` -下载有问题使用其他方式下载:[模型的下载](https://www.modelscope.cn/docs/models/download) - - -## 数据准备 - -请使用[PyWxDump](https://github.com/xaoyaoo/PyWxDump)提取微信聊天记录(不支持4.0版本微信)。可以先将手机的聊天记录迁移(备份)到电脑,数据量更多一些。下载软件并解密数据库后,点击聊天备份,导出类型为CSV,可以导出多个联系人(不建议使用群聊记录),然后将导出的位于`wxdump_tmp/export` 的 `csv` 文件夹放在`./dataset`目录即可,也就是不同人聊天记录的文件夹一起放在 `./dataset/csv`。 - -### 图片数据准备 -在能进入微信个人文件夹的环境执行,如果没有环境创建环境并安装基础依赖即可(`uv pip install -e .`),然后执行以下命令,将微信图片数据保存到`./dataset/wechat/dat`目录下。 -```bash -python weclone/data/chat_parsers/wechat_parser.py --wechat-data-dir "微信个人文件夹路径 例如 C:\Users\user\Documents\WeChat Files\wxid_d68wiru2zseo22" -``` -之后使用[微信图片解密工具](https://github.com/Evil0ctal/WeChat-image-decryption)解密图片数据,解密后的图片数据保存到`dataset/media/images`目录下。 - -## 数据预处理 - -- 项目默认去除了数据中的手机号、身份证号、邮箱、网址。还在`settings.jsonc`中提供了一个禁用词词库`blocked_words`,可以自行添加需要过滤的词句(会默认去掉包括禁用词的整句)。 -> [!IMPORTANT] -> 🚨 请一定注意保护个人隐私,不要泄露个人信息! - - -- 执行以下命令对数据进行处理,可以根据自己的聊天风格修改settings.jsonc的`make_dataset_args`。 -```bash -weclone-cli make-dataset -``` -- 目前仅支持时间窗口策略,根据`single_combine_time_window`将单人连续消息通过逗号连接合并为一句,根据`qa_match_time_window`匹配问答对。 -- 多模态数据可以通过`image_max_pixels`和`max_image_num`参数控制图片数量和大小,减少显存占用。 -- 可以启用`clean_dataset`中的`enable_clean`选项,对数据进行清洗,以达到更好效果(多模态数据暂不支持)。* 当前系统支持使用 `llm judge` 对聊天记录进行打分,提供 **vllm 离线推理** 和 **API 在线推理** 两种方式。可通过将 `settings.jsonc` 文件中的 `"online_llm_clear": false` 修改为 `true` 来启用 API 在线推理模式,并配置相应的 `base_url`、`llm_api_key`、`model_name` 等参数。所有兼容 OpenAI 接口的模型均可接入。 -- 在获得 `llm 打分分数分布情况` 后,可通过设置 `accept_score` 参数筛选可接受的分数区间,同时可适当降低 `train_sft_args` 中的 `lora_dropout` 参数,以提升模型的拟合效果。 - -## 配置参数并微调模型 - -- (可选)修改 `settings.jsonc` 的 `model_name_or_path` 和 `template` 选择本地下载好的其他模型。 -- 修改`per_device_train_batch_size`以及`gradient_accumulation_steps`来调整显存占用。 -- 可以根据自己数据集的数量和质量修改`train_sft_args`的`num_train_epochs`、`lora_rank`、`lora_dropout`等参数。 - -### 单卡训练 -```bash -weclone-cli train-sft -``` -多卡环境单卡训练,需要先执行 `export CUDA_VISIBLE_DEVICES=0` - -### 多卡训练 -取消`settings.jsonc`中`deepspeed`行代码注释,使用以下命令多卡训练: -```bash -uv pip install deepspeed -deepspeed --num_gpus=使用显卡数量 weclone/train/train_sft.py -``` - -### 使用浏览器demo简单推理 -可以在这一步测试出合适的temperature、top_p值,修改settings.jsonc的`infer_args`后,供后续推理时使用。 -```bash -weclone-cli webchat-demo -``` - -### 使用接口进行推理 - -```bash -weclone-cli server -``` - -### 使用常见聊天问题测试 -不包含询问个人信息的问题,仅有日常聊天。测试结果在test_result-my.txt。 -```bash -weclone-cli server -weclone-cli test-model -``` - -## 🖼️ 微调效果 -使用Qwen2.5-14B-Instruct模型,大概3万条处理后的有效数据,loss降到了3.5左右的效果。 -+ 项目主页 | + 项目文档 | + Windows部署指南 | + Linux部署指南【保姆级】 +
+ +> [!IMPORTANT] +> ### WhatsApp and Telegram chat logs integration for digital avatar creation is coming ! + +## ✨核心功能 +- 💫 涵盖打造数字分身的全链路方案,包括聊天数据导出、预处理、模型训练、部署 +- 💬 使用微信聊天记录微调LLM,让大模型有"那味儿" +- 🔗 绑定到微信、QQ、Telegram、企微、飞书机器人,实现自己的数字分身 +- 🛡️ 隐私信息过滤,本地化微调部署,数据安全可控 + +## 📋特性与说明 + +> [!IMPORTANT] +> ### WeClone现在支持图片模态数据微调了!并且包含了更全的上下文,记得拉取最新代码并更新依赖。 + +> [!IMPORTANT] +> - WeClone仍在快速迭代期,当前效果不代表最终效果。 +> - 微调LLM效果很大程度取决于模型大小、聊天数据的数量和质量,理论上模型越大,数据越多,效果越好。 +> - Windows环境未进行严格测试,可以使用WSL作为运行环境。详细教程可点击[Windows部署指南](https://blog.051088.xyz/2025/05/14/WeClone-%E7%94%A8%E5%BE%AE%E4%BF%A1%E8%81%8A%E5%A4%A9%E8%AE%B0%E5%BD%95%E6%89%93%E9%80%A0%E8%87%AA%E5%B7%B1%E7%9A%84AI%E6%95%B0%E5%AD%97%E5%88%86%E8%BA%AB/)查看。 + +### 更新日志 +[25/06/05]支持图片模态数据微调 + +### 硬件要求 + +项目默认使用Qwen2.5-7B-Instruct模型,LoRA方法对sft阶段微调,大约需要16GB显存。也可以使用[LLaMA Factory](https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md#%E6%A8%A1%E5%9E%8B)支持的其他模型和方法。 + +需要显存的估算值: +| 方法 | 精度 | 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 | + + +## 环境搭建 +1.cuda安装(已安装可跳过,**要求版本12.4及以上**):[LLaMA Factory](https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html#cuda) + +2.建议使用 [uv](https://docs.astral.sh/uv/)安装依赖,这是一个非常快速的 Python 环境管理器。安装uv后,您可以使用以下命令创建一个新的Python环境并安装依赖项,注意这不包含音频克隆功能的依赖: +```bash +git clone https://github.com/xming521/WeClone.git +cd WeClone +uv venv .venv --python=3.10 +source .venv/bin/activate # windows下执行 .venv\Scripts\activate +uv pip install --group main -e . +``` +> [!TIP] +> 如果要使用最新的模型进行微调,需要手动安装最新版LLaMA Factory:`uv pip install --upgrade git+https://github.com/hiyouga/LLaMA-Factory.git`,同时其他依赖版本也可能需要修改,例如vllm pytorch transforms + +3.将配置文件模板复制一份并重命名为`settings.jsonc`,后续配置修改在此文件进行: +```bash +cp settings.template.jsonc settings.jsonc +``` +- 微调**多模态模型**时,请使用[examples/mllm.template.jsonc](https://github.com/xming521/WeClone/blob/master/examples/mllm.template.jsonc)作为配置文件。 + +> [!NOTE] +> 训练以及推理相关配置统一在文件`settings.jsonc` + +4.使用以下命令测试CUDA环境是否正确配置并可被PyTorch识别,Mac不需要: +```bash +python -c "import torch; print('CUDA是否可用:', torch.cuda.is_available());" +``` + +5.(可选)安装FlashAttention,加速训练和推理:`uv pip install flash-attn --no-build-isolation` + +## 模型下载 +```bash +git lfs install +git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git +``` +下载有问题使用其他方式下载:[模型的下载](https://www.modelscope.cn/docs/models/download) + + +## 数据准备 + +请使用[PyWxDump](https://github.com/xaoyaoo/PyWxDump)提取微信聊天记录(不支持4.0版本微信)。可以先将手机的聊天记录迁移(备份)到电脑,数据量更多一些。下载软件并解密数据库后,点击聊天备份,导出类型为CSV,可以导出多个联系人(不建议使用群聊记录),然后将导出的位于`wxdump_tmp/export` 的 `csv` 文件夹放在`./dataset`目录即可,也就是不同人聊天记录的文件夹一起放在 `./dataset/csv`。 + +### 图片数据准备 +在能进入微信个人文件夹的环境执行,如果没有环境创建环境并安装基础依赖即可(`uv pip install -e .`),然后执行以下命令,将微信图片数据保存到`./dataset/wechat/dat`目录下。 +```bash +python weclone/data/chat_parsers/wechat_parser.py --wechat-data-dir "微信个人文件夹路径 例如 C:\Users\user\Documents\WeChat Files\wxid_d68wiru2zseo22" +``` +之后使用[微信图片解密工具](https://github.com/Evil0ctal/WeChat-image-decryption)解密图片数据,解密后的图片数据保存到`dataset/media/images`目录下。 + +## 数据预处理 + +- 项目默认去除了数据中的手机号、身份证号、邮箱、网址。还在`settings.jsonc`中提供了一个禁用词词库`blocked_words`,可以自行添加需要过滤的词句(会默认去掉包括禁用词的整句)。 +> [!IMPORTANT] +> 🚨 请一定注意保护个人隐私,不要泄露个人信息! + + +- 执行以下命令对数据进行处理,可以根据自己的聊天风格修改settings.jsonc的`make_dataset_args`。 +```bash +weclone-cli make-dataset +``` +- 目前仅支持时间窗口策略,根据`single_combine_time_window`将单人连续消息通过逗号连接合并为一句,根据`qa_match_time_window`匹配问答对。 +- 多模态数据可以通过`image_max_pixels`和`max_image_num`参数控制图片数量和大小,减少显存占用。 +- 可以启用`clean_dataset`中的`enable_clean`选项,对数据进行清洗,以达到更好效果(多模态数据暂不支持)。* 当前系统支持使用 `llm judge` 对聊天记录进行打分,提供 **vllm 离线推理** 和 **API 在线推理** 两种方式。可通过将 `settings.jsonc` 文件中的 `"online_llm_clear": false` 修改为 `true` 来启用 API 在线推理模式,并配置相应的 `base_url`、`llm_api_key`、`model_name` 等参数。所有兼容 OpenAI 接口的模型均可接入。 +- 在获得 `llm 打分分数分布情况` 后,可通过设置 `accept_score` 参数筛选可接受的分数区间,同时可适当降低 `train_sft_args` 中的 `lora_dropout` 参数,以提升模型的拟合效果。 + +## 配置参数并微调模型 + +- (可选)修改 `settings.jsonc` 的 `model_name_or_path` 和 `template` 选择本地下载好的其他模型。 +- 修改`per_device_train_batch_size`以及`gradient_accumulation_steps`来调整显存占用。 +- 可以根据自己数据集的数量和质量修改`train_sft_args`的`num_train_epochs`、`lora_rank`、`lora_dropout`等参数。 + +### 单卡训练 +```bash +weclone-cli train-sft +``` +多卡环境单卡训练,需要先执行 `export CUDA_VISIBLE_DEVICES=0` + +### 多卡训练 +取消`settings.jsonc`中`deepspeed`行代码注释,使用以下命令多卡训练: +```bash +uv pip install deepspeed +deepspeed --num_gpus=使用显卡数量 weclone/train/train_sft.py +``` + +### 使用浏览器demo简单推理 +可以在这一步测试出合适的temperature、top_p值,修改settings.jsonc的`infer_args`后,供后续推理时使用。 +```bash +weclone-cli webchat-demo +``` + +### 使用接口进行推理 + +```bash +weclone-cli server +``` + +### 使用常见聊天问题测试 +不包含询问个人信息的问题,仅有日常聊天。测试结果在test_result-my.txt。 +```bash +weclone-cli server +weclone-cli test-model +``` + +## 🖼️ 微调效果 +使用Qwen2.5-14B-Instruct模型,大概3万条处理后的有效数据,loss降到了3.5左右的效果。 +