TPU

**Tensori keskseade** (*tensor processing unit* ehk **TPU**) on Google'i loodud ASIC protsessor masinõppimise algoritmide täitmiseks, mis kasutab tööprotsessis tensorarvutusi tänu millele on võimalik mahutada rohkem transistore ühele kiibile. Seda saab kasutada tehisnärvivõrkude ja masinprojektide elluviimiseks.

## Ajalugu
Toote ideed oli Google'il juba 2006. aastal, kui arendati välja ASIC, kuid olukord muutus keerulisemaks 2013. aastal, kui inimesed mõistsid, et tänapäeva kiires arvuti ning tehnoloogia arengus jääb ühest andmekeskuste arvust väheks. Sellepärast disainisid, ehitasid ja võtsid kasutusele 2016. aastal TPU. Protsess võttis aega 15 kuud, mille sisse jäi ka 2016. aasta mai, kui tehti avalikkusele üldine tutvustus Google'i I/O-konverentsil USA California osariigis. Hiljem selle toote väljaarendaja Norm Jouppi laskis välja esimese generatsiooni TPU. Kuigi see protsessor oli revolutsiooniline, siis praeguste generatsiooni kiipidega võrreldes olid need kiibid kasutatavad ainult järelkoormustele (*inference workloads*). Praegused TPU kiibid on võimelised adresseerima nii masinõppesüsteemi kui ka järelkoormusele ning parim platvorm, kus programmeerida TPUsid, on samuti Google'i välja töötatud TensorFlow' tarkvara, mis on nüüdseks kõige tihedamini kasutatud tarkvarateek mudelite arendamiseks ning mis kasutab oma tarkvaras tensoranalüüsi arvutusi. 

## Ülevaade
TPU on Google'i esimene tellimuse põhjal valmistatud ASCI kiip masinõppeks, mis toimib kõige efektiivsemalt tarkvarateegil TensorFlow. Nii Google Search, Street View (kasutades palju TPU-sid korraga, leitakse kogu tekstiline info 5 päevaga, mis mõnel juhul võib võtta kuid, kui mitte aastaid), Google Photos (iga TPU jõuab läbi töötada rohkem kui 100 miljonit fotot päevas), Google Assistant, AlphaGo, Google Translate jpm kasutavad tensori keskseadet, et muuta närvivõrgu arvutusi palju kiiremaks ja tõhusamaks, kiirendades nende tarkvarade arengut. CPU ja GPU-ga võrreldes on TPUl 15–30 võrra suurem jõudlus ning kasutab 30–80% võrra vähem energiat. Tegemist on välise kiibiga, mis mahub SATA kõvakettale, et seda seal paigaldada. TPU on ühendatud PCIe Gen3 x16 liinile, mis võimaldab 12,5 GB/s ribalaiust. Tänu nendele eelistele on Google'il võimalus anda kiiremaid ja odavamaid teenuseid, kui teised konkurendid, samuti vähendab see sõltuvust ning sellega tulenevaid kulutusi teiste kiipide tootjatest nagu Nvidia ja Intel ja Dell HP ja Cisco, sest nii nagu neil on TPUl disainitud oma serverid, võrgu riistvarad. Tänapäeva generatsiooni tarkvaraarendajaid kaasaarvatud Google Assistant, kasutavad närvivõrke, mis on keerulised algoritmid, mis suudavad õppida iseseisvalt tööülesandeid analüüsides väga suurel hulgal informatsiooni, kuid see nõuab väga suurt võimsust. Kuna Google'i haare on juba nii suur, otsustati, et tehakse ise selline süsteem, kus ei pea eelmainituid firmadega arvestama. See ei tähenda, et Google ei osta Nvidialt ega teistelt tegijatelt kiipe, kuid on väiksem sõltuvus. 

TPU on kohandatud töötama masinõppe rakendustel, mis erineb väga suuresti nii CPU kui ka GPUga. Kui Google kasutab masinõpperakendusi, siis üks eelis teistest konkurentidest on ka see, et see on võimeline koos töötama ka CPU ja GPUga, tehes selle väga mitmekülgseks. Samuti võrreldes CPUga kasutab TPU vähem arvutusbitte. Kasutatakse bitte ainult siis kui neid on vaja, miskit ei hoita niisama töös. Tänu sellele on võimalik teha rohkem operatsioone sekundi jooksul, kasutades sama palju silikooni kui CPUl. Praegu on Google'il käsil arendada arvutid nii, et nad tuvastaksid objekte näiteks juhita autodel tuvastamaks tänavamärke. Tänu TPUle on arvutisüsteemide käitamine palju kiirem, vähendades seda mõne tunnile.  

Google saab tänu TPUle viimistleda ja parandada nii enda tooteid kui pakkuda masinõppe klientidele lisajõudu oma teenuste täitmiseks ning võib üsna pea olla suurim konkurent, sest kõik teised sarnased firmad osutavad ainult GPU- ja FPGA-põhiseid masinõppe teenuseid. 

### Tööprotsess
Kui CPU on geneeriline protsessor, siis TPU disain on kohandatud masinõppe vajadustele vastavaks. Tänu järgnevatele disainivalikutele on TPU efektiivne ja võimas.

# Kvantitatsioon – ujukomaoperatsioonide asemel kasutatakse integreeritud operatsioone. Täpsuse eest ohverdatakse jõudlus.
# MXU (CISC & Matrix Multiplier Unit) – TPU eelistab CISC-ile RISC-arhitektuuri. Üks käsk võib käivitada keerulisi operatsioone, mille eest vastutab MXU. CPU on skalaarprotsessor, GPU on vektorprotsessor, MXU on maatriksprotsessor, mis suudab sadu tuhandeid operatsioone teha ühe tsükli jooksul.
# Süstoolne massiiv – aritmeetilise loogikaüksuses (ALU) tehtud aritmeetilised operatsioonid lisatakse ahelasse, vähendades seeläbi registri juurdepääsu.
# Minimaalne ja deterministlik – CPU-del ja GPU-del on suur kontrolliloogika, mis vastutav vahemälude, harude prognoosimise, tellimuse mittetäitmise eest jpm. TPU juhtimise loogika on ainult 2% survest. See minimalistlik mõtlemine muudab ka selle deterministliku, TPU saab ka ennustada tänu sellele latentsuse protsessi ja selle täitmist.

### TensorFlow
See on Google'i loodud avatud lähtekoodiga masinõppe tarkvarateek, mis kasutab arvutuste tegemiseks andmevoo graafe. Selle peamine eesmärk on seotud masinõppe ja tehisnärvivõrkude uurimine, kuid on ka piisavalt üldine, et seda saaks rakendada ka muudes valdkondades. Esialgu oli see mõeldud ettevõttesiseseks kasutuseks, et see oleks abiks teadustööde kirjutamisel ja uute tehnoloogiate väljatöötamisel. Selle lähtekood tehti avalikkusele kättesaadavaks 2015. aasta 9. novembril.

## Tooted
### Esimene generatsioon TPU
Esimese põlvkonna TPU on 8-bitine maatriksi korrutusmootor, mida juhib PCIe 3.0 siini kaudu CISC juhised. See on toodetud 28 nm kiibil, mille diameeter on ≤ 331 mm2. Kiirus on sellel 700 MHz ja selle soojusvõimsus on 28–40 W. Sellel on 28 MiB mälu ja 4 MiB 32-bitist akut, kasutades 256x256 süstoolse massiivi 8-bitiste kordajate tulemusi. TPU paketis on 8 GiB kahekanalilist 2133 MHz DDR3 SDRAM-i, mis pakub 34 GB/s ribalaiust. Juhised edastavad või võtavad vastu keskseadmesse maatriksi korrutusi või konvoluute ja rakendavad aktiveerimisfunktsioonid.

### Teise generatsiooni TPU
Teise põlvkonna TPU esitleti2017. aasta mais. Google väitis, et esimese põlvkonna TPU disain oli piiratud mälu ribalaiusest, seega selle tõttu ei saadud jõudlust suurendada. Seega suurendati teise generatsiooni disainis 34 GB suurust ribalaiusest 600GB / s ja jõudlus kuni 45 TFLOPS-ni. Samuti paigutatakse TPU-d neljakiibilistesse moodulitesse, mille jõudlus on 180 TFLOPS. Seejärel on 64 neist moodulitest kokku pandud 256 kiibi podlitesse, millel on 11,5 PFLOPS-i jõudlust. Kuigi esimese põlvkonna TPUd olid piiratud täisarvudega, võivad teise põlvkonna TPU-d arvutada ka komadega arve. See teeb teise põlvkonna TPU-d kasulikuks nii masinaõppemudelite koolitamiseks kui ka järelduste tegemiseks. Google on teatanud, et need teise põlvkonna TPU-d on saadaval Google Compute Engine'is kasutamiseks TensorFlow' rakendustes. 

### Kolmanda generatsiooni TPU
Kolmanda põlvkonna TPU kuulutati välja 8. mail 2018. Google teatas, et protsessorid ise on kaks korda võimsamad kui teise põlvkonna TPU-d ja neid kasutataks poodidena neljakordselt rohkemate kiipidega kui eelmise põlvkonna puhul. Selle tulemuseks on 8-kordne jõudluse suurenemine poodi kohta (kuni 1024 kiipi kohta poodi kohta) võrreldes teise põlvkonna TPUga

### Edge TPU
Edge TPU esitleti 2018. aasta juulis. Edge TPU on Google'i ehitatud ASIC-kiip, mis on välja töötatud masinaõppemudelite käitamiseks. See kasutab tarkvara Cloud IoT Edge, mis ühendab lüüsi funktsioonid, kasutades Edge IoT Core'i tarkvara koos Edge ML-ga, masinaõppega, mis põhineb TensorFlow Lite'il.

## Kasutusalad
Valida võib nii CPUd, GPUd kui ka TPUd, kõik oleneb sellest, milline on töö eesmärk:

Pilve-TPUd ei sobi ega tööta sellistel juhtudel:

* Kui tegemist on lineaarsete algebra programmidega, mis nõuavad sagedast hargnemist või on palju kasutatud algebrat. TPU-d on optimeeritud kiire ja mahuka maatriksi korrutamise teostamiseks, nii et töökoormus, mis ei ole maatriksi korrutamisel domineeriv, on ebatõenäoline, et see toimiks TPU-des võrreldes teiste platvormidega.
* Platvormid, mis pääsevad harva ligi mälule ei pruugi ei pruugi TPUga toimida.
* Protsess, mis nõuab suure täpsusega aritmeetikat. Näiteks topelttäpsusega aritmeetika ei sobi TPUle
* Närvivõrkude töökoormus, mis sisaldab C ++ -ga kirjutatud kohandatud TensorFlow' operatsioone. Konkreetselt ei sobi peamised treeningtsükli kehas kohandatud operatsioonid TPUle. Närvivõrkude töökoormus peab suutma käivitada kogu TPU-s toimuva koolitusringi mitu kordumist. Kuigi see ei ole TPU-de enda jaoks väga oluline nõue, on see TPU tarkvara ökosüsteemi praegune piirang, mis on vajalik tõhususe saavutamiseks.

## Viited