Технологии QNX и КПДА в России · • Функциональные возможности прикладной библиотеки • План развития
Функциональные сети на основе библиотеки SynapseGrid
Transcript of Функциональные сети на основе библиотеки SynapseGrid
![Page 1: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/1.jpg)
SynapseGridЯзык описания систем реального времени
Арсений Жижелев, Мэйл.Ру Геймз
![Page 2: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/2.jpg)
Введение
![Page 3: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/3.jpg)
Системы реального времени – баланс буферизации и latency
потоковая обработка событий/данных+ функциональное программирование
параллельность, надёжность+ композиция систем
модульность и интеграция
Аналоги SynapseGrid(Simulink, AnyLogic, Spark, Rx)
![Page 4: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/4.jpg)
Система ведения диалога «Речевой портал»
Мотивация создания языка описания систем реального времени
![Page 5: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/5.jpg)
Речевой портал: выделение признаков MFCC (CMU sphinx4)
● обрабатывается дискретный сигнал● есть модули
– функциональные, без состояния,– с состоянием, – с собственной буферизацией и задержкой
● в поток встроены управляющие сигналы – начало/конец речи● обратные связи
заказ такси
объявления
![Page 6: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/6.jpg)
10мс фреймы
100мс задержки (latency)
длительный процесс распознавания (~1x)• нельзя распознавать пакетно
реакция на события в реальном времени• перебивание• обратная связь от модуля произнесения• телефония: соединение/занято• диалог по второй линии
разветвлённые алгоритмы потоковой обработки• выбор ветки обработки зависит от состояния
Речевой портал:технологические потребности
![Page 7: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/7.jpg)
I. DSL
![Page 8: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/8.jpg)
I. DSLПример 1: Hello, World
![Page 9: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/9.jpg)
Hello, World
object HelloSystem extends BaseTypedSystem{ val nameInput = input [String]("nameInput") val helloOutput = output[String]("helloOutput") (nameInput -> helloOutput). map("Hello, "+_, "hello, + _")}
val f = HelloSystem.toStaticSystem.toDynamicSystem.toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)val name = "World"val hello = f(name)
val f = magic(HelloSystem)
val hello = f("World")println(hello)
val s = HelloSystem.toStaticSystems.toDot().saveTo("helloSystem.dot")
![Page 10: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/10.jpg)
I. DSL Пример 2: VADЦепь обнаружения речи
![Page 11: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/11.jpg)
•оценка текущего уровня громкости (мощности) и уровня фона•сглаживание уровней•подсчёт длительности условия: высокий уровень/низкий уровень
•переход в состояния: начало речи/речь/окончание речи/фон•буферизация сигнала до момента принятия решения
•перенаправление сигнала речи на речевой выход•формирование сигналов начала речи и окончания речи•конфигурирование параметров оценки
Цепь детектирования речи VAD(voice activity detection)
время
уровень
15dB
![Page 12: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/12.jpg)
val currentStateLengthMs = state[Int]("currentStateLengthMs", 0)
continuousAudioInput.map(_.timeFrame.deltaTimeMs, "deltaTimeMs").addTo(currentStateLengthMs)
automaton.onAutomatonStateChanged.const(0).saveTo(currentStateLengthMs, "len = 0")
VAD:Подсчёт длительности текущего состояния
![Page 13: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/13.jpg)
trait LevelsEstimationB extends Breadboard with InputB { continuousAudioInput. withState(levels). stateMap({
case (levelsValue,mediaFrame) => val newLevelsValue =
levelsValue.nextLevels(mediaFrame.energyDb) (newLevelsValue,(newLevelsValue,mediaFrame))
},"energyLevel") >> mediaFrameWithLevels
(mediaFrameWithLevels -> newLevels).map(_._1, "_._1")}
VAD:Оценка уровня сигнала/фона
![Page 14: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/14.jpg)
trait Breadboard extends BaseTypedSystem { val settings: VadSettings val speechEndBufferMs = settings.speechEndDecisionMs val frameSizeMs = 10
//internal contacts for sub schemes interconnections lazy val mediaFrameWithLevels =
contact[(Levels, MediaFrame)]("mediaFrameWithLevels") lazy val newLevels = contact[Levels]("newLevels") lazy val speechSurelyStarted = contact[Any]("speechSurelyStarted") lazy val speechSurelyFinished = contact[Any]("speechSurelyFinished")
// The state of VAD algorithm lazy val currentStateLengthMs = state[Int]("currentStateLengthMs", 0) lazy val speechBufferReversed =
state[List[MediaFrame]]("speechBufferReversed", List()) lazy val levels = state[Levels]("levels", Levels())}
Макетная плата (breadboard/protoboard)Cake pattern
![Page 15: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/15.jpg)
I. DSL Пример 3: ETL
![Page 16: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/16.jpg)
Extract Transform Load
![Page 17: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/17.jpg)
I. DSL4. Обзор возможностей
DSL
![Page 18: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/18.jpg)
Примитивы• обычные Scala-функции• контакты• управляемые переменные состояния
Базовые средства композиции• map, flatMap, flatten, filter, collect, foreach, stateFlatMap• + несколько специальных DSL для частых задач• обратные связи (!) «из коробки»
Средства абстрагирования/агрегации• обычные trait’ы Scala – cake pattern/breadboard• подсистемы с типизированными входами/выходами –
мультифункции
Язык SynapseGrid
![Page 19: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/19.jpg)
State DSL: работа с состоянием (stateMap, stateFlatMap, updateState, withState)
• Специализированные инструменты для numeric, для списков, для игнибиторных дуг• Зависимые переменные (spreadsheet): (update, onChange, dependsOn)• Накопление данных до сигнала сброса: lastJoinUntil
Automata DSL: конечный автомат на основе событий, поступающих на разные контакты
Continuation DSL: конечный автомат на основе событий с одного контакта
Switcher DSL: взаимоисключающие ветви(If, ElseIf, Else)
Discrete time DSL: управление дискретным временем: redlinks, delayN
Exception DSL: обработка исключений: tryMap, success, recover, unhandled
Инструментарий DSL/API
![Page 20: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/20.jpg)
II. Исполнение системы
Однопоточное, параллельное, распределённоеИнтеграция с другим кодом
![Page 21: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/21.jpg)
Обрабатываемые данные – immutable сигналы:
case class Signal[T](contact:Contact[T], data:T)
Signal(nameInput, "World")Signal(helloOutput, "Hello, World.")
Текущее состояние исполнения системы в дискретный момент i:
Seq[Signal[_]]
State(0) == Seq(Signal(nameInput, "World"))State(1) == Seq(Signal(helloOutput, "Hello, World."))
Signal, треллис
![Page 22: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/22.jpg)
Треллис – развёртка состояния во времени.
val trellis = Seq( Seq(Signal(nameInput, "World")), Seq(Signal(helloOutput, "Hello, World.")))
trellis: Seq[Signal[_]]
Треллис
Signal(nameInput, "World")
Signal(helloOutput, "Hello, World.")
![Page 23: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/23.jpg)
Сеть Петри – модель перемещения фишек по двудольному ориентированному графу.
Контакт – позицияСвязь – переходСигнал – фишка
Семантика Synapse Grid – перемещение фишек по орграфу, пока все фишки не окажутся в выходных позициях.Накладные расходы – O(1) на один переход одного сигнала.
Сеть Петри
Signal(nameInput, "World")
Signal(helloOutput, "Hello, World.")
![Page 24: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/24.jpg)
• обычная функция – один вход/один выход• функциональная композиция – линейная
f: X => Y
• мультифункция – несколько входов и выходов• системная композиция – произвольные ветвления
^f: X1 x X2 => Y1 x Y2 g: Signal => Seq[Signal]
Подсистемы (мультифункция)
![Page 25: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/25.jpg)
SystemBuilder – скрипт создания графа системы. Выполняется на этапе конфигурирования. Используются средства Scala: functions, cake pattern, for comprehension.
StaticSystem – immutable граф системы.Используется для статического анализа и для конвертации в *.dot_.toStaticSystem
SignalProcessor – исполнение системы.Выполняются функции, привязанные к переходам.
DynamicSystem – инкапсулированный процессор + состояние системы = чёрный ящик. Принимает и возвращает сигналы:Signal[Input] => Seq[Signal[Output]]
Transducer – выбран один вход + один выход построена функция, скрывающая сигналы. Работает только с данными:f(i:Input):Seq[Output]
Этапы конвертации системы
Runtime
Config time
Dev/test time
![Page 26: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/26.jpg)
Нажмите на иконку в центре фрейма,что бы добавить диаграмму на слайд
• никаких изменений кода системы, только вызов .parallel у StaticSystem• детерминированный результат эквивалентный однопоточному запуску• сериализованный доступ к state'у
• дополнительные накладные расходы на параллельное исполнение. Поэтому имеет смысл только при некоторых условиях.
Параллельное исполнение
val f = HelloSystem.toStaticSystem.toDynamicSystem.toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)val name = "World"val hello = f(name)
val f = HelloSystem.toStaticSystem.parallel.toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)val name = "World"val hello = f(name)
![Page 27: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/27.jpg)
Хотим запустить сложную систему с подсистемами на нескольких хостах
Распределённый запуск: 1
![Page 28: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/28.jpg)
Каждая подсистема оборачивается в экторКаждый хост тоже снабжается эктором
Распределённый запуск: 2
![Page 29: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/29.jpg)
На каждом хосте добавляется слой роутеров, каждый из которых представляет свою подсистемуПосле старта эктора он регистрируется в своём роутере.Подсистема ничего не знает о расположении других систем. Взаимодействует только со своим роутером
Распределённый запуск: 3
![Page 30: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/30.jpg)
III. Расширение библиотеки
https://github.com/Primetalk/SynapseGrid
![Page 31: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/31.jpg)
DSL для описания системы • SystemBuilder – контейнер для
создаваемых связей, входов и выходов. Минимальный набор методов
• DSL – pimp-my-library – добавлены helper-методы, позволяющие упростить создание разных связей
• Extensions – механизм, позволяющий добавить в SystemBuilder своё состояние, и затем пользоваться им при конструировании системы.
• StaticExtensions – механизм, позволяющий добавить в StaticSystem дополнительную информацию. Например, hint’ы для deployment descriptor’а
Устройство библиотеки
SignalProcessor• RuntimeComponent – инкапсуляция
логики обработки данных на определённом контакте.
• RuntimeSystem – index по контактам. С каждым контактом связаны RuntimeComponent’ы, которые обрабатывают сигналы.
• unhandledExceptionHandler – обработка исключений уровня системы
• redlinks – механизм, позволяющий сделать «сверхвремя» внутри одного дискретного шага
• SystemConvertingSpi – конвертация static-системы в RuntimeComponent. Используются PartialFunction.
• TrellisProducer – развёртка/построение треллиса во времени с использованием RuntimeSystem.
![Page 32: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/32.jpg)
trait SwitcherDsl extends SystemBuilderDsl{ class SwitcherBuilder[T](c: Contact[T], name: String = "")
(implicit sb: SystemBuilder) { def If(condition: T => Boolean) = ElseIf(condition) def ElseIf(condition: T => Boolean) = { val id = nextId conditions += Condition(id, condition) createContactForId(id) } def Else = compileBranches } implicit class SwitcherContactOps[T]( val c: Contact[T]) (implicit sb: SystemBuilder) { def switcher(name: String = "") = new SwitcherBuilder[T](c, name) } }
DSL: switcher
val level = contact[Int]("level")val sw = level.switcher("sw")
sw.If(_ > 10) >> highLevelsw.ElseIf(_ > 3) >> mediumLevelsw.Else() >> lowLevel
val level = contact[Int]("level")
level.filter(_ > 10) >> highLevellevel.filter(i => i<=10 && i > 3) >> mediumLevellevel.filter(_ <= 3) >> lowLevel
![Page 33: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/33.jpg)
IV. Приложения
Системы мягкого реального времени (reactive systems)Обработка Big Data
![Page 34: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/34.jpg)
Приложения: (reactive systems)Системы мягкого реального времени
Речевые приложения• Распознавание/синтез речи, ведение диалогов
Обработка звука в телефонии• Телеконференции/очистка звука/подстройка громкости• Сервисы самообслуживания (DTMF)
Обработка видеопотоков
Реализация SMS-сервисов• биллинг
Распределённая обработка данных• Анализ логов• ETL
Мониторинг АСУТП
![Page 35: Функциональные сети на основе библиотеки SynapseGrid](https://reader031.fdocument.pub/reader031/viewer/2022032208/587fc7321a28ab3b158b6335/html5/thumbnails/35.jpg)
IV. Экосистема Big Data