Otus, MLOps, NickOsipov
https://otus.ru/lessons/ml-bigdata/program/
E:\DownLoads\ML\MLOps
------------------
NickOsipov, Otus
Otus, MLOps, NickOsipov
https://otus.ru/lessons/ml-bigdata/program/
E:\DownLoads\ML\MLOps
------------------
NickOsipov, Otus
Augumentation,
TsMixer
https://github.com/smrfeld/tsmixer-pytorch?tab=readme-ov-file
https://github.com/marcopeix/time-series-analysis/blob/master/TSMixer.ipynb
https://arxiv.org/abs/2303.06053
https://openreview.net/pdf?id=wbpxTuXgm0
https://github.com/search?q=tsmixer&type=repositories
------------------
https://yandex.ru/video/preview/1357919541650956840
https://yandex.ru/video/preview/16539307188576704335
https://yandex.ru/video/preview/5819898398243529650
https://yandex.ru/video/preview/1663241586578181068
----
https://www.youtube.com/watch?v=J2SEGZx0394&t=8s
https://www.youtube.com/watch?v=aETHYkoJeNY
TsMixer, AspNet, Deploy, ONNX
https://vkvideo.ru/playlist/-145052891_441/video-145052891_456247227?linked=1
https://drive.google.com/drive/folders/1ZOYpTUa82_jCcxIdTmyr0LXQfvaM9vIy
F:\downloads\Otus\ML\TsMixter
Ваша идея — консолидировать ML‑логику внутри .NET‑экосистемы — вполне рациональна в ряде сценариев. Разберём плюсы, минусы, технические ограничения и практические способы реализации.
Ключевые преимущества:
Единый стек: нет межсервисных вызовов, очередей, контрактов API.
Простота деплоя: одно приложение вместо двух (или более) сервисов.
Низкая задержка: инференс выполняется в том же процессе, без HTTP/очередей.
Отладка: единый стек вызовов, общие логи, профилирование.
Безопасность: нет открытых API для ML‑модели.
Упрощённое CI/CD: один репозиторий, один пайплайн.
Что может помешать:
Отсутствие .NET‑реализаций моделей
Многие современные архитектуры (LLaMA, Stable Diffusion, YOLO v8 и др.) существуют только в Python (PyTorch/TensorFlow/Hugging Face).
Порт на .NET часто невозможен или требует огромных усилий.
Производительность инференса
Python‑фреймворки оптимизированы под GPU/TPU. В .NET аналоги (например, ONNX Runtime) могут уступать по скорости.
Для тяжёлых моделей (свыше 1 ГБ) задержка может стать неприемлемой.
Обновление моделей
В Python можно быстро переобучить и деплоить новую версию. В .NET потребуется пересборка приложения.
Экосистема ML‑инструментов
Нет аналогов MLflow, Weights & Biases, TensorBoard в .NET.
Сложность мониторинга drift данных, качества предсказаний.
Как работает:
Обучаете модель в Python (PyTorch/TensorFlow/scikit‑learn).
Конвертируете в формат ONNX (torch.onnx.export, tf2onnx).
Деплоите ONNX‑модель в ASP.NET Core.
Используете Microsoft.ML.OnnxRuntime для инференса.
Плюсы:
Поддержка GPU (CUDA, DirectML).
Кросс‑фреймворковый формат (PyTorch → ONNX → .NET).
Низкая задержка.
Минусы:
Не все операции поддерживаются при конвертации.
Требуется тестирование на реальных данных.
Пример кода (.NET):
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
var session = new InferenceSession("model.onnx");
var input = new DenseTensor<float>(new[] { 1, 784 }); // Пример для MNIST
var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("input", input) };
var outputs = session.Run(inputs);
Как работает:
Используете библиотеку TensorFlow.NET для загрузки моделей TensorFlow/Keras.
Выполняете инференс напрямую в .NET.
Плюсы:
Нет конвертации (работает с .pb, .h5).
Полная совместимость с TF‑экосистемой.
Минусы:
Меньшая производительность, чем в Python.
Ограниченная поддержка современных TF‑версий.
Как работает:
Обучаете модель внутри .NET с помощью ML.NET.
Деплоите как часть приложения.
Плюсы:
Полный контроль над кодом.
Интеграция с DI, логами, метриками.
Минусы:
Ограниченный набор алгоритмов (нет трансформеров, GAN и т.п.).
Подходит только для простых задач (классификация, регрессия).
Выбирайте .NET‑инференс, если:
Модель небольшая (до 500 МБ) и не требует GPU.
Используется классический ML (логистическая регрессия, деревья решений).
Критична минимальная задержка (например, real‑time сканирование).
Команда владеет только .NET, нет Python‑специалистов.
Безопасность требует изоляции модели внутри приложения.
Не переводите в .NET, если:
Модель основана на трансформерах (BERT, GPT, CLIP).
Требуется GPU/TPU для инференса.
Планируются частые обновления модели.
Нужны инструменты MLOps (A/B‑тестирование, мониторинг drift).
Модель весит больше 1 ГБ.
Протестируйте ONNX Runtime
Возьмите вашу Python‑модель, конвертируйте в ONNX, запустите в .NET.
Сравните скорость и точность с Python‑версией.
Оцените размер модели
Если >500 МБ — подумайте о выделении в отдельный сервис.
Продумайте обновление моделей
Как будете деплоить новую версию? Пересборка приложения или динамическая загрузка?
Добавьте мониторинг
Логируйте входные данные, предсказания, время инференса.
Используйте IHostedService для фонового сбора метрик.
Рассмотрите гибридный подход
Критичные модели оставьте в Python (через API).
Простые модели перенесите в .NET.
Ваш план возможен, но с оговорками:
ONNX Runtime — лучший компромисс для переноса Python‑моделей в .NET.
ML.NET подойдёт только для базовых сценариев.
TensorFlow.NET — рискованный выбор из‑за ограничений производительности.
Рекомендация:
Протестируйте ONNX‑конвертацию для вашей модели.
Замерьте метрики (скорость, точность, потребление памяти).
Если результаты удовлетворительны — переносите в ASP.NET Core.
Если нет — оставьте Python‑сервис с REST/gRPC‑API.
TSMixer — современная архитектура для временных рядов (на базе трансформеров), изначально реализованная в Python (обычно на PyTorch/TensorFlow). Разберём, как интегрировать её в .NET‑проект с минимальными потерями.
Нет native‑реализаций
TSMixer не входит в ML.NET, TensorFlow.NET или ONNX Model Zoo.
Сложная архитектура
Смесь CNN и трансформерных блоков требует низкоуровневых операций, которые в .NET‑библиотеках могут быть неоптимизированы.
Зависимости от Python‑экосистемы
Препроцессинг (Pandas, NumPy), аугментация, оценка — чаще всего на Python.
Схема:
Обучите TSMixer в Python (например, через tsmixer-pytorch).
Экспортируйте в ONNX.
Деплойте в ASP.NET Core через Microsoft.ML.OnnxRuntime.
Шаги:
Экспорт в ONNX (Python):
import torch
from tsmixer import TSMixer
model = TSMixer(...)
model.eval()
# Пример входного тензора
dummy_input = torch.randn(1, seq_len, n_features)
# Экспорт
torch.onnx.export(
model,
dummy_input,
"tsmixer.onnx",
export_params=True,
opset_version=14,
do_constant_folding=True,
input_names=["input"],
output_names=["output"],
dynamic_axes={"input": {0: "batch_size"}}
)
Инференс в .NET:
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
var session = new InferenceSession("tsmixer.onnx");
// Подготовка данных (seq_len × n_features)
var input = new DenseTensor<float>(new[] { 1, seqLen, nFeatures });
for (int i = 0; i < seqLen; i++)
for (int j = 0; j < nFeatures; j++)
input[0, i, j] = normalizedData[i, j];
var inputs = new List<NamedOnnxValue> {
NamedOnnxValue.CreateFromTensor("input", input)
};
using (var results = session.Run(inputs))
{
var output = results[0].AsTensor<float>();
// Обработка предсказания
}
Плюсы:
Сохраняете Python‑обучение.
Минимальные изменения в .NET‑коде.
Поддержка GPU (через ONNX Runtime с CUDA).
Минусы:
Не все операции TSMixer могут экспортироваться в ONNX.
Требуется тестирование точности после конвертации.
Схема:
Запустите TSMixer как FastAPI‑сервис на Python.
Вызывайте его из ASP.NET Core через HttpClient.
Python (FastAPI):
from fastapi import FastAPI, HTTPException
import torch
from tsmixer import TSMixer
app = FastAPI()
model = TSMixer(...).eval()
@app.post("/predict")
def predict(data: dict):
x = torch.tensor(data["sequence"]).unsqueeze(0) # (1, seq_len, n_features)
with torch.no_grad():
y = model(x)
return {"prediction": y.squeeze().tolist()}
.NET (клиент):
public async Task<float[]> PredictAsync(float[][] sequence)
{
var payload = new { sequence = sequence };
var response = await _httpClient.PostAsJsonAsync("/predict", payload);
var result = await response.Content.ReadFromJsonAsync<PredictionResponse>();
return result.Prediction;
}
Плюсы:
Никаких ограничений на архитектуру модели.
Лёгкое обновление модели (передеплой Python‑сервиса).
Встроенные метрики (Prometheus в FastAPI).
Минусы:
Задержка на HTTP‑запрос.
Дополнительная инфраструктура (сервис + API Gateway).
Схема:
Упакуйте Python‑модель в контейнер с REST/gRPC‑API.
Запустите рядом с .NET‑приложением (в Kubernetes/Docker Compose).
Взаимодействуйте через локальный HTTP или Unix‑сокеты.
Плюсы:
Изоляция зависимостей.
Масштабирование независимо от .NET‑сервиса.
Минусы:
Сложность деплоя.
Мониторинг двух сервисов.
Начните с ONNX Runtime
Протестируйте экспорт TSMixer и сравните точность с Python‑версией.
Если конвертация успешна — используйте в .NET.
Если ONNX не подходит — FastAPI
Разверните Python‑сервис с TSMixer.
В .NET добавьте HttpClient с retry‑политикой.
Для production — гибридный подход
Критичные по задержке модели — ONNX в .NET.
Сложные модели (например, ансамбли) — Python‑сервисы.
Автоматизируйте пайплайн
После обучения в Python: экспорт в ONNX → копирование в .NET‑проект → деплой.
Используйте GitHub Actions/Azure Pipelines.
ONNX: ONNX Model Checker, Netron (визуализация).
FastAPI: Prometheus + Grafana (задержка, ошибки).
.NET: Application Insights (логи, метрики).
Итог:
Для TSMixer в .NET‑экосистеме:
Попробуйте ONNX — если работает, это самый чистый вариант.
Иначе — FastAPI‑сервис — надёжно и масштабируемо.
Не пытайтесь переписывать TSMixer на C# — слишком трудозатратно и неоптимально.