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).

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é"]