Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Где отслеживаю история обучений моделей
Введение
Отслеживание экспериментов и истории обучений — это критичная часть 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) и масштабируйте по мере роста проекта. Не тратьте время на переусложнение — просто начните отслеживать эксперименты уже сегодня!