Изучаем ONNX для применения в трейдинге

 

Мы добавили в MQL5 поддержку ONNX моделей, так как считаем, что за этим будущее. В данной теме предлагаем начать обсуждение и изучение перспективного направления, которое позволит поднять использование машинного обучения на новый уровень. Потому что теперь вы можете тренировать свои модели в вашей предпочитаемой среде, а затем запускать в торговлю с минимальными усилиями.

Небольшой обзор технологии

ONNX (Open Neural Network Exchange) — это открытый стандарт, предназначенный для обмена моделями машинного обучения между различными фреймворками. Он был разработан совместно компаниями Microsoft, Facebook и Amazon Web Services (AWS) для того, чтобы упростить разработку и развертывание моделей машинного обучения.

Основные преимущества ONNX:

  • Интероперабельность: стандарт позволяет обмениваться моделями между различными фреймворками, такими как TensorFlow, PyTorch, Caffe2, MXNet и другими. Это упрощает процесс разработки и развертывания моделей.
  • Оптимизация: технология предоставляет оптимизированные операции и графы вычислений, что позволяет улучшить производительность моделей и снизить затраты на вычисления.
  • Стандартизация: ONNX предлагает единый формат для сериализации и хранения моделей машинного обучения. Это упрощает обмен моделями между разработчиками и организациями.
  • Экосистема: поддерживается многими библиотеками, инструментами и оборудованием, что способствует распространению и ускорению инноваций в области машинного обучения.
  • Открытость: проект является открытым стандартом с активным сообществом.  И мы считаем, что оно будет только расширяться. Предлагаем развивать его вместе.


Для использования ONNX разработчики могут экспортировать свои модели из различных фреймворков, таких как TensorFlow или PyTorch, в формат ONNX. Затем эти модели можно внедрять в MQL5 программы и запускать прямо в терминале MetaTrader 5. Такой возможности не предлагает больше никто.

Одним из наиболее популярных инструментов для преобразовывания моделей в формат ONNX является ONNXMLTools от Microsoft.  Установка ONNXMLTools проста и описана на странице проекта https://github.com/onnx/onnxmltools#install, там же приведены некоторые примеры конвертации моделей.

Для запуска обученной модели используется ONNX Runtime.  ONNX Runtime — это высокопроизводительная кросс-платформенная библиотека для выполнения моделей машинного обучения, экспортированных в формате ONNX.   Используя ONNX, разработчики могут создавать модели в одном фреймворке, а затем легко развертывать их на других платформах, что обеспечивает гибкость и упрощает процесс разработки.

Таким образом, ONNX представляет собой мощный инструмент для разработчиков и исследователей в области машинного обучения. Используйте эти возможности для эффективной разработки и внедряйте их в торговлю наиболее простым способом - с помощью MQL5.

Ищите информацию и новые подходы по работе с моделями машинного обучения и делитесь здесь с другими участниками MQL5 сообщества. Мы нашли для вас несколько полезных материалов по данной теме, надеемся,  что они помогут вам быстрей разобраться в новой перспективной технологии.

Документация по MQL5: ONNX модели
Документация по MQL5: ONNX модели
  • www.mql5.com
ONNX модели - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

1. ONNX Runtime



Здесь рассказывается о проекте Open Neural Network Exchange (ONNX), который представляет собой открытый формат для представления моделей традиционного и глубокого обучения.  Также описывается ONNX Runtime, высокопроизводительный движок для запуска этих моделей.

ONNX Runtime полностью соответствует операторам, определенным в спецификации ONNX, и работает как с процессором, так и с графическим процессором на многих платформах, включая Linux, Windows и Mac.

Представлено пошаговое руководство по конвертации, загрузке и запуску модели с использованием ONNX Runtime в Azure ML, а также продемонстрированы его потенциальные преимущества, включая улучшение исполнения и эффективности предсказаний для различных моделей.

Также предлагается попробовать ONNX и внести свой вклад в растущее ONNX-сообщество.

 

2. Converting Models to #ONNX Format




Описаны различные способы преобразования моделей машинного обучения в формат ONNX для использования с ONNX Runtime.  ONNX совместим с многими популярными библиотеками машинного обучения, такими как PyTorch, TensorFlow и Scikit-Learn.

Для конвертации модели в формат ONNX необходимо использовать соответствующую библиотеку конвертации, а затем создать ONNX-модель с помощью этой библиотеки.  Это позволяет использовать модель с ONNX Runtime, что повышает ее производительность и обеспечивает ее совместимость с множеством платформ.

