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-стеку.