⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Utiliser des conteneurs pour le développement d'IA générative

Prérequis

Terminez Conteneuriser une application d'IA générative.

Aperçu

Dans cette section, vous apprendrez à mettre en place un environnement de développement pour accéder à tous les services dont votre application d'IA générative (GenAI) a besoin. Cela inclut :

  • L'ajout d'une base de données locale
  • L'ajout d'un service LLM local ou distant
Note

Vous pouvez voir plus d'exemples d'applications GenAI conteneurisées dans les applications de démonstration de GenAI Stack.

Ajouter une base de données locale

Vous pouvez utiliser des conteneurs pour mettre en place des services locaux, comme une base de données. Dans cette section, vous mettrez à jour le fichier compose.yaml pour définir un service de base de données. De plus, vous spécifierez un fichier de variables d'environnement pour charger les informations de connexion à la base de données plutôt que de les saisir manuellement à chaque fois.

Pour exécuter le service de base de données :

  1. Dans le répertoire du dépôt cloné, renommez le fichier env.example en .env. Ce fichier contient les variables d'environnement que les conteneurs utiliseront.

  2. Dans le répertoire du dépôt cloné, ouvrez le fichier compose.yaml dans un EDI ou un éditeur de texte.

  3. Dans le fichier compose.yaml, ajoutez ce qui suit :

    • Ajoutez des instructions pour exécuter une base de données Neo4j
    • Spécifiez le fichier d'environnement sous le service serveur afin de passer les variables d'environnement pour la connexion

    Voici le fichier compose.yaml mis à jour. Tous les commentaires ont été supprimés.

    services:
      server:
        build:
          context: .
        ports:
          - 8000:8000
        env_file:
          - .env
        depends_on:
          database:
            condition: service_healthy
      database:
        image: neo4j:5.11
        ports:
          - "7474:7474"
          - "7687:7687"
        environment:
          - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD}
        healthcheck:
          test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]
          interval: 5s
          timeout: 3s
          retries: 5
    Note

    Pour en savoir plus sur Neo4j, consultez l'Image Docker officielle de Neo4j.

  4. Exécutez l'application. À l'intérieur du répertoire docker-genai-sample, exécutez la commande suivante dans un terminal.

    $ docker compose up --build
    
  5. Accédez à l'application. Ouvrez un navigateur et affichez l'application à l'adresse http://localhost:8000. Vous devriez voir une application Streamlit simple. Notez que poser des questions à un PDF provoquera l'échec de l'application car le service LLM spécifié dans le fichier .env n'est pas encore en cours d'exécution.

  6. Arrêtez l'application. Dans le terminal, appuyez sur ctrl+c pour arrêter l'application.

Ajouter un service LLM local ou distant

L'application exemple prend en charge à la fois Ollama et OpenAI. Ce guide fournit des instructions pour les scénarios suivants :

  • Exécuter Ollama dans un conteneur
  • Exécuter Ollama en dehors d'un conteneur
  • Utiliser OpenAI

Bien que toutes les plateformes puissent utiliser l'un des scénarios précédents, les performances et la prise en charge du GPU peuvent varier. Vous pouvez utiliser les directives suivantes pour vous aider à choisir l'option appropriée :

  • Exécutez Ollama dans un conteneur si vous êtes sous Linux et que vous utilisez une installation native de Docker Engine, ou sous Windows 10/11 et que vous utilisez Docker Desktop, que vous disposez d'un GPU compatible CUDA et que votre système dispose d'au moins 8 Go de RAM.
  • Exécutez Ollama en dehors d'un conteneur si vous êtes sur un Mac avec une puce Apple.
  • Utilisez OpenAI si les deux scénarios précédents ne s'appliquent pas à vous.

Choisissez l'une des options suivantes pour votre service LLM.

Lorsque vous exécutez Ollama dans un conteneur, vous devez disposer d'un GPU compatible CUDA. Bien que vous puissiez exécuter Ollama dans un conteneur sans GPU pris en charge, les performances peuvent ne pas être acceptables. Seuls Linux et Windows 11 prennent en charge l'accès GPU aux conteneurs.

