mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 18:08:04 +00:00
feat(packaging): 模型与 ONNX Runtime 随 server/full 包发布
模型与运行库是发行版能力的一部分,不做成「装完再自己下载」:
- package-linux.sh:新增 stage_multimodal_assets(),打 server/full 前校验产物
SHA256SUMS、逐文件非空、运行库架构与目标一致,缺一即失败;client 包不含。
顺带修掉三个让打包在最后一步才炸的既有缺陷:
· 版本串直接取 git describe(v1.0.0-68-gxxx-dirty)不是合法包版本——deb 要求
数字开头、rpm 不允许 '-'。以前只有显式 VERSION=1.0.3 才打得出来;默认路径
从来没通过过。现在归一化,非数字开头时显式报错。
· 三处 mktemp -d 落在 /tmp(本机 9.8GB tmpfs),而 staging 要复制 719MB 模型,
中途 ENOSPC;报错文本指向某个 .onnx 文件,看着像资产坏了。改为落在与构建产物
同盘的 build/.stage-tmp。
· 开工前删掉旧的 SHA256SUMS:失败时脚本直接退出、不重算,留着像在为残缺产物背书。
- setup.sh:把包内 /usr/lib/homeagent/models/chinese-clip-vit-b16-onnx 软链到
<dataDir>/models/…(不复制 754MB、保持 dataDir 可迁移、已有自定义目录不覆盖)
- homeagent.service:ExecStart 改 /usr/bin/homed(deb 装在那里,此前写 /usr/local/bin,
装了也不会被 unit 用上)、加 ONNXRUNTIME_DIR 与 StateDirectory、MemoryMax 2G→8G
(实测常驻约 4.5GB,2G 会在首次全量建索引时被 cgroup OOM)
- control-{full,server}:补 libstdc++6 / libgcc-s1(libonnxruntime.so 需要)
- providers/{chineseclip,qwen3vl}:findOnnxLib 支持 ONNXRUNTIME_DIR / ONNX_ML_DIR
与包内 /usr/lib/homeagent/onnxruntime,随包的运行库才真的会被用上
- postinst:修掉两个让「装完即用」失效的点——它检查 /lib/systemd/system/ 下的 unit
而 deb 装到 /etc/systemd/system/,于是 daemon-reload/enable **从未执行**;以及
setup.sh 的失败被 `|| true` 吞掉(正是 initconfig 静默缺陷被藏住的原因)。现在
三个候选路径都查、失败可见并给出补救命令、首装 start / 升级 restart。
- docs/zh/multimodal-space.md:新增「随包分发」一节,并修正播种判据的说明
验收(从真实 deb 走一遍,不是读脚本):
- 包内 initconfig 已是动态链接,凭据真的写进 config.db
- 解包 → 按 postinst 顺序跑 setup.sh → 包内 homed 冷启动:
multimodal space active: provider=chineseclip dim=512 fp=cd2a495cf990
modalities=[text image]
- 全新安装的默认值确实被播种(core.plugin.dir / provider / model_dir 都在)
- 真实对话拿到回复(3.4s,回复中含唯一标记)
- 包内模型 SHA256SUMS 5/5 通过;包内 ORT 与源同 sha256;server 包 722MB
(旧版 17MB,差额即模型与运行库);full 包同样含全部资产;client 包不含
This commit is contained in:
@ -149,12 +149,45 @@ core.memory.multimodal_space.options.model_dir = /home/newqqagent/models/chinese
|
||||
发行版构建也默认带 `onnxruntime` 标签(`deploy/packaging/build.sh` 的 `HOMED_TAGS`,
|
||||
需要极简构建时显式 `HOMED_TAGS=` 关闭)。
|
||||
|
||||
已于既有安装:`SeedDefaults` 对非空配置库直接返回(`GetString` 缺键时回落调用方默认值),
|
||||
所以老安装**不会**自动拿到这两个默认值,需要显式写配置。这是有意的:
|
||||
升级就静默加载 1.8GB 模型不是无副作用的事。
|
||||
**老安装不会自动拿到**:播种判据是显式标记 `core.internal.seed_version`。
|
||||
老安装(已播种过)下次启动只会被补上标记,**不会**被注入新默认值——
|
||||
升级就静默加载 1.8GB 模型不是无副作用的事。要启用请显式写上面两个键。
|
||||
|
||||
> 这个判据曾经是「`config` 表为空才播种」。而发行包的 postinst 会先跑
|
||||
> `initconfig`,它写一行 `webui.listen_addr` ——于是**全新安装**被误判为
|
||||
> "已有配置",整个播种被跳过:没有 `core.plugin.dir`(装完 0 个插件)、
|
||||
> 也没有多模态 provider(随包的模型与运行库成了死重量)。回归测试
|
||||
> `TestSeedDefaultsAfterInitconfigPrepopulate` 与
|
||||
> `TestSeedDefaultsDoesNotInjectIntoLegacyInstall` 钉住了这两种情形。
|
||||
|
||||
同样要求 `homed` 带 `onnxruntime` build tag。
|
||||
|
||||
### 随包分发(server / full 包自带模型与运行库)
|
||||
|
||||
模型与运行库是发行版能力的一部分,不做成「可选下载」:
|
||||
|
||||
| 内容 | 包内路径 |
|
||||
|---|---|
|
||||
| Chinese-CLIP 产物(754MB) | `/usr/lib/homeagent/models/chinese-clip-vit-b16-onnx/` |
|
||||
| ONNX Runtime(24MB) | `/usr/lib/homeagent/onnxruntime/libonnxruntime.so` |
|
||||
| 许可证 | `/usr/share/doc/homeagent/licenses/`(Apache-2.0、MIT、ThirdPartyNotices、模型来源) |
|
||||
|
||||
- `deploy/packaging/package-linux.sh` 的 `stage_multimodal_assets()` 在打 server/full 前
|
||||
会校验产物 `SHA256SUMS`、逐文件非空、运行库架构与目标一致;**缺一即失败**,
|
||||
不生成「默认启用但装完不能用」的假包。`client` 包不含(它不跑 homed)。
|
||||
- 安装时 `setup.sh` 把包内模型目录软链到 `<dataDir>/models/chinese-clip-vit-b16-onnx`
|
||||
(既不复制 754MB,也保持 dataDir 可迁移;已存在的自定义目录绝不覆盖)。
|
||||
- 服务单元设 `Environment=ONNXRUNTIME_DIR=/usr/lib/homeagent/onnxruntime`;
|
||||
provider 的查找顺序是 `ONNXRUNTIME_DIR` → `ONNX_ML_DIR` → 包内路径 →
|
||||
`/opt/onnxruntime` → `/usr/local/lib` → `/usr/lib`。
|
||||
- 构建机需自备产物:`build/model-assets/chinese-clip-vit-b16-onnx/` 与
|
||||
`build/runtime-assets/<arch>/{libonnxruntime.so,LICENSE,ThirdPartyNotices.txt}`
|
||||
(可用 `CHINESECLIP_BUNDLE_DIR` / `ONNXRUNTIME_ASSET_DIR` 覆盖)。
|
||||
|
||||
实测(从真实 deb 解包、按 postinst 顺序跑 `setup.sh`、再冷启动包内 homed):
|
||||
`multimodal space active: provider=chineseclip dim=512 fp=cd2a495cf990 modalities=[text image]`,
|
||||
并完成一次真实对话;`homeagent-server` 包 722MB(旧版 17MB),差额即模型与运行库。
|
||||
|
||||
#### ORT 环境是进程级单例(单主不析构)
|
||||
|
||||
进程内可能有多个 ORT 消费者(本 provider、`qwen3vl`、`internal/nlp` 的依存解析器)。
|
||||
|
||||
Reference in New Issue
Block a user