openfisca / openfisca-france

French tax and benefit system for OpenFisca
https://openfisca.org/fr
256 stars 97 forks source link

Bilan Studieuse 2023-01 #2003

Open Sasha-Laniece opened 1 year ago

Sasha-Laniece commented 1 year ago

Le 19 Janvier 2023, les contributeurs d'OpenFisca-France ont été invités à participer à une réunion de contribution. Ce fut l'occasion d'échanger sur différents points et de prendre ensemble des décisions pour faire avancer le produit.

Dans cette issue, je propose de rédiger l'ensemble des sujets qui ont été abordés et des décisions qui ont été prises afin d'en garder une trace sur le repo.

Pour information, différentes équipes étaient représentées:

Après une présentation de chaque équipe, nous avons abordé différents thèmes, détaillés ci-dessous:

  1. L'harmonisation
  2. Le formatage des paramètres et la clôture de la RFC
  3. Référencement des réutilisations d'OpenFisca
  4. Utilisation de Conda au lieu de pip
  5. Échange sur les choix d'instanciation
  6. Charte d'usage - Droits et conditions
Sasha-Laniece commented 1 year ago

[ 1 - L'HARMONISATION ]

Le chantier d'harmonisation, qui vise à rapprocher les paramètres d'OpenFisca-France de ceux des Barèmes-Ipp afin d'en faire un unique répertoire, a été démarré par @benjello, @sandcha, @eraviart et @Sasha-Laniece au printemps 2021 dans cette issue: https://github.com/openfisca/openfisca-france/issues/1519

Il s'est découpé en de nombreuses actions résumées ici:

Ce qui n'est pas rapproché car inutile dans OpenFisca-France (d'après @benjello )

Pour mener à bien ce travail, il reste encore quelques étapes:

Sasha-Laniece commented 1 year ago

[ 2 - LA RFC DE NORMALISATION DES PARAMÈTRES ]

Lors de l'harmonisation, devant la disparité des formats observés dans les paramètres, on s'est posé la question des "bonnes pratiques" quant à la rédaction d'un yaml de paramètres. S'est ensuivi un débat avec de nombreux échanges tous résumés dans la RFC https://github.com/openfisca/openfisca-france/issues/1672 . Malheureusement le timing et la charge de travail des différents participants font qu'elle n'a pas été clôturée et les choses sont restées en suspens. Profitant de la présence de nombreux contributeurs lors de la Studieuse, nous avons voulu finaliser cette RFC.

Les actions suivantes ont été prises:

1 - Renommage et normalisation des champs des paramètres, avec précision de leur définition dans cette PR https://github.com/openfisca/openfisca-france/issues/1998 . En bref:

2 - La normalisation du champ reference a fait l'objet d'un débat à part, dont les conclusions sont ici : https://github.com/openfisca/openfisca-france/issues/2002 . Les informations cruciales à retenir sont:

En pratique, on change le format pour mettre les références à côté de la value qu'elles concernent:

label: SMIC brut mensuel
values:
  2022-08-01:
    value: 1678.95
    reference:
        title: Arrêté du 29/07/2022
        href: https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000046113517
  2023-01-01:
    value: 1709.28
    reference:
        title: Décret 2022-1608 du 22/12/2022
        href: https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000046780043
metadata:
    short_label: SMIC brut mensuel
    last_value_still_valid_on: "2022-08-03"
    label_en: Minimum wage - SMIC (1970 -)

Pour mener à bien ce travail, il reste encore quelques étapes:

Sasha-Laniece commented 1 year ago

[ 3 - RÉFÉRENCEMENT DES PRODUITS ]

Suite à la demande de @MattiSG , chaque équipe a fourni des informations pour enrichir le site OpenFisca.org de toutes les applications du modèle. Le dépôt de modification du site openfica est ici : https://github.com/openfisca/openfisca.org La vitrine se voit ici : https://openfisca.org/fr/showcase/

Sasha-Laniece commented 1 year ago

[ 4 - UTILISATION DE CONDA AU LIEU DE PIP ] Suite au travail de @benoit-cty dans ces PRs : https://github.com/openfisca/openfisca-france/pull/1778, https://github.com/openfisca/openfisca-france/pull/1779, https://github.com/openfisca/openfisca-france/pull/1786 et https://github.com/openfisca/openfisca-france/pull/17863 , on peut désormais publier OpenFisca-France dans un package Conda.

Le but n'est pas de remplacer pip mais d'offrir une alternative aux personnes qui le souhaitent. L'équipe LexImpact utilise pip pour le développement en local et Conda sur le Centre d'Accès Sécurisé aux Données, CASD. L'IPP utilise Conda pour installer Python mais utilise ensuite pip à l'intérieur de Conda.

Les prochaines étapes pour remplir ces missions:

Sasha-Laniece commented 1 year ago

