Ce projet a été réalisé dans le cadre du cours "Programmation parallèle pour le Machine Learning", dispensé par Xavier Dupré et Matthieu Durut à l'ENSAE Paris. Il porte sur la parallélisation sur CPU d'une séquence d'opérations matricielles extraites d'un modèle Llama. Plus précisément, à partir d'une matrice A
, il s'agit de paralléliser la séquence d'opérations sigmoid(A) * A
en C++, et de comparer les performances de cette méthode à son équivalent codé en torch
. Les analyses effectuées sont détaillées dans rapport_sigmul.pdf
.
Tout d'abord, clonez le dépôt:
git clone https://github.com/matthieu-bricaire/parallel-programming-ensae.git
Si vous utilisez conda, créez un nouvel environnement :
conda create -n env_name python==3.12.2
Puis, installez-y les requirements:
pip install -r requirements.txt
Ce dépôt contient les codes nécessaires à la création d'une extension Python (sigmulib
), basée sur des fonctions codées en C++ qui parallélisent la séquence d'opérations sigmoid(A) * A
:
sigmul.cpp
: version C++ desigmoid(A) * A
.interface.pyx
: version Cython desigmoid(A) * A
, et déclaration en Cython de la version C++ basée sursigmul.cpp
setup.py
: code relatif à la création de l'extension
Pour créer l'extension, il suffit d'exécuter la commande suivante :
python setup.py build_ext --inplace
Cette commande crée :
- Un fichier
interface.cpp
(correspondant au fichierinterface.pyx
) - Un dossier
build/
, contenant des fichiers spécifiques liés à l'extension construite - Le fichier
sigmulib.cpython-312-x86_64-linux-gnu.so
, qui correspond à l'extension qui sera appelée en python.
Une fois l'extension construite, elle peut être importée et utilisée en python avec la commande import sigmulib
.
Ce dépôt contient également les codes associés aux expériences et aux analyses menées:
rapport_sigmul.pdf
: détail des analyses effectuéestimes_comparisons.ipynb
: comparaison des performances des différentes stratégiesutils.py
: regroupement de fonctions utilisées lors des analyses