Connexion
Abonnez-vous

PyTorch : version native pour Windows on Arm, extensions Intel et faille critique

Le 28 avril à 08h06

La semaine a été riche en actualités pour ce framework dédié à l’apprentissage automatique (machine learning), écrit en Python et s’appuyant sur Torch de Meta. C’est aujourd’hui l’une des bibliothèques les plus couramment utilisées dans ce domaine. Depuis l’automne 2022, son développement se fait sous l’égide de la fondation Linux.

Parmi les actualités, on commence avec la disponibilité de builds compilés nativement pour Arm par Microsoft, à destination des PC basés sur ces puces, dont les Snapdragon X présents dans les machines Copilot+. Il s’agit de la dernière révision de PyTorch (2.7), qui peut fonctionner avec la version 3.12 de Python.

Pour faire tourner ces builds, il faut quand même quelques composants. Il est ainsi nécessaire d’avoir soit une installation complète de Visual Studio, ou au moins la partie associée au développement avec C++, les outils C++ pour ARM64/ARM64EC et Rust, en partie par le site officiel pour ce dernier. Le reste se fait via des commandes pip fournies par Microsoft sur la page d’annonce.

Aujourd’hui, Intel a également publié sa nouvelle extension pour PyTorch 2.7. À la clé, diverses optimisations de performances pour les puces du fondeur, dont le support de la précision INT8 pour les dernières générations de Xeon. La nouvelle mouture apporte également le support de plusieurs modèles, dont DeepSeek-R1 et la famille Phi-4 de Microsoft. La nouvelle version peut être téléchargée depuis son dépôt GitHub.

Faille critique dans les anciennes versions

Enfin, dans les nouvelles moins réjouissantes, une importante faille de sécurité a été divulguée le 18 avril dans toutes les versions de PyTorch jusqu’à la 2.5.1. Estampillée CVE-2025-32434, elle possède un score CVSS de 9.3 sur 10, la catégorisant comme critique. L’exploitation peut se faire via un modèle d’IA malveillant qui, sous certaines conditions, va pouvoir déclencher l’exécution d’un code arbitraire.

Plus précisément, la faille réside dans la manière dont PyTorch gère certains paramètres. Les modèles entrainés sont stockés dans des fichiers permettant d’enregistrer les poids associés. Ces poids sont chargés via la méthode torch.load().

Comme l’explique notamment Kasperksy, les modèles sont souvent proposés depuis des dépôts publics. Pour éviter les problèmes de sécurité, il est recommandé d’activer le paramètre weights_only=True, qui n’autorise que les types primitifs de données (dictionnaires, tenseurs, listes…). La faille permet de contourner cette barrière afin que le paramètre ait l’effet inverse, autorisant le chargement de tous les types de données. Y compris donc la charge malveillante.

La version 2.6.0, intégrant le correctif, est sortie le 29 janvier. Il est donc recommandé de basculer sur une version récente de PyTorch si ce n’est pas encore fait.

Le 28 avril à 08h06

Commentaires (9)

votre avatar
Et moi qui croyais que Python était un langage interprété !

J'ai l'impression qu'il manque l'explication de ce qui est compilé et pourquoi ça l'est. la page de blog de Microsoft ne donne pas non plus cette info même s'ils se sont mis à 5 pour l'écrire !

Il faut aller sur github pour comprendre qu'il y a du C++ dans le code de cet outil.
votre avatar
Y'a un gag qui traîne parfois sur les réseaux issu du meme Rick & Morty où il fabrique un petit robot qui demande son rôle et montre qu'il est déçu en l'apprenant (dans le dessin animé, il est juste là pour passer le beurre). Pour Python, j'avais vu cette version une fois :

Robot C++ : What is my purpose ?
Rick : You write Python modules
Robot C++ : Oh.
votre avatar
Pour les packages python, si tu vois qu'il y a des versions windows/linux/arm, c'est généralement qu'il y a du code C/C++, parfois du fortran. Si ce sont des extensions python, il faut en plus gérer un package par version de python (en plus d'un package par OS cible)
votre avatar
Python est un langage interprété. En revanche, des modules Python (e.g., numpy, scipy, PyTorch...) peuvent être écrit en Python ou non (et dans ce cas il y a un binding à faire).

La raison évidente est pour l'aspect performance (exploitation plus efficace du processeurs, meilleure gestion de la mémoire...).
votre avatar
Python est un langage, et il se fait que l'implémentation de référence est un interpréteur, mais ça n'empêche pas d'avoir d'autres implémentations qui compilent, parfois immédiatement, parfois avec un JIT.

Par ailleurs, au niveau performance, il est bon de rappeler que cette même implémentation de référence de Python a une limitation au niveau du multithreading (le fameux "GIL" qui résiste encore et toujours aux tentatives de s'en passer) qui saute lorsqu'on utilise des modules compilés. Un module comme numpy peut donc exploiter tous les coeurs en parallèle
votre avatar
Python sert souvent d'interface. Par exemple, la bibliothèque python numpy, très largement utilisé pour manipuler des tableaux (n dimension array) de tailles et de type fixes, est en faites une bibliothèque écrite en C pour manipuler des arrays en C et une énorme interface qui permet, depuis python, de manipuler ces structures comme des objets python.

Pour pyTorch, c'est encore un peu plus complexe. Je n'ai pas le détail de comment ça fonctionne, mais ici, avec python, on crée un graph ou chaque nœud est une fonction et à a moment donné (je ne comprends pas bien le fonctionnement de l'eager exécution), le graph va être élagué, optimisé... et exécuté pour avoir le résultat.

Après, dans l'univers de python, tu as par exemple cython, c'est assez complexe à expliquer, mais ça permet de faire du code compiler avec un truc qui est fortement compatible avec python (il existe un mode ou ton code est compatible avec python, et compilable via cython).
votre avatar
L'intérêt de Python en sciences c'est que c'est un langage simple permettant de faire le lien entre plusieurs librairies très performantes.
Implémenter les opérations en Python est très lent, faire du scripting en C/C++ est plus dur et plus complexe à déboguer, alors on prend le meilleur des deux mondes avec un langage de scripting simple qui appelle des fonctions très performantes
votre avatar
"un langage de scripting simple qui appelle des fonctions très performantes"
Ce qu'on peut avec plein de langages et pour moins de frais.

Et que donc on se demande pourquoi il en est arrivé là. Surtout avec des gens qui commencent à émettre des critiques à l'encontre du créateur en le traitant de "despote" ou autres noms d'oiseaux.
votre avatar
Ca serait bien de faire une version sans Python avec des exécutables standard.
Compiler du Python en .exe je ne sais pas si c'est possible.
Python pose d'énormes problèmes, tout peut péter d'un instant à l'autre parce qu'une librairie devient incompatible avec le reste.
Une bonne partie des issues sur les github c'est des problèmes dus à des dépendances plutôt que du logiciel écrit lui même.
Ca compter que par défaut si l'auteur n'a pas prévu de venv ça remplit aussi le disque en écrivant dans des répertoires externes dont l'utilisateur n'a pas forcément connaissance et donc ne supprime pas en désinstallant son logiciel.

PyTorch : version native pour Windows on Arm, extensions Intel et faille critique

  • Faille critique dans les anciennes versions

Fermer