Като първокласен партньор на Google, ние от ML6 успяхме да получим ранен достъп до най-новата играчка за машинно обучение: Edge TPU! Edge TPU е основно Raspberry Pi на машинното обучение. Това е устройство, което прави изводи на Edge със своя TPU.

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

Cloud срещу Edge

Edge TPU очевидно работи на ръба, но какво е ръба и защо не бихме искали да изпълняваме всичко в облака?

Изпълнението на код в облака означава, че използвате CPU, GPU и TPU на компания, която ви ги предоставя чрез вашия браузър. Основното предимство на изпълняването на код в облака е, че можете да зададете необходимото количество изчислителна мощност за този конкретен код (обучението на големи модели може да отнеме много изчисления).

Ръбът е обратен на облака. Това означава, че изпълнявате кода си на място (което на практика означава, че можете физически да докоснете устройството, на което се изпълнява кодът). Основното предимство на изпълняването на код на ръба е, че няма забавяне на мрежата. Тъй като IoT устройствата обикновено генерират чести данни, работещият код на ръба е идеален за базирани на IoT решения.

CPU срещу GPU срещу TPU

TPU (Tensor Processing Unit) е друг вид процесорна единица като CPU или GPU. Има обаче някои големи разлики между тях. Най-голямата разлика е, че TPU е ASIC, специфична за приложението интегрална схема). ASIC е оптимизиран за изпълнение на специфичен вид приложение. За TPU тази специфична задача е извършването на операции за умножаване и добавяне, които обикновено се използват в невронни мрежи. Както вероятно знаете, процесорите и графичните процесори не са оптимизирани за изпълнение на един специфичен вид приложение, така че това не са ASIC.

Тъй като сравняваме CPU, GPU и TPU, нека бързо да разгледаме как те съответно извършват „операции за добавяне на множество“ с тяхната архитектура:

CPU изпълнява операцията умножение-събиране, като чете всеки вход и тегло от паметта, умножава ги със своя ALU (калкулатора на фигурата по-горе), записва ги обратно в паметта и накрая събира всички умножените стойности.

Съвременните процесори са подсилени от масивен „кеш“, „предсказание на разклонения“ и висока „тактова честота“ на всяко от своите ядра. Всичко това допринася за по-ниска латентност на процесора.

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

GPU обаче не използва фантастичните функции, които намаляват латентността (споменати по-горе). Той също така трябва да организира своите хиляди ALU, което допълнително намалява латентността.

Накратко, GPU драстично увеличава своята производителност чрез паралелизиране на своите изчисления в замяна на увеличаване на своята латентност. Или с други думи:

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

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

На фигурата по-горе можете да видите, че всички тегла на невронната мрежа са заредени в ALU. След като това бъде направено, входът на невронната мрежа ще бъде зареден в тези ALU, за да изпълни операциите за умножаване и добавяне. Този процес може да се наблюдава на фигурата по-долу.

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

Всяка сива клетка на фигурата по-горе представлява ALU в TPU (което съдържа тегло). В ALU се извършва операция за умножение-събиране, като се вземе входът, получен от ALU отгоре, умножава се по теглото му и след това се сумира със стойността, получена отляво. Резултатът от това се разпространява надясно за по-нататъшно завършване на операцията умножение-събиране. Входът, получен от ALU отгоре, се разпространява надолу, за да изпълни операцията за умножаване-добавяне за следващия неврон в слоя "невронна мрежа".

В края на всеки ред може да се намери резултатът от операцията умножаване-добавяне за всеки неврон в слоя, без да се използва памет между операциите.

Използването на този систоличен масив значително увеличава производителността на Edge TPU. Ако искате да знаете колко точно, можете да разгледате нашия бенчмарк пост в блога.

Квантуване

Последната важна бележка за TPU е квантуване. Тъй като Edge TPU на Google използва 8-битови тегла, за да прави своите изчисления, докато обикновено се използват 32-битови тегла, трябва да можем да конвертираме тегла от 32 бита в 8 бита. Този процес се нарича квантуване.

Квантуването основно закръгля по-точното 32-битово число до най-близкото 8-битово число. Този процес е визуално показан на фигурата по-долу.

Чрез закръгляване на числата точността намалява. Невронните мрежи обаче са много добри в обобщаването (например отпадане) и следователно не понасят голям удар, когато се прилага квантуване, както е показано на фигурата по-долу.

Предимствата на квантуването са по-значими. Той намалява нуждите от изчисления и памет, което води до по-енергийно ефективни изчисления.

В заключение

Edge TPU прави изводи по-бързо от всяка друга архитектура на процесорна единица. Той е не само по-бърз, но и по-екологичен, като използва квантуване и използва по-малко операции с паметта.

Ние, в ML6, сме фенове!