From da6c8758384f5a448a181de283ae219b27018b7a Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 08:19:28 +0200 Subject: [PATCH 1/9] build : adding the initial basic setup for an autoconfig cloud GPU instance --- external-ai-services/README.md | 56 ++++++++++++++++ external-ai-services/cloud-init.yaml | 0 external-ai-services/setup-no-nginx/README.md | 3 + external-ai-services/setup-no-nginx/setup.sh | 23 +++++++ .../setup-openwebui/README.md | 3 + external-ai-services/setup-openwebui/setup.sh | 66 +++++++++++++++++++ external-ai-services/setup/setup.sh | 66 +++++++++++++++++++ 7 files changed, 217 insertions(+) create mode 100644 external-ai-services/README.md create mode 100644 external-ai-services/cloud-init.yaml create mode 100644 external-ai-services/setup-no-nginx/README.md create mode 100644 external-ai-services/setup-no-nginx/setup.sh create mode 100644 external-ai-services/setup-openwebui/README.md create mode 100644 external-ai-services/setup-openwebui/setup.sh create mode 100644 external-ai-services/setup/setup.sh diff --git a/external-ai-services/README.md b/external-ai-services/README.md new file mode 100644 index 0000000..3b783ff --- /dev/null +++ b/external-ai-services/README.md @@ -0,0 +1,56 @@ +# Documentation des Services d'IA Externes + +Ce répertoire contient tous les documents relatifs à l'infrastructure externe de l'intelligence artificielle (IA) utilisée par notre application. Cela inclut des scripts, des configurations et des informations utiles pour déployer et gérer le serveur IA. + +## Solution + +Pour l'utilisation de VApp, nous avons opté pour un serveur externe exécutant Ollama ([https://github.com/ollama/ollama](#)). Cette solution offre une grande liberté dans le choix des modèles et propose déjà une large gamme de modèles avec diverses méthodes d'optimisation. L'accès via une API assure également une flexibilité certaine en cas d'intégration plus large à l'avenir. Pour plus d’informations, consultez la racine du dépôt ([ajouter lien](#)). + +Nous avons externalisé cette ressource via des serveurs externes. Le répertoire ci-dessous propose une solution simple, automatisée et répliquable pour démarrer une instance. + +## Structure du Répertoire + +- **setup/** : Setup basique avec le support d'un systeme de token d'authentication + - `setup.sh` : Script principal pour installer et configurer l'environnement Nginx et Ollama. +- **setup-openwebui/** : Setup avec le support de openwebui + - `setup.sh` : Script principal pour installer et configurer l'environnement Nginx, Ollama et Open WebUI. **(work in progress)** +- **setup-no-nginx/** : Setup sans nginx et sans token d'authentication + - `setup.sh` : Script principal pour installer et configurer l'environnement Ollama. +- `cloud-init.yaml` : Script principal pour installer et configurer automatiquement une instance. **(work in progress)** + +## Étapes de Configuration + +### Installation avec cloud-init + +```bash +wget https://raw.githubusercontent.com/your-repo/path/cloud-init.yaml -O /tmp/cloud-init.yaml +``` + +### Installation en directe + +Vous pouvez installer le script via la commande suivante avec une configuration **avec token d'authentication**. + +```bash +export BEARER_TOKEN="YOUR_TOKEN" +echo $BEARER_TOKEN +chmod +x /path/to/setup.sh +sudo bash -c "export BEARER_TOKEN=$BEARER_TOKEN; /path/to/setup.sh" +``` + +___ + +Vous pouvez installer le script via la commande suivante avec une configuration **sans token d'authentication**. + +```bash +chmod +x /path/to/setup.sh +sudo bash -c "/path/to/setup.sh" +``` + +## Simple test + +

Pour vous assurer que tout fonctionne correctement, vous pouvez réaliser les tests suivants

