Фреймворк ICO собирает пайплайн машинного обучения в единый граф без «швов»
Компания PyTorch и её экосистема давно стали стандартом для инженеров, занимающихся машинным обучением, но типичный пайплайн обучения модели по-прежнему остаётся набором разрозненных частей, скреплённых соглашениями, а не архитектурой.

Фреймворк ICO позволяет собрать весь пайплайн машинного обучения в единый граф вычислений: от загрузки данных до обновления весов модели, без «швов» между DataLoader, циклом обучения и метриками.
Автор фреймворка ICO разобрал корневую проблему PyTorch-пайплайнов: подготовка данных живёт в Dataset и DataLoader, обучение живёт в ручном цикле, а между ними нет общей структуры. Данные передаются словарями со строковыми ключами, типы нигде не зафиксированы, параллелизм привязан к одному компоненту. ICO предлагает другой подход: каждый шаг становится оператором с явной сигнатурой «вход/выход», операторы соединяются в линейную цепочку, а управляющие конструкции (циклы, ветвления) тоже являются операторами.
Какую задачу решаем?
Если вы пишете пайплайн машинного обучения на PyTorch, скорее всего ваш код разбросан по нескольким местам:
- Загрузка данных и аугментации спрятаны внутри
Datasetиcollate_fn - Прямой проход, функция потерь, обратное распространение ошибки (вычисление градиентов, чтобы модель «понимала», куда двигать свои параметры) и обновление весов написаны в отдельном цикле
- Структура передаваемых данных определяется «по договорённости» и нигде формально не описана
Результат: при любом изменении, будь то новая аугментация или другой оптимизатор, приходится трогать несколько не связанных между собой файлов. ICO превращает пайплайн в единый граф, где каждый шаг это оператор (operator), а тип данных на входе и выходе задан явно.
Что понадобится
- Python 3.10+ и установленный PyTorch (torchvision для работы с CIFAR-10)
- Фреймворк ICO (устанавливается через pip, репозиторий автора открыт)
- Базовое знакомство с
DatasetиDataLoaderв PyTorch - Около 30 минут, чтобы пройти все шаги и запустить обучение классификатора на CIFAR-10
Пошаговая инструкция
- Определите базовые структуры данных. Создайте дата-класс для одного элемента датасета (изображение и метка класса) и класс-обёртку, которая загружает весь CIFAR-10 в память. В ICO структура данных задаётся явно: никаких словарей с произвольными строковыми ключами.
from dataclasses import dataclass
import torch
from torch import Tensor
from torchvision.datasets import CIFAR10
from torchvision.transforms import ToTensor
@dataclass(slots=True, frozen=True)
class CifarItem:
image: Tensor # (3, 32, 32)
label: Tensor # (,)
class CifarDataset:
images: Tensor # (N, 3, 32, 32)
labels: Tensor # (N,)
def __init__(self, root: str = "data/"):
dataset = CIFAR10(root=root, download=True, transform=ToTensor())
self.images = torch.stack(
[dataset[i][0] for i in range(len(dataset))]
)
self.labels = torch.tensor(
[dataset[i][1] for i in range(len(dataset))]
)
-
Оберните источник данных в оператор
IcoSource. В ICO даже источник данных это оператор. Его сигнатура: он ничего не принимает на вход и возвращает итератор по элементам. На противоположном конце графа стоитIcoSink, оператор, который принимает данные и ничего не возвращает. Вместе они замыкают граф. -
Опишите каждый шаг обработки как оператор. Аугментация, прямой проход модели (forward), вычисление функции потерь, обратное распространение ошибки (backward), обновление параметров оптимизатором, каждый из этих шагов становится отдельным оператором с явной сигнатурой: тип входных данных и тип выходных данных.
-
Соедините операторы в цепочку. Граф в ICO линейный и однонаправленный: выход одного оператора становится входом следующего. Управляющие конструкции тоже операторы. Например, цикл обучения по эпохам это оператор, который многократно выполняет вложенный в него подграф. Так работает принцип композиции: оператор может содержать другие операторы.
-
Добавьте контекст
Contextдля состояния. Если оператору нужно запомнить что-то между шагами (текущая эпоха, накопленные метрики, состояние оптимизатора), он читает и изменяет объектContext. Оператор одновременно может преобразовывать данные и менять контекст, это позволяет выражать вычисления с состоянием в том же графе. -
Запустите граф. Итоговая конструкция от
IcoSourceдоIcoSinkэто замкнутый граф с сигнатурой «ничего на входе, ничего на выходе», самодостаточный оператор, выполняющий полный цикл обучения.
На выходе: полный пайплайн классификатора изображений CIFAR-10, в котором загрузка данных, аугментация, обучение и метрики описаны единообразно, как операторы одного графа. Каждый оператор определяет, какой тип данных принимает и какой отдаёт, а значит, при замене любого шага (другая функция потерь, другой оптимизатор) несовместимость типов видна сразу, до запуска обучения. Структура данных перестаёт быть «договорённостью» и становится частью кода.
- Привычка передавать данные словарями. ICO требует явных дата-классов. Если вы продолжите использовать
dictсо строковыми ключами, вы потеряете главное преимущество подхода: проверку типов на стыках операторов. - Попытка добавить ветвление в линейный граф. Граф ICO однонаправленный, без ветвлений. Условную логику нужно реализовывать через оператор-обёртку, а не через
ifмежду шагами. - Путаница между данными и контекстом. Данные текут через цепочку операторов, контекст живёт «сбоку» и хранит состояние. Если вы засунете в контекст сами тензоры батча, граф станет нечитаемым.
- Игнорирование сигнатур. Сила подхода в том, что каждый оператор декларирует тип входа и выхода. Если вы пишете операторы без аннотаций, вы получаете тот же хаос, что и с обычным PyTorch-циклом, только с лишней обёрткой.
Кому это пригодится и что делать прямо сейчас?
ML-инженеру и дата-сайентисту. Если ваш пайплайн машинного обучения на PyTorch разросся до состояния, когда правка в аугментации ломает цикл обучения, попробуйте переписать один небольшой проект через ICO. Начните с CIFAR-10 по описанной схеме, это займёт полчаса и покажет, подходит ли вам такая модель мышления.
Автору технического контента на Дзене. Подход «всё есть оператор» хорошо ложится на обучающие статьи: каждый шаг изолирован, его можно объяснить отдельно. Если вы пишете туториалы по машинному обучению, формат графа операторов делает структуру статьи нагляднее.
Тимлиду и техлиду. Явные сигнатуры операторов работают как контракты между разработчиками: один человек пишет оператор аугментации, другой оператор обучения, и типы на стыке проверяются автоматически. Для команд, где пайплайн трогают несколько человек, это ощутимое снижение числа ошибок при интеграции.
ICO решает настоящую боль: типичный PyTorch-пайплайн действительно «расползается» по файлам, и при работе в команде это создаёт проблемы. Подход с единым графом операторов красив концептуально и полезен на практике. Но стоит быть честным: фреймворк пока авторский, с небольшим сообществом. Для продакшена в крупном проекте я бы сначала проверил, хватает ли документации и покрытия крайних случаев. А вот для учебных проектов, соревнований и личных экспериментов с машинным обучением, отличный инструмент, чтобы навести порядок в голове и в коде.
Пишете о нейросетях на Дзене?
Разберём, как делать технические туториалы понятными для широкой аудитории, с примерами и структурой, которая работает.
Узнать большеГлавный вывод: если вы ловите себя на мысли, что при каждом новом проекте заново пишете один и тот же хаотичный цикл обучения, попробуйте посмотреть на пайплайн как на граф операторов. Даже если ICO вам не подойдёт, сам принцип «каждый шаг это оператор с явным типом на входе и выходе» дисциплинирует код лучше любого код-ревью.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Разработчик на Rust нашёл баг в Neural Engine Apple, который пропустил Claude Opus
Компания Apple не выпускала Neural Engine как новый продукт: речь о глубоком техническом разборе уже существующего аппаратного блока, который провёл…

Markdown редактор MarkMello v0.4.0: папки, вкладки и поиск без потери скорости
Почему это важно Markdown-редактор MarkMello остался таким же быстрым при открытии одного файла, но теперь умеет работать с папками, вкладками и поиском, и всё…

Безопасность ИИ-агентов под угрозой: три реальные атаки 2025 года и бесплатный щит
ИИ-агенты всё чаще получают доступ к почте, платёжным данным и файлам пользователей, а список реальных атак на такие системы в 2025 и 2026 годах растёт…
Комментарии