1. Introduction au NLP & Large Language Models (LLM)
Définition & Généralités
- NLP (Natural Language Processing) : Permet à l’ordinateur de comprendre, interpréter et générer le langage humain.
- LLM (Large Language Model) : Sous-ensemble des modèles NLP.
- Entraînés sur un corpus de données massif.
- Émergence de capacités avancées / émergentes (un-expected) :
- General capabilities
- In-context learning
Vue synthétique d’un LLM
graph TD NLP["NLP : Permettre aux ordinateurs de comprendre, <br>interpréter et générer le langage humain"] NLP --> LLM["LLM (Sous-ensemble des modèles NLP)"] LLM --> Entrainement["Entraînés sur un corpus de données massif"] LLM --> Scale["Scale (Nombre de paramètres)"] LLM --> Cap["Capacités émergentes (Inattendues)"] Cap --> GenCap["Capacités générales"] Cap --> InCtx["Apprentissage en contexte (In-context learning)"] Cap --> Plan["Planification (Planning)"] LLM --> BUT{"MAIS (Limites & Défis)"} BUT --> Halluc["Hallucinations"] BUT --> PureStat["Pure compréhension statistique"] BUT --> Biases["Biais (Biases)"] BUT --> CtxWin["Fenêtre de contexte (Context windows)"] BUT --> CompRes["Ressources de calcul (Computational resources)"] style BUT fill:#f9f,stroke:#333,stroke-width:2px
2. Évolution des Architectures & Transformers
Chronologie des modèles
timeline title Évolution des Architectures NLP 2017 : Architecture Transformer 2018 : GPT et BERT 2019 : GTP-2
Principes et Évolution
-
Entraînement : Sur une grande quantité de texte brut de manière auto-supervisée (self-supervised fashion).
-
Transfer Learning (Fine-tuning) : Les modèles de base devenant too generic, le transfert d’apprentissage permet de les adapter à des tâches spécifiques.
-
Architecture Transformer :
- Conjoint d’un Encoder et d’un Decoder (qui peuvent être utilisés séparément selon les tâches).
- Composant central : Attention Layer (Couche d’attention).
3. Inférence avec les LLMs
Définitions
- Inférence : Procédé d’utilisation d’un LLM entraîné pour générer un texte semblable au langage humain à partir d’un prompt d’entrée donné.
- Context Length (Longueur de contexte) : Nombre maximum de tokens que le LLM peut traiter en une seule fois Représente la taille de la mémoire de travail du modèle.
Processus d’Inférence (Prefill Phase & Decode Phase)
flowchart TD Inference["Processus d'Inférence"] --> Prefill["1. Prefill Phase"] Inference --> Decode["2. Decode Phase"] subgraph Prefill_Phase ["1. Prefill Phase (Calculatoire / Intensive)"] direction LR P1["1. Tokenization"] --> P2["2. Embedding conversion"] --> P3["3. Initial processing"] end Prefill --> Prefill_Phase subgraph Decode_Phase ["2. Decode Phase (Processus Auto-régressif)"] direction TB D_desc["Un processus auto-régressif où <br>chaque token est généré un par un."] D1["1. Attention Computation<br><i>(Comprendre le contexte)</i>"] --> D2["2. Probability calculation"] D2 --> D3["3. Token selection"] D3 --> D4["4. Continuation check"] end Decode --> Decode_Phase
4. Inférence Optimisée & Déploiement
Éléments critiques à prendre en compte
- Quadratique : Complexité en des mécanismes d’attention.
- Memory Bandwidth Bottlenecks : Goulots d’étranglement de la bande passante mémoire.
Encart Technique / Définitions Mémoire
- SRAM (Statik RAM) : Mémoire statique à accès aléatoire. Volatile, convient pour les caches avec accès très rapide.
- HBM (High Bandwidth Memory) : Interface mémoire d’ordinateur 3D-stacked. Délivre une bande passante de plusieurs téraoctets par seconde (TB/s).
Frameworks de service pour LLM
graph TD Frameworks["Frameworks pour servir les LLMs aux utilisateurs"] Frameworks --> vLLM["vLLM"] Frameworks --> TGI["TGI (Text Generation Inference)"] Frameworks --> LlamaCPP["llama.cpp"] LlamaCPP --> Llama_Detail["• Focus sur l'efficacité CPU<br>• Opt. GPU acc.<br>• Idéal pour les environnements contraints<br>• Quantization<br>• Kernel opts"] TGI --> FlashAttn["FlashAttention (CPU ⇔ GPU model)"] FlashAttn --> Flash_Detail["• Usage VRam réduit<br>• HBM ⇔ SRAM (minimise le goulot d'étranglement)<br>• Chargement direct en SRAM"] vLLM --> PagedAttn["PagedAttention"] PagedAttn --> Paged_Detail["• Divise la mémoire du modèle en blocs plus petits<br>• 'Best use of memory'<br>• Résout le goulot d'étranglement du cache KV<br>• Attention Keys & Values durant la génération de tokens pour réduire le calcul $\rightarrow$ devient énorme"]
5. Agents IA
Définition
Un Agent est un système qui exploite un modèle IA pour interagir avec son environnement afin d’atteindre un objectif défini par l’utilisateur.
- Il combine Raisonnement (Reasoning), Planification (Planning), et Exécution d’actions.
Niveaux d’autonomie (Agency level)
Composants & Principes clés
Action Tools
L’action peut être le résultat de plusieurs appels d’outils (tools calling).
Message processing des LLMs
Les LLMs ne comprennent pas la notion de chat de manière native — ils ne “se souviennent” pas d’une conversation. À chaque fois, tous les messages sont concaténés et fournis au LLM.
- System Prompt : Permet, dans le cadre d’un usage agentique, de spécifier les outils disponibles.
- To do this:
- Auto-formatting :
string(func) en signature Python comme spécification. - Generic Tool : Une classe.
- FCP (Function Calling Protocol) : Une interface d’outil unifiée (Open protocol).
- Auto-formatting :
6. Architecture & Boucle de Fonctionnement des Agents
Boucle de raisonnement (CoT / ReAct)
- CoT (Chain of Thought) / ReAct : Penser étape par étape. Utilisation d’outils entre les étapes de raisonnement.
sequenceDiagram autonumber actor Query as Utilisateur / Query participant LLM as LLM (Thought Process) participant Env as Environnement / Outils Query->>LLM: Requête (Query) loop Boucle de raisonnement (ReAct) LLM->>LLM: Think (Pensée / Raisonnement) LLM->>Env: Action (Exécution d'outil) Env-->>LLM: Observation (Signaux du système) Note over LLM: 1. Collecte le feedback<br/>2. Ajoute les résultats (Mise à jour mémoire)<br/>3. Adapte sa stratégie<br/>4. Définit les actions suivantes end
Typologie des Actions et Code Agents
graph TD Actions["Actions de l'Agent"] Actions --> Types["Types d'Agent Action"] Types --> JSON["JSON"] Types --> Code["Code"] Types --> FuncCall["Function Calling (Fine-tuning)"] Actions --> StepPause["Approche Step & Pause"] Actions --> CodeAgents["Code Agents"] CodeAgents --> CodeRisk["⚠️ Le code généré par un LLM<br>peut poser des risques de sécurité"]