228 lines
7.8 KiB
Bash
228 lines
7.8 KiB
Bash
#!/bin/bash
|
||
|
||
# AI Server Model Management Script
|
||
# Optimized for RTX 2060
|
||
|
||
# Colors
|
||
GREEN='\033[0;32m'
|
||
RED='\033[0;31m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
PURPLE='\033[0;35m'
|
||
NC='\033[0m'
|
||
|
||
show_menu() {
|
||
echo -e "${BLUE}🤖 AI Server - Управление моделями${NC}"
|
||
echo "=================================="
|
||
echo "1. Показать установленные модели"
|
||
echo "2. Установить рекомендуемые модели для RTX 2060"
|
||
echo "3. Установить конкретную модель"
|
||
echo "4. Удалить модель"
|
||
echo "5. Тестировать модель"
|
||
echo "6. Показать использование VRAM"
|
||
echo "7. Рекомендации по моделям"
|
||
echo "8. Выход"
|
||
echo ""
|
||
}
|
||
|
||
list_models() {
|
||
echo -e "${PURPLE}📦 Установленные модели:${NC}"
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list
|
||
echo ""
|
||
|
||
if command -v nvidia-smi &> /dev/null; then
|
||
echo -e "${PURPLE}💾 Использование VRAM:${NC}"
|
||
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits | \
|
||
awk -F', ' '{printf "Используется: %d MB / %d MB (%.1f%%)\n", $1, $2, ($1/$2)*100}'
|
||
fi
|
||
echo ""
|
||
}
|
||
|
||
install_recommended() {
|
||
echo -e "${YELLOW}🎯 Установка рекомендуемых моделей для RTX 2060...${NC}"
|
||
echo ""
|
||
|
||
models=("llama3.2:1b" "llama3.2:3b" "codellama:7b")
|
||
descriptions=("Быстрая модель (1.3GB)" "Оптимальная модель (2GB)" "Модель для кода (3.8GB)")
|
||
|
||
for i in "${!models[@]}"; do
|
||
model="${models[$i]}"
|
||
desc="${descriptions[$i]}"
|
||
|
||
echo -e "${BLUE}Устанавливаю: $model - $desc${NC}"
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama pull "$model"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✅ $model установлена${NC}"
|
||
else
|
||
echo -e "${RED}❌ Ошибка установки $model${NC}"
|
||
fi
|
||
echo ""
|
||
done
|
||
}
|
||
|
||
install_custom() {
|
||
echo -e "${YELLOW}Введите название модели (например: llama3.2:3b):${NC}"
|
||
read -r model_name
|
||
|
||
if [[ -z "$model_name" ]]; then
|
||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||
return
|
||
fi
|
||
|
||
echo -e "${BLUE}Установка модели: $model_name${NC}"
|
||
echo -e "${YELLOW}Это может занять несколько минут...${NC}"
|
||
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama pull "$model_name"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✅ Модель $model_name успешно установлена${NC}"
|
||
else
|
||
echo -e "${RED}❌ Ошибка установки модели $model_name${NC}"
|
||
fi
|
||
}
|
||
|
||
remove_model() {
|
||
echo -e "${PURPLE}📦 Доступные модели для удаления:${NC}"
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list
|
||
echo ""
|
||
|
||
echo -e "${YELLOW}Введите название модели для удаления:${NC}"
|
||
read -r model_name
|
||
|
||
if [[ -z "$model_name" ]]; then
|
||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||
return
|
||
fi
|
||
|
||
echo -e "${YELLOW}⚠️ Удалить модель $model_name? (y/N):${NC}"
|
||
read -r confirm
|
||
|
||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama rm "$model_name"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✅ Модель $model_name удалена${NC}"
|
||
else
|
||
echo -e "${RED}❌ Ошибка удаления модели $model_name${NC}"
|
||
fi
|
||
else
|
||
echo -e "${BLUE}Отменено${NC}"
|
||
fi
|
||
}
|
||
|
||
test_model() {
|
||
echo -e "${PURPLE}📦 Доступные модели:${NC}"
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list
|
||
echo ""
|
||
|
||
echo -e "${YELLOW}Введите название модели для тестирования:${NC}"
|
||
read -r model_name
|
||
|
||
if [[ -z "$model_name" ]]; then
|
||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||
return
|
||
fi
|
||
|
||
echo -e "${BLUE}Тестирование модели: $model_name${NC}"
|
||
echo -e "${YELLOW}Задаю тестовый вопрос...${NC}"
|
||
|
||
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama run "$model_name" "Привет! Как дела? Ответь кратко."
|
||
}
|
||
|
||
show_vram_usage() {
|
||
if command -v nvidia-smi &> /dev/null; then
|
||
echo -e "${PURPLE}🎮 Информация о GPU:${NC}"
|
||
nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader
|
||
echo ""
|
||
|
||
echo -e "${PURPLE}📊 Детальное использование VRAM:${NC}"
|
||
nvidia-smi
|
||
else
|
||
echo -e "${RED}❌ NVIDIA GPU не найден или драйверы не установлены${NC}"
|
||
fi
|
||
}
|
||
|
||
show_recommendations() {
|
||
echo -e "${BLUE}🎯 Рекомендации по моделям для RTX 2060 (6GB VRAM):${NC}"
|
||
echo ""
|
||
|
||
echo -e "${GREEN}🥇 ЛУЧШИЙ ВЫБОР:${NC}"
|
||
echo " • llama3.2:3b (2GB VRAM) - оптимальный баланс скорости и качества"
|
||
echo ""
|
||
|
||
echo -e "${YELLOW}🥈 БЫСТРЫЕ МОДЕЛИ:${NC}"
|
||
echo " • llama3.2:1b (1.3GB VRAM) - максимальная скорость"
|
||
echo ""
|
||
|
||
echo -e "${PURPLE}🥉 СПЕЦИАЛИЗИРОВАННЫЕ:${NC}"
|
||
echo " • codellama:7b (3.8GB VRAM) - для программирования"
|
||
echo " • mistral:7b (4.1GB VRAM) - высокое качество (почти предел)"
|
||
echo ""
|
||
|
||
echo -e "${RED}❌ НЕ РЕКОМЕНДУЕТСЯ:${NC}"
|
||
echo " • llama3:8b - требует 8GB+ VRAM"
|
||
echo " • llama3:70b - требует 40GB+ VRAM"
|
||
echo " • codellama:34b - требует 20GB+ VRAM"
|
||
echo ""
|
||
|
||
echo -e "${CYAN}💡 СОВЕТЫ:${NC}"
|
||
echo " • Не устанавливайте много больших моделей одновременно"
|
||
echo " • Мониторьте температуру GPU (ai-status)"
|
||
echo " • При перегреве используйте меньшие модели"
|
||
echo " • Для продакшена рекомендуется llama3.2:3b"
|
||
}
|
||
|
||
# Основной цикл
|
||
main() {
|
||
while true; do
|
||
show_menu
|
||
echo -e "${YELLOW}Выберите опцию (1-8):${NC}"
|
||
read -r choice
|
||
|
||
case $choice in
|
||
1)
|
||
list_models
|
||
;;
|
||
2)
|
||
install_recommended
|
||
;;
|
||
3)
|
||
install_custom
|
||
;;
|
||
4)
|
||
remove_model
|
||
;;
|
||
5)
|
||
test_model
|
||
;;
|
||
6)
|
||
show_vram_usage
|
||
;;
|
||
7)
|
||
show_recommendations
|
||
;;
|
||
8)
|
||
echo -e "${GREEN}👋 До свидания!${NC}"
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo -e "${RED}❌ Неверный выбор. Попробуйте снова.${NC}"
|
||
;;
|
||
esac
|
||
|
||
echo ""
|
||
echo -e "${CYAN}Нажмите Enter для продолжения...${NC}"
|
||
read -r
|
||
clear
|
||
done
|
||
}
|
||
|
||
# Проверка прав
|
||
if [[ ! -d "/opt/ai-server" ]]; then
|
||
echo -e "${RED}❌ AI Server не установлен. Запустите сначала install-ubuntu.sh${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
clear
|
||
main |