web-dev-qa-db-fra.com

Que sont les scripts de torche dans PyTorch?

Je viens de découvrir que les documents PyTorch exposent quelque chose qui s'appelle Torch Scripts . Cependant, je ne sais pas:

  • Quand devraient-ils être utilisés?
  • Comment devraient-ils être utilisés?
  • Quels sont leurs avantages?
22
Andrew Naguib

Torch Script est l'un des deux modes d'utilisation de PyTorch juste à temps compilateur , l'autre étant traçage . Les avantages sont expliqués dans la documentation liée:

Torch Script est un moyen de créer des modèles sérialisables et optimisables à partir du code PyTorch. Tout code écrit dans Torch Script peut être enregistré à partir de votre processus Python et chargé dans un processus où il n'y a pas de dépendance Python.

La citation ci-dessus est en fait vraie à la fois pour le script et le traçage. Alors

  1. Vous avez la possibilité de sérialiser vos modèles et de les exécuter ultérieurement en dehors de Python, via LibTorch, un module natif C++. Cela vous permet d'intégrer vos modèles DL dans divers environnements de production comme le mobile ou l'IoT. Il existe un guide officiel sur l'exportation de modèles en C++ ici .
  2. PyTorch peut compiler vos modules jitables plutôt que de les exécuter en tant qu'interprète, permettant diverses optimisations et améliorant les performances, à la fois pendant la formation et l'inférence. Ceci est également utile pour le développement et la production.

En ce qui concerne spécifiquement Torch Script, par rapport au traçage, il s'agit d'un sous-ensemble de Python, spécifié en détail ici , qui, une fois respecté, peut être compilé par PyTorch. Il est plus laborieux d'écrire des modules Torch Script au lieu de suivre les sous-classes nn.Module Normales, mais cela permet certaines fonctionnalités supplémentaires par rapport au suivi, notamment le contrôle de flux comme les instructions if ou for boucles. Le suivi traite ce contrôle de flux comme "constant" - en d'autres termes, si vous avez une clause if model.training Dans votre module et que vous la tracez avec training=True, Il se comportera toujours de cette façon, même si vous changez la variable training à False plus tard.

Pour répondre à votre première question, vous avez besoin d'utiliser jit si vous souhaitez déployer vos modèles en dehors de Python et sinon vous devrait utiliser jit si vous souhaitez obtenir des performances d'exécution au prix d'efforts de développement supplémentaires (car tous les modèles ne peuvent pas être créés simplement) compatible avec jit). En particulier, vous devez utiliser Torch Script si votre code ne peut pas être jited avec le traçage seul car il repose sur certaines fonctionnalités telles que les instructions if. Pour une ergonomie maximale, vous voudrez probablement mélanger les deux au cas par cas.

Enfin, pour comment ils doivent être utilisés, veuillez vous référer à tous les liens de documentation et de tutoriel.

28
Jatentaki