|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
info() { |
|
|
echo -e "\e[32m[INFO]\e[0m $1" |
|
|
} |
|
|
|
|
|
|
|
|
error() { |
|
|
echo -e "\e[31m[ERREUR]\e[0m $1" |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
info "Étape 1: Vérification et compilation de llama.cpp..." |
|
|
if [ ! -d "llama.cpp/build/bin" ]; then |
|
|
info "Dossier 'llama.cpp/build/bin' introuvable. Démarrage de la compilation." |
|
|
|
|
|
if [ ! -d "llama.cpp" ]; then |
|
|
info "Clonage du dépôt llama.cpp..." |
|
|
git clone https://github.com/ggerganov/llama.cpp.git || { error "Échec du clonage."; exit 1; } |
|
|
fi |
|
|
|
|
|
cd llama.cpp |
|
|
info "Lancement de la compilation..." |
|
|
mkdir -p build && cd build |
|
|
cmake .. -DLLAMA_CURL=1 || { error "Échec de la configuration CMake."; cd ../..; exit 1; } |
|
|
cmake --build . --config Release || { error "Échec de la compilation."; cd ../..; exit 1; } |
|
|
cd ../.. |
|
|
info "Compilation de llama.cpp terminée avec succès." |
|
|
else |
|
|
info "llama.cpp est déjà compilé. Ignoré." |
|
|
fi |
|
|
|
|
|
|
|
|
info "Étape 2: Vérification et téléchargement du modèle GGUF..." |
|
|
MODEL_PATH="models/qwen2.5-coder-1.5b-q8_0.gguf" |
|
|
if [ ! -f "$MODEL_PATH" ]; then |
|
|
info "Le modèle $MODEL_PATH est introuvable. Début du téléchargement..." |
|
|
mkdir -p models |
|
|
wget https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/qwen2.5-1.5b-instruct-q8_0.gguf -O "$MODEL_PATH" || { error "Échec du téléchargement du modèle."; exit 1; } |
|
|
info "Téléchargement du modèle terminé." |
|
|
else |
|
|
info "Le modèle GGUF est déjà présent. Ignoré." |
|
|
fi |
|
|
|
|
|
|
|
|
info "Étape 3: Création du script de démarrage du serveur..." |
|
|
mkdir -p server |
|
|
START_SCRIPT="server/start_server.sh" |
|
|
echo '#!/bin/bash' > "$START_SCRIPT" |
|
|
echo "MODEL_PATH=\"../$MODEL_PATH\"" >> "$START_SCRIPT" |
|
|
echo 'if [ ! -f "$MODEL_PATH" ]; then' >> "$START_SCRIPT" |
|
|
echo ' echo "Le modèle GGUF est introuvable à: $MODEL_PATH"' >> "$START_SCRIPT" |
|
|
echo ' exit 1' >> "$START_SCRIPT" |
|
|
echo 'fi' >> "$START_SCRIPT" |
|
|
echo '"../llama.cpp/build/bin/llama-server" \\' >> "$START_SCRIPT" |
|
|
echo " -m \"\$MODEL_PATH\" \\" >> "$START_SCRIPT" |
|
|
echo " --port 8080 \\" >> "$START_SCRIPT" |
|
|
echo " --host 0.0.0.0 \\" >> "$START_SCRIPT" |
|
|
echo " -c 4096 \\" >> "$START_SCRIPT" |
|
|
echo " -ngl 999 \\" >> "$START_SCRIPT" |
|
|
echo " --threads 8 \\" >> "$START_SCRIPT" |
|
|
echo ' > "logs/llama_server.log" 2>&1 &' >> "$START_SCRIPT" |
|
|
echo 'echo $! > "server/server.pid"' >> "$START_SCRIPT" |
|
|
chmod +x "$START_SCRIPT" |
|
|
info "Script de démarrage du serveur créé." |
|
|
|
|
|
|
|
|
info "Étape 4: Création du script d'arrêt du serveur..." |
|
|
STOP_SCRIPT="server/stop_server.sh" |
|
|
echo '#!/bin/bash' > "$STOP_SCRIPT" |
|
|
echo 'PID_FILE="server/server.pid"' >> "$STOP_SCRIPT" |
|
|
echo 'if [ -f "$PID_FILE" ]; then' >> "$STOP_SCRIPT" |
|
|
echo ' PID=$(cat "$PID_FILE")' >> "$STOP_SCRIPT" |
|
|
echo ' kill $PID' >> "$STOP_SCRIPT" |
|
|
echo ' rm "$PID_FILE"' >> "$STOP_SCRIPT" |
|
|
echo ' echo "Serveur llama.cpp arrêté."' >> "$STOP_SCRIPT" |
|
|
echo 'else' >> "$STOP_SCRIPT" |
|
|
echo ' echo "Aucun PID de serveur trouvé."' >> "$STOP_SCRIPT" |
|
|
echo 'fi' >> "$STOP_SCRIPT" |
|
|
chmod +x "$STOP_SCRIPT" |
|
|
info "Script d'arrêt du serveur créé." |
|
|
|
|
|
|
|
|
info "Étape 5: Lancement de l'application Streamlit..." |
|
|
streamlit run app.py |
|
|
|