Skip to content

topk-intelligent-system/Kubeflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Partie 3 : Kubeflow Pipelines pour l'Orchestration ML

Cette section détaille la mise en place et l'utilisation de Kubeflow Pipelines (KFP) pour orchestrer les étapes d'analyse, de scoring et d'enrichissement LLM de notre système d'intelligence e-commerce.

Objectif

Créer un pipeline reproductible et automatisable pour :

  1. Charger les données produits brutes depuis MongoDB.
  2. Calculer les scores et identifier les produits Top-N.
  3. Enrichir les données de ces produits Top-N avec des résumés générés par un LLM.

État d'Avancement Actuel

  • Installation de l'environnement local :
    • Docker est requis.
    • Un cluster Kubernetes local via Minikube a été configuré.
    • Kubeflow Pipelines (version standalone/platform-agnostic ciblée : [par exemple, v1.8.5 ou la version que vous avez installée]) a été déployé sur Minikube. La plupart des pods KFP sont en statut Running. (Note: Le pod proxy-agent peut présenter des erreurs sans impacter l'exécution de base des pipelines, mais peut affecter la visualisation des logs dans l'UI).
  • Scripts Python adaptés pour le pipeline :
    • load_from_mongo_pipeline.py : Lit les données de MongoDB, extrait les features (y compris main_image_url), et sauvegarde en CSV. Prend ses configurations via arguments de ligne de commande.
    • enrich_llm_pipeline.py : Lit le CSV de l'étape précédente, calcule les scores, identifie les Top-N produits, appelle l'API Hugging Face (pour HuggingFaceH4/zephyr-7b-beta ou similaire) pour générer des résumés pour ces Top-N, et sauvegarde le DataFrame enrichi complet en CSV. Prend ses configurations (chemins, token HF, nombre de Top-N) via arguments de ligne de commande.
  • Conteneurisation :
    • Dockerfile créés pour load_from_mongo_pipeline.py (image load-mongo-component:v1).
    • Dockerfile créés pour enrich_llm_pipeline.py (image enrich-llm-component:v1).
    • Ces images ont été construites localement en utilisant l'environnement Docker de Minikube (eval $(minikube docker-env)).
  • Définition du Pipeline KFP :
    • Le script ecommerce_pipeline.py définit deux composants KFP (load_mongo_data_op et enrich_llm_data_op) en utilisant le décorateur @container_component et les images Docker construites.
    • Il définit un pipeline KFP (product_enrichment_pipeline) qui enchaîne ces deux composants.
    • Le pipeline a été compilé avec succès en product_enrichment_pipeline.yaml.
  • Exécution Initiale :
    • Le fichier product_enrichment_pipeline.yaml a été uploadé dans l'UI de Kubeflow Pipelines.
    • Une exécution ("Run") a été lancée.
    • L'étape load-mongo-data-op a été observée en statut Running.

