.. _l-feuille-de-route-2021-3A: Feuille de route 2021-2022 (3A) =============================== .. contents:: :local: :depth: 1 :ref:`Page principale du cours ` Plan ++++ Les cours et séances se déroulent sur 6 séances de 3h mardi après-midi. Intervenants ++++++++++++ `Xavier Dupré `_, Matthieu Durut. Notes +++++ Liens, notebooks prévus pour les séances pratiques. .. contents:: :local: Séance 1 ^^^^^^^^ * `Introduction to Algorithms `_ * `Latency Numbers Every Programmer Should Know `_ * `What Every Computer Scientist Should Know About Floating-Point Arithmetic `_ * `What Every Programmer Should Know About Memory `_ * `Introduction to High Performance Scientific Computing `_ Séance 2 ^^^^^^^^ Les modèles de deep learning dépassent maintenant le milliards de coefficients. Le premier modèle `BERT `_ en avait 340 millions. Comment estime-t-on les coefficients de ces mastodontes ? 1 milliards de coefficients, c'est plus de dix ans de calculs sur une seule carte GPU. * Tour d'horizon * IA, machine learning, deep learning * Apprentissage de modèle, déploiement de modèles * Langage interprété, bas niveaux * CPU, GPU, ... * Course logicielle matérielle (`A100 `_) * Machine learning open source ? * Le graal : concevoir un modèle avec un outil simple et faisant des calculs rapides. * Ecrire des calculs rapides exige une connaissance des processeurs * Ecrire un modèle performant exige des connaissances mathématiques * Mécanicien et pilote sont des métiers devenus différents * La simplicité, documentation * `API scikit-learn `_ * `pytorch tutorial `_ * Illustrations * Calcul : produit matriciel de 3 matrices ? `Associativity and matrix multiplication `_, (`opt-einsum `_) * Fonction einsum : `Einsum decomposition `_, `bsnh,ctnh->nts `_ `bsnh,btnh->bnts `_ * Python et C++ * Un atout pour une thèse * Un exemple : `td3a_cpp `_ * Optimiser les calculs sur CPU * Parallélisation * `Threads `_ * `Processus `_ * Cloud * `sérialisation `_ * `AVX `_ * `Cache `_ * Synchronisation et `GIL `_ (voir aussi `GIL `_) * Garbage Collector * :epkg:`Cython`, :epkg:`pybind11` * Etude de cas * dot, matmul, syntaxe * `prange `_ * `AVX `_ * branching * processeur, cache et blocs de mémoire contigüs (`mlas `_) * Outils du développeur * Outils du dévelopeur : compilateur, éditeur (Visual Studio Code) * git, notion d'intégration continue * `Fixes #13173, implements faster polynomial features for dense matrices #13290 `_ * Profileur * `cProfile `_ * `py-spy `_ * `pyinstrument `_ * `Nsight `_ (GPU) * Culture * Librairies `BLAS `_, `LAPACK `_ - des algorithmes hyper-optimisés au long des décennies de leur existence * `JIT `_ * `Quantization `_ * `Sparse `_ * Streaming Algorithm: :ref:`BJKSTrst`, `river `_, :ref:`l-ml2a-streaming-algorithm`, :ref:`l-ml2a-streaming-ml`, notes de cours : `Data Stream Algorithm `_ Séance 3 ^^^^^^^^ * Modèle de mémoire ( * Description de la stack, pile d'appel, stackoverflow * Threads * GPU, bloc, threads, synchronisation Séance 4 ^^^^^^^^ **Paralléliser des calculs avec pytorch** :epkg:`pytorch` est une librairie qui a su séduire beaucoup de développeurs grâce à un design intuitif et à une documentation de bonne qualité. Aujourd'hui se pose la question de créer un code rapide en dehors d'un système existant ou d'étendre une librairie qui offre déjà beaucoup de fonctionnalités. L'option qui est proposée ici est celle d'étendre *pytorch* dans la mesure où les dernières versions de la librairies ont été pensées pour faciliter ce scénario. On peut utilier du code C++ depuis python ou utiliser du code Python depuis C++. C'est le premier scénario qui est illustré. torch * `Custom C++ and CUDA Extensions `_ * `Pytorch C++ API `_ * `td3a_cpp_deep `_ CUDA * `CUDA C/C++ Basics `_ * `CUDA Thread Indexing Cheatsheet `_ * `CUDA Thread Basics `_ * `CUDA 11 Features Revealed `_ CUDA streams * `CUDA Streams And Concurrency `_ Visual Studio * `NVIDIA Nsight Integration `_ **Combiner pytorch avec autre chose** La librairie pytorch utilise une structure de données appelée *Tensor* pour représenter un vecteur, une matrice... Elle est décrite par : * un vecteur *shape* (les dimensions) * un vecteur *strides* (sous ensemble) * un emplacement, une adresse * un type (float32, float64, double, int64, ...) * un device (CPU, GPU, ...) * un numéro de device (s'il y a plusieus GPU) * un destructeur permettant de détruire la structure (pas les données) S'échanger fes informations d'une librairie à une autre, dans le plus simple des cas veut dire les copier. Mais ça prend trop de temps d'où l'introduction d'une structure commune d'échange (API). Elle a été récemment introduite dans les dernières versions de torch. Elle est encore en projets dans numpy. * `DLPack `_ * `torch.dlpack `_ * about numpy `ENH: Implement the DLPack Array API protocols for ndarray. `_ * Notion de `capsule en python `_ **Traiter un jeu gros de données** La base `Open DAMIR : base complète sur les dépenses d'assurance maladie inter régimes `_ est sans doute une base très intéressante mais aussi un défi quand on souhaite s'y attaquer. Streaming local * `sqlite3 `_, `python.sqlite3 `_ * :epkg:`pandas_streaming` : surcouche autour des itérateur `pandas.read_csv `_ * serveur :epkg:`SQL` (PostGreSQL Streaming distant * `dask `_, s'interface avec scikit-learm * `spark `_ Voir également `awesome-streaming `_. **Histoires, problèmes résolus** * nom des quarties de paris * fusion d'annuaire, géocoding * tournée du camion poubelle * streaming, :epkg:`pandas_streaming` * `complétion `_ * `Distance entre deux graphes `_ * `arbre de décision et réseau de neurones `_, `Un arbre de décision en réseaux de neurones `_ * `régression quantile `_ * `plus proche voisins `_ * parallélisation * einsum * `Compares implementations of Einsum `_ * `Einsum decomposition `_ * `Decompose einsum into numpy operators `_ Séance 5 ^^^^^^^^ Séance 6 ^^^^^^^^