The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступна СУБД EuclidesDB, использующая элементы машинного обучения

26.11.2018 16:58

Подготовлен первый экспериментальный выпуск СУБД EuclidesDB, предоставляющей средства для использования моделей машинного обучения при индексировании и выборке данных. СУБД позволяет привязывать к различным классам информации отдельные модели машинного обучения, например, можно подключить модель для классификации изображений и применять СУБД для поиска похожих фотографий или выборки изображений, на которых присутствует определённый объект. Проект написан на языке С++ и распространяется под лицензией Apache 2.0. Модели машинного обучения обрабатываются при помощи библиотеки PyTorch (используется C++-интерфейс libtorch).

СУБД EuclidesDB предоставляет универсальное решение для создания систем обработки данных с использованием моделей машинного обучения, образующее готовый каркас для подключения необходимых моделей и их применения для поиска похожих данных. Для каждой категории данных могут подключаться отдельные модели, например, для поиска туфель может использоваться одна модель, натренированная на изображениях обуви, а для поиска футболок - другая. На практике, данные модели могут применяться для рекомендации клиенту интернет-магазина туфель и футболок, наиболее похожих на те, что уже выбрал покупатель.

При добавлении новых данных в БД, например, изображения, вместе с данными указывается модель машинного обучения, которую следует применить для индексации. Результаты обработки сохраняются в локальное хранилище в формате ключ/значение, и используются при построении индекса запросов. При обработке запроса похожих элементов, переданный в запросе эталонный элемент обрабатывается с использованием одного из выбранных алгоритмов поиска похожих объектов. В запросе определяется допустимый диапазон моделей, которые следует использовать при поиске. На выходе для каждой из выбранных моделей возвращается список наиболее близких элементов с указанием уровня релевантности.

Взаимодействие с СУБД осуществляется с использованием протокола gRPC c применением HTTP/2 для сетевого взаимодействия и Protocol Buffers для сериализации данных. Низкоуровневое хранение данных реализовано с использованием LevelDB. Логика обработки моделей задаётся на языке Python (TorchScript ) и оформляется в виде модулей к PyTorch. В комплекте поставляются три готовые модели (resnet101, resnet18 и vgg16), обеспечивающие распознавание и классификацию изображений. В дальнейшем планируется включить в состав модели для обработки других видов информации.

Поддерживается несколько методов индексации и поиска данных:

  • annoy - движок нечёткого поиска на базе библиотеки Annoy (Approximate Nearest Neighbors Oh Yeah), которая применяется для формирования рекомендаций в музыкальном сервисе Spotify. Библиотека реализует алгоритм решения задачи поиска ближайшего соседа, оптимизированный для снижения потребления оперативной памяти и использования подкачки данных с диска;
  • faiss - движок на основе библиотеки поиска похожих элементов Faiss, развиваемой компанией Facebook. Faiss предлагает большой набор настроек, позволяющих добиться необходимого компромисса в отношении времени поиска, качества поиска, потребления оперативной памяти и длительности обучения;
  • exact_disk - простейший движок, в котором применяется линейный поиск точных совпадений. Индекс сразу сохраняется на диск, что позволяет добиться минимального расхода оперативной памяти.


  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Открыт код СУБД MapD Core, использующей GPU для хранения и обработки данных
  3. OpenNews: Представлена децентрализованная СУБД Noms, основанная на идеях Git
  4. OpenNews: Выпуск распределённой СУБД TiDB 2.0
  5. OpenNews: Компания Bloomberg открыла код распределённой СУБД Comdb2
  6. OpenNews: Выпуск отказоустойчивой СУБД CockroachDB 2.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49664-database
Ключевые слова: database, ai, pytorch
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (14) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, klalafuda (?), 19:22, 26/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    SELECT COUNT(*) FROM Cats WHERE cat_image LIKE LOAD_FILE('mycat.jpeg')
     
     
  • 2.3, na (??), 20:20, 26/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это когда-то в светлом будущем. Пока только так.:)

    SELECT COUNT(*) FROM Turtles WHERE turtle_image LIKE rifle

     
  • 2.6, Аноним84701 (ok), 21:30, 26/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > SELECT COUNT(*) FROM Cats WHERE cat_image LIKE LOAD_FILE('mycat.jpeg')

    Скорее:
    SELECT COUNT(*) FROM ReCaptcha WHERE fire_hydrant_image LIKE LOAD_FILE('green_traffic_light_for_my_bus.jpeg');

     

  • 1.2, Урри (?), 19:48, 26/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не понимаю, зачем?
    Неужели так сложно навесить над движком абсолютно любой БД ту жа самую логику и вместо INSERT (image) делать предвычисленные INSERT (image, attribute1, attribute2, attribute3)?
     
     
  • 2.12, Ordu (ok), 07:09, 27/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Неужели так сложно...

    Простые пути не всегда лучшие. В новости же всё сказано: алгоритмы выполнения запросов заточены под определённые задачи AI. Всякие там SQL субд общего назначения менее заточены под эти задачи и будут сливать по производительности. Ну или точнее разработчики этой ЕвклиДБ полагают, что они будут сливать: тесты пока они судя по всему стесняются выкладывать.

     

  • 1.5, Аноним (5), 21:00, 26/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Без прямой поддержки Julia - не жилец...
     
     
  • 2.11, fu (?), 04:09, 27/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    да, julia не жилец.
     

  • 1.9, User237 (?), 00:10, 27/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А есть тут возможность обработки логов и каких-либо метрик мониторинга?
     
  • 1.10, Anon4ik_ (?), 00:37, 27/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Стесняюсь спросить, сколько ж она жрать то будет?
     
     
  • 2.22, Ydro (?), 19:09, 27/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Две видяхи.
     
     
  • 3.23, Фикус (?), 08:53, 28/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    на завтрак, столько же на обед и ужин
     

  • 1.20, Аноним (20), 16:31, 27/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >модели могут применяться для рекомендации клиенту интернет-магазина туфель и футболок, наиболее похожих на те, что уже выбрал покупатель

    Идиотское предположение, что покупателю нужна еще одна такая же вещь. Обычно это не так.

     
     
  • 2.21, Аноним (21), 17:42, 27/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Идиотское предположение, что покупателю нужна еще одна такая же вещь. Обычно это
    > не так.

    Выбрал не значит, что уже купил. На Ali, например, одна из самых удобных штук, когда в момент помещения в корзину товара он показывает кучи похожих вещей и можно сразу найти лучше или дешевле.

     

  • 1.24, Аноним (24), 15:58, 28/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а как они в gRPC очередь запросов хранят? а что если операции изменяют состояние сервера? выходит нужно хранить операции в надежном хранилище. клиент может запросить сервер статус операции по определенному id? выходит нужно запросы вечно хранить или требовать от клиента их аннулировать (но тупой клиент например web может их потерять и не аннулировать). как бы вы все это организовали?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру