Files
DLE/scripts/manage-models.sh

171 lines
5.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Copyright (c) 2024-2025 Тарабанов Александр Викторович
# All rights reserved.
# This software is proprietary and confidential.
# For licensing inquiries: info@hb3-accelerator.com
# Цвета для вывода
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Функции
log() {
echo -e "${BLUE}[$(date +'%H:%M:%S')]${NC} $1"
}
success() {
echo -e "${GREEN}$1${NC}"
}
warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
# Проверка статуса моделей
check_models_status() {
log "Проверка статуса моделей..."
# Проверяем какие модели загружены в память
loaded_models=$(docker exec dapp-ollama ollama ps 2>/dev/null | grep -v "NAME" | wc -l)
if [ "$loaded_models" -gt 0 ]; then
success "Модели в памяти: $loaded_models активных"
docker exec dapp-ollama ollama ps
else
warning "Модели не загружены в память"
fi
# Проверяем доступные модели
available_models=$(docker exec dapp-ollama ollama list 2>/dev/null | grep -v "NAME" | wc -l)
success "Доступных моделей: $available_models"
}
# Предзагрузка моделей
preload_models() {
log "Предзагрузка моделей в память..."
# Проверяем что Ollama готов
until curl -s http://localhost:11434/api/tags > /dev/null 2>&1; do
log "Ожидание запуска Ollama..."
sleep 2
done
success "Ollama готов!"
# Загружаем основные модели
log "Загрузка qwen2.5:7b..."
docker exec dapp-ollama ollama run qwen2.5:7b "Инициализация" > /dev/null 2>&1 &
log "Загрузка mxbai-embed-large:latest..."
docker exec dapp-ollama ollama run mxbai-embed-large:latest "Инициализация" > /dev/null 2>&1 &
# Ждем загрузки
sleep 10
success "Модели загружены!"
check_models_status
}
# Поддержание моделей в памяти
keep_alive() {
log "Запуск поддержания моделей в памяти..."
while true; do
# Проверяем статус каждые 5 минут
loaded_models=$(docker exec dapp-ollama ollama ps 2>/dev/null | grep -v "NAME" | wc -l)
if [ "$loaded_models" -eq 0 ]; then
log "Модели выгружены, перезагружаем..."
preload_models
else
log "Модели в памяти: $loaded_models активных"
fi
sleep 300 # 5 минут
done
}
# Очистка моделей из памяти
clear_memory() {
log "Очистка моделей из памяти..."
# Останавливаем все модели
docker exec dapp-ollama ollama ps | grep -v "NAME" | awk '{print $1}' | xargs -I {} docker exec dapp-ollama ollama stop {} 2>/dev/null || true
success "Память очищена"
check_models_status
}
# Главное меню
show_help() {
echo "🤖 Управление моделями Ollama"
echo "================================"
echo "Использование: $0 [команда]"
echo ""
echo "Команды:"
echo " status - Показать статус моделей"
echo " preload - Предзагрузить модели в память"
echo " keep - Поддерживать модели в памяти"
echo " clear - Очистить память"
echo " test - Протестировать скорость ответа"
echo " help - Показать эту справку"
echo ""
echo "Примеры:"
echo " $0 status # Проверить статус"
echo " $0 preload # Загрузить модели"
echo " $0 keep # Держать в памяти"
}
# Тест производительности
test_performance() {
log "Тест производительности..."
# Тест с холодным стартом
log "Тест холодного старта..."
start_time=$(date +%s.%N)
docker exec dapp-ollama ollama run qwen2.5:7b "Тест" > /dev/null 2>&1
end_time=$(date +%s.%N)
cold_time=$(echo "$end_time - $start_time" | bc)
# Тест с горячим стартом
log "Тест горячего старта..."
start_time=$(date +%s.%N)
docker exec dapp-ollama ollama run qwen2.5:7b "Тест" > /dev/null 2>&1
end_time=$(date +%s.%N)
hot_time=$(echo "$end_time - $start_time" | bc)
echo "📊 Результаты теста:"
echo " Холодный старт: ${cold_time}s"
echo " Горячий старт: ${hot_time}s"
if (( $(echo "$hot_time < $cold_time" | bc -l) )); then
success "Модели работают быстрее из памяти!"
else
warning "Модели не остаются в памяти"
fi
}
# Обработка аргументов
case "${1:-help}" in
"status")
check_models_status
;;
"preload")
preload_models
;;
"keep")
keep_alive
;;
"clear")
clear_memory
;;
"test")
test_performance
;;
"help"|*)
show_help
;;
esac