Перейти к основному содержимому

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