Le langage Julia à l’échelle avec Kubernetes …
Tags: azure, kubernetes, datascience, julia
Published: 2020-06-21 23:40:13

---
title: Le langage Julia à l’échelle avec Kubernetes …
published: true
date: 2020-06-21 23:26:09 UTC
tags: azure,kubernetes,datascience,julia
canonical_url: https://medium.com/@deep75/le-langage-julia-%C3%A0-l%C3%A9chelle-avec-kubernetes-3e85e63765a4
---

![](https://cdn-images-1.medium.com/max/1024/1*TZmPl77MyndiJVhk-WpX9A.jpeg)

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.

![](https://cdn-images-1.medium.com/max/638/0*Bg_F2AsJ48XnX5kx)

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

[JuliaComputing/Kuber.jl](https://github.com/JuliaComputing/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 :

- [New Azure Virtual Machines for general purpose and memory intensive workloads now in preview | Azure updates | Microsoft Azure](https://azure.microsoft.com/en-us/updates/new-azure-virtual-machines-for-general-purpose-and-memory-intensive-workloads-now-in-preview/)
- [Edv4 and Edsv4-series - Azure Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/edv4-edsv4-series)

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.

![](https://cdn-images-1.medium.com/max/716/0*x_ICNqGI-0MHMJ-t.jpg)

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

- [Syntax - Configuration Language - Terraform by HashiCorp](https://www.terraform.io/docs/configuration/syntax.html)
- [Using Terraform with Azure](https://docs.microsoft.com/en-us/azure/developer/terraform/overview)

![](https://cdn-images-1.medium.com/max/732/1*p4FTxvp1uF_638KmYNtRVg.png)

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

![](https://cdn-images-1.medium.com/max/974/1*JJ4p6Zmq0LDERl9nQfPVQA.png)

à convertir en Base64 :

![](https://cdn-images-1.medium.com/max/856/1*a1EMd09FOa5RXs-QqeP_jA.png)

J’initialise :

![](https://cdn-images-1.medium.com/max/1024/1*_W3MtMSuBSErg9JYiQsa1g.png)

puis simulation :

![](https://cdn-images-1.medium.com/max/816/1*oYdJt1ntoDymkA92PJe_dg.png)

et lancement :

![](https://cdn-images-1.medium.com/max/1024/1*Eco5S2Rb6GG_o6xFkuFEgg.png)

Le Scale Set est actif dans Azure :

![](https://cdn-images-1.medium.com/max/1024/1*HCQWZjGnKxFc541ZkB2qyA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*YuoYBh1jXxXIR70zpqU_MQ.jpeg)

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

[rancher/rke](https://github.com/rancher/rke/releases)

![](https://cdn-images-1.medium.com/max/1024/1*tPrvPMhhYBT8zyRycw_wWA.jpeg)

J’utilise ce fichier YAML pour initialiser ce cluster :

![](https://cdn-images-1.medium.com/max/940/1*i5UP_OMRohjFfpkS_utyMA.png)

![](https://cdn-images-1.medium.com/max/1024/1*Wol84T-tGPCvhx-QYNcQ6A.png)

Le cluster Kubernetes est actif :

![](https://cdn-images-1.medium.com/max/1024/1*S_ic3cw8u5SkOpkf-9iIcQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*DkjapLYUKM9jBxOI1mNtjQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*6bBKqmAQ9tdsi7LJCpTNRA.jpeg)

Je peux localement récupérer la dernière version du langage Julia :

[The Julia Language](https://julialang.org/downloads/)

![](https://cdn-images-1.medium.com/max/1024/1*ovAVqlD5acO6yejfQWo5iA.jpeg)

ainsi que Miniconda :

[Miniconda - Conda documentation](https://docs.conda.io/en/latest/miniconda.html)

![](https://cdn-images-1.medium.com/max/1024/1*v2S80oBLSLR3U7efNZ3cAA.jpeg)

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

![](https://cdn-images-1.medium.com/max/992/1*R5i8RUkGZa8ePVyWPZrH0A.png)

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

[JuliaLang/IJulia.jl](https://github.com/JuliaLang/IJulia.jl)

![](https://cdn-images-1.medium.com/max/1024/1*lpw9F9qfMnbQMVVIl3Fc-A.png)

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

![](https://cdn-images-1.medium.com/max/542/1*bZrL7NoCx0JVO9_ZZpwUuA.png)

![](https://cdn-images-1.medium.com/max/1024/1*6pd3mGKqIC1fdtJiY6xq3w.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*lcfiBjZhwcB6h53TKTizWg.png)

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

![](https://cdn-images-1.medium.com/max/806/1*f5Tv16PSPaMG9hLvFcbzAA.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*3a0XqcPr6PzyXzhUiq-Ldw.png)

![](https://cdn-images-1.medium.com/max/890/1*IIQoaTiQy48GSJLBHVMaKQ.png)

Les workers sont actifs :

![](https://cdn-images-1.medium.com/max/1024/1*bcMh_oUdXfja1sXVCG2IeA.jpeg)

Je modifie le nombre de Workers :

![](https://cdn-images-1.medium.com/max/1024/1*6nazKhfr8US4rDkM8l4gGA.png)

et ils augmentent en nombre :

![](https://cdn-images-1.medium.com/max/1024/1*wowJz4uPUtY0Q7iEcwitMg.jpeg)

J’en réduis alors le nombre :

![](https://cdn-images-1.medium.com/max/1024/1*mNVqqFop73E5obBBIV_7cg.png)

![](https://cdn-images-1.medium.com/max/1024/1*0lPrp_6kqkaRwIXh6f901Q.jpeg)

Je peux enfin les supprimer :

![](https://cdn-images-1.medium.com/max/672/1*DBayqgSVQxjdZWrPgxh3Ug.png)

![](https://cdn-images-1.medium.com/max/1024/1*QJ9vzJFrZiv2uTDBgt2WbA.jpeg)

Je peux aussi effectuer une mise à l’échelle verticale :

![](https://cdn-images-1.medium.com/max/1024/1*5cZek6yaT4TFQ4wP0WGOzg.png)

![](https://cdn-images-1.medium.com/max/1024/1*aLxKvGFdsmKusICPzAhFXg.jpeg)

en créant d’autres workers :

![](https://cdn-images-1.medium.com/max/1024/1*XGCogLUtXOSm012gq5N5HQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*xMiZpa3oKGJ1FRIA1XXupg.jpeg)

et en vérifiant leurs activités respectives :

![](https://cdn-images-1.medium.com/max/1024/1*sJHOLg6x2GYCkt3RQjkVyw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*_E3ZOZpH6WS25-kXg2uHLQ.jpeg)

Je peux comme précedemment supprimer ces workers :

![](https://cdn-images-1.medium.com/max/1024/1*8ZmY5zkPccFOX7hXk4nLNA.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*4YxducYOhCr9EODkuFTk5g.png)

![](https://cdn-images-1.medium.com/max/1024/1*8kJumbue65QvAZgN00V8LA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*2dUU6KNK7uZcX4XVdK9y2w.jpeg)

qui est actif via ce port TCP,

![](https://cdn-images-1.medium.com/max/1024/1*iS1oahRXa25jKSHEDFwZeQ.jpeg)

et via chacune des IP publiques des instances Spot :

![](https://cdn-images-1.medium.com/max/1024/1*WdX_X_AElrBE4K23ThzLAw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*DqfrT9RWZT7pcMfyY8nugA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Bz3SY6sY4nWw5SGJvisn2g.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*0pwW4JtChZndIAx5HZwJ5g.jpeg)

Récapitulatif du notebook Jupyter ici :

{% gist https://gist.github.com/deep75/02f957fdddb057ed61398fbe2aaf35b7 %}

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 :

- [JuliaParallel/ClusterManagers.jl](https://github.com/JuliaParallel/ClusterManagers.jl)
- [Stochastic Differential Equations](https://docs.sciml.ai/latest/tutorials/sde_example/)

{% gist https://gist.github.com/deep75/65cd25c71776e6f35f8a71afd5009be3 %}

Un langage à suivre pusqu’il appartient au Top 10 des langages les plus appréciés des développeurs …

[Les 10 langages de programmation les plus aimés des développeurs](https://www.informatiquenews.fr/les-10-langages-de-programmation-les-plus-aimes-des-developpeurs-70641)

**_Pour aller plus loin :_**

- [Kubernetes in Julia with Kuber.jl](https://juliacomputing.com/blog/2018/12/15/kuber.html)
- [tanmaykm/ScalingJuliaWithK8s](https://github.com/tanmaykm/ScalingJuliaWithK8s)

À suivre !

![](https://cdn-images-1.medium.com/max/750/0*0gEY-AZgPCyWgpYl.jpg)