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

Как передавал результаты моделей?

1.0 Junior🔥 131 комментариев
#MLOps и инфраструктура#Опыт и проекты

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

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

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

Передача результатов моделей в production

Передача результатов моделей машинного обучения в production — это критический этап ML-pipeline, требующий систематического подхода к сохранению, сериализации, версионированию и развёртыванию моделей.

1. Форматы сохранения моделей

Pickle (Python)

Самый простой способ сохранения моделей на Python:

import pickle
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)

with open('model.pkl', 'rb') as f:
    loaded_model = pickle.load(f)

Преимущества: Простота, поддержка сложных объектов Python. Недостатки: Уязвимость к инъекциям кода, не кроссплатформенно.

JobLib

Более безопасный и эффективный вариант для больших моделей:

from joblib import dump, load

dump(model, 'model.joblib', compress=3)
model = load('model.joblib')

ONNX

Универсальный формат для кроссплатформенной совместимости:

import skl2onnx
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

initial_type = [('float_input', FloatTensorType([None, 4]))]
onnx_model = convert_sklearn(model, initial_types=initial_type)

with open("model.onnx", "wb") as f:
    f.write(onnx_model.SerializeToString())

2. Версионирование моделей

MLflow — стандартная практика в промышленности:

import mlflow
from sklearn.ensemble import RandomForestClassifier

with mlflow.start_run():
    model = RandomForestClassifier(n_estimators=100)
    model.fit(X_train, y_train)
    
    score = model.score(X_test, y_test)
    mlflow.log_metric("accuracy", score)
    mlflow.sklearn.log_model(model, "model")
    mlflow.log_param("n_estimators", 100)

DVC

Для управления версиями данных и моделей в Git-like стиле:

dvc init
dvc add models/model.pkl
git add models/model.pkl.dvc .gitignore
git commit -m "Add model v1"

3. API для inference

FastAPI для production:

from fastapi import FastAPI
from pydantic import BaseModel
import pickle

app = FastAPI()

with open('model.pkl', 'rb') as f:
    model = pickle.load(f)

class PredictionInput(BaseModel):
    feature1: float
    feature2: float
    feature3: float

@app.post("/predict")
async def predict(data: PredictionInput):
    prediction = model.predict([[data.feature1, data.feature2, data.feature3]])
    return {"prediction": float(prediction[0])}

@app.get("/health")
async def health():
    return {"status": "ok"}

4. Docker контейнеризация

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY model.pkl .
COPY app.py .

EXPOSE 8000

CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]

5. Мониторинг в production

Отслеживание дрейфа данных:

from sklearn.metrics import ks_2samp

training_data = X_train['feature1'].values
production_data = recent_production_data['feature1'].values

statistic, p_value = ks_2samp(training_data, production_data)

if p_value < 0.05:
    print("Data drift detected!")

Лучшие практики

  • Версионирование: Всегда сохраняйте версию модели с временной меткой
  • Метаданные: Храните информацию об обучении (гиперпараметры, метрики, дата)
  • A/B тестирование: Развёртывайте новые модели параллельно со старыми
  • Rollback: Подготовьте возможность быстро вернуться к предыдущей версии
  • Документация: Опишите pipeline, зависимости, требования к памяти

Аккуратное управление моделями в production критично для надёжности и отладки приложений на базе ML.

Как передавал результаты моделей? | PrepBro