Pour exécuter Ollama dans un conteneur et fournir un accès GPU :

  1. Installez les prérequis.

  2. Ajoutez le service Ollama et un volume dans votre compose.yaml. Voici le compose.yaml mis à jour :

    services:
      server:
        build:
          context: .
        ports:
          - 8000:8000
        env_file:
          - .env
        depends_on:
          database:
            condition: service_healthy
      database:
        image: neo4j:5.11
        ports:
          - "7474:7474"
          - "7687:7687"
        environment:
          - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD}
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1",
            ]
          interval: 5s
          timeout: 3s
          retries: 5
      ollama:
        image: ollama/ollama:latest
        ports:
          - "11434:11434"
        volumes:
          - ollama_volume:/root/.ollama
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  count: all
                  capabilities: [gpu]
    volumes:
      ollama_volume:
    Note

    Pour plus de détails sur les instructions Compose, consultez Activer l'accès GPU avec Docker Compose.

  3. Ajoutez le service ollama-pull à votre fichier compose.yaml. Ce service utilise l'image docker/genai:ollama-pull, basée sur le pull_model.Dockerfile de GenAI Stack. Le service extraira automatiquement le modèle pour votre conteneur Ollama. Voici la section mise à jour du fichier compose.yaml :

    services:
      server:
        build:
          context: .
        ports:
          - 8000:8000
        env_file:
          - .env
        depends_on:
          database:
            condition: service_healthy
          ollama-pull:
            condition: service_completed_successfully
      ollama-pull:
        image: docker/genai:ollama-pull
        env_file:
          - .env
      # ...

Pour exécuter Ollama en dehors d'un conteneur :

  1. Installez et exécutez Ollama sur votre machine hôte.
  2. Mettez à jour la valeur OLLAMA_BASE_URL dans votre fichier .env à http://host.docker.internal:11434.
  3. Extrayez le modèle vers Ollama à l'aide de la commande suivante.
    $ ollama pull llama2
    
Important

L'utilisation d'OpenAI nécessite un compte OpenAI. OpenAI est un service hébergé par un tiers et des frais peuvent s'appliquer.

  1. Mettez à jour la valeur LLM dans votre fichier .env à gpt-3.5.
  2. Décommentez et mettez à jour la valeur OPENAI_API_KEY dans votre fichier .env avec votre clé API OpenAI.

Exécuter votre application GenAI

À ce stade, vous avez les services suivants dans votre fichier Compose :

  • Service serveur pour votre application GenAI principale
  • Service de base de données pour stocker les vecteurs dans une base de données Neo4j
  • (facultatif) Service Ollama pour exécuter le LLM
  • (facultatif) Service Ollama-pull pour extraire automatiquement le modèle pour le service Ollama

Pour exécuter tous les services, exécutez la commande suivante dans votre répertoire docker-genai-sample :

$ docker compose up --build

Si votre fichier Compose contient le service ollama-pull, cela peut prendre plusieurs minutes pour que le service ollama-pull extraie le modèle. Le service ollama-pull mettra continuellement à jour la console avec son statut. Après avoir extrait le modèle, le conteneur du service ollama-pull s'arrêtera et vous pourrez accéder à l'application.

Une fois l'application en cours d'exécution, ouvrez un navigateur et accédez à l'application à l'adresse http://localhost:8000.

Téléchargez un fichier PDF, par exemple la Fiche de référence Docker CLI, et posez une question sur le PDF.

Selon votre système et le service LLM que vous avez choisi, la réponse peut prendre plusieurs minutes. Si vous utilisez Ollama et que les performances ne sont pas acceptables, essayez d'utiliser OpenAI.

Résumé

Dans cette section, vous avez appris à mettre en place un environnement de développement pour donner accès à tous les services dont votre application GenAI a besoin.

Related information:

Next steps

See samples of more GenAI applications in the GenAI Stack demo applications.