Lancer Streamlit depuis Google Colab

La méthode pour utiliser Streamlit si vous ne pouvez pas vous passer de Google Colab.

Lorsqu’il s’agit de travailler en équipe sur un projet de machine learning, Google Colab, la plateforme de développement orientée notebook signée Google, ne peut être ignorée. Bénéficiant en effet d’une allocation GPU tout à fait correcte, la plateforme Google Colab peut répondre aux besoins inhérents à la plupart des projets et, pour peu que l'on souscrive à la version pro, le quota GPU n’est plus qu’un mauvais souvenir.

Cependant il subsiste plusieurs points que vous pourriez avoir à surmonter pour exploiter Google Colab du début à la fin de votre projet. Dans cet article nous allons évoquer la dernière étape qui consiste souvent à réaliser une démo des modèles en action.

Nous n’allons pas revenir sur la librairie Streamlit en elle-même, car une série d'articles traite de cette question. L’objet de cet article est uniquement de vous montrer comment vous allez pouvoir lancer une application Streamlit depuis Google Colab et continuer ainsi à partager votre travail avec les autres membres de votre équipe.

Principe

Le principe est d'initier un tunnel via le service Ngrok afin de rendre publique l'adresse du serveur instancié par streamlit. Pour éviter d'atteindre les quotas de soumission auprès de Ngrok, il faut au préalable s'inscrire sur le site ngrok.com afin d'y récupérer un token. Ce dernier sera nécessaire plus loin cet article.

Installation de Streamlit

Tout d’abord, et comme vous pouvez vous en douter, il nous faut installer dans notre notebook Colab la librairie Streamlit. La ligne ci-dessous suffit :


!pip install -q streamlit

Il faut cependant penser à redémarrer l'environnement d'exécution après avoir exécuté cette instruction. Par ailleurs, il est possible qu’un certain nombre de messages d’erreur propres aux dépendances apparaissent. Ces messages sont sans conséquences pour la bonne exécution du notebook, nous continuons donc sans y prêter attention.

Installation de Ngrok

NGrok va nous permettre de créer un tunnel afin de pouvoir visualiser notre application dans un navigateur internet. L’installation va se passer en deux temps. Nous installons tout d’abord la librairie pyngrok, qui n’est autre qu’un wrapper python pour le service ngrok.


!pip install pyngrok

Nous téléchargeons puis décompressons ensuite le contexte nécessaire à la bonne exécution du service :


!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

Outre le fichier zip bien sûr, il résulte de ces instructions un exécutable ngrok placé dans le système de fichier associé au notebook.

Application Streamlit

A des fins de tests voici ci-dessous une application Streamlit minimale :


%%writefile monapp.py
import streamlit as st 
st.write("Hello world !")

Nous ne revenons pas sur ces lignes car la n’est pas l’objet de cet article. L'exécution de cette cellule a pour effet de créer un fichier monapp.py dans le système de fichier, ce fichier constituant notre application.

Token Ngrok

Comme précisé en préambule de cet article, nous allons, à l'utilisation du service Ngrok, être soumis à un quota de requêtes. Cette contrainte peut facilement être évitée en s'identifiant auprès du service. Pour ce faire, il faut se rendre sur le site de Ngrok (https://ngrok.com/) puis se créer un compte. Une fois le compte créé, il suffit de se rendre dans le dashboard (ou depuis le menu Getting started / Your authtoken”) pour y retrouver le token associé au compte. Il s’agit d’une longue chaîne alphanumérique. Vous copier cette chaine de caractère puis dans le notebook la spécifier ainsi :


!ngrok authtoken XXXXXXXXXXXXXXXX...

Désormais nous sommes prêts à lancer notre tunnel de connexion.

Lancement du tunnel

Nous initions un tunnel de connexion via les instructions ci-dessous :


get_ipython().system_raw('./ngrok http 8501 &')
!curl -s http://localhost:4040/api/tunnels | python3 -c \
    'import sys, json; print("URL pour visualiser l application : "    +json.load(sys.stdin)["tunnels"][0]["public_url"])'

L'exécution des ces instructions va nous donner une URL se terminant par le domaine ngrok.io. C’est à cette adresse que notre application sera accessible une fois qu’elle aura été lancée, ce que nous allons faire de suite.

Lancement et visualisation de l’application Streamlit

Il nous reste désormais à lancer notre application :


!streamlit run /content/monapp.py

Le lancement va nous retourner deux adresses dont il ne faudra pas tenir compte. Par ailleurs la cellule s'exécutera tant que nous ne l'arrêterons pas volontairement. Comme précisé précédemment il vous suffit de cliquer désormais sur l’URL en .ngrok.io pour voir un nouvel onglet de votre navigateur internet s’ouvrir et l’application Streamlit s'exécuter.

Enfin toute relance nécessite d'exécuter les 2 étapes précédentes (lancement du tunnel, puis lancement de l’application).