Создание универсального инференсера 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])