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
NoteVous 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 :
-
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. -
Dans le répertoire du dépôt cloné, ouvrez le fichier
compose.yaml
dans un EDI ou un éditeur de texte. -
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
NotePour en savoir plus sur Neo4j, consultez l'Image Docker officielle de Neo4j.
-
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
-
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. -
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 :
-
Installez les prérequis.
- Pour Docker Engine sous Linux, installez le NVIDIA Container Toolkit.
- Pour Docker Desktop sous Windows 10/11, installez le dernier pilote NVIDIA et assurez-vous d'utiliser le backend WSL2
-
Ajoutez le service Ollama et un volume dans votre
compose.yaml
. Voici lecompose.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:
NotePour plus de détails sur les instructions Compose, consultez Activer l'accès GPU avec Docker Compose.
-
Ajoutez le service ollama-pull à votre fichier
compose.yaml
. Ce service utilise l'imagedocker/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 fichiercompose.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 :
- Installez et exécutez Ollama sur votre machine hôte.
- Mettez à jour la valeur
OLLAMA_BASE_URL
dans votre fichier.env
àhttp://host.docker.internal:11434
. - Extrayez le modèle vers Ollama à l'aide de la commande suivante.
$ ollama pull llama2
ImportantL'utilisation d'OpenAI nécessite un compte OpenAI. OpenAI est un service hébergé par un tiers et des frais peuvent s'appliquer.
- Mettez à jour la valeur
LLM
dans votre fichier.env
àgpt-3.5
. - 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:
- Dockerfile reference
- Compose file reference
- Ollama Docker image
- Neo4j Official Docker Image
- GenAI Stack demo applications
Next steps
See samples of more GenAI applications in the GenAI Stack demo applications.