ChatBase
项目描述
ChatBase 是一个基于 ONNX Runtime 的聊天机器人项目,主要用于加载和运行大型语言模型 (LLM),如 DeepSeek 和 Qwen 模型。该项目支持通过消息列表格式输入提示,并生成响应。目前聚焦于 LLM 的自回归生成,支持 CUDA 加速。
项目目标是构建一个简单的聊天基础框架,可扩展到 ASR (自动语音识别) 和 TTS (文本转语音) 模块。
目录结构
ChatBase/
├── configs
├── deepseek_gpu.png
├── deepseek.png
├── model_classes
│ ├── modelloader.py
│ └── __pycache__
│ ├── modelloader.cpython-310.pyc
│ └── modelloader.cpython-313.pyc
├── models
│ ├── ASR
│ ├── LLM
│ │ ├── deepseek_r1_1.5b_onnx
│ │ │ ├── config.json
│ │ │ ├── configuration.json
│ │ │ ├── generation_config.json
│ │ │ ├── model.onnx
│ │ │ ├── model.onnx_data
│ │ │ ├── special_tokens_map.json
│ │ │ ├── tokenizer_config.json
│ │ │ └── tokenizer.json
│ │ └── qwen2.5_1.5b_onnx
│ │ ├── added_tokens.json
│ │ ├── config.json
│ │ ├── generation_config.json
│ │ ├── merges.txt
│ │ ├── model.onnx
│ │ ├── model.onnx_data
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ ├── tokenizer.json
│ │ └── vocab.json
│ └── TTS
├── model_utils
├── qwen_gpu.png
├── qwen.png
├── README.md
├── req.info
└── run.py
11 directories, 28 files
安装
依赖
项目依赖于多个 Python 包,包括但不限于:
- onnxruntime-gpu
- transformers
- torch
- numpy
完整依赖列表见 req.info
文件。您可以使用以下命令安装:
pip install -r req.info
注意:对于 GPU 支持,需要安装 CUDA 和相应的驱动程序。
模型下载
- 下载 DeepSeek 或 Qwen 模型的 ONNX 版本。
- 将模型文件放置在
models/LLM/
目录下,例如deepseek_r1_1.5b_onnx/
。
使用
运行主程序
执行以下命令启动交互式聊天:
python run.py
- 输入提示(如 “你好”),模型将生成响应。
- 输入 “exit” 退出。
程序会使用 messages
列表构建提示,包括系统提示(如 “你的名字叫 Brisk, 你是机器人大脑, 任何回答都要用中文”)。
自定义
- 修改
run.py
中的messages
结构以调整系统提示或历史对话。 - 在
model_classes/modelloader.py
中调整生成参数,如top_p
、top_k
、temperature
。
项目结构
- configs/: 配置文件目录(当前为空)。
- model_classes/:
modelloader.py
: ONNXLoader 类,用于加载 ONNX 模型、处理输入和生成响应。
- model_utils/: 模型工具目录(当前为空)。
- models/:
- ASR/: 语音识别模型(未实现)。
- LLM/: 大型语言模型目录,包括 DeepSeek 和 Qwen 的 ONNX 文件。
- TTS/: 文本转语音模型(未实现)。
- run.py: 主入口脚本,支持交互式输入和响应生成。
- req.info: 依赖包列表。
注意事项
- 性能: 项目使用 CUDAExecutionProvider,需要 NVIDIA GPU 和 CUDA 环境。CPU 模式可用但较慢。
- 错误处理: 如果遇到维度不匹配或推理错误,请检查输入形状和模型兼容性。
- 扩展: 项目设计为模块化,可添加 ASR 和 TTS 支持以构建完整语音聊天系统。
- 许可证: (如果适用,请添加)。
如有问题,欢迎提交 issue 或贡献代码!
实现细节
核心实现
项目的主要功能通过 model_classes/modelloader.py
中的 ONNXLoader
类实现。该类负责加载 ONNX 模型、处理输入提示(支持字符串或消息列表格式)、执行自回归生成,并返回生成的响应。
- 模型加载: 使用 ONNX Runtime 的
InferenceSession
加载模型,支持 CUDA 或 CPU 执行提供者。 - 输入处理: 对于消息列表,使用
transformers
库的apply_chat_template
应用聊天模板;对于字符串提示,直接使用 tokenizer 编码。手动创建 attention mask 和 position ids 以兼容模型输入。 - 生成循环: 实现自回归生成,逐个 token 生成响应,直到达到最大长度或遇到 EOS token。
使用的技术
- ONNX Runtime: 用于高效推理 ONNX 格式的模型,支持 GPU 加速(CUDAExecutionProvider)。
- Transformers: 提供 tokenizer 和聊天模板处理,支持 Hugging Face 模型生态。
- PyTorch: 处理 logits 计算、采样和 softmax 操作。
- NumPy: 用于数组操作和张量转换。
- 其他: 支持 top-k/top-p 采样、temperature 调整和重复惩罚。
算法与机制
- 自回归生成 (Autoregressive Generation): 模型基于当前序列预测下一个 token,逐步构建响应。
- 采样算法:
- Top-k Sampling: 仅从概率最高的 k 个 token 中采样。
- Top-p (Nucleus) Sampling: 从累计概率超过 p 的最小 token 集合中采样。
- Temperature Scaling: 调整 logits 以控制随机性(temperature < 1 使输出更确定,> 1 增加多样性)。
- 重复惩罚: 对已生成 token 的 logits 应用惩罚以减少重复。
- 停止条件: 检测 EOS token 或达到最大生成长度。
这些机制确保生成的响应连贯、多样且相关。如果需要自定义采样参数,可在 ONNXLoader
初始化时调整 top_p
、top_k
和 temperature
。
示例截图
DeepSeek 运行截图
此截图展示了模型在交互模式下的运行示例,包括用户输入、模型生成的响应,以及终端输出日志。展示了自回归生成的过程和最终输出。
GPU 资源消耗截图
此截图显示了模型推理过程中 GPU 的资源消耗情况,包括内存使用率、利用率等指标。项目使用 CUDA 加速,确保高效运行大型模型。
Qwen 运行截图
此截图展示了模型在交互模式下的运行示例,包括用户输入、模型生成的响应,以及终端输出日志。展示了自回归生成的过程和最终输出。
GPU 资源消耗截图
此截图显示了模型推理过程中 GPU 的资源消耗情况,包括内存使用率、利用率等指标。项目使用 CUDA 加速,确保高效运行大型模型。
获取项目源码以及模型文件请关注公众号“CrazyNET”,回复“llmchat”