J'ai récemment commencé à étudier l'apprentissage en profondeur et d'autres techniques de ML, et j'ai commencé à rechercher des frameworks qui simplifient le processus de création d'un réseau et de l'entraînement, puis j'ai trouvé TensorFlow, ayant peu d'expérience dans le domaine, pour moi, il semble que la vitesse soit un grand facteur pour rendre un grand système ML encore plus si vous travaillez avec l'apprentissage en profondeur, alors pourquoi python a-t-il été choisi par Google pour créer TensorFlow? Ne serait-il pas préférable d'en faire un langage qui puisse être compilé et non interprété?
Quels sont les avantages de l'utilisation de Python par rapport à un langage comme C ++ pour l'apprentissage automatique?
python
c++
machine-learning
tensorflow
Ollegn
la source
la source
Réponses:
La chose la plus importante à réaliser à propos de TensorFlow est que, pour la plupart, le noyau n'est pas écrit en Python : il est écrit dans une combinaison de C ++ hautement optimisé et CUDA (le langage de Nvidia pour la programmation des GPU). Une grande partie de cela se produit, à son tour, en utilisant Eigen (une bibliothèque numérique C ++ et CUDA haute performance) et le cuDNN de NVidia (une bibliothèque DNN très optimisée pour les GPU NVidia , pour des fonctions telles que les convolutions ).
Le modèle pour TensorFlow est que le programmeur utilise "un langage" (très probablement Python!) Pour exprimer le modèle. Ce modèle, écrit dans les constructions TensorFlow telles que:
n'est pas réellement exécuté lorsque Python est exécuté. Au lieu de cela, ce qui est réellement créé est un graphique de flux de données qui dit de prendre des entrées particulières, d'appliquer des opérations particulières, de fournir les résultats en tant qu'entrées à d'autres opérations, et ainsi de suite. Ce modèle est exécuté par du code C ++ rapide et, pour la plupart, les données passant entre les opérations ne sont jamais recopiées dans le code Python .
Ensuite, le programmeur "pilote" l'exécution de ce modèle en tirant sur les nœuds - pour l'entraînement, généralement en Python, et pour le service, parfois en Python et parfois en C ++ brut:
Celui-ci Python (ou appel de fonction C ++) utilise soit un appel en cours de processus à C ++ soit un RPC pour la version distribuée pour appeler le serveur C ++ TensorFlow pour lui dire de s'exécuter, puis recopie les résultats.
Cela dit, reformulons la question: pourquoi TensorFlow a-t-il choisi Python comme premier langage bien pris en charge pour exprimer et contrôler la formation des modèles?
La réponse à cela est simple: Python est probablement le langage le plus confortable pour un large éventail de scientifiques des données et d'experts en apprentissage automatique.Il est également aussi facile à intégrer et à contrôler un backend C ++, tout en étant général, largement utilisé à l'intérieur et à l'extérieur. de Google et open source. Étant donné qu'avec le modèle de base de TensorFlow, les performances de Python ne sont pas si importantes, c'était un ajustement naturel. C'est également un énorme avantage que NumPy facilite le prétraitement en Python - également avec des performances élevées - avant de l'introduire dans TensorFlow pour les choses vraiment lourdes en CPU.
Il y a aussi un tas de complexité dans l'expression du modèle qui n'est pas utilisé lors de son exécution - l'inférence de forme (par exemple, si vous faites matmul (A, B), quelle est la forme des données résultantes?) Et le calcul automatique du gradient . Cela s'est avéré bien de pouvoir les exprimer en Python, même si je pense qu'à long terme, ils passeront probablement au backend C ++ pour faciliter l'ajout d'autres langages.
(L'espoir, bien sûr, est de prendre en charge d'autres langages à l'avenir pour créer et exprimer des modèles. Il est déjà assez simple d'exécuter l'inférence en utilisant plusieurs autres langages - C ++ fonctionne maintenant, quelqu'un de Facebook a contribué aux liaisons Go que nous examinons maintenant , etc.)
la source
It's already quite straightforward to run inference using several other languages
Être un programmeur Prolog, cela ne me convient tout simplement pas; cela semble être un mot déplacé.TF n'est pas écrit en python. Il est écrit en C ++ (et utilise des bibliothèques numériques hautement performantes et du code CUDA ) et vous pouvez le vérifier en regardant leur github . Donc le noyau n'est pas écrit en python mais TF fournit une interface à de nombreux autres langages ( python, C ++, Java, Go )
Si vous venez d'un monde d'analyse de données, vous pouvez y penser comme numpy (non écrit en python, mais fournit une interface à Python) ou si vous êtes un développeur Web - pensez-y comme une base de données (PostgreSQL, MySQL, qui peut être invoqué depuis Java, Python, PHP)
L'interface Python (le langage dans lequel les gens écrivent des modèles dans TF) est la plus populaire pour de nombreuses raisons . À mon avis, la raison principale est historique: la majorité des utilisateurs de ML l'utilisent déjà (un autre choix populaire est R) donc si vous ne fournissez pas d'interface à python, votre bibliothèque est très probablement vouée à l'obscurité.
Mais être écrit en python ne signifie pas que votre modèle est exécuté en python. Au contraire, si vous avez écrit votre modèle de la bonne façon, Python n'est jamais exécuté lors de l'évaluation du graphe TF (sauf de tf.py_func () , qui existe pour le débogage et doit être évité dans le modèle réel exactement car il est exécuté sur Côté Python).
Ceci est différent de par exemple numpy. Par exemple, si vous faites
np.linalg.eig(np.matmul(A, np.transpose(A))
(ce qui esteig(AA')
), l'opération calculera la transposition dans un langage rapide (C ++ ou fortran), la retournera à python, la prendra de python avec A, et calculera une multiplication dans un langage rapide et la renverra à python, puis calculez les valeurs propres et renvoyez-les à python. Donc, malgré le fait que les opérations coûteuses comme matmul et eig sont calculées efficacement, vous perdez toujours du temps en déplaçant les résultats vers Python et forcez. TF ne le fait pas , une fois que vous avez défini le graphe, vos tenseurs ne circulent pas en python mais en C ++ / CUDA / autre chose.la source
Python vous permet de créer des modules d'extension en utilisant C et C ++, en s'interfaçant avec du code natif, tout en bénéficiant des avantages que Python vous offre.
TensorFlow utilise Python, oui, mais il contient également de grandes quantités de C ++ .
Cela permet une interface plus simple pour l'expérimentation avec moins de surcharge de pensée humaine avec Python, et ajoute des performances en programmant les parties les plus importantes en C ++.
la source
Le dernier ratio que vous pouvez vérifier à partir d' ici montre à l'intérieur de TensorFlow C ++ prend ~ 50% du code, et Python prend ~ 40% du code.
Le C ++ et le Python sont les langues officielles de Google, il n'est donc pas étonnant qu'il en soit ainsi. Si je devais fournir une régression rapide où C ++ et Python sont présents ...
C ++ est à l'intérieur de l'algèbre de calcul, et Python est utilisé pour tout le reste, y compris pour les tests. Sachant à quel point les tests sont omniprésents aujourd'hui, il n'est pas étonnant que le code Python contribue autant à TF.
la source