Section courante

A propos

Section administrative du site

BNNS

La bibliothèque BNNS, faisant partie intégrante du cadre d'application Accelerate d'Apple, constitue un ensemble complet et puissant de fonctions spécialement conçues pour la création et la manipulation de réseaux neuronaux. Elle est destinée aussi bien à l'entraînement qu'à l'inférence de modèles d'apprentissage automatique. BNNS fournit des routines et des algorithmes extrêmement optimisés, permettant d'obtenir des performances très élevées tout en minimisant la consommation d'énergie, et ce sur l'ensemble des plateformes Apple, que ce soit macOS, iOS, iPadOS ou tvOS. Cette optimisation matérielle permet aux développeurs d'exécuter des réseaux complexes de manière efficace, même sur des dispositifs à ressources limitées, tout en conservant une latence très faible.

L'API BNNSGraph joue un rôle central dans ce processus, puisqu'elle permet de construire et d'organiser des réseaux neuronaux entiers basés sur le processeur central (CPU) à partir d'un fichier mlmodelc, compilé par Xcode à partir d'un paquet d'apprentissage automatique. Ces fichiers contiennent la représentation optimisée et prête à l'exécution des modèles d'apprentissage machine, ce qui permet de les utiliser directement dans les applications sans nécessiter de conversion supplémentaire. Grâce à BNNSGraph, le développeur peut charger un modèle complet, initialiser les paramètres et préparer le réseau pour l'exécution de manière structurée et automatisée.

Contrairement aux approches classiques exécutant les réseaux couche par couche, BNNSGraph permet à la bibliothèque BNNS de traiter le modèle dans son ensemble, en considérant toutes les couches et toutes les connexions simultanément. Cette approche globale ouvre la voie à des optimisations plus poussées, car le moteur peut analyser le graphe complet et identifier des opportunités d'amélioration, comme la suppression des opérations de copie de données inutiles entre couches, la fusion des noyaux de calcul pour réduire le nombre d'instructions, ou encore l'élimination des calculs redondants qui n'apportent aucune valeur ajoutée.

En outre, BNNSGraph offre la possibilité d'optimiser la disposition et l'organisation des données internes, en particulier les constantes du modèle, telles que les poids des convolutions ou les biais des neurones. Une disposition efficace des données dans la mémoire permet au CPU d'accéder plus rapidement aux informations nécessaires, réduisant les temps d'attente et augmentant l'efficacité de l'exécution. Sur du matériel spécifique, comme les processeurs Apple Silicon, ces optimisations peuvent se traduire par des gains très significatifs, tant en termes de vitesse d'exécution qu'en consommation énergétique.

L'optimisation du graphe complet apporte également un bénéfice indirect au développeur et à l'application finale, car elle réduit la complexité de la gestion manuelle des réseaux neuronaux. Au lieu de devoir écrire des routines d'exécution pour chaque couche, le moteur BNNS prend en charge l'orchestration de toutes les étapes, garantissant une exécution fiable et cohérente du modèle complet. Cette abstraction permet d'accélérer le développement tout en maintenant un haut niveau de performance.

De plus, la bibliothèque BNNS, via BNNSGraph, est capable de tirer parti des caractéristiques spécifiques des processeurs Apple, comme le parallélisme multi-coeur, les caches internes, et d'autres mécanismes d'optimisation matérielle, pour maximiser le débit et minimiser les accès mémoire coûteux. Ces optimisations fines sont cruciales pour les applications exigeant des performances en temps réel, comme la vision par ordinateur, le traitement du langage naturel ou les systèmes embarqués.

Enfin, grâce à BNNSGraph, les développeurs bénéficient d'une solution intégrée et complète pour déployer des modèles d'apprentissage automatique dans leurs applications, avec la certitude que le moteur exploite le matériel au maximum de ses capacités. L'ensemble de ces améliorations, depuis la compilation du fichier mlmodelc jusqu'à l'exécution optimisée du graphe complet, permet de créer des applications plus réactives, plus efficaces et mieux adaptées aux contraintes matérielles, tout en simplifiant le processus de développement et en garantissant une consommation énergétique minimale.

Création de graphes en Swift

Swift Description
static func makeContext(options: BNNSGraph.CompileOptions, (inout BNNSGraph.Builder) -> [any BNNSGraph.TensorDescriptor]) throws -> BNNSGraph.Context Renvoie un nouveau contexte encapsulant un objet graphique défini par la fermeture donnée.
struct Builder Une structure fournissant une fermeture que vous pouvez utiliser pour définir les arguments et les opérations d'un graphe BNNS.
struct Tensor Une structure qui représente une référence abstraite à un tenseur que vous utilisez dans une fermeture BNNSGraph.makeContext.
{} Prise en charge de l'inférence ML en temps réel sur le processeur : Ajoutez le traitement numérique du signal en temps réel à des applications comme Logic Pro X et GarageBand grâce à l'API BNNS Graph.