Приводятся примеры конвертации моделей в ONNX-формат с использованием PyTorch и TensorFlow.

 

3.  ONNX – open format for machine learning models​




Рассказывается о формате ONNX, который является открытым форматом для хранения моделей машинного обучения.  Можно конвертировать модели из различных фреймворков в ONNX формат, что обеспечивает их совместимость и удобство использования.

Приводятся примеры совместимых форматов, таких как TensorFlow, PyTorch, Keras и scikit-learn, а также обсуждаются преимущества использования ONNX, такие как ускорение времени исполнения модели и оптимизация работы на конкретном аппаратном обеспечении.

В следующем видео автор обещает показать, как конвертировать модель из Keras в ONNX формат и провести тестирование на примере задач классификации изображений и сегментации изображений.

 

4.  (Deep) Machine Learned Model Deployment with ONNX




Обсуждается разработка библиотеки машинного обучения с открытым исходным кодом Microsoft, которая была опубликована на GitHub.

Автор объясняет проблему развертывания модели машинного обучения, где модель создается на большой машине с гигабайтами памяти, но ее условия использования очень различны и требуют оптимизации для одного прогноза за раз.

Автор демонстрирует производительность различных библиотек, таких как scikit-learn, XGBoost и ML.NET, и показывает, что разница в производительности уменьшается при увеличении размера пакета. Автор также представляет ONNX как решение для оптимизации в таких случаях.

 

5. Recurrent Neural Networks | LSTM Price Movement Predictions For Trading Algorithms



В видео обсуждается использование рекуррентных нейронных сетей, в частности LSTM-сетей для прогнозирования движения цены на финансовых рынках, таких как FOREX, акции и криптовалюты.

Алгоритм написан на языке Python и может быть загружен для экспериментов с изменением параметров алгоритма.

Глубокое обучение известно как превосходный алгоритм прогнозирования, здесь мы проверяем его в торговле и предсказании движения цены.  Также добавлены технические индикаторы, такие как индикатор относительной силы RSI и скользящие средние MA, чтобы расширить входные данные для торговой модели.

 

Есть ли бенчмарки сравнивающие скорость вычисления (вывод) модели в ONNX формате со скоростью той же модели в формате С/С++?

Причина возникновения вопроса в существовании средств для конвертации из ONNX в С++ (например, в церновском ROOT).

 
Aleksey Nikolayev #:

Есть ли бенчмарки сравнивающие скорость вычисления (вывод) модели в ONNX формате со скоростью той же модели в формате С/С++?

Причина возникновения вопроса в существовании средств для конвертации из ONNX в С++ (например, в церновском ROOT).

Под капотом ONNX Runtime находится С/С++ с AVX.

Поэтому скорость инференса приличная.

 
Есть ли смысл пытаться внедрять memory-based модели (KNN, LWLR) в ONNX файл, или лучше делать расчёт средствами MQL5? Будет ли разница по времени вывода?
 

6. Everything You Want to Know About ONNX




