xarray-sql: нейросеть обучили прямо в SQL-запросах

xarray-sql: нейросеть обучили прямо в SQL-запросах

На Hacker News (рубрика Show HN) разработчик alxmrs опубликовал демонстрацию: полноценное обучение нейросети, с прямым проходом, функциями активации и градиентным спуском, реализовано не на привычном ML-фреймворке, а целиком через SQL-запросы поверх его же библиотеки xarray-sql (xql), которая транслирует SQL в операции над многомерными массивами xarray/Dask.

Архитектура сети, многослойный перцептрон 784 → 196 → 32 (активация tanh) → 10 (softmax): классификатор изображений 28×28 пикселей на 10 классов, стандартная размерность для MNIST-подобных наборов. Данные, набор Fashion-MNIST, который лениво подгружается из публичного S3-хранилища (carbonplan-share) в формате zarr, без загрузки всего датасета в память; если сеть недоступна, скрипт автоматически переключается на синтетический набор (шаблон на класс плюс шум), сгенерированный локально, чтобы демо работало и офлайн.

Из полного набора SQL-запросом с ORDER BY random() LIMIT выбирается подвыборка из 700 примеров: 70% (490) идёт на обучение, 30% (210), на тест. Скорость обучения (learning rate), 0.5, число шагов, 60, размер чанка данных, 250.

Ключевой приём: каждый слой сети хранится как отдельная SQL-таблица, матрица весов и вектор смещений. Прямой проход выражен обычными SQL-операциями: JOIN таблицы входных значений с таблицей весов по общему индексу, GROUP BY по выходному индексу и SUM(значение * вес), то есть умножение матриц реализовано через JOIN + GROUP BY + SUM, а функция активации tanh вызывается прямо внутри SQL-запроса.

Отдельная оптимизация, пропуск нулевых (фоновых) пикселей в условии WHERE: поскольку умножение на ноль всё равно даёт ноль, строки с нулевыми пикселями можно исключить без изменения результата. На реальном Fashion-MNIST, где около половины пикселей, фон, это дало ускорение примерно в 1.8 раза: 2.56 секунды на шаг обучения сократились до 1.45 секунды.

Проект открытый, код лежит в репозитории xqlsystems/xarray-sql на GitHub как самодостаточный скрипт-бенчмарк с зависимостями, объявленными прямо в файле. Обсуждение на Hacker News на момент публикации набрало 69 очков и 16 комментариев.

Ключевые факты

  • Разработчик alxmrs реализовал обучение нейросети (MLP 784→196→32→10) целиком через SQL-запросы поверх своей библиотеки xarray-sql
  • Данные, Fashion-MNIST, лениво читаются из S3-хранилища в формате zarr; при недоступности сети, офлайн-фолбэк на синтетический набор
  • Умножение матриц в прямом проходе выражено как JOIN + GROUP BY + SUM, активация tanh вызывается прямо в SQL
  • Обучение: подвыборка 700 примеров (70% train / 30% test), learning rate 0.5, 60 шагов
  • Оптимизация «пропуск нулевых пикселей» ускорила шаг обучения примерно в 1.8 раза, с 2.56 до 1.45 секунды

Почему это важно

Демо показывает, что связка SQL и распределённых массивов (xarray/Dask через xarray-sql) достаточно выразительна, чтобы реализовать не только аналитические запросы, но и обучение нейросети: матричное умножение как JOIN+GROUP BY+SUM, нелинейные активации прямо в запросе. Это иллюстрация границ выразительности SQL-движков для вычислений над многомерными данными, а не готовый продукт для продакшена.

Кому это важно

Инженерам данных и разработчикам, которые работают с большими многомерными массивами через SQL-движки (Dask, Spark SQL, DuckDB и аналоги) и задумываются, можно ли переиспользовать существующую SQL-инфраструктуру для несложных ML-задач без отдельного ML-стека; пользователям и авторам библиотеки xarray-sql, которым демо показывает возможности инструмента на конкретном примере.

Как это применить

Код опубликован в открытом репозитории xqlsystems/xarray-sql на GitHub как файл-бенчмарк с зависимостями, объявленными прямо в шапке скрипта (PEP 723), его можно запустить локально через uv, установив xarray_sql, xarray, numpy, s3fs и zarr. Архитектуру сети, скорость обучения, число шагов и размер подвыборки можно менять через константы в начале файла для собственных экспериментов.

Можно ли доверять

Это реальный открытый исходный код в публичном репозитории с конкретными замерами производительности «было/стало» на реальном датасете Fashion-MNIST, а не голословное заявление о возможностях. При этом сам автор подаёт материал как демонстрационный Show HN-пример, а не как готовое к промышленному использованию решение.

Риски и подводные камни

SQL-движки не заточены под обучение нейросетей: на каждом шаге перезаписываются целые таблицы весов, а схема ограничена простым многослойным перцептроном на выборке всего в 700 примеров. Для реальных ML-нагрузок, больших сетей и датасетов из миллионов примеров, такой подход будет заметно медленнее и менее удобным, чем специализированные фреймворки вроде PyTorch или JAX; это демонстрация возможностей SQL, а не практичная альтернатива ML-стеку.