Création et exécution de graphes en Swift

Swift Description
class Context Un enveloppe autour d'un objet graphique compilé ajoutant un contexte modifiable requis pour prendre en charge les modèles de taille dynamique et définir les options d'exécution.

Compilation d'un objet graphique

Swift Description
struct bnns_graph_t L'objet graphique compilé.
func BNNSGraphCompileFromFile(UnsafePointer<CChar>, UnsafePointer<CChar>?, bnns_graph_compile_options_t) -> bnns_graph_t Compile un fichier source mlmodelc en un objet graphique.

Spécification et interrogation des options de compilation

Swift Description
struct bnns_graph_compile_options_t Les options de compilation utilisées par BNNS lors de la compilation d'un fichier source mlmodelc en un objet graphique.
func BNNSGraphCompileOptionsMakeDefault() -> bnns_graph_compile_options_t Renvoie un objet d'options de compilation alloué avec des valeurs par défaut.
func BNNSGraphCompileOptionsDestroy(bnns_graph_compile_options_t) Détruit l'objet d'options de compilation spécifié.
func BNNSGraphCompileOptionsSetOutputPath(bnns_graph_compile_options_t, UnsafePointer<CChar>?) Définit l'option de compilation du graphe pour générer l'objet graphe directement dans le fichier spécifié.
func BNNSGraphCompileOptionsGetOutputPath(bnns_graph_compile_options_t) -> UnsafePointer<CChar>? Renvoie l'option correspondant au chemin de sortie du graphique compilé.
func BNNSGraphCompileOptionsSetOutputFD(bnns_graph_compile_options_t, Int32) Définit l'option de compilation du graphe pour générer l'objet graphe directement dans le descripteur de fichier spécifié.
func BNNSGraphCompileOptionsGetOutputFD(bnns_graph_compile_options_t) -> Int32 Renvoie l'option du descripteur de fichier de sortie du graphe compilé.
func BNNSGraphCompileOptionsSetTargetSingleThread(bnns_graph_compile_options_t, Bool) Définit l'option permettant au graphe compilé de s'exécuter sur un seul processus léger.
func BNNSGraphCompileOptionsGetTargetSingleThread(bnns_graph_compile_options_t) -> Bool Renvoie l'option permettant d'exécuter le graphe compilé sur un seul processus léger.
func BNNSGraphCompileOptionsSetOptimizationPreference(bnns_graph_compile_options_t, BNNSGraphOptimizationPreference) Définit l'option permettant d'optimiser le graphe compilé en fonction de sa taille ou de ses performances.
func BNNSGraphCompileOptionsGetOptimizationPreference(bnns_graph_compile_options_t) -> BNNSGraphOptimizationPreference Renvoie l'option permettant d'optimiser le graphe compilé en termes de taille ou de performance.
struct BNNSGraphOptimizationPreference Constantes décrivant la préférence d'optimisation de la compilation.
func BNNSGraphCompileOptionsSetGenerateDebugInfo(bnns_graph_compile_options_t, Bool) Définit l'option permettant d'inclure les informations de débogage dans le graphique compilé.
func BNNSGraphCompileOptionsGetGenerateDebugInfo(bnns_graph_compile_options_t) -> Bool Renvoie l'option permettant d'inclure des informations de débogage dans le graphique compilé.
var BNNSTargetSystemGeneric: BNNSTargetSystem Spécifier le rappel de message au moment de la compilation d'un graphe
func BNNSGraphCompileOptionsSetMessageLogMask(bnns_graph_compile_options_t, UInt32) Définit le masque pour les messages de compilation.
func BNNSGraphContextSetMessageLogMask(bnns_graph_context_t, UInt32) -> Int32 Définit le masque pour les messages de journalisation enregistrés (via os_log ou le rappel spécifié par l'utilisateur).
struct BNNSGraphMessageLevel Constantes spécifiant le masque des messages de compilation.
func BNNSGraphCompileOptionsSetMessageLogCallback(bnns_graph_compile_options_t, bnns_graph_compile_message_fn_t, UnsafeMutablePointer<bnns_user_message_data_t>?) Spécifie une fonction de rappel personnalisée qui signale les messages de compilation.
typealias bnns_graph_compile_message_fn_t Fonction de rappel pour la journalisation des messages de compilation du graphe.
struct bnns_user_message_data_t Argument de journalisation supplémentaire défini par l'utilisateur pour les rappels de journalisation des messages.

Interroger les propriétés d'un graphe

Swift Description
func BNNSGraphGetArgumentIntents(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<BNNSGraphArgumentIntent>) -> Int32 Extrait les intentions des arguments pour l'argument de fonction donné.
struct BNNSGraphArgumentIntent Constantes décrivant les intentions des arguments.
func BNNSGraphGetArgumentCount(bnns_graph_t, UnsafePointer<CChar>?) -> Int Renvoie le nombre d'arguments pour l'argument de fonction donné.
func BNNSGraphGetArgumentNames(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<UnsafePointer<CChar>?>) -> Int32 Extrait les noms des arguments de la fonction donnée.
func BNNSGraphGetFunctionCount(bnns_graph_t) -> Int Renvoie le nombre de fonctions appelables dans le graphe spécifié.
func BNNSGraphGetFunctionNames(bnns_graph_t, Int, UnsafeMutablePointer<UnsafePointer<CChar>?>) -> Int32 Extrait les noms des fonctions appelables dans le graphe.
func BNNSGraphGetInputCount(bnns_graph_t, UnsafePointer<CChar>?) -> Int Renvoie le nombre d'arguments d'entrée pour l'argument de fonction don
func BNNSGraphGetInputNames(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<UnsafePointer<CChar>?>) -> Int32 Extrait les noms des arguments d'entrée pour l'argument de fonction donné.
func BNNSGraphGetOutputCount(bnns_graph_t, UnsafePointer<CChar>?) -> Int Renvoie le nombre d'arguments de sortie pour l'argument de fonction donné.
func BNNSGraphGetOutputNames(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<UnsafePointer<CChar>?>) -> Int32 Extrait les noms des arguments de sortie pour l'argument de fonction donné.
func BNNSGraphGetArgumentPosition(bnns_graph_t, UnsafePointer<CChar>?, UnsafePointer<CChar>) -> Int Renvoie l'index dans le tableau des arguments pour l'argument de fonction donné.
func BNNSGraphGetArgumentInterleaveFactors(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<UnsafePointer<UInt16>?>, UnsafeMutablePointer<Int>) -> Int32 Renvoie les facteurs d'entrelacement des arguments, s'ils sont présents.

Créer et détruire un contexte

Swift Description
struct bnns_graph_context_t Un objet qui encapsule un objet graphique compilé.
func BNNSGraphContextMake(bnns_graph_t) -> bnns_graph_context_t Renvoie un contexte de graphe alloué et initialisé à partir du graphe spécifié
func BNNSGraphContextMakeStreaming(bnns_graph_t, UnsafePointer<CChar>?, Int, UnsafePointer<BNNSTensor>?) -> bnns_graph_context_t Renvoie un contexte de graphe alloué et initialisé avec prise en charge du streaming à partir du graphe spécifié.
func BNNSGraphContextDestroy(bnns_graph_context_t) Détruit le contexte graphique spécifié.

Spécifier et interroger les propriétés d'un contexte

Swift Description
func BNNSGraphContextSetStreamingAdvanceCount(bnns_graph_context_t, Int) -> Int32 Définit le niveau de progression du flux pour les cas avec des entrées de forme dynamique.
func BNNSGraphContextSetArgumentType(bnns_graph_context_t, BNNSGraphArgumentType) -> Int32 Spécifie le type d'argument pour un contexte de graphe.
struct BNNSGraphArgumentType Constantes spécifiant le type d'argument pour un contexte de graphe.
func BNNSGraphContextSetDynamicShapes(bnns_graph_context_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<bnns_graph_shape_t>) -> Int32 Spécifie les formes dynamiques d'un graphe et, si possible, déduit les formes de sortie.
struct bnns_graph_shape_t La spécification de la forme d'un argument.
func BNNSGraphContextSetBatchSize(bnns_graph_context_t, UnsafePointer<CChar>?, UInt64) -> Int32 Définit la taille du lot pour un graphique.
func BNNSGraphContextEnableNanAndInfChecks(bnns_graph_context_t, Bool) Spécifie que le contexte vérifie les tenseurs intermédiaires pour les NaN et les infinis.
func BNNSGraphContextGetWorkspaceSize(bnns_graph_context_t, UnsafePointer<CChar>?) -> Int Renvoie la taille minimale, en octets, de l'espace de travail requis pour l'exécution du contexte graphique.
func BNNSGraphContextSetStreamingAdvanceCount(bnns_graph_context_t, Int) -> Int32 Définit le niveau de progression du flux pour les cas avec des entrées de forme dynamique.

Spécifier le rappel de message d'exécution d'un contexte

Swift Description
func BNNSGraphContextSetMessageLogCallback(bnns_graph_context_t, bnns_graph_execute_message_fn_t, UnsafeMutablePointer<bnns_user_message_data_t>?) -> Int32 Spécifie une fonction de rappel personnalisée signalant les messages d'exécution.
typealias bnns_graph_execute_message_fn_t Fonction de rappel de journalisation des messages d'exécution du graphe.
struct BNNSGraphMessageLevel Constantes spécifiant le masque des messages de compilation.
struct bnns_user_message_data_t Argument de journalisation supplémentaire défini par l'utilisateur pour les rappels de journalisation des messages.

Spécifier les fonctions de rappel d'allocation d'un contexte

Swift Description
func BNNSGraphContextSetWorkspaceAllocationCallback(bnns_graph_context_t, bnns_graph_realloc_fn_t?, bnns_graph_free_all_fn_t?, Int, UnsafeMutableRawPointer?) -> Int32 Définit les fonctions de rappel d'allocation et de désallocation pour l'espace de travail interne.
func BNNSGraphContextSetOutputAllocationCallback(bnns_graph_context_t, bnns_graph_realloc_fn_t?, bnns_graph_free_all_fn_t?, Int, UnsafeMutableRawPointer?) -> Int32 Définit les fonctions de rappel d'allocation et de désallocation pour les sorties de fonction.
typealias bnns_graph_realloc_fn_t Fonction d'allocation de l'espace de travail et de la sortie.
typealias bnns_graph_free_all_fn_t Fonction de désallocation de l'espace de travail et de la sortie.

Spécifier et interroger les propriétés d'un tenseur

Swift Description
struct BNNSTensor Une structure décrivant la forme, le pas, le type de données et, éventuellement, l'emplacement mémoire d'un tableau n-dimensionnel.
func BNNSTensorGetAllocationSize(UnsafePointer<BNNSTensor>) -> Int Renvoie la taille d'allocation minimale, en octets, du tenseur spécifié.
func BNNSGraphContextGetTensor(bnns_graph_context_t, UnsafePointer<CChar>?, UnsafePointer<CChar>, Bool, UnsafeMutablePointer<BNNSTensor>) -> Int32 Définit les propriétés d'un tenseur pour l'argument de fonction spécifié.
func BNNSGraphTensorFillStrides(bnns_graph_t, UnsafePointer<CChar>?, UnsafePointer<CChar>, UnsafeMutablePointer<BNNSTensor>) -> Int32 Définit le pas du tenseur spécifié pour assurer la compatibilité avec l'argument d'entrée ou de sortie du modèle donné, en fonction de sa forme actuelle.

Exécution d'un graphe

Swift Description
func BNNSGraphContextExecute(bnns_graph_context_t, UnsafePointer<CChar>?, Int, UnsafeMutablePointer<bnns_graph_argument_t>, Int, UnsafeMutablePointer<CChar>?) -> Int32 Exécute la fonction spécifiée dans le contexte donné.
struct BNNSGraphArgumentType Constantes spécifiant le type d'argument pour un contexte de graphe.

Énumérations

Swift Description
enum BNNS Une énumération servant d'espace de noms pour les superpositions Swift vers BNNS.
enum BNNSGraph Une énumération qui sert d'espace de noms pour les superpositions Swift du graphe BNNS.

Structures

Swift Description
struct BNNSDataType Cette structure définit les types de données pris en charge par BNNS, tels que les formats numériques utilisés pour représenter les tenseurs, les poids et les activations dans les réseaux neuronaux.
struct BNNSSparsityParameters Cette structure décrit les paramètres liés à la parcimonie des données, permettant d'optimiser les calculs en exploitant les valeurs nulles ou absentes dans les tenseurs.
struct BNNSSparsityType Cette structure spécifie le type de parcimonie appliqué aux données, indiquant comment les éléments non significatifs sont représentés et gérés par BNNS.
struct BNNSTargetSystem Cette structure permet de décrire le système cible pour l'exécution, notamment les caractéristiques matérielles sur lesquelles les optimisations BNNS doivent être appliquées.
struct bnns_graph_argument_t Cette structure décrit les données associées à un argument d'entrée ou de sortie d'un graphe BNNS, incluant le type, la forme et les métadonnées nécessaires à l'exécution.
struct BNNSImageStackDescriptor Cette structure, aujourd'hui obsolète (Deprecated), servait à décrire un empilement d'images utilisé comme entrée ou sortie d'un réseau neuronal BNNS.
struct BNNSVectorDescriptor Cette structure, également obsolète (Deprecated), permettait de définir les caractéristiques d'un vecteur de données utilisé par les opérations BNNS.

Protocoles

Swift Description
protocol BNNSScalar Ce protocole définit les exigences pour les types scalaires utilisables par BNNS, garantissant la compatibilité des valeurs simples avec les calculs internes.

Macros

Swift Description
var BNNS_MAX_TENSOR_DIMENSION: Int32 Cette constante définit la dimension maximale autorisée pour un tenseur BNNS, servant de limite structurelle pour la création et la manipulation des données.


Dernière mise à jour : Mercredi, le 18 février 2026