MiniMind 学习笔记之 25 Web UI 与 LLaMA-Factory:两条“不写代码”的路径

11 阅读5分钟

上承〔24 · 社区生态:围绕一个项目长出来的森林〕。前面二十四篇,训练靠命令行,对话靠 eval_llm.py。但命令行对不熟悉的人不友好。这一篇讲两条“不写代码”的路径:MiniMind 自带的 Streamlit Web UI,让你在浏览器里和模型对话;LLaMA-Factory,让你用图形界面完成 SFT / DPO / PPO 的微调。两条路都基于同一个前提:模型已经转换成 HuggingFace 格式。

一、Streamlit Web UI:浏览器里的对话界面

1.1 它是什么

MiniMind 自带一个基于 Streamlit 的 Web UI,脚本位置在 scripts/web_demo.py。它是一个单进程应用:Streamlit 负责管理 Web 服务器、会话状态和模型推理。

1.2 环境准备

需要 Python 3.10 以上,安装 Streamlit:

pip install streamlit transformers torch

然后把转换好的 HuggingFace 格式模型文件夹复制到 ./scripts/ 目录下:

cp -r minimind-3 ./scripts/minimind-3

这一步容易漏掉。 web_demo.py 会自动扫描 ./scripts/ 下的子目录,如果找不到任何权重文件,会直接报错。

1.3 启动

有两种方式。

方式一:前台启动,适合调试。

cd scripts && streamlit run web_demo.py

方式二:后台启动,适合长期运行。

cd scripts
nohup streamlit run web_demo.py \
  --server.address 0.0.0.0 \
  --server.port 80 \
  --server.headless true > streamlit.log 2>&1 &

启动后,浏览器打开对应地址(默认 http://localhost:8501),就能看到对话界面。

1.4 界面功能

侧边栏提供这些可调项:

参数范围 / 说明
模型路径输入本地路径或 HuggingFace ID
温度0.0 – 2.0 滑块
最大生成长度最大 8192 token
历史轮数调整对话上下文包含几轮
自适应思考开关,控制 <think> 标签的生成

“自适应思考”开关对应第十五篇讲的自适应思考能力。

1.5 核心机制:流式输出

Web UI 的流式输出靠一个 TextIteratorStreamer 实现。

模型生成时,model.generate 在一个独立的 Thread 里运行。主线程同时遍历 Streamer,每拿到一个 token 就更新 UI。这就是“一个字一个字蹦出来”的效果。

1.6 和 API 的分工

第十七篇讲过 serve_openai_api.py。两者的定位不同:

Web UI(web_demo.py)OpenAI API(serve_openai_api.py)
使用者人类程序
接入方式浏览器HTTP 请求
典型场景手动测试、演示FastGPT / OpenWebUI / Dify 接入
技术栈StreamlitFastAPI

一句话:Web UI 给人用,API 给程序用。

二、LLaMA-Factory:图形化的训练界面

2.1 为什么需要 LLaMA-Factory

MiniMind 自带的训练脚本(train_full_sft.py、train_dpo.py 等)是命令行程序。调参靠改配置或传参数。对不熟悉命令行的人来说,门槛不低。

LLaMA-Factory 是一个统一训练框架,提供 Web 界面,可以在浏览器里选择模型、上传数据、配置超参数、启动训练。MiniMind 作者在 Issue #465 里也表达过对这个集成的期望:“这样我们更多的关注对于数据的投喂,当前版本的命令提示符下操作太繁琐了”。

2.2 前提:Qwen3 兼容格式

LLaMA-Factory 不认识 MiniMind 的原生 .pth 格式。需要先用 convert_model.py 转换成 Qwen3 兼容格式。

转换后,模型在 LLaMA-Factory 里以 Qwen2(或 Qwen2MoE)模型类型加载。因为 MiniMind-3 的层结构对齐了 Qwen3/Qwen2 生态。

2.3 配置步骤

第一步:转换模型。

cd scripts
python convert_model.py --kpt_path ../out/full_sft_768.pth --save_dir ../minimind-3-hf

第二步:在 LLaMA-Factory 的 Web UI 里配置。

启动 LLaMA-Factory:

llamafactory-cli webui

然后在界面里:

  • 模型名称:选 Qwen2(Dense)或 Qwen2MoE(MoE)
  • 模型路径:指向转换后的 minimind-3-hf 文件夹
  • 微调方法:LoRA / QLoRA / Full / Freeze
  • 数据集:上传或选择 MiniMind 格式的 JSONL 数据

2.4 支持哪些训练

LLaMA-Factory 支持 MiniMind 的 SFT、DPO、PPO 等训练阶段。论文里也提到,MiniMind 可与 LLaMA-Factory 互通。

三、回到开头的问题

两条“不写代码”的路径,解决的是同一个问题:降低使用门槛。

Web UI 让人在浏览器里和模型对话。调温度、看思考过程、连续聊天,都不需要碰命令行。

LLaMA-Factory 让人在浏览器里微调模型。选模型、传数据、配参数、点“开始训练”。

两条路都依赖同一个前提:模型必须转换成 HuggingFace 格式。原生 .pth 只在 MiniMind 项目内部流通。转到标准格式,才能接上更广阔的工具生态。

四、本篇概念清单

概念本篇交代到什么程度
Streamlit Web UI讲透:安装、启动、界面功能、流式输出机制
TextIteratorStreamer讲清:后台线程 + 主线程遍历,实现流式
自适应思考开关沿用 15 篇,不重复
Web UI vs API讲清:人类用 vs 程序用
LLaMA-Factory 集成讲透:前提、配置步骤、Qwen2 模型类型
Qwen3 兼容格式沿用 17 篇,不重复

本篇要牢记的只有三个词:Streamlit、LLaMA-Factory、HuggingFace 格式。

五、思考题

  1. Web UI 把模型文件夹复制到 ./scripts/ 下才能用。如果直接指定绝对路径,为什么不行?(提示:看 web_demo.py 的扫描逻辑)
  2. LLaMA-Factory 加载 MiniMind 时选 Qwen2 模型类型。如果 MiniMind 的架构改了,不再对齐 Qwen,这个集成还能用吗?
  3. Web UI 和 OpenAI API 都支持流式输出。实现机制有什么不同?
  4. LLaMA-Factory 支持 LoRA 微调,MiniMind 自带的 train_lora.py 也支持 LoRA。两者有什么区别?

备注:本篇的 Web UI 信息来自 MiniMind 的 DeepWiki 文档(Web UI Demo 章节)和 HuggingFace 模型卡。LLaMA-Factory 集成信息来自 DeepWiki 的 Third-Party Inference Engines 章节和社区教程。web_demo.py 的代码引用来自 DeepWiki 的行号标注。LLaMA-Factory 的模型类型配置参考了 MiniMind 的 Qwen3 兼容架构说明。