Appearance
离线推理容器与工件一致性
离线语音服务不只需要模型权重。网关、角色 worker、声纹运行库、普通/目标解码、热词资源和启动配置必须在没有开发机挂载、没有公网下载的环境中共同运行。容器解决依赖封装,不能自动解决驱动兼容、授权绑定和模型输入合同。
将依赖分成三个层次
| 层次 | 内容 | 固定方式 |
|---|---|---|
| 宿主环境 | 芯片、CPU 架构、驱动、固件、容器运行时 | 目标矩阵与真实启动验证 |
| 镜像内容 | 网关、Python 依赖、原生库、worker、模型密文 | 镜像摘要、依赖锁与文件清单 |
| 运行输入 | 授权、公钥、签名配置、状态目录、设备映射 | 只读挂载、签名或摘要验证 |
模型输入合同变化需要同步更新前处理、模型、运行库与配置。不能只替换一个模型文件,沿用旧 shape 清单或 SEP 处理。相同 CPU 架构也不保证芯片专用编译图可互换。
可写路径与设备映射
容器根目录只读时,将临时解密目录、编译缓存、日志和服务状态分别放到受控可写目录。只读启动失败先定位实际写入路径,不应直接把整个根文件系统改成可写。
yaml
# Compose 配置片段,设备节点与路径需按目标平台补充
services:
speech:
image: speech-runtime@sha256:<镜像摘要>
read_only: true
tmpfs:
- /tmp:rw,nosuid,nodev,size=2g
volumes:
- ./license.jws:/run/credentials/license.jws:ro
- ./runtime.json:/etc/speech/runtime.json:ro
- ./state:/var/lib/speech临时空间大小需按解密资源和实际峰值规划,示例不是完整部署配置。设备节点、驱动目录和共享内存同样需要平台专用配置。只暴露指定物理设备时,容器内逻辑编号可能重排;运行配置使用逻辑编号,manifest 同时记录宿主到容器映射。
监督进程启动的子进程可能使用环境白名单。动态库路径、加速库 Python 路径及缓存环境变量必须显式传递;docker exec 里的探针成功,不能证明真实网关创建的 worker 具有相同环境。
授权与密文是成对的运行输入
启动先验证授权签名、设备/功能范围、有效期和受保护 bundle 身份,再解密资源并启动模型。重新封装受保护内容后,对应密文身份可能改变,旧授权不能按文件名继续复用。验证机授权也不能替代目标环境授权。
授权源、包内副本与容器挂载逐份比较 SHA-256,可以发现复制错文件;摘要一致只证明字节相同,不证明授权范围正确,仍要验证签名和声明。公钥用于验证,私钥不进入镜像。明文模型也不能残留在历史镜像层:后续层删除文件无法移除旧层字节,扫描需覆盖所有可提取层及归档内容。
启动预检与就绪状态
text
配置/静态资源校验
-> 授权与密文校验
-> 设备映射与运行库检查
-> 解密并启动各模型
-> 模型健康检查
-> 代表性波形预热
-> 真实端到端请求每个阶段有独立错误。静态资源预检失败时模型尚未启动,不能归因于推理或授权。端口监听也不等于整个链路可用。重启验证需使用最终入口和原挂载配置,检查子进程退出、受保护资源重新准备及状态目录权限。
大模型工件的增量边界
模型密文、运行代码和配置的变化频率不同。受保护 bundle 字节与绑定条件未变时,可以在满足安全校验的前提下复用密文;模型变化则重新封装并验证绑定。小配置可外置,但必须由启动入口验证签名或固定摘要,不能让任意宿主文件覆盖受保护配置。
构建流水线按输入指纹缓存阶段:源码树、依赖锁、模型集合、配置和授权身份决定哪些下游步骤失效。冻结后的镜像 tar 执行摘要与分层扫描;上传后读取并验证对象。文件存在、尺寸相同或一次范围 GET 成功都不能证明完整对象一致。
json
{
"source_tree_sha256": "<源码树摘要>",
"model_set_sha256": "<模型清单摘要>",
"runtime_config_sha256": "<配置摘要>",
"protected_bundle_sha256": "<密文摘要>",
"image_digest": "sha256:<镜像摘要>",
"image_tar_sha256": "<导出文件摘要>"
}这些字段连接运行依赖,不包含访问凭据。验证结果绑定完整工件身份,不能拿旧报告验收新镜像。
目标环境的技术验证
使用最终工件验证无网络初始化、无外部代码/模型挂载、只读根、非默认设备映射、冷启动、重启,以及三种识别模式。再核对原始模型输入、热词、Final/terminal 与并发资源。不同驱动或芯片的独立兼容测试分别记录,不能把一台机器成功扩展成整个硬件矩阵通过。