Comment Consommer et Exécuter le Pipeline Actuel

  1. Prérequis (doivent être déjà en place) :

    • Minikube démarré : minikube start --driver=docker --cpus=X --memory=YYYYm (utiliser les mêmes paramètres que lors de l'installation de KFP).
    • Kubeflow Pipelines doit être déployé et accessible sur Minikube.
    • Les images Docker load-mongo-component:v1 et enrich-llm-component:v1 doivent exister dans l'environnement Docker de Minikube (si elles ont été construites avec eval $(minikube docker-env) et non poussées vers un registre).
    • MongoDB doit être accessible depuis les pods Minikube (typiquement via host.minikube.internal si MongoDB tourne sur la machine hôte).
    • Un fichier .env à la racine du projet contenant HUGGINGFACE_API_TOKEN (bien que pour l'exécution KFP, il sera passé en paramètre).
  2. Accéder à l'UI de Kubeflow Pipelines :

    • Ouvrir un terminal et exécuter :
      kubectl port-forward -n kubeflow svc/ml-pipeline-ui 8080:80
    • Ouvrir http://localhost:8080 dans un navigateur.
  3. Uploader le Pipeline (si pas déjà fait ou si modifié) :

    • Dans l'UI KFP, aller à la section "Pipelines".
    • Cliquer sur "+ Upload pipeline".
    • Sélectionner le fichier kubeflow_pipeline/product_enrichment_pipeline.yaml (ou le chemin où vous l'avez sauvegardé).
    • Donner un nom et cliquer sur "Create".
  4. Créer et Lancer une Exécution ("Run") :

    • Trouver le "ECommerce Product Enrichment Pipeline" dans la liste des pipelines et cliquer dessus.
    • Cliquer sur "+ Create run".
    • Remplir les paramètres du pipeline :
      • mongo_uri: Ex: mongodb://host.minikube.internal:27017/ (ajuster si authentification ou base de données spécifique dans l'URI).
      • mongo_db: Ex: ecommerce_db (le nom de votre base de données).
      • mongo_collection: Ex: products (le nom de votre collection).
      • hf_token: Votre token API Hugging Face (ex: hf_xxxxxxxx).
      • num_top_to_enrich: Nombre de produits à enrichir (ex: 15).
    • Cliquer sur "Start".
  5. Surveiller et Déboguer l'Exécution :

    • Suivre la progression des étapes (load-mongo-data-op puis enrich-llm-data-op) dans l'UI.
    • Consulter les logs de chaque étape directement dans l'UI pour voir les print() de vos scripts et identifier les erreurs.
    • Si les logs de l'UI sont inaccessibles (à cause du proxy-agent), utiliser kubectl :
      • kubectl get pods -n kubeflow (pour trouver le nom du pod de l'étape en cours d'exécution ou en erreur).
      • kubectl logs <nom-du-pod> -n kubeflow.

Travail Restant pour Compléter la Partie 3

  1. Assurer la Réussite Complète du Pipeline Actuel :

    • Vérifier la connexion à MongoDB depuis load-mongo-data-op : S'assurer que l'URI host.minikube.internal fonctionne et que le bindIp de MongoDB est correctement configuré sur la machine hôte (doit écouter sur 0.0.0.0 ou l'IP du réseau Docker, pas seulement 127.0.0.1).
    • Vérifier la création et le passage de l'artefact products_data_csv entre load-mongo-data-op et enrich-llm-data-op. L'UI de KFP devrait montrer cet artefact lié.
    • Assurer le bon fonctionnement de enrich-llm-data-op :
      • Vérifier qu'il lit correctement le CSV d'entrée.
      • Vérifier que le token Hugging Face est bien reçu et utilisé pour les appels API.
      • Confirmer que les appels LLM réussissent et que les résumés sont générés.
      • Vérifier la création de l'artefact de sortie enriched_data_csv.
    • (Optionnel) Résoudre le problème du proxy-agent pour faciliter la visualisation des logs dans l'UI, si cela s'avère être un bloqueur.
  2. Gestion des Secrets Kubernetes pour les Identifiants :

    • Objectif : Éviter de passer des secrets (comme mongo_uri avec mot de passe, ou hf_token) en clair comme paramètres de pipeline.
    • Action :
      • Créer des Secrets Kubernetes :
        kubectl create secret generic mongo-creds --from-literal=uri='mongodb://user:pass@host.minikube.internal:27017/mydb' -n kubeflow
        kubectl create secret generic hf-api-token --from-literal=token='hf_YOURTOKEN' -n kubeflow
      • Modifier les définitions des composants KFP (@container_component) pour qu'ils montent ces secrets comme variables d'environnement.
        # Exemple pour enrich_llm_data_op
        # ...
        # hf_api_token_param: str # Ne plus le passer en argument direct du pipeline
        # ...
        # Dans la fonction product_enrichment_pipeline :
        # enrich_task = enrich_llm_data_op(...)
        # enrich_task.add_env_variable(
        #     V1EnvVar(name="HUGGINGFACE_API_TOKEN_PIPELINE", # Le script lira cette variable d'env
        #              value_from=V1SecretKeySelector(name="hf-api-token", key="token"))
        # )
        # (Nécessite d'importer V1EnvVar, V1SecretKeySelector de kubernetes.client.models ou via kfp.dsl)
        # Alternativement, KFP SDK v2 a des manières plus directes de gérer les secrets.
        # Voir la documentation KFP pour "using secrets".
      • Modifier les scripts Python dans les conteneurs pour lire ces variables d'environnement (ex: os.getenv("HUGGINGFACE_API_TOKEN_PIPELINE")).
  3. Optimisation et Robustesse du Pipeline :

    • Gestion des Erreurs : Améliorer la gestion des erreurs dans les scripts Python pour qu'ils retournent des codes de sortie clairs en cas d'échec, facilitant le diagnostic dans KFP.
    • Paramétrage : Rendre plus de choses configurables via les paramètres du pipeline KFP (ex: N_TOP_PRODUCTS_TO_ENRICH). (Vous l'avez déjà fait pour num_top_to_enrich).
    • Image Pull Policy : Si vous ne poussez pas vos images vers un registre public/privé, assurez-vous que imagePullPolicy: IfNotPresent ou Never est bien appliqué pour les images locales dans Minikube. Cela peut se faire en modifiant le YAML du pipeline compilé ou via des options du SDK KFP si disponibles pour @container_component ou en utilisant task.set_image_pull_policy('Never') après l'instanciation de la tâche dans le pipeline.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages