Recall везде + фиксы окружения

- recall_macro/recall_weighted во всех скриптах с метриками
  (train_simple, train_gpu, autolog_demo, hyperparam_sweep,
   grid_search_cv, load_and_predict, compare_runs)
- grid_search_cv: multi-metric scoring (accuracy + recall_macro)
- register_model: выбор лучшей модели по recall (--metric)
- MLflow warnings: name вместо artifact_path, сигнатура модели,
  numpy input_example для pytorch, подавление env-var INFO
- start_ui.sh: порт 5555 + file-store backend (фикс: UI не показывал
  эксперименты, т.к. скрипты писали в mlruns/, а сервер читал sqlite)
- setup_server.sh: развилка macOS/Linux + проверка MPS
- train_gpu: get_device CUDA→MPS→CPU, num_workers=0 на macOS
- AGENTS.md: гид для агента + саморегламент обновления
- README/CODE_WALKTHROUGH: выровнена нумерация уроков 8/9
- .gitignore: +.DS_Store
- удалён scripts/setup_git.sh
This commit is contained in:
2026-07-20 22:28:23 +03:00
parent d6a4b46db0
commit d5c5bf3767
15 changed files with 547 additions and 257 deletions
+128 -42
View File
@@ -1,56 +1,134 @@
#!/bin/bash
# ============================================================
# Установка окружения MLflow на GPU-сервере (RTX 3090)
# Запускать НА СЕРВЕРЕ: bash setup_server.sh
# Установка окружения MLflow Practice
# Поддержка: Linux (GPU-сервер, RTX 3090) и macOS (Intel/Apple Silicon)
# Запускать: bash setup_server.sh
# ============================================================
set -e
echo "============================================"
echo " MLflow Practice — установка на сервере"
echo " MLflow Practice — установка окружения"
echo "============================================"
# --- Проверка GPU ---
echo ""
echo "📡 Проверка GPU..."
if command -v nvidia-smi &> /dev/null; then
nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader
# --- Определение ОС ---
OS="$(uname -s)"
case "$OS" in
Darwin*) PLATFORM="macos" ;;
Linux*) PLATFORM="linux" ;;
*) echo "❌ Неподдерживаемая ОС: $OS"; exit 1 ;;
esac
ARCH="$(uname -m)"
echo "📍 Платформа: $PLATFORM ($ARCH)"
# ============================================
# macOS — установка без CUDA (есть MPS на Apple Silicon)
# ============================================
if [ "$PLATFORM" = "macos" ]; then
echo ""
echo "🍎 macOS: подготовка системы..."
# --- Homebrew ---
if ! command -v brew &> /dev/null; then
echo "⚠️ Homebrew не найден. Установите его вручную:"
echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
echo " и запустите скрипт снова."
exit 1
fi
echo " Homebrew: $(brew --version | head -1)"
# --- Python через brew (если нет) ---
if ! command -v python3 &> /dev/null; then
echo "📥 Устанавливаю python@3.13 через brew..."
brew install python@3.13
fi
echo "🐍 Python: $(python3.13 --version)"
# --- Создание venv ---
echo ""
echo "📦 Создание виртуального окружения venv..."
if [ ! -d ".venv" ]; then
python3.13 -m venv .venv
fi
source .venv/bin/activate
echo " Активировано: $(which python)"
# --- pip ---
echo ""
echo "⬆️ Обновление pip..."
pip install --upgrade pip wheel setuptools
# --- MLflow + базовые библиотеки ---
echo ""
echo "📥 Установка MLflow + scikit-learn + matplotlib..."
pip install mlflow scikit-learn pandas numpy matplotlib
# --- PyTorch (CPU на Intel, MPS на Apple Silicon) ---
echo ""
echo "🔥 Установка PyTorch (PyPI — без CUDA)..."
pip install torch torchvision
# --- Проверка PyTorch + устройства ---
echo ""
echo "✅ Проверка PyTorch..."
python3 -c "
import torch, platform
print(f'PyTorch: {torch.__version__}')
print(f'MPS available: {torch.backends.mps.is_available()}')
if torch.backends.mps.is_available():
print('Устройство: Apple Silicon GPU (MPS)')
else:
print('Устройство: CPU (Intel Mac)')
print('️ На macOS CUDA недоступна — train_gpu.py будет использовать CPU/MPS')
"
# ============================================
# Linux — GPU-сервер с CUDA (RTX 3090)
# ============================================
else
echo "⚠️ nvidia-smi не найден — CUDA может быть не установлена"
fi
# --- Проверка Python ---
echo ""
echo "🐍 Проверка Python..."
python3 --version
# --- Проверка GPU ---
echo ""
echo "📡 Проверка GPU..."
if command -v nvidia-smi &> /dev/null; then
nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader
else
echo "⚠️ nvidia-smi не найден — CUDA может быть не установлена"
fi
# --- Создание виртуального окружения ---
echo ""
echo "📦 Создание виртуального окружения venv..."
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
source .venv/bin/activate
echo " Активировано: $(which python)"
# --- Проверка Python ---
echo ""
echo "🐍 Проверка Python..."
python3 --version
# --- Обновление pip ---
echo ""
echo "⬆️ Обновление pip..."
pip install --upgrade pip wheel setuptools
# --- Создание venv ---
echo ""
echo "📦 Создание виртуального окружения venv..."
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
source .venv/bin/activate
echo " Активировано: $(which python)"
# --- Установка MLflow и базовых библиотек ---
echo ""
echo "📥 Установка MLflow + scikit-learn + matplotlib..."
pip install mlflow scikit-learn pandas numpy matplotlib
# --- pip ---
echo ""
echo "⬆️ Обновление pip..."
pip install --upgrade pip wheel setuptools
# --- Установка PyTorch под CUDA ---
echo ""
echo "🔥 Установка PyTorch (CUDA 12.1)..."
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# --- MLflow + базовые библиотеки ---
echo ""
echo "📥 Установка MLflow + scikit-learn + matplotlib..."
pip install mlflow scikit-learn pandas numpy matplotlib
# --- Проверка CUDA ---
echo ""
echo "✅ Проверка PyTorch + CUDA..."
python3 -c "
# --- PyTorch под CUDA 12.1 ---
echo ""
echo "🔥 Установка PyTorch (CUDA 12.1)..."
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# --- Проверка PyTorch + CUDA ---
echo ""
echo "✅ Проверка PyTorch + CUDA..."
python3 -c "
import torch
print(f'PyTorch: {torch.__version__}')
print(f'CUDA available: {torch.cuda.is_available()}')
@@ -58,15 +136,18 @@ if torch.cuda.is_available():
print(f'GPU: {torch.cuda.get_device_name(0)}')
print(f'VRAM: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB')
"
fi
# --- Проверка MLflow ---
# ============================================
# Общая проверка MLflow (обе платформы)
# ============================================
echo ""
echo "✅ Проверка MLflow..."
python3 -c "import mlflow; print(f'MLflow: {mlflow.__version__}')"
echo ""
echo "============================================"
echo " ✅ Установка завершена!"
echo " ✅ Установка завершена! ($PLATFORM)"
echo "============================================"
echo ""
echo "Следующие шаги:"
@@ -74,6 +155,11 @@ echo " 1. Активируйте окружение: source .venv/bin/activate
echo " 2. Запустите MLflow UI: ./start_ui.sh"
echo " 3. В другом терминале:"
echo " source .venv/bin/activate"
echo " python src/train_simple.py --n-estimators 100 --max-depth 8"
echo " python src/train_gpu.py --epochs 10 --batch-size 256 --lr 0.001"
if [ "$PLATFORM" = "macos" ]; then
echo " python src/train_simple.py --n-estimators 100 --max-depth 8"
echo " python src/train_gpu.py --epochs 3 --batch-size 64 --lr 0.01 # CPU/MPS, меньше эпох"
else
echo " python src/train_simple.py --n-estimators 100 --max-depth 8"
echo " python src/train_gpu.py --epochs 10 --batch-size 256 --lr 0.001"
fi
echo ""