В машинном обучении пайплайн обучения нейронной сети обычно разбит на несколько компонентов: загрузка данных, аугментация, батчирование, прямой проход, вычисление потерь, обратное распространение и обновление весов. В экосистеме PyTorch эти этапы распределены между Dataset, DataLoader, моделью и циклом обучения. Такая архитектура приводит к неявной структуре данных, фрагментации вычислений и привязке исполнения к конкретным компонентам. Например, DataLoader предоставляет собственный механизм многопроцессорной подготовки данных, который нельзя применить к произвольной части пайплайна.
Автор статьи предлагает альтернативный подход: представить весь пайплайн как единый вычислительный граф. Для этого он разработал фреймворк ICO, основанный на нескольких принципах. Любое вычисление представлено оператором, который явно определяет типы входных и выходных данных. Граф является линейным однонаправленным потоком без ветвлений: выход одного оператора становится входом следующего. Управляющие конструкции, такие как циклы, также реализованы как операторы, что позволяет вкладывать одни операторы в другие. Для сохранения состояния между операторами используется Context, который операторы могут читать и изменять.
На практике автор демонстрирует построение пайплайна для обучения классификатора изображений на датасете CIFAR-10. Он определяет базовые структуры данных: CifarItem для одного элемента и CifarDataset для загрузки всего датасета в память. Затем строит граф, где каждый этап — от подготовки данных до обновления весов — представлен оператором. Такой подход делает структуру данных явной, упрощает оптимизацию и позволяет переиспользовать компоненты.
Почему это важно? Традиционные пайплайны часто страдают от скрытых зависимостей между компонентами, что затрудняет отладку и масштабирование. Единый граф вычислений дает разработчику полный контроль над потоком данных и упрощает внесение изменений. Кроме того, такой подход может быть полезен для автоматической оптимизации, например, для планирования выполнения на разных устройствах.
Однако у подхода есть ограничения. Линейный граф без ветвлений может быть недостаточно гибким для сложных архитектур, где требуется параллельная обработка или условные переходы. Автор отмечает, что управляющие конструкции реализованы как операторы, но это может усложнить реализацию нетривиальных сценариев. Тем не менее, для типовых задач обучения классификаторов подход выглядит жизнеспособным.
В целом, статья предлагает интересную альтернативу традиционному пайплайну PyTorch. Фреймворк ICO находится в разработке, но уже демонстрирует потенциал для упрощения и унификации ML-пайплайнов. Возможно, в будущем подобные подходы станут более распространенными, особенно с ростом сложности моделей и необходимости в гибкой инфраструктуре.