+ +```bash +curl -X POST http://YOUR_INSTANCE_IP/api/generate -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_TOKEN" -d '{"model": "llama3.2:1b", "prompt": "Why is the sky blue?", "stream": false}' +``` + \ No newline at end of file diff --git a/external-ai-services/cloud-init.yaml b/external-ai-services/cloud-init.yaml new file mode 100644 index 0000000..e69de29 diff --git a/external-ai-services/setup-no-nginx/README.md b/external-ai-services/setup-no-nginx/README.md new file mode 100644 index 0000000..9e51c09 --- /dev/null +++ b/external-ai-services/setup-no-nginx/README.md @@ -0,0 +1,3 @@ +# Work in progress + +ollama will be accesible via the port 11434. \ No newline at end of file diff --git a/external-ai-services/setup-no-nginx/setup.sh b/external-ai-services/setup-no-nginx/setup.sh new file mode 100644 index 0000000..879bfec --- /dev/null +++ b/external-ai-services/setup-no-nginx/setup.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Mettre à jour les paquets et mettre à niveau le système +sudo apt update && sudo apt upgrade -y + +# Installer CUDA Toolkit pour NVIDIA +sudo apt install nvidia-cuda-toolkit -y + +# Télécharger et installer ollama +curl -fsSL https://ollama.com/install.sh | sh + + +# Attends que Ollama soit prêt (vous pouvez ajuster les délais selon vos besoins) +echo "Attente de l'initialisation d'Ollama..." +while ! curl -s http://localhost:11434/health &> /dev/null; do + sleep 5 + echo "En attente... Vérifiez si Ollama est prêt." +done + +ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan + + +echo "Setup completed successfully!" \ No newline at end of file diff --git a/external-ai-services/setup-openwebui/README.md b/external-ai-services/setup-openwebui/README.md new file mode 100644 index 0000000..2863781 --- /dev/null +++ b/external-ai-services/setup-openwebui/README.md @@ -0,0 +1,3 @@ +# Work in progress + +Setup with openwebui support and ollama with token auth. \ No newline at end of file diff --git a/external-ai-services/setup-openwebui/setup.sh b/external-ai-services/setup-openwebui/setup.sh new file mode 100644 index 0000000..8fb9a49 --- /dev/null +++ b/external-ai-services/setup-openwebui/setup.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Mettre à jour les paquets et mettre à niveau le système +sudo apt update && sudo apt upgrade -y + +# Installer CUDA Toolkit pour NVIDIA +sudo apt install nvidia-cuda-toolkit -y + +# Télécharger et installer ollama +curl -fsSL https://ollama.com/install.sh | sh + + +# Attends que Ollama soit prêt (vous pouvez ajuster les délais selon vos besoins) +echo "Attente de l'initialisation d'Ollama..." +while ! curl -s http://localhost:11434/health &> /dev/null; do + sleep 5 + echo "En attente... Vérifiez si Ollama est prêt." +done + +ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan + +# Installer Nginx +sudo apt update && sudo apt install nginx -y + +# Configurer Nginx +IP=$(hostname -I | awk '{print $1}') +TOKEN=$BEARER_TOKEN + +cat < /dev/null; do + sleep 5 + echo "En attente... Vérifiez si Ollama est prêt." +done + +ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan + +# Installer Nginx +sudo apt update && sudo apt install nginx -y + +# Configurer Nginx +IP=$(hostname -I | awk '{print $1}') +TOKEN=$BEARER_TOKEN + +cat < Date: Tue, 15 Oct 2024 13:28:50 +0200 Subject: [PATCH 2/9] chore : editing file name for better syntax --- external-ai-services/README.md | 2 +- external-ai-services/setup-default/README.md | 3 +++ external-ai-services/{setup => setup-default}/setup.sh | 0 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 external-ai-services/setup-default/README.md rename external-ai-services/{setup => setup-default}/setup.sh (100%) diff --git a/external-ai-services/README.md b/external-ai-services/README.md index 3b783ff..77dcfc3 100644 --- a/external-ai-services/README.md +++ b/external-ai-services/README.md @@ -10,7 +10,7 @@ Nous avons externalisé cette ressource via des serveurs externes. Le répertoir ## Structure du Répertoire -- **setup/** : Setup basique avec le support d'un systeme de token d'authentication +- **setup-default/** : Setup basique avec le support d'un systeme de token d'authentication - `setup.sh` : Script principal pour installer et configurer l'environnement Nginx et Ollama. - **setup-openwebui/** : Setup avec le support de openwebui - `setup.sh` : Script principal pour installer et configurer l'environnement Nginx, Ollama et Open WebUI. **(work in progress)** diff --git a/external-ai-services/setup-default/README.md b/external-ai-services/setup-default/README.md new file mode 100644 index 0000000..24707cd --- /dev/null +++ b/external-ai-services/setup-default/README.md @@ -0,0 +1,3 @@ +# Work in progress + +l'installation par défaut pour l'usage de LLM par VApp \ No newline at end of file diff --git a/external-ai-services/setup/setup.sh b/external-ai-services/setup-default/setup.sh similarity index 100% rename from external-ai-services/setup/setup.sh rename to external-ai-services/setup-default/setup.sh From ec1c85aa1ef1c7430f60a8cdf819ff0dfa70d3f7 Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 14:37:32 +0200 Subject: [PATCH 3/9] build : adding first it of cloud-init --- external-ai-services/cloud-init.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/external-ai-services/cloud-init.yaml b/external-ai-services/cloud-init.yaml index e69de29..47cc685 100644 --- a/external-ai-services/cloud-init.yaml +++ b/external-ai-services/cloud-init.yaml @@ -0,0 +1,11 @@ +#cloud-config + +users: + - name: ubuntu + ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... user1@example.com + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQB... user2@example.com +runcmd: + - export BEARER_TOKEN="YOUR_BEARER_TOKEN" + - echo $BEARER_TOKEN + - curl -fsSL https://raw.githubusercontent.com/betagouv/VApp/refs/heads/init-instance-ai/external-ai-services/setup-default/setup.sh | sh \ No newline at end of file From c2e93455b6d90f3946c6a27c04c29a8b823f9801 Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 14:39:36 +0200 Subject: [PATCH 4/9] fix : cloud-init install ollama but don't launch it. Adding a commande line that ensure ollama's launch. Dosn't impact the previous versions of setup.sh --- external-ai-services/setup-default/setup.sh | 27 +++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/external-ai-services/setup-default/setup.sh b/external-ai-services/setup-default/setup.sh index 8fb9a49..70bb7cd 100644 --- a/external-ai-services/setup-default/setup.sh +++ b/external-ai-services/setup-default/setup.sh @@ -9,15 +9,38 @@ sudo apt install nvidia-cuda-toolkit -y # Télécharger et installer ollama curl -fsSL https://ollama.com/install.sh | sh +# Créer un service systemd pour Ollama +sudo tee /etc/systemd/system/ollama.service > /dev/null < /dev/null; do sleep 5 echo "En attente... Vérifiez si Ollama est prêt." done -ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan +# Installer un modèle dans Ollama +ollama pull llama3.2:1b + +# Vérification des logs pour Ollama en cas d'erreur, uniquement pour les instalations sans clou-init +sudo journalctl -u ollama.service --no-pager -n 20 # Installer Nginx sudo apt update && sudo apt install nginx -y From 91aaa15c5a3a58db3a0adb051d944d1438af156a Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 16:04:00 +0200 Subject: [PATCH 5/9] fix : fix 1 trying to add sometime before interacting with ollama --- external-ai-services/setup-default/setup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/external-ai-services/setup-default/setup.sh b/external-ai-services/setup-default/setup.sh index 70bb7cd..a129287 100644 --- a/external-ai-services/setup-default/setup.sh +++ b/external-ai-services/setup-default/setup.sh @@ -24,11 +24,15 @@ User=root WantedBy=multi-user.target EOL + +sleep 10 # Activer et démarrer le service Ollama sudo systemctl daemon-reload sudo systemctl enable ollama.service sudo systemctl start ollama.service +sleep 5 + # Attendre que Ollama soit prêt (vous pouvez ajuster les délais selon vos besoins) echo "Attente de l'initialisation d'Ollama..." while ! curl -s http://localhost:11434/health &> /dev/null; do From bc62b8d4a440fe69399949ffb3afaf322a641315 Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 16:21:32 +0200 Subject: [PATCH 6/9] fix : call endpoint health was not working to check if ollama was alive switch to cmd ollama --version --- external-ai-services/setup-default/setup.sh | 26 +++------------------ 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/external-ai-services/setup-default/setup.sh b/external-ai-services/setup-default/setup.sh index a129287..14338e9 100644 --- a/external-ai-services/setup-default/setup.sh +++ b/external-ai-services/setup-default/setup.sh @@ -9,37 +9,17 @@ sudo apt install nvidia-cuda-toolkit -y # Télécharger et installer ollama curl -fsSL https://ollama.com/install.sh | sh -# Créer un service systemd pour Ollama -sudo tee /etc/systemd/system/ollama.service > /dev/null < /dev/null; do +while ! ollama --version &> /dev/null; do sleep 5 echo "En attente... Vérifiez si Ollama est prêt." done +echo "Ollama est prêt et fonctionne correctement." + # Installer un modèle dans Ollama ollama pull llama3.2:1b From e2569b9e6950d1cdd9e8479e211f20b234acd015 Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 16:31:15 +0200 Subject: [PATCH 7/9] fix : trying to remove the loop cause it breaks --- external-ai-services/setup-default/setup.sh | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/external-ai-services/setup-default/setup.sh b/external-ai-services/setup-default/setup.sh index 14338e9..fa7e93e 100644 --- a/external-ai-services/setup-default/setup.sh +++ b/external-ai-services/setup-default/setup.sh @@ -9,16 +9,7 @@ sudo apt install nvidia-cuda-toolkit -y # Télécharger et installer ollama curl -fsSL https://ollama.com/install.sh | sh -sleep 5 - -# Attendre que Ollama soit prêt (vous pouvez ajuster les délais selon vos besoins) -echo "Attente de l'initialisation d'Ollama..." -while ! ollama --version &> /dev/null; do - sleep 5 - echo "En attente... Vérifiez si Ollama est prêt." -done - -echo "Ollama est prêt et fonctionne correctement." +sleep 10 # Installer un modèle dans Ollama ollama pull llama3.2:1b From 84a711be1265ea03c14d75c669e61886788597c8 Mon Sep 17 00:00:00 2001 From: ian metelski Date: Tue, 15 Oct 2024 16:57:04 +0200 Subject: [PATCH 8/9] fix : trying new cloud-init config --- external-ai-services/cloud-init.yaml | 1 + external-ai-services/setup-default/setup.sh | 22 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/external-ai-services/cloud-init.yaml b/external-ai-services/cloud-init.yaml index 47cc685..5b745bd 100644 --- a/external-ai-services/cloud-init.yaml +++ b/external-ai-services/cloud-init.yaml @@ -8,4 +8,5 @@ users: runcmd: - export BEARER_TOKEN="YOUR_BEARER_TOKEN" - echo $BEARER_TOKEN + - export HOME=/root - curl -fsSL https://raw.githubusercontent.com/betagouv/VApp/refs/heads/init-instance-ai/external-ai-services/setup-default/setup.sh | sh \ No newline at end of file diff --git a/external-ai-services/setup-default/setup.sh b/external-ai-services/setup-default/setup.sh index fa7e93e..f01688e 100644 --- a/external-ai-services/setup-default/setup.sh +++ b/external-ai-services/setup-default/setup.sh @@ -9,7 +9,27 @@ sudo apt install nvidia-cuda-toolkit -y # Télécharger et installer ollama curl -fsSL https://ollama.com/install.sh | sh -sleep 10 +sudo tee /etc/systemd/system/ollama.service > /dev/null < Date: Tue, 15 Oct 2024 19:04:44 +0200 Subject: [PATCH 9/9] Chore : updating setup file and description --- external-ai-services/setup-no-nginx/README.md | 3 - external-ai-services/setup-no-nginx/setup.sh | 23 ------ external-ai-services/setup-no-token/README.md | 3 + external-ai-services/setup-no-token/setup.sh | 77 +++++++++++++++++++ .../setup-openwebui/README.md | 8 +- external-ai-services/setup-openwebui/setup.sh | 58 ++++++++------ 6 files changed, 121 insertions(+), 51 deletions(-) delete mode 100644 external-ai-services/setup-no-nginx/README.md delete mode 100644 external-ai-services/setup-no-nginx/setup.sh create mode 100644 external-ai-services/setup-no-token/README.md create mode 100644 external-ai-services/setup-no-token/setup.sh diff --git a/external-ai-services/setup-no-nginx/README.md b/external-ai-services/setup-no-nginx/README.md deleted file mode 100644 index 9e51c09..0000000 --- a/external-ai-services/setup-no-nginx/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Work in progress - -ollama will be accesible via the port 11434. \ No newline at end of file diff --git a/external-ai-services/setup-no-nginx/setup.sh b/external-ai-services/setup-no-nginx/setup.sh deleted file mode 100644 index 879bfec..0000000 --- a/external-ai-services/setup-no-nginx/setup.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Mettre à jour les paquets et mettre à niveau le système -sudo apt update && sudo apt upgrade -y - -# Installer CUDA Toolkit pour NVIDIA -sudo apt install nvidia-cuda-toolkit -y - -# Télécharger et installer ollama -curl -fsSL https://ollama.com/install.sh | sh - - -# Attends que Ollama soit prêt (vous pouvez ajuster les délais selon vos besoins) -echo "Attente de l'initialisation d'Ollama..." -while ! curl -s http://localhost:11434/health &> /dev/null; do - sleep 5 - echo "En attente... Vérifiez si Ollama est prêt." -done - -ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan - - -echo "Setup completed successfully!" \ No newline at end of file diff --git a/external-ai-services/setup-no-token/README.md b/external-ai-services/setup-no-token/README.md new file mode 100644 index 0000000..082e4c7 --- /dev/null +++ b/external-ai-services/setup-no-token/README.md @@ -0,0 +1,3 @@ +# Pourquoi une version sans token + +certaine application utilisant Ollama (tel que openwebui), ne peuvent pas communiquer avec ollama si ollama nécessite un bearer token. Cette version du setup permet de simplifier l'installation et l'usage de ollama pour ce cas précis. \ No newline at end of file diff --git a/external-ai-services/setup-no-token/setup.sh b/external-ai-services/setup-no-token/setup.sh new file mode 100644 index 0000000..d83e8da --- /dev/null +++ b/external-ai-services/setup-no-token/setup.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Mettre à jour les paquets et mettre à niveau le système sans interaction +sudo DEBIAN_FRONTEND=noninteractive apt update && sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y + +# Installer CUDA Toolkit pour NVIDIA sans interaction +sudo DEBIAN_FRONTEND=noninteractive apt install nvidia-cuda-toolkit -y + +# Télécharger et installer Ollama +curl -fsSL https://ollama.com/install.sh | sh + +sudo tee /etc/systemd/system/ollama.service > /dev/null < /dev/null; do - sleep 5 - echo "En attente... Vérifiez si Ollama est prêt." -done -ollama pull llama3.2:1b # Utiliser & pour exécuter en arrière-plan +# Installer OpenWebUI via Docker avec un compte admin par défaut +docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway \ + -v open-webui:/app/backend/data --name open-webui --restart always \ + ghcr.io/open-webui/open-webui:cuda + +# Attendre quelques secondes pour s'assurer que les conteneurs démarrent +sleep 5 # Installer Nginx sudo apt update && sudo apt install nginx -y -# Configurer Nginx +# Configurer Nginx pour rediriger vers Ollama et OpenWebUI IP=$(hostname -I | awk '{print $1}') TOKEN=$BEARER_TOKEN -cat <