Открытый канал ID 70922330980446

Adept | Машинное обучение | Открытое ПО

Adept(Automatic Differentiation Engine for Tensor Processing)

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

Описание проекта: https://adept-platform.gitverse.site/adept-docs/
Зеркало в telegram: https://t.me/adept_platform
Чат: https://max.ru/join/ptpfhISc1Wk8C3afDzdg2tpqb5hBGS37sQ5bqM5p25s

Каналов в рубрике
4 770
Место этого канала
№ 1 786
Открыть рубрику →
Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

Несколько дней потратил на то чтобы навайбкодить понижение из StableHLO диалекта в SPIR-V с использованием LLVM MLIR. В целом это получилось и я смог запускать скомпилированные шейдеры в среде Adept. Но производительность таких шейдеров существенно ниже написанных вручную. Например для поэлементных операций проблема в том как правильно сформировать размеры сетки и блоков. А для GEMM нужно реализовать тайлинг. И существующего компиляторного прохода для таких вещей как я понял нет, есть только вариант применения специального вида трансформации для которого надо самому писать скрипты. А проходы которые преобразуют циклы в параллельные циклы сейчас не поддерживают тайлинг и блоки. В общем задача оказалась существенно сложнее.

- Пока буду переносить в мастер ветку код для полноценного представления вычислительного графа и слияние Tensor и Variable в одну сущность.
- Потом есть идея отказаться от преобразования гарфа в StableHLO и сразу генерировать linalg диалект для MLIR.
- И ограничится пока только поэлементными операциями над тензорами что бы проверить можно ли получить аффективный fusing операций в одном шейдере с помощью компилятора.

#IR #SPIR-V #MLIR #LLVM #Tensor
Просмотры: 12
Перейти в пост Открыть в MAX Сообщить о неточности
Анонс: Осенний Scientific Open Source Meetup этого года - в октябре!

С радостью приглашаем всех на наш очередной Scientific Open Source Meetup, который пройдет 29 октября 2026 года с 17:30 до 21:30 в Санкт-Петербурге в уютном лофте на Газовой, 10ж. Это отличная возможность встретиться, обсудить актуальные темы и поделиться опытом в мире открытого программного обеспечения!

В программе:
Десять агентов, один файл: где исследовательские среды хранят состояние // Сергей Геворкян, менеджер продукта Cloud Ru
Что происходит с хранилищем, когда десятки агентов одновременно записывают ход исследований? Разбор кода OpenResearch, OpenScience и OpenHuman с замерами при росте числа агентов.

Петля должна быть разорвана // Олег Чирухин, GitVerse
Как заставить агента работать днями и неделями с первого промпта, почти без участия человека? Автор представит свой опенсорсный инструмент и приёмы для автономной разработки.

Китайский опенсорсный ИИ-агент openJiuwen // OpenScaler

openEuler → OpenScaler или туда и обратно // Дмитрий Варенов, Технический лидер сообщества openEuler/OpenScaler

От локализованного форка OpenScaler к прямому развитию openEuler в России и СНГ. Расскажем о планах и мероприятиях, а также о том, как внести вклад в проект и попасть на стажировку.

PAUK: инструмент для картографирования экосистем открытого кода // Андрей Гетманов, аспирант ИТМО
Как связать исследователей, статьи и репозитории в единый граф? PAUK помогает находить научные группы по темам исследований и выяснять, чьи разработки переиспользуют коллеги.

Опенсорс, агенты и студенты — опыт ФТИИ ИТМО // Юлия Борисова, к.т.н., руководитель учебно-научной лаборатории АИСТ, ИТМО
Есть ли работа для начинающего программиста-исследователя в эпоху агентов? Поговорим о том, как студентам войти в профессию и какие навыки нужны для разработки и исследований в области ИИ.

UniversalToolchain // Михаил Резаков, ФКН ВШЭ
Презентация проекта - победителя конкурса студенческих опенсорс-проектов ФКН ВШЭ.

Мероприятие проходит при поддержке Gitverse, Cloud.Ru и OpenScaler.
Дата: 29 октября 2026 года
Время: 17:30 до 21:30
Место: Лофт на Газовой, 10ж, СПб. 

Участие бесплатное, но количество очных мест ограничено! Трансляция - будет.
Ссылка на регистрацию - https://openmeetup.ru/

