创建一个通用 CoreML 推理器 (coreml.new_model_request)
coreml.new_model_request 用于加载一个已经编译好的 CoreML 模型,并创建一个不依赖 Vision 的通用推理器。
它适合文本模型、张量输入模型、多输入多输出模型、Embedding 模型以及任何“输入不是一张普通图片”的模型。
如果模型本身是图片识别流程,且希望直接传 image 对象做视觉推理,应优先使用 new_vision_request。
如果需要自己准备输入特征,或模型输入包含 MLMultiArray、文本 token、多个命名输入,应使用该接口。
另外,coreml.session(...) 是这个函数的别名。
声明
通用推理器对象, 错误信息 = coreml.new_model_request(编译好的模型路径)
或
通用推理器对象, 错误信息 = coreml.new_model_request({
compiled_model_path = 编译好的模型路径,
uses_cpu_only = 是否只使用 CPU,
compute_units = 计算单元配置,
})
参数
-
compiled_model_path文本型,已经编译完成的.mlmodelc模型目录路径。 -
uses_cpu_only布尔型,可选参数,是否默认只使用 CPU 推理,默认false。 -
compute_units文本型,可选参数,iOS 12+ 生效。支持以下值:"all""cpu_only"或"cpu""cpu_and_gpu"或"gpu""cpu_and_neural_engine"、"ane"或"neural_engine"(iOS 16+)
当
uses_cpu_only = true时,会优先强制使用 CPUOnly 配置。
返回值
-
通用推理器对象
通用推理器对象,创建失败返回nil。 -
错误信息
文本型,创建成功返回nil,失败时返回错误信息。
说明
该函数在 20260319 以后版本方可使用
- 基础能力支持 iOS 11+
compute_units相关配置依赖 iOS 12+- 如果模型声明的是 image feature,且你想把
image_object直接作为输入传给这个通用 request,则需要 iOS 13+ - 传入输入参数时,需使用“输入名映射表”的形式,例如
{ input_ids = ids } - 输入值支持数字、字符串、布尔值、字典、
MLMultiArray,以及模型声明为图片特征时的image对象 - 这个对象只负责模型推理,不负责图片预处理或文本分词;这些步骤需要在 Lua 层自行准备
- 同一个推理器对象可以重复调用
predict()/run(),适合缓存起来反复使用,而不是每次推理都重新创建 - 如果老设备或某些模型在默认后端上不稳定,可以在创建时设置
uses_cpu_only = true
类型判断
声明
是否通用推理器 = coreml.is_model_request(需要判断的值)
或
是否通用推理器 = coreml.is_session(需要判断的值)
参数
- 需要判断的值
值,需要判断是否为 CoreML 通用推理器对象的值。
返回值
- 是否通用推理器
布尔型,是返回true,否则返回false。
说明
coreml.is_session()与coreml.is_model_request()是同义接口- 适合在通用 Lua 封装里做类型保护或参数校验
- 如果你已经明确持有的是
new_model_request(...)/session(...)返回值,通常不需要额外调用它
示例
local compiled_model_path = XXT_HOME_PATH.."/models/demo_text.mlmodelc"
local req, err = coreml.new_model_request({
compiled_model_path = compiled_model_path,
uses_cpu_only = false,
compute_units = "all",
})
if not req then
error(err)
end
local out = assert(req:predict({
input_ids = ids,
}))
print(req:input_names())
print(req:output_names())
print(out[1])