Формат ONNX направлен на решение проблем, связанных с фрагментированным набором инструментов и фреймворков в области глубокого обучения, предоставляя переносимый файловый формат, который позволяет экспортировать модели из одного фреймворка в другой. Он прозрачный, хорошо задокументирован и стандартизирует синтаксисы, семантику и соглашения, используемые в области глубокого обучения. Кроме того, также наряду с моделями глубокого обучения, стандарт ONNX поддерживает также традиционные модели машинного обучения. ONNX обеспечивает переносимость, эффективность и оптимизацию в различных аппаратных средах без ручной оптимизации или преобразования. Видео демонстрирует базовый пример преобразования обученной модели из scikit-learn в формат ONNX с использованием специального конвертера ONNX и показывает, как реализовать исполнение моделей в случае, где обучение выполняется с помощью PyTorch, а вывод - в TensorFlow.

  • 00:00:00 Если вы столкнулись с проблемами, связанными с фрагментацией и распределенным набором инструментов и фреймворков в сложной области машинного и глубокого обучения, ONNX может быть решением. В этом разделе вебинара объясняются проблемы, с которыми сталкиваются при глубоком обучении, и как ONNX может помочь справиться с ними. Детально обсуждается преимущества, которые предлагают стандарт ONNX и среда ONNX runtime. К концу этого раздела аудитория знакомится с идеей слияния машинного интеллекта и современной инфраструктуры, которая является центральной темой всей серии вебинаров.

  • 00:05:00 Здесь обсуждаются проблемы глубокого обучения, особенно в плане реализации обучения и продакшена. При обучении трудности возникают при использовании фрагментированного набора фреймворков и инструментов, а для ускорения обучения необходимо использовать графические процессоры. Кроме того, здесь важно не только оборудование, но и программное обеспечение, такое как CUDA и KuDNN для графических процессоров NVIDIA и oneDNN для FPGA Intel. При исполнении на продакшене обученная модель должна быть оптимизирована для целевой среды, чтобы достичь высокой точности и низкой задержки, что требует преобразования типов данных и использования инструментов, таких как TensorRT.

    Таким образом, для достижения производительности глубокое обучение требует оптимизации модели и понимания аппаратного и программного уровней.

  • 00:10:00  Далее обсуждаются различные инструменты, фреймворки и аппаратные среды, необходимые для эффективной оптимизации и развертывания моделей искусственного интеллекта. Подчеркивается необходимость оптимизации модели, особенно для CPU, и упоминаются популярные инструменты, такие как Nvidia T4 и OpenVINO от Intel.
    Различные аппаратные среды требуют разных инструментов, например, семейство Jetson от Nvidia для промышленной автоматизации и IoT-сценариев, процессор обработки видео от Intel для обработки изображений и Edge TPU от Google.
    Процесс оптимизации и развертывания моделей искусственного интеллекта является сложным и непрерывным процессом, который включает в себя контроль и выявление дрейфа и переобучения, оптимизацию, развертывание и масштабирование модели.
    Подчеркивается важность наличия конвейера, который эффективно управляет всем этим замкнутым циклом.

  • 00:15:00 Представлян ONNX в качестве Open Neural Network Exchange, который действует как посредник между разными фреймворками и целевыми средами, способствуя эффективности, оптимизации и взаимодействию. ONNX поддерживает модели глубокого обучения и традиционного машинного обучения и позволяет экспортировать и импортировать модели из одного фреймворка в другой. Кроме того, ONNX поддерживает различные аппаратные среды без ручной оптимизации или конвертации. Отмечается, что с момента своего создания в 2017 году с участием основных участников AWS, Microsoft и Facebook ONNX значительно вырос с вкладами Nvidia, Intel, IBM, Qualcomm, Huawei, Baidu и других, активно продвигая эту экосистему в публичных облачных платформах, наборах инструментов и временах выполнения. ONNX прошел значительное изменение в ответ на прогресс в других фреймворках и инструментах, что сделало его компактным, кросс-платформенным и соответствующим передовым разработкам.

  • 00:20:00 Обсуждается формат файла ONNX, который позволяет экспортировать модели, обученные в одном фреймворке или наборе инструментов, в другой. ONNX базируется на идеях из таких сред исполнения, как JVM и CLR, и обеспечивает уровень абстрагирования и отвязки от более высокоуровневых инструментов.

    Это прозрачный и хорошо документированный формат, который стандартизирует синтаксисы, семантику и соглашения, используемые в области глубокого обучения. ONNX ML также является расширением, которое поддерживает традиционное машинное обучение. Когда модель экспортируется в ONNX, она становится графом множества вычислительных узлов, представляющих всю модель.

  • 00:25:00 Эта часть посвящена структуре вычислительных узлов в графе ONNX. Каждый узел является автономным и содержит оператор, который выполняет фактические вычисления, вместе с входными данными и параметрами. Входные данные могут быть тензором, составленным из различных типов данных, который обрабатывается оператором, чтобы выдать выходные данные, отправляемые на следующий вычислительный узел. Отмечается, что операторы в ONNX являются важными, поскольку они сопоставляют тип оператора ONNX с более высокоуровневым фреймворком или инструментарием, что упрощает интерпретацию модели и отображение структуры графа высокого уровня на фактический оператор, доступный в ONNX.

  • 00:30:00 Обсуждается пользовательские операторы (custom operators) и как они могут быть определены в ONNX. Пользовательские операторы полезны для продвинутых пользователей, которые создают свои собственные функции активации или методы, которые не включены в доступные операторы ONNX. Затем пользовательские операторы могут быть использованы при экспорте модели с уровня фреймворка в формат ONNX. Демонстрируется базовый пример использования ONNX для преобразования обученной модели из scikit-learn в формат ONNX с использованием специального конвертера ONNX.

  • 00:35:00 Подчеркивается прозрачность и интерпретируемость формата ONNX, что позволяет легко разбираться в структуре модели. Модель ONNX даже может быть экспортирована в protobuf, позволяя программно перебирать доступные узлы в модели. Демонстрируется использование существующей модели для исполнения, и в коде показывается, как отправлять входные данные, которые возвращают массив numpy с классификацией для каждого элемента входных данных. Одним из преимуществ ONNX является то, что он не связан с Escalon, поэтому вам не нужно беспокоиться о том, откуда приходит модель, что облегчает ее использование. Формат ONNX похож на файлы DLL или jar, поэтому вам не нужно беспокоиться о языке программирования, на котором он был написан до использования, что делает его гибким и универсальным.

  • 00:40:00 Здесь рассказывается о формате файлов ONNX и среде исполнения ONNX Runtime. ONNX - это переносимый и независимый формат, который определяет граф и операторы модели в хорошо определенной спецификации. С другой стороны, ONNX Runtime - это проект, созданный и продвигаемый Microsoft. Это отдельная реализация ONNX, которая представляет собой новый уровень реализации спецификации ONNX, создавая максимально полную поддержку стандарта. Microsoft делает большую ставку на ONNX Runtime, поскольку он становится фактическим слоем для минимальной работы в Windows 10. Объясняется отношение между ONNX и ONNX Runtime через визуальное представление их слоев.

  • 00:45:00 Рассказывается о преимуществах ONNX Runtime, который абстрагирует аппаратное обеспечение, что облегчает его использование с различными аппаратными средствами и оптимизаторами.

    В ONNX Runtime исполнение реализовано через поставщиков выполнения посредством модели плагинов, которые могут создавать производители аппаратного обеспечения для взаимодействия с их существующими драйверами и библиотеками, делая ONNX runtime портативным.  Microsoft опубликовала множество бенчмарков, доказывающих, что ONNX Runtime является высокопроизводительным, и многие команды продуктов внутри Microsoft теперь приняли его как основную среду глубокого обучения, от Bing до Office 365 до когнитивных сервисов.  Докладчик затем описывает 4 способа получения моделей ONNX, которые можно запускать поверх ONNX Runtime, начиная с Model Zoo и заканчивая использованием Azure ML для обучения и развертывания модели в облаке.

  • 00:50:00 Обсуждается, как загрузить предварительно обученную модель ONNX из Model Zoo и использовать ее для исполнения. Демонстрация включает в себя предварительно обученную модель MNIST, загруженную из Model Zoo, и тестовые изображения рукописных цифр, используемые для вывода результатов. Докладчик проходит по коду и объясняет предварительные этапы обработки, необходимые перед отправкой входных данных в модель ONNX. Код использует библиотеки ONNX Runtime, NumPy и OpenCV, а выходные данные - это предсказанные значения цифр. Докладчик демонстрирует, что модель точна и правильно определяет рукописные цифры.

  • 00:55:00  В этом разделе демонстрируется, как выполнить окончательное вычисление в случае использования, где обучение выполняется с использованием Pytorch, а исполнение производится в TensorFlow. Докладчик показывает, как преобразовать модель Pytorch в модель ONNX, а затем в файл protobuf, который может напрямую использоваться в TensorFlow. Код простой, и преобразование выполняется через встроенный инструмент экспорта, доступный в Pytorch.

  • 01:00:00 В этом разделе докладчик объясняет, как преобразовать ONNX-модель в формат TensorFlow. Для этого достаточно импортировать ONNX и использовать функцию "prepare" из "ONNX TF backend", чтобы загрузить модель, а затем записать выходные данные в файл ".pb". Показано, что модель TensorFlow может быть использована для самостоятельного исполнения. Автор говорит о предстоящий статьях на The New Stack, где будут доступны учебные пособия и весь исходный код.
Everything You Want to Know About ONNX
Everything You Want to Know About ONNX
  • 2020.07.12
  • www.youtube.com
Open Neural Network Exchange (ONNX) is an open format built to represent machine learning models. It defines the building blocks of machine learning and deep...
 

7. ONNX and ONNX Runtime



В этом видео рассказывается о экосистеме ONNX, которая представляет собой формат, позволяющий конвертировать модели из любых фреймворков в унифицированный формат, оптимизированный для каждой целевой платформы. В ONNX Runtime реализация стандарта ONNX является кросс-платформенной и модульной, с поддержкой аппаратного ускорения.
Конвертеры в ONNX работают на различных уровнях оптимизации, включая трансформацию графа и разбиение графа. Также обсуждаются различные преимущества использования ONNX, такие как API, которая позволяет использовать новые преимущества производительности, не беспокоясь о нарушении совместимости.
Рассматривается инструмент ONNX Go Live, который помогает определить оптимальную конфигурацию запуска модели ONNX на различных аппаратных платформах. Кроме того, проводится сравнение ONNX с другими фреймворками и затрагивается вопрос кросс-платформенной совместимости.
Причина обращения: