Demat' iNal,
C'est avec délectation que je t'annonce la sortie de la révision 0.9.2 du compilateur pythran. Pythran est un compilateur pour les noyaux de calcul écrits en Python, compatible avec un (large) sous-ensemble de Python. Il comprend les annotations OpenMP et est capable de générer des instructions vectorielles grâce à xsimd.
La dernière sortie date de plus de 4 mois, donc pas mal de nouveautés sont au rendez vous. La liste complète est consultable en ligne.
Changements majeurs
En plus des correctifs de bug et de la prise en charge de nouvelles fonctions de numpy, on peut noter une nouvelle syntax plus concise pour décrire les arguments optionnels dans les annotations Pythran :
#pythran export foo(int, int?)
Cette notation étant équivalente à :
#pythran export foo(int)
#pythran export foo(int, int)
Cette release introduit également une dépendance vers le nouveau paquet beniget qui fournit une analyse de use-def chains pour Python. Avoir un paquet externe m'a forcé à mieux tester l'ensemble, on peut espérer une meilleur stabilité du tout.
Une fuite mémoire importante lors de la traduction d'une vue étendue sur un tableau depuis Pythran vers Python a été détectée et corrigée.
Au final, c'est 43 tickets qui ont été fermés depuis la version 0.9.1 \o/
Exemple
Comme d'habitude, j'aime bien illustrée Pythran a travers un petit code qui ne compile que depuis la nouvelle version. Le code suivant a été glané sur Stackoverflow et bénéficie d'une accélération d'un facteur 6 sans xsimd jusqu'à 9 avec xsimd et des accès contigus en mémoire.
import numpy as np
#pythran export f_dist(float64[:,:], float64[:,:])
#pythran export f_dist(float64[::,::], float64[::,::])
def f_dist(X1, X2):
return np.sum(np.abs(X1[:, None, :] - X2), axis=-1)
Téléchargement
Pythran est disponible
- sur PyPI : https://pypi.org/project/pythran/
- sur GitHub : https://github.com/serge-sans-paille/pythran
- sur Anaconda, pour Linux, OSX et Windows via conda-forge : https://anaconda.org/conda-forge/pythran
Remerciements
Les personnes suivantes ont contribué à cette version, à travers des rapports de bug ou des patchs - l'ordre est aléatoire :
- Yann Diorcet
- Neal Becker
- Ashwin Vishnu
- David Menéndez Hurtado
- Jean Laroche
- Anubhab Haldar
- Thierry Dumont
- "keke ge-smile"
- "garanews"
- Said Hadjout
- Rodrigo Iga
- Pierrick Brunet
- Franck Cornevaux-Juignet
On notera que ces deux derniers lascars sont mentionnés ici pour avoir reporté des bugs en 2013 et 2014, bugs qui ne sont corrigés qu'avec cette version ;-)
Je me permets également un remerciement particulier à Pierre Augier pour son support et le boost de motivation qu'il apporte au projet.
Contribuez
Il existe plein de façon de contribuer au projet ! Les rapports de bugs et/ou les patchs sont toujours appréciés. Un petit message, par courriel ou dans les commentaires de ce journal, c'est une petite étincelle de joie ! Utiliser le projet et le faire utiliser autour de soi aide aussi beaucoup.
Et si vous avez envie d'influencer les développements futurs, parlez-en sur la liste de diffusion ou, si vous êtes timides, contactez-moi.
Ce journal est une traduction libre de l'annonce officielle avec quelques petits ajouts parce que, bon, c'est plus agréable dans sa langue maternelle
# "Pythran is an ahead of time compiler for a subset of the Python language" : Subset ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
A quel point pythran s'éloigne de python ? A quel point, serait-il compliqué de compiler du code normal ou une partie de celui-ci ? Je pense en particulier pour des applications web ou même pourquoi pas des jeux.
Plus la base d'utilisateur augmente, plus la base de contributeurs potentiels aussi, non ?
"La première sécurité est la liberté"
[^] # Re: "Pythran is an ahead of time compiler for a subset of the Python language" : Subset ?
Posté par serge_sans_paille (site web personnel) . Évalué à 3. Dernière modification le 06 mai 2019 à 12:45.
Pythran ne supporte pas les classes, et ne supporte pas le code polymorphique.
Pour compiler une partie, on peut regarder du côté de https://transonic.readthedocs.io/en/latest/
Pas si sûr… l'écosystème Python scientifique fait que les compétences Compilation, C++ et calcul intensif ne se retrouvent pas forcément dans la base d'utilisateurs. Mais on commence à avoir quelques contributions significatives, donc je suis content !
[^] # Re: "Pythran is an ahead of time compiler for a subset of the Python language" : Subset ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
Lisaac générait un code assez bête par défaut : une structure avec un enum qui contenait le type de classe, ainsi l'appel polymorphique était remplacé par un switch.
Ensuite, il utilisait un algo de flow pour détecter le type réel de l'objet, ainsi il pouvait réduire la taille du switch. Si il trouvait le type final, cela permettait de faire ensuite de l'inlining. C'est comme ça + la notion de gestion du layout mémoire, que IssacOs pouvait avoir un framebuffer qui était un tableau 2D de l'objet pixel, et d'avoir des vrais performances.
"La première sécurité est la liberté"
# Pythran, numpy et tensorflow
Posté par Ruminant . Évalué à 1. Dernière modification le 06 mai 2019 à 12:21.
Vu que tensorflow et compagnie sont à la mode en ce moment, et que ça utilise intensivement numpy derrière, oserais-je demander s’il est pertinent de faire tourner tensorflow (TF) sur Pythran, ou non ?
De mémoire il y a beaucoup de C++ et je ne sais pas si TF utilise numpy réellement pour ses calculs les plus gourmands.
[^] # Re: Pythran, numpy et tensorflow
Posté par serge_sans_paille (site web personnel) . Évalué à 3.
Le plus proche que l'on pourrait avoir est en discussion, je te recommande la lecture de ce fil :
https://www.freelists.org/post/pythran/Use-pythran-to-deploy-tensorflow-models
[^] # Re: Pythran, numpy et tensorflow
Posté par jeanl . Évalué à 2.
J'ai fait quelques progres dans ce sens depuis les emails. Une etape necessaire c'est transformer the graphe tensorflow en une serie d'appels de fonctions qui peuvent a leur tour etre compiles par pythran. Pour faire ca, j'ai fait un hack de tfdeploy qui lit un graph tensorflow et le deroule en une serie d'appels de fonctions. Pour l'instant tout ca marche plutot bien. Pour moi, l'attrait de cette solution c'est d'une part de ne pas dependre de tensorflow pour faire tourner les modeles (apres apprentissage) et d'autre part de gagner en temps de calcul…
[^] # Re: Pythran, numpy et tensorflow
Posté par Ruminant . Évalué à 0.
Très intéressant, merci à vous deux, bien que je ne sache pas si j’aurai le temps (ou le besoin, d’ailleurs) de me pencher sur le sujet.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.