一套"语料 txt → 训练 → ONNX 导出 → CPU/GPU 推理服务"的流水线, 支持多个独立的 训练目标(数据集), 语料、超参、产物、端口全部按数据集隔离。
| 数据集 | 任务 | 基座 | 服务端口 | 部署机 |
|---|---|---|---|---|
| intents | 21 类机器人动作意图 + other 兜底 | roberta-wwm-ext-large | 10001(外部快照) / 10002(agent_server) | 训练机 / GPU 服务机 |
| vision_gate | 视觉门控: 本轮是否需要摄像头画面 | bert-wwm-ext(base) | 10004 | person_id 感知服务机 |
新增训练目标三步: ① 语料放 train/data/<dataset>/(一个 txt = 一个类, 文件名即类名);
② 在 train/dataset_configs.py 登记基座与超参(不登记则用 intents 的历史默认值);
③ 下面四条命令全部带数据集名。
# 0. 基座模型(首次): 下载后放到工程根 models/ 下
bash train/script/download_model.sh hfl/chinese-bert-wwm-ext # vision_gate 基座
# 1. 预处理: train/data/<dataset>/*.txt -> output/<dataset>/train_data.csv
python train/prepare_train_data.py vision_gate
# 2. 训练(GPU 机上用脚本; CUDA_ID 选卡): 产物 output/<dataset>/model_<时间戳>/
CUDA_ID=1 bash train/script/train_intents.sh vision_gate
# 3. 导出 ONNX: output/<dataset>/model_* 最新 -> models/<dataset>_onnx
bash infer/script/convert_intents_model.sh vision_gate
# 4. 起服务(端口约定见 serve_intents.sh 头部注释)
bash infer/script/serve_vision_gate.sh # = serve_intents.sh vision_gate 10004vision_gate 的语料源头与选型实验在 voice_agent/test/vision_gate/(REPORT.md 有
完整评测: bert-base fp32, v4 家庭人群专项集 98.75%、上下文专项集 96.7%,
漏视觉均 0%)。
v4 起输入支持双句格式(本轮 query + 上一轮对话, 做"他能长多高"类代词的指代
消解), 拼接格式的唯一事实源是
voice_agent/agent_server/agent/vision_gate/context_format.py; agent 侧由
vision_gate.use_context 开关控制是否发双句——必须先部署 v4 及以后的模型
再开开关, 旧模型没见过双句分布。
首次部署步骤(在 person_id 服务机上):
# 1. 同步本仓库到服务机(models/ 与 output/ 不入 git, 需单独同步或现场生成)
# 2. conda 环境: bert_classify(train/infer 通用), 依赖见 infer/infer_requirements.txt
# (GPU 机装 onnxruntime-gpu, infer.py 会自动优先用 CUDAExecutionProvider)
# 3. 模型就位, 二选一:
# a) 现场重训: 上面的全流程命令 0~3
# b) 直接同步训练机上的流水线产物 models/vision_gate_onnx/ 整目录
# 4. 起服务并验证(单轮与双句格式各一条)
bash infer/script/serve_vision_gate.sh
curl -X POST http://127.0.0.1:10004/predict -H 'Content-Type: application/json' \
-d '{"texts": ["看看这是什么", "明天天气怎么样", "本轮:他能长多高? 上轮问:长颈鹿的食物 上轮答:长颈鹿爱吃金合欢叶。"]}'
# 返回 logits, argmax: 0=no_vision 1=vision(见 models/vision_gate_onnx/label_map.csv)
# 期望: vision / no_vision / no_vision训完质检(只测不训的三套评测集, 在 voice_agent 仓库):
python voice_agent/test/vision_gate/eval_pipeline_model.py # 最新训练产物
python voice_agent/test/vision_gate/eval_pipeline_model.py models/vision_gate_onnx # 服务用 ONNX改语料请改 voice_agent/test/vision_gate/data/raw_*.py(按场景维护)后执行
export_to_pipeline.py 重新导出——train/data/vision_gate/ 是导出产物, 勿手改。
远程解释器排除目录: /Users/xuzhiguo/workspace/python/lx/bert_intent_classify/models /Users/xuzhiguo/workspace/python/lx/bert_intent_classify/.git 勾选: "本地删除后删除远程"