Открыть сервис

Dataflow

Dataflow — это модель вычислений, в которой программа представляется в виде ориентированного графа, где узлы (вершины) обозначают операции или функции, а дуги (рёбра) — потоки данных между ними. В отличие от традиционной фон-неймановской архитектуры с последовательным выполнением команд и централизованным управлением, в dataflow-модели вычисления инициируются готовностью данных: операция выполняется, как только все её входные данные становятся доступны. Такой подход обеспечивает естественный параллелизм, поскольку независимые части графа могут выполняться одновременно, без явного управления порядком исполнения.

История

Идея dataflow-вычислений возникла в 1960-х годах как альтернатива доминирующей последовательной модели. Ранние теоретические работы принадлежат Джеку Деннису (Jack Dennis) из Массачусетского технологического института, который в 1974 году предложил архитектуру статического dataflow-графа. В 1970-1980-х годах были разработаны экспериментальные машины, такие как MIT Tagged-Token Dataflow Machine (TTDA) и Manchester Dataflow Machine. Однако из-за сложности аппаратной реализации и проблем с эффективностью на реальных задачах интерес к чистым dataflow-архитектурам снизился к концу 1980-х.

Возрождение интереса к dataflow-модели произошло в 2000-х годах в связи с развитием многоядерных процессоров, распределённых вычислений и потоковой обработки данных. Dataflow-подход лёг в основу многих современных технологий: систем потоковой обработки (Apache Flink, Apache Beam), фреймворков для машинного обучения (TensorFlow, PyTorch — графы вычислений), а также языков программирования (LabVIEW, Simulink, Node-RED). В России dataflow-концепции применяются в научных исследованиях, в частности в Институте системного программирования РАН, а также в промышленных системах автоматизации.

Основные принципы

Граф вычислений

Программа представляется в виде направленного ациклического графа (DAG) или графа с циклами (для итеративных алгоритмов). Узлы — это операции (сложение, умножение, фильтрация, машинное обучение). Дуги — каналы передачи данных. Каждый узел может иметь несколько входов и один или несколько выходов.

Управление по готовности данных

Выполнение узла запускается автоматически, когда на всех его входах присутствуют данные. Это называется «управление потоком данных» (data-driven execution). Нет центрального счётчика команд или планировщика, определяющего порядок. Это позволяет максимально использовать параллелизм.

Отсутствие побочных эффектов

В чистой dataflow-модели узлы не имеют состояния и не изменяют глобальные переменные. Все данные передаются только через дуги графа. Это упрощает анализ, отладку и распараллеливание.

Потоковая обработка

Dataflow-модель естественно поддерживает потоковую обработку (stream processing), где данные поступают непрерывно и обрабатываются по мере поступления. Каждый узел может обрабатывать бесконечные последовательности данных (потоки).

Виды dataflow-моделей

Статическая dataflow

В статической модели количество токенов (единиц данных) на каждой дуге фиксировано — обычно один. Узел может выполняться, только когда на всех входах есть ровно один токен. Это упрощает аппаратную реализацию, но ограничивает параллелизм (нет конвейерной обработки).

Динамическая dataflow

В динамической модели допускается несколько токенов на дуге, каждый из которых помечен тегом (tagged-token). Теги позволяют различать данные из разных итераций цикла или разных вызовов функции. Это даёт возможность конвейерной обработки и более эффективного параллелизма. Пример — MIT Tagged-Token Dataflow Machine.

Dataflow с итерациями

Для поддержки циклов в граф вводятся обратные связи (циклы). Узел может быть выполнен многократно, а данные передаются по циклу до выполнения условия выхода. Это используется в алгоритмах машинного обучения (градиентный спуск) и численных методах.

Гибридные модели

Многие современные системы (TensorFlow, Apache Flink) используют гибридный подход: граф вычислений строится на основе dataflow-принципов, но выполнение управляется планировщиком, который учитывает ресурсы и зависимости. Это сочетает преимущества dataflow (параллелизм, потоковая обработка) с эффективностью традиционных систем.

Применение

Потоковая обработка данных

Dataflow-модель является основой для систем потоковой обработки (stream processing), таких как Apache Flink, Apache Beam, Google Cloud Dataflow. Эти системы позволяют обрабатывать непрерывные потоки данных в реальном времени: мониторинг, анализ логов, обработка событий IoT, финансовые транзакции. В России такие системы используются в банковском секторе (Сбербанк, ВТБ), телекоммуникациях (Ростелеком) и промышленности.

Машинное обучение и глубокое обучение