Ждем вас на митапе!
Просмотры: 13
Перейти в пост Открыть в MAX Сообщить о неточности
Более глубокое изучение вопроса с использованием OpenXLA для компиляции в SPIR-V показало что это напрямую сейчас всё еще не возможно. Только Intel занимается этим вопросом и у них есть какие-то экспериментальные наработки.
Но в тоже время есть тензорный компилятор и среда исполнения IREE построенные на базе LLVM MLIR специально для компиляции и запуска SPIR-V. Но это полноценное end2end решение, т.е. ему на вход можно дать HLO и получить исполняемый файл. Вроде бы можно использовать и как библиотеку. Т.е. если использовать IREE то придется отказаться уже разработанной в Adept среды для запуска compute shaders в Vulkan. Так поступать не хочется.
Поэтому следующим шагом буду изучать как напрямую использовать LLVM MLIR для понижения из HLO в набор SPIR-V с планом исполнения и промежуточных выделений памяти. А IREE можно использовать для сравнения производительности.

#IR #OpenXLA #IREE #SPIR-V #MLIR #LLVM
Просмотры: 18
Перейти в пост Открыть в MAX Сообщить о неточности
Сделал детальное представление вычислительного графа и теперь его можно преобразовать в другое IR.
Вот например для такого небольшого перцептрона:
class MLP : public Module {
public:
MLP()
: linear1(28 * 28, 1024),
linear2(1024, 512),
linear3(512, 256),
linear4(256, 10) {
...
}
Tensor forward(Tensor input) {
auto out = l1(input);
out = relu(out);
out = l2(out);
out = relu(out);
out = l3(out);
out = relu(out);
out = l4(out);
return out;
}
...
};

Получается такое представление в StableHLO формате:
module {
func.func @main(%arg0: tensor<784x784xf32>, %arg1: tensor<1024x784xf32>, %arg2: tensor<1024xf32>, %arg3: tensor<512x1024xf32>, %arg4: tensor<512xf32>, %arg5: tensor<256x512xf32>, %arg6: tensor<256xf32>, %arg7: tensor<10x256xf32>, %arg8: tensor<10xf32>) -> tensor<784x10xf32> {
%0 = stablehlo.transpose %arg1, permutation = [1, 0] : (tensor<1024x784xf32>) -> tensor<784x1024xf32>
%1 = stablehlo.dot_general %arg0, %0, contracting_dims = [1] x [0] : (tensor<784x784xf32>, tensor<784x1024xf32>) -> tensor<784x1024xf32>
%2 = stablehlo.broadcast_in_dim %arg2, dims = [1] : (tensor<1024xf32>) -> tensor<784x1024xf32>
%3 = stablehlo.add %1, %2 : tensor<784x1024xf32>
%4 = stablehlo.constant dense<0> : tensor<784x1024xf32>
%5 = stablehlo.maximum %3, %4 : tensor<784x1024xf32>
%6 = stablehlo.transpose %arg3, permutation = [1, 0] : (tensor<512x1024xf32>) -> tensor<1024x512xf32>
%7 = stablehlo.dot_general %5, %6, contracting_dims = [1] x [0] : (tensor<784x1024xf32>, tensor<1024x512xf32>) -> tensor<784x512xf32>
%8 = stablehlo.broadcast_in_dim %arg4, dims = [1] : (tensor<512xf32>) -> tensor<784x512xf32>
%9 = stablehlo.add %7, %8 : tensor<784x512xf32>
%10 = stablehlo.constant dense<0> : tensor<784x512xf32>
%11 = stablehlo.maximum %9, %10 : tensor<784x512xf32>
%12 = stablehlo.transpose %arg5, permutation = [1, 0] : (tensor<256x512xf32>) -> tensor<512x256xf32>
%13 = stablehlo.dot_general %11, %12, contracting_dims = [1] x [0] : (tensor<784x512xf32>, tensor<512x256xf32>) -> tensor<784x256xf32>
%14 = stablehlo.broadcast_in_dim %arg6, dims = [1] : (tensor<256xf32>) -> tensor<784x256xf32>
%15 = stablehlo.add %13, %14 : tensor<784x256xf32>
%16 = stablehlo.constant dense<0> : tensor<784x256xf32>
%17 = stablehlo.maximum %15, %16 : tensor<784x256xf32>
%18 = stablehlo.transpose %arg7, permutation = [1, 0] : (tensor<10x256xf32>) -> tensor<256x10xf32>
%19 = stablehlo.dot_general %17, %18, contracting_dims = [1] x [0] : (tensor<784x256xf32>, tensor<256x10xf32>) -> tensor<784x10xf32>
%20 = stablehlo.broadcast_in_dim %arg8, dims = [1] : (tensor<10xf32>) -> tensor<784x10xf32>
%21 = stablehlo.add %19, %20 : tensor<784x10xf32>
return %21 : tensor<784x10xf32>
}
}

Далее его надо преобразовать тензорным компиляторм. Эксперименты продолжаются.
Просмотры: 15
Перейти в пост Открыть в MAX Сообщить о неточности
После публикации релиза продолжаем работу:

- Расширяем набор демонстрационных приложений для прикладного API. Работаем над реализацией моделей на основе архитектуры UNet и соответствующего конвейера для их обучения.

- Продолжаем работу над реализацией поддержки формата GGUF. Сначала будет загрузка квантованных весов с распаковкой в FP32 и API для квантования с использованием ggml. Далее планируем делать поддержку квантованных данных в вычислительных ядрах.

- Будем пробовать увеличить производительность реализации GEMM для Vulkan.

- И я затеял глубокий рефакторинг системы построения вычислительного графа и авто-дифференцирования. Будем уходить от простого подхода с неявным построением графа к явному описанию с узлами, рёбрами и соответствующей дополнительной информацией. Это должно позволить осуществлять преобразования графа в другие промежуточные представления(IR) и производить его анализ и оптимизацию. На первом этапе хочется получить функциональный слой для всех операций и возможность генерации StableHLO IR для использования тензорного компилятора OpenXLA. Прикладной API это не затронет и даже упростит, так как уберем класс Variable и будем оперировать только тензорами.

#plans #IR #GGUF #tensor #compiler #StableHLO
Просмотры: 35
Перейти в пост Открыть в MAX Сообщить о неточности
Весте с лабораторией YADRO на факультете информационных технологий НГУ поучаствовали в «Двадцать второй конференции разработчиков свободных программ».
Матвей Сорокин студент кафедры Систем Информатики подготовил тезисы для сборника на тему «Развитие библиотеки Adept: сборка RPM-пакета для ALT Linux».
Просмотры: 30
Перейти в пост Открыть в MAX Сообщить о неточности
Доделал скрипты для сборки библиотеки под Android, исправил ошибки и немного в очередной раз оптимизировал свёртку. Всё уже на мастер ветке.

Выложил проект с демкой для Android, там в релизах можно скачать apk и попробовать. В приложении веса самой маленькой модели YOLOv11 получившиеся тренировкой на урезанном для балансировке датасете MS COCO. Тренировка длилась 200 эпох на 4х GPU(3 AMD + 1 Nivida), конечно же с реализацией на Adept.

В результате получилось ~7 FPS на CPU и ~5 FPS на GPU. Что вполне сравнимо с NCNN и мобильным libtorch для YOLOv5, особенно учитывая существенно более тяжелую архитектуру в 11 версии с блоком внимания и работу в FP32.
Просмотры: 44
Перейти в пост Открыть в MAX Сообщить о неточности
Привет!

С радостью сообщаю что наконец-то вышел Релиз 0.2.0

Основные изменения:
- Тензорный движок переработан с использованием смещений и представлений(strides and views).
- Добавлена индексация в стиле PyTorch.
- Типизированные скалярные аргументы.
- Упрощен API редукции.
- Переработан формат записи checkpoints.
- Переработана система сборки.
- Использование Python 3.12.
- Переработано управление памятью в Vulkan.
- MVP для импорта моделей ONNX.
- Распределенное обучение.
- Централизованное логирование.
- И много новых операций.
Больше деталей в описании релиза.

Установить новую версию для Linux x86_64 можно так:
pip install https://storage.yandexcloud.net/adept-releases/adept-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl

Также репозиторий проекта перенесен из моего личного профиля в организацию adept-platform, там также будут размещаться связанные проекты.

Новый адрес проекта:
https://gitverse.ru/adept-platform/adept

В связи с этим тем кто работает с кодом надо изменить remote origin для рабочей копии в git:
git remote set-url origin git@gitverse.ru:adept-platform/adept.git

#Release #Updates #NewFeatures
Просмотры: 39
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «Adept | Машинное обучение | Открытое ПО» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти