Le langage Julia à l’échelle avec Kubernetes …

Image for post
Image for post

Julia est un langage de programmation de haut niveau, performant et dynamique pour le calcul scientifique, avec une syntaxe familière aux utilisateurs d’autres environnements de développement similaires (Matlab, R, Scilab, Python, etc…).

Il fournit un compilateur sophistiqué, un système de types dynamiques, une exécution parallèle distribuée, des appels directs de fonctions C, Fortran et Python. Ce langage est en développement au MIT depuis 2009, et la première version publique date de 2012.

Image for post
Image for post

Le langage Julia peut maintenant s’intégrer avec Kubernetes via l’utilisation d’une librairie cliente Kuber.jl :

Je commence par la création d’un Scale Set pour cette expérience d’instances avec notamment la nouvelle gamme Edsv4 dans Azure :

Les séries Edv4 et Edsv4 fonctionnent sur les processeurs Intel® Xeon® Platinum 8272CL (Cascade Lake) dans une configuration hyper-threading.

Elles sont idéales pour des applications gourmandes en mémoire et disposent jusqu’à 504 GiB de RAM, de la technologie Intel® Turbo Boost 2.0, de la technologie Intel® Hyper-Threading et de la technologie Intel® Advanced Vector Extensions 512 (Intel® AVX-512). Elles prennent également en charge la technologie Intel® Deep Learning Boost. Ces nouvelles tailles de VM auront un stockage local 50% plus important, ainsi que de meilleures IOPS de disque local pour la lecture et l’écriture par rapport aux anciennes tailles Ev3/Esv3 avec les VM Gen2.

Image for post
Image for post

Utilisation de Terraform pour la création de ce Scale Set avec des Spot Instances via ce fichier HCL :

Image for post
Image for post
main.yml

avec ce fichier d’installation de Docker via cloud-init :

Image for post
Image for post
install.sh

à convertir en Base64 :

Image for post
Image for post

J’initialise :

Image for post
Image for post

puis simulation :

Image for post
Image for post

et lancement :

Image for post
Image for post

Le Scale Set est actif dans Azure :

Image for post
Image for post
Image for post
Image for post

J’utilise la dernière version de RKE pour créer mon cluster Kubernetes avec ces Spot Instances dans Azure :

Image for post
Image for post

J’utilise ce fichier YAML pour initialiser ce cluster :

Image for post
Image for post
rancher-cluster.yml
Image for post
Image for post

Le cluster Kubernetes est actif :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Après installation de Miniconda, récupération de Jupyter Lab :

Image for post
Image for post

J’utilise Julia pour récupérer le noyau pour le futur notebook Jupyter via le package IJulia :

Image for post
Image for post

Lancement d’un notebook Jupyter avec la présence de la dernière version du langage Julia :

Image for post
Image for post
Image for post
Image for post

La librairie Kuber.jl a été installée et j’active le proxy localement avec le client Kubectl :

Image for post
Image for post

et test d’une mise à l’échelle horizontale avec la langage Julia dans le cluster Kubernetes :

Image for post
Image for post

Création d’un Replica Set de Workers avec Julia :

Image for post
Image for post
Image for post
Image for post

Les workers sont alors actifs :

Image for post
Image for post
Image for post
Image for post

et ils augmentent en nombre :

Image for post
Image for post

J’en réduis alors le nombre :

Image for post
Image for post
Image for post
Image for post

Je peux enfin les supprimer :

Image for post
Image for post
Image for post
Image for post

Je peux aussi effectuer une mise à l’échelle verticale (modification du nombre de CPU / quantité de mémoire vive notamment) :

Image for post
Image for post
Image for post
Image for post

ou en créant d’autres workers :

Image for post
Image for post
Image for post
Image for post

et en vérifiant leurs activités respectives :

Image for post
Image for post
Image for post
Image for post

Je peux comme précedemment supprimer ces workers :

Image for post
Image for post
avec des

Kuber.jl peut être utilisé pour lancer classiquement des workloads dans le cluster Kubernetes : dès lors déploiement du sempiternel démonstrateur FC …

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

qui est actif via ce port TCP,

Image for post
Image for post

et via chacune des IP publiques des instances Spot :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Récapitulatif du notebook Jupyter ici :

Si l’on ne souhaite pas utiliser Kubernetes, on peut alors utiuliser ces Spot instances en mode distribuée comme dans cet exemple pour tester des équations différentielles stochastiques via DifferentialEquations.jl et ClusterManagers.jl.

En effet, Julia est équipé pour un support intégré pour deux types de clusters :

  • Un cluster local spécifié avec l’option -p comme indiqué ci-dessous.
  • Un cluster couvrant les machines en utilisant l’option “machine-file”. Celle-ci utilise une connexion ssh sans mot de passe pour lancer les processus de travail avec Julia (à partir du même chemin que l’hôte actuel) sur les machines spécifiées.

Julia détient la “médaille Fields du logiciel scientifique” : en effet, le prix Wilkinson n’est decerné qu’une fois tous les quatre ans par le SIAM (Society for Industrial and Applied Mathematics) en récompense d’une contribution exceptionnelle dans le domaine du logiciel numérique. Et en 2019, ce sont les auteurs du langage Julia qui ont été récompensés ! Donc, un langage à suivre puisqu’il appartient également au Top 10 des langages les plus appréciés des développeurs …

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store