← Назад к вопросам

Где отслеживаешь история обучений?

1.3 Junior🔥 191 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Где отслеживаю история обучений моделей

Введение

Отслеживание экспериментов и истории обучений — это критичная часть ML workflow. За 10+ лет работы я использовал несколько инструментов и подходов, эволюционируя от простых логов в файлы к полнофункциональным MLOps платформам.

1. MLflow — основной инструмент

MLflow стал моим стандартным решением для отслеживания экспериментов. Это open-source платформа, которая отслеживает параметры, метрики, артефакты и модели.

import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, f1_score
import pandas as pd

# Загрузить данные
X_train = pd.read_csv('X_train.csv')
y_train = pd.read_csv('y_train.csv')
X_test = pd.read_csv('X_test.csv')
y_test = pd.read_csv('y_test.csv')

# Начать эксперимент
mlflow.set_experiment('iris_classification')

with mlflow.start_run(run_name='rf_experiment_1'):
    # Параметры
    n_estimators = 100
    max_depth = 10
    
    # Логировать параметры
    mlflow.log_params({
        'n_estimators': n_estimators,
        'max_depth': max_depth,
        'algorithm': 'RandomForest'
    })
    
    # Обучение
    model = RandomForestClassifier(
        n_estimators=n_estimators,
        max_depth=max_depth,
        random_state=42
    )
    model.fit(X_train, y_train)
    
    # Предсказание
    y_pred = model.predict(X_test)
    
    # Логировать метрики
    accuracy = accuracy_score(y_test, y_pred)
    f1 = f1_score(y_test, y_pred, average='weighted')
    
    mlflow.log_metrics({
        'accuracy': accuracy,
        'f1_score': f1
    })
    
    # Логировать модель
    mlflow.sklearn.log_model(model, 'model')
    
    # Логировать файлы и графики
    mlflow.log_artifact('config.yaml')
    mlflow.log_artifact('plots/confusion_matrix.png')
    
    print(f"Run ID: {mlflow.active_run().info.run_id}")

# Просмотр экспериментов
experiments = mlflow.search_experiments()
for exp in experiments:
    print(f"Experiment: {exp.name}")

Запуск UI MLflow:

mlflow ui
# Открыть http://localhost:5000

Преимущества MLflow:

  • Бесплатен и open-source
  • Может работать локально или на сервере
  • Интеграция с большинством популярных фреймворков
  • Web UI для просмотра экспериментов
  • Сравнение параметров и метрик между запусками

2. Weights & Biases (W&B) для сложных проектов

Для больших проектов используюWandB — облачную платформу для отслеживания ML экспериментов с более мощным функционалом.

import wandb
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Инициализация
wandb.init(project="iris-classification", name="rf-v1")

# Конфиг
config = wandb.config
config.n_estimators = 100
config.max_depth = 10
config.learning_rate = 0.1

# Загрузить данные
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# Обучение
model = RandomForestClassifier(
    n_estimators=config.n_estimators,
    max_depth=config.max_depth,
    random_state=42
)
model.fit(X_train, y_train)

# Метрики
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

# Логирование
wandb.log({
    'accuracy': accuracy,
    'epoch': 1
})

# Сохранить модель
wandb.save('model.pkl')

# Закрыть
wandb.finish()

Преимущества W&B:

  • Облачная платформа (автоматически сохраняет историю)
  • Продвинутые графики и визуализация
  • Сравнение экспериментов
  • Интеграция с гиперпараметр-оптимизацией (Sweeps)
  • Team collaboration
  • Бесплатный план для индивидуальной работы

3. Git + DVC для версионирования кода и данных

Использую Git для контроля версий кода и DVC (Data Version Control) для отслеживания данных и моделей.

# Инициализация DVC
git init
dvc init

# Добавить большие файлы под контроль DVC
dvc add data/training.csv
dvc add models/model.pkl

# Коммитить .dvc файлы в Git
git add data/training.csv.dvc
git add models/model.pkl.dvc
git commit -m "Add training data and model v1"

# История версий
git log --oneline

# Переключение между версиями
git checkout v1.0 -- models/model.pkl.dvc
dvc checkout

4. TensorBoard для нейросетей

Для глубокого обучения использую TensorBoard, встроённый инструмент для мониторинга обучения.

import tensorflow as tf
from tensorflow import keras
import datetime

# Создать логи директорию
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")

# Callback для TensorBoard
tensorboard_callback = keras.callbacks.TensorBoard(
    log_dir=log_dir,
    histogram_freq=1
)

