Aller au contenu principal

Créer un inféreur CoreML générique (coreml.new_model_request)

coreml.new_model_request charge un modèle CoreML déjà compilé et crée un inféreur générique qui ne dépend pas de Vision.
Il convient aux modèles de texte, aux modèles dont l’entrée est un tenseur, aux modèles à entrées ou sorties multiples, aux modèles d’Embedding et à tout modèle dont l’entrée n’est pas une image ordinaire.

Si le modèle fait partie d’un flux de reconnaissance d’image et que vous souhaitez transmettre directement un objet image pour l’inférence visuelle, utilisez de préférence new_vision_request.
Si vous devez préparer vous-même les features d’entrée, ou si le modèle reçoit des features MLMultiArray, des tokens de texte ou plusieurs entrées nommées, utilisez cette interface.

Par ailleurs, coreml.session(...) est un alias de cette fonction.

Déclaration

objet_inference_generique, message_erreur = coreml.new_model_request(chemin_modele_compile)

ou

objet_inference_generique, message_erreur = coreml.new_model_request({
compiled_model_path = chemin_modele_compile,
uses_cpu_only = uniquement CPU,
compute_units = configuration_unites_calcul,
})

Paramètres

  • compiled_model_path type texte, chemin du répertoire du modèle .mlmodelc déjà compilé.

  • uses_cpu_only type booléen, paramètre facultatif, indique s’il faut utiliser uniquement le CPU par défaut pour l’inférence, false par défaut.

  • compute_units type texte, actif sous iOS 12+. Valeurs prises en charge :

    • "all"
    • "cpu_only" ou "cpu"
    • "cpu_and_gpu" ou "gpu"
    • "cpu_and_neural_engine", "ane" ou "neural_engine" (iOS 16+)

    Lorsque uses_cpu_only = true, la configuration CPUOnly est prioritaire et forcée.

Valeur renvoyée

  • objet_inference_generique
    objet d’inférence générique, renvoie nil si la création échoue.

  • message_erreur
    type texte, renvoie nil en cas de réussite et le message d’erreur en cas d’échec.

Description

Cette fonction est disponible à partir des versions postérieures au 20260319

  • Les fonctions de base sont prises en charge à partir d’iOS 11+
  • La configuration compute_units dépend d’iOS 12+
  • Si le modèle déclare une image feature et que vous souhaitez transmettre directement image_object à cette requête générique, iOS 13+ est requis
  • Les paramètres d’entrée doivent être transmis sous la forme d’une table mappant les noms d’entrée, par exemple { input_ids = ids }
  • Les valeurs d’entrée acceptent les nombres, chaînes, booléens, dictionnaires, MLMultiArray et l’objet image lorsque le modèle déclare une image feature
  • Cet objet ne fait que l’inférence du modèle ; il ne prépare ni les images ni les tokens de texte. Ces étapes doivent être préparées dans Lua
  • Le même objet d’inférence peut appeler predict() / run() plusieurs fois. Il est donc adapté à une mise en cache et à une réutilisation plutôt qu’à une recréation à chaque inférence
  • Si un ancien appareil ou certains modèles sont instables avec le backend par défaut, vous pouvez définir uses_cpu_only = true lors de la création

Détermination du type

Déclaration

est_inference_generique = coreml.is_model_request(valeur_a_tester)

ou

est_inference_generique = coreml.is_session(valeur_a_tester)

Paramètres

  • valeur_a_tester
    valeur dont il faut déterminer si elle est un objet d’inférence CoreML générique.

Valeur renvoyée

  • est_inference_generique
    type booléen, renvoie true si c’est le cas, sinon false.

Description

  • coreml.is_session() et coreml.is_model_request() sont des interfaces synonymes
  • Ces fonctions conviennent à la protection de type ou à la validation des paramètres dans une encapsulation Lua générique
  • Si vous détenez déjà une valeur renvoyée par new_model_request(...) / session(...), leur appel supplémentaire n’est généralement pas nécessaire

Exemple

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])