[ 5 - ÉCHANGE SUR LES CHOIX D'INSTANCIATION ]

CR d' @Olivier-Bernard-IMSA : " Cet atelier était à l’initiative de MesDroitsSociaux. Nous nous sommes retrouvés à 2, @benoit-cty et moi pour échanger sur la manière dont nous utilisons et instancions le moteur OF pour répondre à nos besoins. J’en profite pour le remercier pour toutes les informations et pistes d’améliorations qu’il a partagé concernant Python et le moteur OF, notre expertise côté MDS étant plus sur les architectures à base de Java. Côté MDS, le besoin d’échanger sur cet atelier vient les difficultés que nous avons rencontré sur des tests de performances où notre service de simulation basé sur OF est notre facteur limitant de monté en charge. Les temps de réponses sont limitants et la consommation en mémoire nous interroge vis-à-vis de l’exploitabilité de la plateforme MDS. Nos usages du moteur sont unitaires : un utilisateur va demander une simulation d’aide sur MDS à partir des données qui lui sont demandées et ou récupérées par MDS dans la sphère sociale et publique. Nous utilisons l’API Rest d’OF et OF est instancié dans un conteneur orchestré en tant que « pod » dans une infrastructure Cloud privé basée sur Kubernetes administrée par Rancher, et sur des nodes qui sont des VMs sur des ESXs VMWare. Les appels sont internes au cluster Kubernetes. Nous avons été surpris par l’usage mémoire des instances d’OF (> 4 à 6GB), car c’est un service de calcul stateless, et que nous avons une bonne expérience sur côté moteur de calcul de prestations avec l’usage ODM, pour la tarification des feuilles de soins et pour la simulation et calcul de retraite, qui consomme surtout de la cpu. Cet usage de mémoire nous interroge sur la pertinence de conserver OF en pod dans Kubernetes au regard d’une instanciation sur des VMs plus stables quitte à être moins flexible/scalables. En effet, idéalement un service fournit par Kubernetes doit pouvoir démarrer très rapidement et être déplaçable facilement d’un nœud à un autre pour s’adapter aux besoins d’élasticité du cluster et de la disponibilité de ces nodes/nœuds. Or nos nodes sont actuellement des VMs relativement petite en mémoire, ce qui limite la capacité de Kubernetes à instancier des pods OF, et peut poser des difficultés d’exploitabilité : trouver un nœud suffisamment vide pour y instancier un pods OF par exemple.

Côté LexImpact, le cas d’usage métier est bien différent : le moteur OF est sollicité sur des jeux de données volumineux (et non pas unitaire par individu), pour évaluer sur des segments de population des impacts sur le budget de l’état de réformes. Ils l’utilisent donc essentiellement dans un cadre de calcul matriciel. LexImpact n’utilise par l’API d’OF, ils ont fait le choix d’encapsuler OF dans leur produit et de mettre à disposition des services via une API Rest basé sur le framework Python FastAPI pour assurer de meilleures performances (ils considèrent l’API OF actuelle assez obsolète) et une généricité dans l’API qui répond mieux à leurs besoins. Ils instancient cette application via une plateforme Proxmox, et expose le service via Gunicorn qui répartit le travail sur et 4 instances de conteneurs (LXC) contenant l’application. Afin de limiter les sollicitation inutiles, ils utilisent un cache Redis pour stocker les résultats au regard des requêtes entrantes et les resservir. Le monitoring est assuré via Prometheus (utilisé aussi côté MDS), FastApi y étant câblé. Pour finir, ils utilisent le protocole Websocket entre la partie IHM côté navigateur vers l’applicatif afin d’assurer un affichage progressif des informations.

Benoit a aussi rencontré des problèmes de mémoire an arrivant jusqu’à 8GB, et ce malgré le mécanisme de débordement sur disque.
Il existe en effet un mécanisme d’OF de débordement sur disque, avec des possibilités de choix d’éviction des objets , qui se paramètre via un flag memory_config. Une trace est produite au démarrage permettant de vérifier si le mécanisme est actif et le débordement s’active à partir de 95% d’usage de la mémoire. Il a utilisé un outil d’exploration de la mémoire, et c’est une piste à explorer un peu plus (par exemple https://blog.octo.com/rendre-son-code-python-performant-grace-au-profiling/ ), comme sur l’usage du GC. Se posera aussi probablement des impacts sur l’architecture du produit OF nécessaires pour servir des cas d’usages qui sont potentiellement très différent : appels unitaires avec forte exigence réponse rapide et peu de besoin de matriciel versus appel unitaire avec fort volume de donnée.

Il a aussi constaté des temps de démarrage long. Il pense que c’est dû au mode de chargement de paramètres, et il pense que l’on pourrait beaucoup gagner en optimisant la fourniture des paramètres, comme par exemple de les fournir sous forme d’objets sérialisés via Pickle. "

Les prochaines étapes pour remplir ces missions:

Sasha-Laniece commented 1 year ago

[ 6 - CHARTE D'USAGE - DROITS ET CONDITIONS ] Dans cet atelier mené par @MattiSG , il a été rappelé qu'il faut:

Obligations :

ceci est une ébauche, @MattiSG ou @sandcha je vous laisse corriger et compléter

MattiSG commented 1 year ago

Un immense merci @Sasha-Laniece pour ce travail de formalisation et de consolidation ! C'est très précieux 🙇

Harmonisation

Ces modifications […] doivent aussi faire l'objet d'une modification dans openfisca-core .

J'attire l'attention sur le fait que les noms choisis devront être discutés plus largement dans ce cadre ; on n'est donc pas à l'abri d'un renommage ultérieur, mais le cas échéant probablement meilleur grâce à la participation de personnes anglophones 🙂

on renomme le champ href en url

Ce point n'est pas présent dans l'exemple donné 🙂

API

Je suis personnellement très favorable à une modernisation du moteur de l'API web.

Charte