L'accélération matérielle consiste à utiliser du matériel informatique spécialisé pour améliorer la vitesse et l'efficacité d'exécution d'un modèle d'IA. Pour LiteRT, cela implique principalement d'utiliser des processeurs graphiques (GPU) ou des unités de traitement neuronal (NPU) pour l'inférence d'IA, ainsi que des instructions vectorielles d'unités centrales de traitement (CPU) à usage général.
LiteRT était compatible avec l'accélération matérielle grâce à l'utilisation de délégués TensorFlow Lite, qui prennent en charge certaines parties du graphe LiteRT en remplaçant ses propres opérations dans le graphe. LiteRT Next améliore ce processus en gérant l'accélération matérielle en deux étapes:
- Compilation:préparation d'un modèle à exécuter avec du matériel spécifique.
- Distribution:exécute les opérations sélectionnées sur le matériel approprié.
La phase de compilation modifie un modèle LiteRT avec une nouvelle interface qui offre plus de flexibilité via des plug-ins de compilation. La compilation du modèle a lieu à l'avance (AOT), avant l'exécution du graphe, et adapte un graphe spécifique à l'exécution sur l'appareil.
Types d'accélérateurs
LiteRT fournit trois types d'accélérateurs: NPU, GPU et CPU.
- L'accélération par NPU est compatible avec le matériel spécialisé unifié derrière une seule interface. L'assistance NPU est disponible via un programme en accès anticipé.
- L'accélération GPU est compatible avec les appareils compatibles avec WebGL et OpenCL.
- L'accélération du processeur est compatible avec divers processeurs grâce à la bibliothèque XNNPack. Il s'agit du niveau d'accélération par défaut, qui est toujours disponible.
Ces accélérateurs peuvent être combinés pour obtenir les meilleures performances possibles lorsque certaines opérations complexes ne sont pas disponibles sur un matériel donné. Lorsque les accélérateurs entrent en concurrence pour une opération, LiteRT utilise l'ordre de priorité suivant: NPU, GPU, CPU.
Accélération GPU
Avec l'accélération GPU de LiteRT Next, vous pouvez créer des tampons d'entrée et de sortie compatibles avec le GPU, obtenir une copie zéro avec vos données dans la mémoire GPU et exécuter des tâches de manière asynchrone pour maximiser le parallélisme. LiteRT Next utilise un nouveau délégué GPU amélioré, qui n'est pas proposé par LiteRT.
L'exécution de modèles sur GPU avec LiteRT nécessite la création explicite de délégués, les appels de fonction et les modifications de graphiques. Avec LiteRT Next, il vous suffit de spécifier l'accélérateur:
// Create a compiled model targeting GPU
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
CompiledModel::Create(env, model, kLiteRtHwAcceleratorGpu));
Pour en savoir plus sur l'accélération GPU, consultez la section Accélération GPU avec l'accélération LiteRT.
Accélération du NPU
LiteRT Next fournit une interface unifiée pour exploiter les processeurs NPUs sans vous obliger à parcourir individuellement les compilateurs, les environnements d'exécution ou les dépendances de bibliothèque spécifiques au fournisseur. L'utilisation de LiteRT Next pour l'accélération de la NPU évite de nombreuses complications spécifiques au fournisseur et à l'appareil, améliore les performances pour l'inférence en temps réel et à grand modèle, et minimise les copies de mémoire avec l'utilisation d'un tampon matériel sans copie.
L'utilisation de processeurs NPUs avec LiteRT implique de convertir et de compiler un modèle avec Play pour l'IA sur l'appareil (PODAI), puis de le déployer avec le pack Play AI et le module de fonctionnalités.