# Модель
model = keras.Sequential([
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# Обучение с логированием
model.fit(
    X_train, y_train,
    epochs=10,
    validation_split=0.2,
    callbacks=[tensorboard_callback]
)

# Просмотр
# tensorboard --logdir logs/fit

5. Собственная система логирования

Для production систем часто использую структурированное логирование в JSON формат.

import json
import logging
from datetime import datetime
from pathlib import Path

class ExperimentLogger:
    def __init__(self, experiment_name: str):
        self.experiment_name = experiment_name
        self.log_dir = Path('logs') / experiment_name
        self.log_dir.mkdir(parents=True, exist_ok=True)
        
    def log_run(self, params: dict, metrics: dict, artifacts: list = None):
        """Логировать запуск эксперимента"""
        run_log = {
            'timestamp': datetime.now().isoformat(),
            'experiment': self.experiment_name,
            'params': params,
            'metrics': metrics,
            'artifacts': artifacts or []
        }
        
        # Сохранить в JSON
        log_file = self.log_dir / f"run_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
        with open(log_file, 'w') as f:
            json.dump(run_log, f, indent=2)
        
        return log_file

# Использование
logger = ExperimentLogger('iris_classification')

params = {
    'model': 'RandomForest',
    'n_estimators': 100,
    'max_depth': 10
}

metrics = {
    'accuracy': 0.95,
    'f1_score': 0.94,
    'precision': 0.96,
    'recall': 0.93
}

log_file = logger.log_run(params, metrics, ['confusion_matrix.png', 'feature_importance.png'])
print(f"Log saved to: {log_file}")

6. Database для больших экспериментов

Для масштабных экспериментов со множеством параметров использую PostgreSQL.

import psycopg2
import json
from datetime import datetime

class MLExperimentDB:
    def __init__(self, connection_string: str):
        self.conn = psycopg2.connect(connection_string)
        self.cursor = self.conn.cursor()
    
    def log_experiment(self, name: str, params: dict, metrics: dict):
        """Сохранить эксперимент в БД"""
        query = """
        INSERT INTO experiments (name, params, metrics, timestamp)
        VALUES (%s, %s, %s, %s)
        """
        
        self.cursor.execute(query, (
            name,
            json.dumps(params),
            json.dumps(metrics),
            datetime.now()
        ))
        self.conn.commit()

# Использование
db = MLExperimentDB('postgresql://user:password@localhost/ml_experiments')
db.log_experiment(
    'rf_v1',
    {'n_estimators': 100, 'max_depth': 10},
    {'accuracy': 0.95, 'f1': 0.94}
)

Мой типичный workflow

1. Локальное прототипирование
   ├── MLflow для отслеживания экспериментов
   ├── Git для версионирования кода
   └── JSON логи для простых экспериментов

2. Команда проекта
   ├── W&B для collaboration
   ├── DVC для данных
   └── Git для кода

3. Production система
   ├── PostgreSQL для истории
   ├── Prometheus для метрик
   ├── ELK Stack для логов
   └── TensorBoard (если DL)

4. Соревнования (Kaggle)
   ├── Notebook локально
   ├── W&B для быстрого отслеживания
   └── CSV отчёты

Сравнительная таблица инструментов

ИнструментБесплатноЛокальноCloudЛегкостьМасштаб
MLflowДаДаДаЛегкоСредний
W&BЧастичноНетДаЛегкоБольшой
TensorBoardДаДаНетЛегко (DL)Средний
DVCДаДаДаСреднееБольшой
PrometheusДаДаДаСложноБольшой
Excel / CSVДаДаНетОчень легкоМалый

Мои рекомендации

Для личных проектов:

  • Начните с MLflow (бесплатен, простой, мощный)
  • Добавьте Git для версионирования
  • При необходимости масштабирования переходите на W&B

Для командной работы:

  • W&B для collaboration и experimentation
  • Git + DVC для кода и данных
  • PostgreSQL для истории в production

Для production систем:

  • Prometheus + Grafana для мониторинга
  • ELK Stack для логирования
  • PostgreSQL для истории
  • Kubernetes для оркестрации

Заключение

Отслеживание экспериментов — это не просто лучшая практика, это необходимость в современном ML. Без правильного отслеживания вы быстро потеряетесь в сотнях экспериментов и не сможете воспроизвести результаты.

Мой совет: начните с простого инструмента (MLflow или W&B) и масштабируйте по мере роста проекта. Не тратьте время на переусложнение — просто начните отслеживать эксперименты уже сегодня!

Где отслеживаешь история обучений? | PrepBro