Dweve

Core отвътре: над 2 900 операции за 12 бекенда

Стотици хиляди ръчно оптимизирани ядра. Над 2 900 операции в 76 категории. 25 числови формата и 12 бекенда. Поглед към Core — изчислителната основа на Dweve.

Core отвътре: над 2 900 операции за 12 бекенда

Какво ни казва броят на операциите

Умножението на матрици звучи като една-единствена задача. Реализацията му обаче зависи от значението на стойностите, начина им на съхранение, натрупването на междинните резултати и хардуера, който извършва изчислението. Матрица с пакетирани двоични стойности и матрица с числа с плаваща запетая могат да споделят абстрактна операция, но да изискват различни числови правила и различен код.

Core е изчислителната основа на Dweve за обучение и инференция. Публичният му каталог обхваща стотици хиляди ръчно оптимизирани ядра за над 2 900 операции в 76 категории, 25 числови формата и 12 бекенда. Тези числа описват различни части на системата. Операцията назовава изчислението. Числовият формат определя представянето. Бекендът посочва целта за изпълнение. Ядрото реализира конкретна комбинация от тези избори.

По-важно е да разберем това разграничение, отколкото да приемаме каталога за един общ сбор от функции. Разработчикът трябва да знае дали нужната комбинация съществува и какъв договор следва.

Над 2 900 операции в 76 категории; 25 числови формата; 12 бекенда. Стотици хиляди ръчно оптимизирани ядра реализират поддържаните варианти за изпълнение.

Изчислението и неговото представяне вървят заедно

Да вземем редукция: събираме множество стойности в един резултат. Думата „сума“ оставя няколко въпроса без отговор. Целите числа със знак ли са входовете, стойности с фиксирана запетая или числа с плаваща запетая? В какво представяне се пази натрупаният резултат? Какво става, ако следващата стойност не се побира в него?

Core свързва тези избори с операцията. Договорът за изпълнение включва типа данни, ширината, пакетирането, акумулатора, бекенда, набора от инструкции, политиката за диспечиране и режима на детерминизъм. Промяната на който и да е от тези параметри може да промени смисъла на изчислението, дори името на операцията да остане същото.

25-те числови формата включват двоични, троични, целочислени, с фиксирана запетая, адаптивни и с плаваща запетая семейства. Името на семейството е само началото на описанието на аритметиката. Важни са и ширината, знакът, мащабът и подредбата в паметта. Затова каталогът трябва да се чете като набор от поддържани комбинации, а не като обещание, че всяка операция съществува във всеки възможен формат за всяка цел.

Форматът за обмен също не решава всички въпроси за изпълнението. ONNX описва изчислителен граф с типизирани входове, изходи и оператори. Така системите разполагат с общо описание на модела, но средата за изпълнение пак трябва да реализира операторите. Документацията за концепциите в ONNX обяснява разликата между представянето на графа и изпълнението.

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

12 бекенда, ясни избори за изпълнение

12-те бекенда на Core обхващат скаларно изпълнение, набори от инструкции за процесори, както и графични и преносими цели. Публичният набор включва Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU и WASM. Това са пътища за изпълнение в Core, а не отделни версии на модела.

Диспечирането избира поддържана реализация за операцията и нейния договор за изпълнение според текущата хост система. Избраният път се записва заедно с изпълнителната клетка, хоста и причината за избора. Така може да се провери кои решения действително са били взети при дадено изпълнение.

Преносимостта все пак има граници. Например документацията на WebAssembly прави разграничение между преносим двоичен формат и API-тата, предоставяни от хост средата. Браузърът и средата извън него може да предлагат различни интерфейси. Документацията за преносимостта на WebAssembly дава полезен контекст за това разграничение. Само името на бекенда не описва средата, в която работи приложението.

Мястото на Core в Dweve

Core използва библиотеката с примитиви за базовите операции и ги включва в изчислителната система. Loom е изграден върху Core и използва библиотеката solvers за задачите по разсъждение. Така всяка част има ясна отговорност: примитивите предоставят основни операции, Core изпълнява изчисленията, а Loom надгражда тази основа за разсъждение.

Dweve е услугата. Fabric е нейният API и портал, през които хората и приложенията получават достъп до услугата. Fabric не поема изчислителната роля на Core или ролята на Loom в разсъждението. Интерфейсът и системите зад него имат различни предназначения.

Core използва библиотеката с примитиви. Loom е изграден върху Core и използва библиотеката solvers. Fabric е API и порталът на услугата Dweve.

Започнете с нужното ви изпълнение

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

Публичните показатели на Core описват обхвата на каталога. Договорът за изпълнение обяснява как да го четем. И двете са важни: каква работа покрива системата и какво означава конкретната реализация, когато я използвате.