Saltar al contenido principal

Métodos del objeto ejecutor CoreML general

coreml_model_request_object es el objeto ejecutor devuelto por coreml.new_model_request(...)/coreml.session(...). Envía al modelo las características de entrada preparadas y devuelve los resultados organizados por nombre de salida.

Sus responsabilidades son:

  • Enviar inferencias
  • Leer resultados asíncronos
  • Consultar la firma de entradas y salidas
  • Consultar la configuración de ejecución de la solicitud actual

No tokeniza texto, preprocesa imágenes ni realiza posprocesamiento de negocio; esos pasos deben organizarse en Lua.

Disponible en versiones posteriores a 20260319

Métodos de inferencia

:predict(inputs[, opts])

resultado, información_del_error = ejecutor_general:predict(mapa_de_entradas)

o

enviado, información_del_error = ejecutor_general:predict(mapa_de_entradas, {
async = es_asíncrono,
multi_array_output = "table" o "MLMultiArray",
uses_cpu_only = CPU,
})

Ejecuta una inferencia para una sola muestra.

  • inputs debe ser una tabla organizada por nombre de entrada.
  • En modo síncrono devuelve directamente una tabla de resultados.
  • En modo asíncrono devuelve true; después usa :is_done() y :results().
  • multi_array_output controla si las salidas MLMultiArray se conservan como tensores nativos o se convierten en tablas Lua.
  • uses_cpu_only solo afecta a esta inferencia y no modifica la configuración predeterminada del objeto.

:run(inputs[, opts])

run() es un alias de predict() y se comporta exactamente igual.

:predict_batch(batch_inputs[, opts])

resultados_por_lotes, información_del_error = ejecutor_general:predict_batch({
{ input_ids = ids1 },
{ input_ids = ids2 },
}, {
async = false,
multi_array_output = "MLMultiArray",
})

Ejecuta una inferencia por lotes. Necesita iOS 12+.

  • batch_inputs debe ser una matriz cuyos elementos sean tablas de entrada organizadas por nombre.
  • En modo síncrono devuelve una matriz de resultados; cada elemento sigue las reglas de salida de una muestra.
  • En modo asíncrono devuelve true; después recupera el resultado con :results().
  • Los campos de opts son los mismos que en predict().

:run_batch(batch_inputs[, opts])

run_batch() es un alias de predict_batch() y se comporta exactamente igual.

:results([opts])

resultado, información_del_error = ejecutor_general:results()

o

resultado, información_del_error = ejecutor_general:results({
multi_array_output = "table" o "MLMultiArray",
})

Lee el resultado de la inferencia asíncrona más reciente.

  • Si la llamada asíncrona más reciente fue predict(), devuelve una tabla de una muestra.
  • Si fue predict_batch(), devuelve una matriz de resultados por lotes.
  • multi_array_output reutiliza de forma predeterminada la configuración de la última inferencia.
  • Si la tarea no ha terminado, devuelve nil, "not yet".
  • Si no hay un resultado correcto disponible, devuelve nil, "unknown".

:is_done()

terminado = ejecutor_general:is_done()

Comprueba si terminó la última inferencia asíncrona. Solo tiene sentido después de predict(..., { async = true }) o predict_batch(..., { async = true }).

Configuración de ejecución y metadatos

:metadata()

metadatos = ejecutor_general:metadata()

Devuelve los metadatos incluidos en el modelo, útiles para depuración, encapsulación genérica o presentación de información.

:uses_cpu_only()

CPU = ejecutor_general:uses_cpu_only()

Devuelve la configuración predeterminada CPUOnly guardada al crear esta solicitud.

:compute_units()

configuración_de_unidades_de_cómputo = ejecutor_general:compute_units()

Devuelve la cadena compute_units registrada actualmente.

  • En iOS 12+, devuelve la cadena en minúsculas registrada al crearla.
  • Los valores habituales son "all", "cpu_only", "cpu", "cpu_and_gpu", "gpu", "cpu_and_neural_engine", "ane" y "neural_engine".
  • Si se creó con uses_cpu_only = true, devuelve "cpu_only".
  • En iOS 11 devuelve nil.

Métodos de firma de entradas y salidas

:input_count() / :output_count()

Devuelve el número de características de entrada y salida.

:input_features() / :output_features()

Devuelve una tabla de descripciones de características indexada por nombre.

Los campos actuales son:

  • type
  • optional
  • Para características multi_array, también shape y data_type.

:input_info(name_or_index) / :output_info(name_or_index)

Lee la información de una característica individual por nombre o por índice basado en 1.

  • Los campos son básicamente los mismos que en input_features()/output_features().
  • Añade name.
  • El acceso por índice usa el mismo orden que input_names()/output_names().

:input_names() / :output_names()

Devuelve listas estables y ordenadas de nombres de entrada y salida.

  • Los nombres se ordenan lexicográficamente.
  • El orden de output_names() coincide con el de los índices numéricos del resultado de la inferencia síncrona.

:class_labels()

Devuelve las etiquetas de clase declaradas por el modelo. Necesita iOS 14+.

Ciclo de vida y comprobación de tipo

:close()

Destruye el estado subyacente de la solicitud. No deben llamarse otros métodos después del cierre.

:is_model_request() / :is_session()

Interfaces de comprobación de tipo del objeto; son alias equivalentes.

Notas

  • predict()/run() siempre devuelve una tabla.
  • El resultado admite índices numéricos y nombres de salida.
  • predict_batch()/run_batch() devuelve una matriz por lotes; cada elemento admite ambos tipos de acceso.
  • En un ejecutor general nuevo, MLMultiArray se conserva de forma predeterminada como tensor nativo, lo que facilita el posprocesamiento.
  • Para ver el contenido o mantener compatibilidad con scripts antiguos, pasa explícitamente multi_array_output = "table".

Ejemplo de acceso:

out[1]
out.text_features
batch_out[1].text_features

Ejemplo

local req = assert(coreml.new_model_request(XXT_HOME_PATH.."/models/demo.mlmodelc"))

local out = assert(req:predict({
input_ids = ids,
}, {
multi_array_output = "MLMultiArray",
}))

print(out[1])
print(out.text_features)
print(req:output_names())