
Qu’est-ce que TensorFlow ?
TensorFlow est une librairie logicielle, open source depuis 2015, de calcul numérique développée par Google. La particularité de TensorFlow est son utilisation des graphes de flux de données (data flow graphs).
TensorFlow a été développé par des chercheurs et des ingénieurs de Google afin de mener à bien des projets de recherche en apprentissage automatisé (machine learning) ainsi que sur le sujet des réseaux de neurones profonds (deep neural networks). Le système est néanmoins assez généraliste pour être applicable dans une large gamme de domaines d’application. TensorFlow permet notamment d’entraîner des modèles nécessitant de gros volumes de données (par exemple des banques d’images) de façon optimale.
L’architecture flexible de TensorFlow permet de déployer le calcul sur un ou plusieurs CPU/GPU sur un ordinateur personnel, un serveur etc. sans avoir à réécrire de code.
Google a également développé des Tensor Processing Units (ou TPU) construits spécialement pour l’apprentissage automatisé et pour être utilisés avec TensorFlow. Les TPU sont destinés à utiliser et tester des modèles plutôt qu’à les entraîner. Depuis Février 2018, les TPU sont disponibles sur la version beta de Google Cloud Platform.
TensorFlow est basé sur l’infrastructure DistBelief (Google 2011) et est doté d’une interface Python qui se présente sous une forme atypique bas niveau (plus adaptée à l’architecture machine) par rapport aux usages habituels de Python. Il ne faut donc pas paniquer si TensorFlow vous demande un certain temps d’adaptation !
De nombreuses entreprises et applications utilisent aujourd’hui TensorFlow. Parmi elles, Airbnb, Nvidia, Uber, Dropbox, Ebay, Google (bien sûr), Snapchat, Twitter…et bien d’autres encore !
Grâce au datalab, TensorFlow peut être utilisé sur la GCP, soit sur la configuration par défaut, soit en personnalisant une machine virtuelle : choix du nombre de cœurs, choix CPU/GPU etc.
Comment se présente TensorFlow ?
Comme indiqué un peu plus haut, TensorFlow représente les calculs sous la forme d’un graphe d’exécution.
Les nœuds du graphe représentent les opérations mathématiques, comme l’addition, la multiplication, la multiplication matricielle, la dérivation fonctionnelle etc.
Les arrêtes du graphe représentent les tenseurs, communicant entre les nœuds. Un tenseur peut être par exemple un entier, un vecteur, une image etc. Chaque nœud du graphe prend donc en entrée différents tenseurs, effectue son calcul, puis retourne de nouveaux tenseurs.
Exemple :
1+4=5
deriv(2x)=2
Le code associé à TensorFlow se divise en deux étapes principales, la construction et l’exécution. Pendant la phase de construction, les variables et les opérations du graphe sont définies et assemblées. La création du graphe est ensuite automatiquement gérée par TensorFlow afin de permettre l’optimisation et la parallélisation du code et de l’exécution.
La phase d’exécution utilise une session afin d’exécuter les opérations du graphe. Un graphe ne va exécuter les opérations qu’après création d’une session. Une session permet de placer les opérations du graphe dans des les composants (CPU/GPU/TPU) et met à disposition des méthodes pour les exécuter. Le lancement des opérations du graphe se fait via la méthode run() de la session comme nous le verrons un peu plus loin. Ce système d’exécution de graphe est une des propriétés fondamentales de TensorFlow et permet d’exécuter toutes les opérations du graphe en une seule fois.
TensorFlow possède de nombreuses options pour faire du Deep Learning, facilitant ainsi la construction d’un réseau de neurones, son utilisation et son entraînement de façon optimale.
Google Cloud Platform
Google Cloud Platform (ou GCP) est une plateforme en ligne développée par Google. Cette plateforme met à disposition des services de création de machines virtuelles et de réseaux.
Qu’est-ce qu’on peut y faire ?
- calculer
- stocker
- faire de l’apprentissage automatisé/apprentissage profond
- et bien plus encore !
Dans ce mini-tutoriel, nous allons vous apprendre comment :
- ouvrir un compte gratuit sur GCP
- utiliser datalab sur GCP via un ordinateur personnel sous GNU/Linux
- écrire votre premier programme en TensorFlow
Création d’un compte sur GCP
Comment accéder à la GCP ?
- allez sur le site https://cloud.google.com/
- cliquez sur Try it free
- remplissez le formulaire
Vous avez accès à un crédit gratuit d’environ 300$/250€ offert sur la plateforme valable un an. On vous demandera de remplir les informations relatives à votre carte bancaire. Votre compte ne sera PAS débité. Il s’agit d’une mesure de précaution à l’encontre d’une utilisation abusive de la GCP.
Ensuite,
- cliquez sur Découvrir la console. Un didacticiel se met en route pour accompagner votre prise en main de la plateforme.
- créez/sélectionnez un projet
- suivez les instructions
- cliquez sur Go to console
Créez (ou sélectionnez) un projet sur GCP en cliquant sur
https://console.cloud.google.com/cloud-resource-manager
Cliquez sur le lien suivant pour activer Google Compute Engine and Cloud Source Repositories APIs pour le projet choisi :
https://console.cloud.google.com/flows/enableapi?apiid=compute,sourcerepo.googleapis.com
Installation de gcloud sur votre ordinateur
Nous allons maintenant installer Google Cloud SDK sur votre ordinateur. Google Cloud SDK ne marche pas avec Python 3 pour le moment. Vérifiez que vous disposez d’une version de Python 2 de type Python 2.7.9 ou plus récente sur votre ordinateur en utilisant la commande
python2 –V
Si besoin, mettez votre Python à niveau
sudo apt-get install python2.7
A présent, téléchargez l’un des paquets suivants en fonction de l’architecture de votre machine:
Plateforme | Lien | Taille |
Linux 64-bit (x86_64) | https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-187.0.0-linux-x86_64.tar.gz | 18.5 MB |
Linux 32-bit (x86) | https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-187.0.0-linux-x86.tar.gz | 18.1 MB |
Vous pouvez extraire le fichier où vous voulez dans votre système de fichier.
tar zxvf nom_du_fichier.tar.gz
Tapez ensuite les deux lignes de commandes suivantes
source ‘./google-cloud-sdk/path.bash.inc’
source ‘./google-cloud-sdk/completion.bash.inc’
Exécutez enfin gcloud init pour initialiser le SDK.
./google-cloud-sdk/bin/gcloud init
Suivre les instructions de configuration : choisir/créer un projet, choisir une zone etc.
Vous pouvez maintenant accéder à l’aide :
gcloud –help
Accès au datalab
A présent, mettez à jour gcloud
gcloud components update
Installez maintenant gcloud datalab component.
gcloud components install datalab
Créez à présent une instance Cloud Datalab. Le nom de l’instance doit commencer avec une lettre minuscule, suivie par un maximum de 63 lettres minuscules, chiffres ou traits d’union.
Attention ! Le nom de l’instance ne peut pas se terminer par un trait d’union.
datalab create nom_de_votre_instance
Suivez les instructions. Choisissez un secteur géographique proche de l’endroit où vous vous trouvez. Vous devez entrer une phrase pour générer une clé publique.
Attention ! Si le processus est trop long ou échoue, n’hésitez pas à recommencer la création de l’instance. Lors de cette étape, il y a souvent des problèmes de connexion.
Si vous retournez sur votre tableau de bord GCP, et que vous cliquez sur les 3 barres en haut à gauche, puis sur Compute Engine, votre instance apparaît comme active.
Enfin, lorsque la connexion au datalab est ouvrez la page d’accueil du Cloud Datalab dans votre navigateur grâce au lien suivant: http://localhost:8081
Vous avez ainsi accès à un notebook Jupyter. Créez un nouveau Jupyter notebook en cliquant sur le symbole ‘+’ à gauche de Notebook.
Note: pour relancer une instance après l’avoir quittée
datalab connect nom_de_votre_instance
Nous vous proposons maintenant un micro-tutoriel d’introduction à TensorFlow sur la Google Cloud Platform.
Mon premier programme en TensorFlow sur GCP
1) Hello world !
Tapez les lignes de commande suivantes dans votre Jupyter notebook. Pour valider une cellule, tapez Shift+Entrée.
import tensorflow as tf # Importation de la librairie TensorFlow
bonjour = tf.constant(‘Bonjour!’) # Définition d’une constante bonjour contenant la chaîne de caractère ‘Bonjour!’
Si vous tapez bonjour dans votre notebook, vous obtenez
<tf.Tensor ‘Const:0’ shape=() dtype=string>
C’est normal, il manque une brique fondamentale de TensorFlow que nous avons évoqué plus tôt dans cet article, la session via la fonction tf.Session() de TensorFlow
session = tf.Session() # Création d’une session
Un message d’erreur peut apparaître, n’en tenez pas compte.
session.run(bonjour) # Exécution de la session
‘Bonjour!’
Ce petit exemple introduit deux éléments essentiels pour tout programme en TensorFlow, les fonction Session() et run().
2) Opérations mathématiques de base
x = tf.constant(3) # Définition de la constante x=3
y = tf.constant(2) # Définition de la constante x=2
X = tf.constant([1,0], shape=(2,1)) # Définition du vecteur constant X
M = tf.constant([1,1,2,2], shape=(2,2)) # Définition de la matrice constante M
resultat_1 = tf.add(x, y) # Addition
resultat_2 = tf.multiply(x, y) # Multiplication
resultat_3 = tf.matmul(M, X) # Multiplication matricielle
session = tf.Session() # Création d’une session
session.run(resultat_1) # Exécution de la session
session.run(resultat_2) # Exécution de la session
session.run(resultat_3) # Exécution de la session
Comme précédemment, n’oubliez pas d’exécuter la session !
3) Variables et initialisation
Dans TensorFlow, les variables sont définies et manipulées grâce à tf.Variable().
x=tf.Variable(0)
Une variable représente un tenseur dont la valeur peut changer en exécutant un calcul.
x = tf.constant(0)
y = tf.Variable(x + 1)
Remarque : les variables doivent être initialisées avant que le graphe puisse les utiliser. On utilise pour cela la fonction tf.global_variables_initializer().
Petit exemple de programme :
import tensorflow as tf
x = tf.constant(0)
y = tf.Variable(x + 1)
initialisation = tf.global_variables_initializer() # Initialisation des variables
with tf.Session() as session:
session.run(initialisation)
print(session.run(y))
Exemple d’utilisation : une Variable peut être utilisée pour contenir les poids w d’un réseau de neurones, et est donc mise à jour au cours de l’entraînement du modèle.
4) Placeholders
Un Placeholder est un Tenseur créé via la méthode tf.placeholder(). Lors de sa création, on n’assigne aucune valeur précise au Placeholder, on spécifie uniquement le type de données et leur dimension
x = tf.placeholder(tf.float32, shape=(1024, 1024)) # création du placeholder x de type float32 et de dimension (1024, 1024)
Un Placeholder peut être vu comme une Variable qui ne recevra ses données que plus tard dans le programme, pendant la partie exécution. La valeur est fixée grâce pendant le run d’un calcul.
x = tf.placeholder(tf.float32, shape=(1024, 1024)) # création du placeholder x
y = tf.matmul(x, x) #
with tf.Session() as sess:
rand_array = np.random.rand(1024, 1024) # définition de rand_array
print(sess.run(y, feed_dict={x: rand_array})) # on donne à x la valeur rand_array pendant l’exécution
Exemple d’utilisation : à chaque itération de l’entraînement d’un réseau de neurones, on utilise un Placeholder afin alimenter le modèle avec un nouveau batch d’images.
Conclusion
Vous avez à présent un crédit de 250€ sur GCP et vous savez également accéder au datalab à partir de votre ordinateur. Enfin, vous avez écrit vos premières lignes de code en TensorFlow et vous avez les bases pour comprendre des codes avancés écrits dans ce langage.
Pour aller plus loin, vous trouverez dans le datalab de GCP des exemples plus complexes d’application de TensorFlow, ainsi que d’autres tutoriels d’apprentissage automatisé.
Bonne exploration !
Références et sources
- https://www.tensorflow.org/
- https://github.com/tensorflow/tensorflow
- https://cloud.google.com/
- https://cloud.google.com/datalab/docs/quickstart
- https://cloud.google.com/solutions/running-distributed-tensorflow-on-compute-engine
- https://www.nvidia.fr/daa-center/gpu-accelerated-applications/tensorflow/
- https://blog.xebia.fr/2017/03/01/tensorflow-deep-learning-episode-1-introduction/
- https://learningtensorflow.com/lesson2/