· 17 мин чтения

MLOps и AI в enterprise: от экспериментов к production на российском рынке

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. В 2026 AI переходит от pilot проектов к mass production. Российские компании запускают промышленные ML системы на собственной инфраструктуре: YandexGPT, GigaChat, российские GPU. Разбираю production внедрение MLOps для ритейла: 50+ моделей в production, автоматические retraining, A/B тестирование, соответствие ГОСТ Р.

MLOps в 2026: российские реалии

Production ML в условиях технологических ограничений:

Production MLOps stack для российского enterprise

# MLOps архитектура на российской инфраструктуре
┌─────────────────────────────────────────┐
│ Model Registry (MLflow + S3 Yandex)    │ ← Версионирование моделей
├─────────────────────────────────────────┤
│ Orchestration (Kubeflow на Deckhouse)  │ ← Пайплайны обучения
├─────────────────────────────────────────┤
│ Feature Store (Feast + ClickHouse)     │ ← Управление признаками
├─────────────────────────────────────────┤
│ Monitoring (Evidently + Grafana)       │ ← ML мониторинг
├─────────────────────────────────────────┤
│ Infrastructure (K8s + GPU кластеры)    │ ← Российские GPU/CPU
└─────────────────────────────────────────┘

Кейс: ML платформа для ритейла

Production архитектура для сети из 200+ магазинов:

Модели в production

Use CaseАлгоритмМетрикиUpdate частота
ЦенообразованиеXGBoostMAPE < 5%Ежедневно
Demand forecastingLSTMMAE < 15%Еженедельно
РекомендацииCollaborative FilteringCTR > 3%Real-time
Fraud detectionIsolation ForestPrecision > 90%Ежечасно
Sentiment analysisRuBERTF1 > 85%По запросу

MLflow для model lifecycle

# MLflow с российской инфраструктурой
# docker-compose.yml для MLflow
version: '3.8'
services:
  mlflow:
    image: mlflow/mlflow:2.8.1
    ports:
      - "5000:5000"
    environment:
      - MLFLOW_S3_ENDPOINT_URL=https://storage.yandexcloud.net
      - AWS_ACCESS_KEY_ID=${YANDEX_KEY_ID}
      - AWS_SECRET_ACCESS_KEY=${YANDEX_SECRET_KEY}
      - MLFLOW_TRACKING_URI=postgresql://mlflow:password@postgres:5432/mlflow
    command: >
      mlflow server
      --backend-store-uri postgresql://mlflow:password@postgres:5432/mlflow
      --default-artifact-root s3://ml-models-bucket/artifacts
      --host 0.0.0.0
      --port 5000

  postgres:
    image: postgres:14
    environment:
      POSTGRES_DB: mlflow
      POSTGRES_USER: mlflow
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

Kubeflow на российской платформе

# Kubeflow pipeline на российских GPU
apiVersion: kubeflow.org/v1beta1
kind: Pipeline
metadata:
  name: retail-demand-forecast
spec:
  graph:
    nodes:
      data_ingestion:
        componentRef:
          name: clickhouse-data-loader
        taskInfo:
          name: load-sales-data

      feature_engineering:
        componentRef:
          name: feature-pipeline
        dependencies: [data_ingestion]
        taskInfo:
          name: create-features

      model_training:
        componentRef:
          name: lstm-trainer
        dependencies: [feature_engineering]
        taskInfo:
          name: train-demand-model
          # Используем российские GPU
          resources:
            gpu:
              vendor: "elbrus.ru/gpu"
              count: 2

      model_validation:
        componentRef:
          name: model-evaluator
        dependencies: [model_training]

      model_deployment:
        componentRef:
          name: model-deployer
        dependencies: [model_validation]

Внедряем MLOps для enterprise

Запустили ML в production для 20+ российских компаний. Поможем с архитектурой, российскими решениями, ГОСТ compliance.

Написать на boss@itfresh.ru или Telegram @ITfresh_Boss

Feature Store на ClickHouse

# Feast с ClickHouse для high-performance features
# feature_store.yaml
project: retail_ml
registry: s3://ml-registry/feast
provider: local

online_store:
  type: clickhouse
  host: clickhouse.company.local
  port: 9000
  database: features
  username: feast_user
  password: ${CLICKHOUSE_PASSWORD}

offline_store:
  type: clickhouse
  host: clickhouse.company.local
  port: 9000
  database: warehouse
  username: feast_user

# Feature definitions
# features/customer_features.py
from feast import Entity, FeatureView, Field
from feast.types import Float32, Int64, String

customer = Entity(name="customer_id", value_type=String)

