# Projet de Traitement Big Data sur le Cloud - Fruits! 📘 This project is also available in [English 🇬🇧](./README.md) **Source de vĂ©ritĂ©** : https://git.gregoiremureau.com/openclassroom-ai/oc-p11-bigdata-fruits ```bash git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p11-bigdata-fruits.git ``` Dataset : voir `fetch-data.sh` (hors git si volumineux). ## 📋 Contexte du projet Ce projet a Ă©tĂ© rĂ©alisĂ© dans le cadre d'une mission de consulting pour **Fruits!**, une jeune start-up AgriTech qui dĂ©veloppe des solutions innovantes pour la rĂ©colte des fruits. L'entreprise souhaite prĂ©server la biodiversitĂ© des fruits en permettant des traitements spĂ©cifiques pour chaque espĂšce grĂące au dĂ©veloppement de robots cueilleurs intelligents. ## 🎯 Objectifs ComplĂ©ter une chaĂźne de traitement d'extraction de features dans un environnement Big Data sur le cloud AWS : 1. **Reprise des travaux** : S'approprier le notebook incomplet d'un alternant prĂ©cĂ©dent 2. **ComplĂ©tion de la pipeline** : ImplĂ©menter les parties manquantes (broadcast des poids, PCA distribuĂ©e) 3. **Mise en production** : DĂ©ployer la solution sur un cluster AWS EMR conforme au RGPD 4. **Optimisation des coĂ»ts** : Maintenir les coĂ»ts d'exĂ©cution sous 10€ L'objectif Ă  long terme est de mettre en place un moteur de classification des images de fruits pour une application mobile de sensibilisation du grand public. ## 📊 DonnĂ©es Le jeu de donnĂ©es utilisĂ© est **Fruits-360**, disponible sur Kaggle : - **147 691 images** de fruits de diffĂ©rentes variĂ©tĂ©s - Format : 100x100 pixels, couleur - Jeu de test spĂ©cifique : 103 images de fruits multiples - **⚠ Note importante** : Le jeu de donnĂ©es n'est pas inclus dans ce dĂ©pĂŽt en raison de sa taille - **URL** : https://www.kaggle.com/moltean/fruits ## 📁 Structure du projet ``` ├── P11_01_notebook.ipynb ├── P11_02_images/ │ ├── Results_PCA/ # RĂ©sultats PCA au format Parquet │ │ ├── part-00000-*.parquet │ │ ├── part-00001-*.parquet │ │ └── ... │ └── test-multiple-fruits/ # Images de test (103 images) │ ├── apple.jpg │ ├── apples1.jpg │ └── ... └── P11_03_prĂ©sentation.pdf ``` ### 1. `P11_01_notebook.ipynb` **Notebook principal de traitement Big Data PySpark** Ce notebook contient la chaĂźne complĂšte de traitement : - **Initialisation** : Configuration de la SparkSession et connexion Ă  S3 - **Chargement des donnĂ©es** : Lecture des images depuis S3 en format binaire - **Transfer Learning** : Extraction de features via MobileNetV2 prĂ©-entraĂźnĂ© sur ImageNet - Suppression de la couche de classification finale - Extraction de vecteurs de 1280 dimensions - Broadcast des poids du modĂšle aux workers (ajout critique) - **RĂ©duction de dimensionnalitĂ©** : PCA distribuĂ©e avec Spark ML - RĂ©duction de 1280 → 70 dimensions - Conservation de 99,94% de la variance - Optimisation du stockage et des performances - **Export des rĂ©sultats** : Sauvegarde au format Parquet sur S3 **Optimisations clĂ©s implĂ©mentĂ©es** : - Pandas UDF Scalar Iterator pour traitement par batch - Broadcast des poids du modĂšle pour Ă©viter les chargements rĂ©pĂ©titifs - PCA distribuĂ©e avec calcul parallĂ©lisĂ© sur le cluster ### 2. `P11_02_images/` **Dossier des images et rĂ©sultats** - **Results_PCA/** : RĂ©sultats de la rĂ©duction de dimensionnalitĂ© stockĂ©s au format Parquet distribuĂ© (20 fichiers) - **test-multiple-fruits/** : 103 images de test variĂ©es utilisĂ©es pour valider la pipeline ### 3. `P11_03_prĂ©sentation.pdf` **PrĂ©sentation des rĂ©sultats** Cette prĂ©sentation synthĂ©tise : - Le contexte et les enjeux du projet - L'architecture cloud mise en place (AWS EMR, S3, EC2) - La configuration du cluster et les optimisations Spark - Le pipeline algorithmique complet - Les rĂ©sultats techniques obtenus - Les perspectives d'amĂ©lioration et de dĂ©ploiement ## đŸ› ïž Technologies utilisĂ©es ### Cloud & Infrastructure - **AWS EMR** : Cluster de calcul distribuĂ© (Spark, Hadoop) - **AWS S3** : Stockage des donnĂ©es et rĂ©sultats - **AWS EC2** : Instances m5.xlarge (1 Master + 2 Workers) - **RĂ©gion EU-West-3** (Paris) : ConformitĂ© RGPD ### Big Data & Traitement - **PySpark** : Framework de calcul distribuĂ© - **Hadoop** : SystĂšme de fichiers distribuĂ© - **Spark ML** : BibliothĂšque de Machine Learning distribuĂ©e ### Machine Learning - **TensorFlow** : Framework de deep learning - **MobileNetV2** : ModĂšle de transfer learning prĂ©-entraĂźnĂ© sur ImageNet - **PCA** : Algorithme de rĂ©duction de dimensionnalitĂ© ### Outils de dĂ©veloppement - **JupyterHub** : Environnement de dĂ©veloppement sur le cluster - **SSH Tunneling** : AccĂšs sĂ©curisĂ© au cluster - **Python 3** : Langage de programmation ## 📈 Architecture technique ### Configuration du Cluster EMR **Instances** : - 1 nƓud Master (driver Spark) - m5.xlarge - 2 nƓuds Workers (executors Spark) - m5.xlarge - RĂ©gion : eu-west-3 (Paris) **Logiciels installĂ©s** : - Hadoop 3.2.1 - Spark 3.1.2 - JupyterHub 1.4.1 - TensorFlow 2.4.1 **Bootstrap** : Installation automatique des packages Python ```bash sudo python3 -m pip install numpy pandas pillow pyarrow fsspec s3fs ``` ### AccĂšs SĂ©curisĂ© **Tunneling SSH avec Port Forwarding** : ```bash ssh -i ./emr-keypair.pem -L 8890:localhost:8890 -L 9443:localhost:9443 hadoop@[IP-EMR] ``` - Port 9443 : JupyterHub (dĂ©veloppement) - Port 8890 : Interface monitoring Spark **Avantages** : - Connexion chiffrĂ©e de bout en bout - Pas de proxy externe nĂ©cessaire - ContrĂŽle prĂ©cis des accĂšs ### Pipeline de Traitement 1. **Chargement des images** : Format binaire depuis S3, extraction des labels depuis les chemins 2. **Transfer Learning** : MobileNetV2 → features 1280 dimensions - Broadcast des poids pour distribution efficace - Pandas UDF Scalar Iterator pour traitement par batch 3. **PCA DistribuĂ©e** : RĂ©duction 1280 → 70 dimensions - Calcul distribuĂ© de la matrice de covariance - Extraction des composantes principales - Transformation des features 4. **Export** : Sauvegarde au format Parquet sur S3 ## 📝 MĂ©thodologie 1. **ComprĂ©hension** : Analyse du notebook existant et identification des manques 2. **DĂ©veloppement local** : Tests et validation sur Ă©chantillon rĂ©duit 3. **Migration cloud** : DĂ©ploiement sur cluster EMR 4. **Optimisation** : Ajout du broadcast et de la PCA distribuĂ©e 5. **Validation** : Tests sur 103 images, vĂ©rification de la scalabilitĂ© ## 💰 Gestion des coĂ»ts **Objectif** : < 10€ pour la validation **StratĂ©gies d'optimisation** : - Utilisation d'un cluster modeste (1 Master + 2 Workers) - Instances m5.xlarge (compromis performance/coĂ»t) - Tests sur Ă©chantillon rĂ©duit avant passage Ă  l'Ă©chelle - ArrĂȘt du cluster aprĂšs utilisation - Serveur local pour dĂ©veloppement et tests **RĂ©sultat** : CoĂ»t de validation < 5€ (moins d'1h de cluster) ## 🎯 RĂ©sultats ### Techniques - ✅ RĂ©duction de dimensionnalitĂ© : 1280 → 70 dimensions - ✅ Variance conservĂ©e : **99,94%** - ✅ Facteur de compression : **x4,1** - ✅ Pipeline complĂšte et fonctionnelle - ✅ Architecture scalable validĂ©e ### ConformitĂ© - ✅ **RGPD** : RĂ©gion EU-West-3 (Paris) - ✅ **SĂ©curitĂ©** : AccĂšs SSH, tunneling sĂ©curisĂ© - ✅ **CoĂ»ts** : < 10€ pour la validation ### FonctionnalitĂ©s implĂ©mentĂ©es - ✅ Broadcast des poids MobileNetV2 (manquant dans version initiale) - ✅ PCA distribuĂ©e avec Spark ML (manquant dans version initiale) - ✅ Optimisation mĂ©moire avec Pandas UDF Scalar Iterator - ✅ Export des rĂ©sultats au format Parquet ## 🚀 Perspectives ### Court terme **Optimisation de la PCA** : - 70 composantes valables pour 103 images de test - Avec dataset complet (~150k images), ajuster le nombre de composantes k - Tester diffĂ©rentes valeurs pour optimiser variance/dimensions **Classification finale** : - EntraĂźner un modĂšle de classification sur les features PCA - Évaluer les performances sur le jeu de test - Fine-tuning du nombre de composantes ### Moyen terme **DĂ©ploiement production** : - IntĂ©gration du modĂšle dans l'application mobile - Pipeline CI/CD automatisĂ©e - Monitoring des performances en temps rĂ©el - Gestion des versions du modĂšle ### Long terme **Extensions futures** : - Utilisation de l'application comme MVP marketing et technique - Collecte de nouvelles donnĂ©es terrain - AmĂ©lioration continue du modĂšle - IntĂ©gration avec les robots cueilleurs intelligents ## 🎓 CompĂ©tences dĂ©veloppĂ©es - Architecture Big Data sur le cloud (AWS EMR, S3, EC2) - Traitement distribuĂ© avec PySpark - Transfer Learning et extraction de features - RĂ©duction de dimensionnalitĂ© Ă  grande Ă©chelle - Optimisation des performances Spark - Gestion des coĂ»ts cloud - ConformitĂ© RGPD pour le stockage de donnĂ©es ## đŸ‘€ Auteur **GrĂ©goire Mureau** Date de rĂ©alisation : Octobre 2025 --- *Ce projet a Ă©tĂ© rĂ©alisĂ© dans le cadre du parcours AI Engineer*