用途
本技能用于在加载 ExecuTorch .pte 模型时,定义并强制模型的结构约束(形状、数据类型、运行时约束)。通过 validateSpec 在分配静态张量或执行推理之前校验模型导出的 schema,防止 C++ 运行时崩溃、类型不匹配和内存分配错误。
主要能力
- 声明式校验:使用 validateSpec(model.schema, { ... }) 对比模型导出 schema 与允许的变体,返回 { variant, dims }。
- 方法规格构建:method(name, inputs, outputs, runtimeConstraints?) 定义方法签名。
- 张量参数简写:f32 / i64 / i32 / ui8 等辅助函数。
- 维度符号:StaticDim('symbol') 或字符串字面量匹配静态常量维度;DynamicDim('symbol')(或 Dyn)匹配范围或枚举域。
- 运行时约束:constraint.equality 要求维度值相等;constraint.linear 要求线性关系。
- 符号访问器:dims.constant、dims.range、dims.enum、dims.dynamic、dims.any 及 dim 提取符号值。
- 伴随 JSON 规格:模型可通过 get_model_schema 导出 JSON 格式的 ModelSpec<ConcreteDim>,加载器解析以填充精确域和运行时约束。
使用方式
- 从 '../../../core/schema' 导入 validateSpec、method、f32、i64、i32、DynamicDim as Dyn、constraint。
- 在模型加载后、张量初始化前调用 validateSpec(model.schema, { 变体名: method(...) })。
- 使用 dims.constant('N', 'H') 等提取常量符号值,或 dims.range / dims.enum 提取域。
- 对动态维度使用字符串符号,固定维度使用整数;多形状变体按顺序匹配,返回第一个匹配项。
适用场景
- 分类模型(批处理 vs 非批处理)
- 图像到图像 / 风格迁移
- 目标检测(动态框数量)
- 单模型流水线(全静态导出)
限制与注意事项
- 不要手写命令式形状/类型检查,应使用声明式 validateSpec 变体。
- 动态维度不要硬编码整数,应使用字符串符号。
- 启动时不可跳过校验,单模型流水线也需校验。
- 校验失败抛出 SCHEMA_MISMATCH;参数错误抛出 INVALID_ARGUMENT;运行时约束违反也抛 INVALID_ARGUMENT,而非 SCHEMA_MISMATCH。
- 绑定相同域不代表运行时值相同,需用运行时约束表达相等或线性关系。
- 无 get_model_schema 时,model.schema 仅来自静态 ExecuTorch MethodMeta。