customer_features = FeatureView(
    name="customer_features",
    entities=[customer],
    schema=[
        Field(name="avg_purchase_amount", dtype=Float32),
        Field(name="purchase_frequency", dtype=Int64),
        Field(name="lifetime_value", dtype=Float32),
        Field(name="preferred_category", dtype=String),
    ],
    online=True,
    source=ClickHouseSource(
        name="customer_source",
        query="SELECT customer_id, avg_purchase_amount, purchase_frequency, lifetime_value, preferred_category, created_timestamp FROM customer_features",
        timestamp_field="created_timestamp",
    ),
    ttl=timedelta(days=30),
)

ML мониторинг с Evidently

# Мониторинг дрифта данных и качества моделей
from evidently.pipeline.column_mapping import ColumnMapping
from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab, NumTargetDriftTab

# Настройка мониторинга для модели ценообразования
column_mapping = ColumnMapping()
column_mapping.target = 'predicted_price'
column_mapping.prediction = 'actual_price'
column_mapping.numerical_features = ['competitor_price', 'demand_score', 'inventory_level']

# Dashboard для data drift
price_monitoring = Dashboard(tabs=[
    DataDriftTab(verbose_level=1),
    NumTargetDriftTab(verbose_level=1)
])

# Интеграция с Grafana
price_monitoring.calculate(reference_data, current_data, column_mapping=column_mapping)
price_monitoring.save('price_model_report.html')

A/B тестирование ML моделей

# A/B framework для ML экспериментов
class MLExperimentFramework:
    def __init__(self, redis_client, mlflow_client):
        self.redis = redis_client
        self.mlflow = mlflow_client

    def create_experiment(self, experiment_config):
        """Создание A/B эксперимента для ML модели"""
        experiment = {
            'name': experiment_config['name'],
            'control_model': experiment_config['control_model_uri'],
            'treatment_model': experiment_config['treatment_model_uri'],
            'traffic_split': experiment_config['traffic_split'],  # 90/10
            'success_metrics': experiment_config['metrics'],
            'duration_days': experiment_config['duration']
        }

        # Сохраняем конфиг эксперимента
        self.redis.set(f"experiment:{experiment['name']}", json.dumps(experiment))

        return experiment

    def route_traffic(self, user_id, experiment_name):
        """Маршрутизация трафика между моделями"""
        experiment = json.loads(self.redis.get(f"experiment:{experiment_name}"))

        # Consistent hashing для стабильности
        user_hash = hashlib.md5(user_id.encode()).hexdigest()
        traffic_bucket = int(user_hash[:8], 16) % 100

        if traffic_bucket < experiment['traffic_split']:
            return experiment['treatment_model']
        else:
            return experiment['control_model']

Российские LLM в production

Интеграция с российскими языковыми моделями:

YandexGPT API интеграция

# Интеграция с YandexGPT для контент-генерации
import requests
import json

class YandexGPTClient:
    def __init__(self, iam_token, folder_id):
        self.iam_token = iam_token
        self.folder_id = folder_id
        self.base_url = "https://llm.api.cloud.yandex.net/foundationModels/v1"

    def generate_product_description(self, product_data):
        """Генерация описаний товаров для ритейла"""
        prompt = f"""
        Создай привлекательное описание товара для интернет-магазина:

        Название: {product_data['name']}
        Категория: {product_data['category']}
        Характеристики: {product_data['specs']}
        Цена: {product_data['price']} руб.

        Требования:
        - До 200 слов
        - Фокус на выгодах для покупателя
        - SEO-оптимизированное
        """

        payload = {
            "modelUri": f"gpt://{self.folder_id}/yandexgpt/latest",
            "completionOptions": {
                "stream": False,
                "temperature": 0.7,
                "maxTokens": "300"
            },
            "messages": [
                {"role": "user", "text": prompt}
            ]
        }

        response = requests.post(
            f"{self.base_url}/completion",
            headers={
                "Authorization": f"Bearer {self.iam_token}",
                "Content-Type": "application/json"
            },
            json=payload
        )

        return response.json()['result']['alternatives'][0]['message']['text']

ГОСТ compliance для AI систем

Соответствие российским стандартам:

ROI от внедрения MLOps

Экономический эффект за 12 месяцев (сеть 200 магазинов):

НаправлениеЭкономия/ростМеханизм
Dynamic pricing+12% marginОптимизация цен в реальном времени
Demand forecasting-25% lost salesТочное планирование закупок
Personalization+18% conversionML рекомендации
Fraud detection-80% финпотериReal-time scoring
Operational efficiency-30% manual workАвтоматизация процессов

Заключение: ML становится mainstream

2026 год — переломный для enterprise ML в России. Российские решения достигли production-ready качества. MLOps перестал быть luxury и стал competitive advantage. Компании, не внедряющие ML, рискуют отстать навсегда.