Фреймворки машинного обучения TensorFlow (разработка Google) и PyTorch (разработка Meta — организация признана экстремистской и запрещена в РФ) используют dataflow-графы для представления вычислений. Граф строится из операций (свёртка, активация, потеря) и тензоров (многомерных массивов данных). Это позволяет автоматически распараллеливать обучение на GPU/TPU, а также оптимизировать граф (удаление мёртвых узлов, слияние операций). В России dataflow-подход применяется в разработке нейросетей для распознавания речи (Яндекс), компьютерного зрения (VisionLabs) и обработки естественного языка.

Автоматизация и управление

Dataflow-модель используется в системах автоматизации и управления (SCADA, PLC). Пример — среда разработки LabVIEW (National Instruments), где программа создаётся в виде графического dataflow-графа. Узлы — это функции (чтение датчика, управление клапаном, ПИД-регулятор), дуги — сигналы. Это позволяет инженерам без глубоких знаний программирования создавать сложные системы управления. В России LabVIEW применяется в промышленности (Росатом, Газпром) и научных лабораториях.

Научные вычисления

Dataflow-модель используется в системах для научных расчётов, таких как Simulink (MathWorks) и OpenModelica. Они позволяют моделировать динамические системы (механические, электрические, гидравлические) в виде блок-схем. Dataflow-подход упрощает симуляцию и анализ сложных систем.

Языки программирования

Существуют языки, основанные на dataflow-модели: LabVIEW (графический), Node-RED (для IoT), Pure Data (для аудио/видео), а также библиотеки для Python (Dask, Ray). Они позволяют описывать вычисления в виде графа, который затем выполняется параллельно или распределённо.

Преимущества и недостатки

Преимущества

  • Естественный параллелизм: независимые узлы могут выполняться одновременно, что эффективно использует многоядерные и распределённые системы.
  • Потоковая обработка: dataflow-модель идеально подходит для обработки непрерывных потоков данных в реальном времени.
  • Прозрачность: граф вычислений наглядно показывает зависимости между операциями, что упрощает отладку и оптимизацию.
  • Автоматическое распараллеливание: разработчику не нужно вручную управлять потоками и синхронизацией.

Недостатки

  • Сложность реализации: аппаратная реализация чистого dataflow требует сложных схем управления (тегирование, буферизация).
  • Накладные расходы: динамическое управление готовностью данных и передача токенов могут создавать значительные накладные расходы, особенно на мелкозернистых графах.
  • Трудности с циклами и состоянием: поддержка итераций и глобального состояния усложняет модель и снижает производительность.
  • Неэффективность на последовательных задачах: для задач с малым параллелизмом dataflow-модель может быть медленнее традиционной.

Примеры систем и инструментов

СистемаТипПрименение
Apache FlinkПотоковая обработкаАнализ данных в реальном времени
Apache BeamПотоковая/пакетная обработкаУнифицированная обработка данных
TensorFlowМашинное обучениеНейросети, глубокое обучение
PyTorchМашинное обучениеНейросети, исследовательские задачи
LabVIEWАвтоматизацияSCADA, управление оборудованием
SimulinkМоделированиеДинамические системы, симуляция
Node-REDIoTПотоковая обработка данных с датчиков
DaskПараллельные вычисленияОбработка больших данных на Python

Dataflow в России

В России dataflow-подход активно применяется в научных и промышленных проектах. В Институте системного программирования РАН ведутся исследования по оптимизации dataflow-графов для высокопроизводительных вычислений. Компания «Яндекс» использует dataflow-модель в своих системах машинного обучения и обработки данных (YTsaurus, YQL). В промышленности dataflow-принципы реализованы в системах автоматизации на базе LabVIEW и SCADA-системах (например, «Трассировка» от НПО «Автоматика»). Также dataflow-модель лежит в основе некоторых российских фреймворков для потоковой обработки, таких как «Стрим» (разработка компании «Криптонит»).

Источники

  • Dennis, J. B. «First version of a data flow procedure language». MIT Laboratory for Computer Science, 1974.
  • Arvind, K. P. Gostelow, W. Plouffe. «An asynchronous programming language and computing machine». University of California, Irvine, 1978.
  • Lee, E. A., Messerschmitt, D. G. «Static scheduling of synchronous data flow programs for digital signal processing». IEEE Transactions on Computers, 1987.
  • Apache Flink Documentation. «Dataflow Programming Model». The Apache Software Foundation.
  • TensorFlow Documentation. «Introduction to Graphs and Functions». Google LLC.
  • PyTorch Documentation. «Autograd mechanics». Meta (организация признана экстремистской и запрещена в РФ).
  • LabVIEW Documentation. «Dataflow Programming». National Instruments.
  • Институт системного программирования РАН. «Исследования в области параллельных вычислений и dataflow-архитектур». Отчёты, 2010-2020.
  • «Стрим: потоковая обработка данных на основе dataflow-модели». Компания «Криптонит», 2019.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →