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_pathtype texte, chemin du répertoire du modèle.mlmodelcdéjà compilé. -
uses_cpu_onlytype booléen, paramètre facultatif, indique s’il faut utiliser uniquement le CPU par défaut pour l’inférence,falsepar défaut. -
compute_unitstype 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, renvoienilsi la création échoue. -
message_erreur
type texte, renvoienilen 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_unitsdé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,
MLMultiArrayet l’objetimagelorsque 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 = truelors 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, renvoietruesi c’est le cas, sinonfalse.
Description
coreml.is_session()etcoreml.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])