Skrivet av Falcon:
Fattar jag rätt att Tensor är det nya "CUDA" ?
Nej. CUDA är ett ramverk för att kunna skriva generella program som kör på GPU.
Den version av CUDA som lanseras ihop med Turing kommer självklart göra det möjligt att använda SMs, tensor-cores och rt-cores.
Det man gör i SMs är i praktiken väldigt nära det CPUer har i form av SIMD (SSE/AVX på x86).
Tensor-cores gör en väldigt specifik sak väldigt snabbt. Orsaken till varför Jensen hela tiden jämförde med Pascal är därför att det är fullt möjligt att göra exakt samma sak på SMs. Men om man gör just denna operation
där R, A, B och C är 4x4 matriser så skulle den operationen ta totalt 16 CPU-cykler på en SMs "CUDA-kärna" medan den operationen utförs på en enda cykel i en tensor-core.
Så var är poängen med tensor-cores och vad har det att göra med maskininlärning?
Ta fallet man pratade om i presentationen, anta att spelet renderar i 1920x1080 men man vill använda deras nya AA mekanisk för att lägga till "den saknade informationen" för att nå 3840x2160. Till att börja, verkar det ens rimligt att göra?
Frågan man då måste ställa sig, hur kan vi som människor se att bilden är "mjuk" om man bara skalar upp? Jo, vi har en känsla för vad som visas i scenen och vi vet därför hur det borde se ut. Exakt det kan man träna ett neuron-nätverk till att också veta och det kan i och med det göra ett väldigt kvalificerad gissning över vad som saknas -> det går att lägga till informationen.
OK, så hur ser matematiken för det ut?
Vad man kommer ta som input är var enda pixel man renderat, det är 1920*1080 = ~2M ingående argument. Ett någorlunda normalt neuron-nätverk lär ha neuronen i två nivåer. Antag att varje lager har 64 neuroner, totalt 128 neuroner vad ska man då göra med dessa?
Varje ingående argument ska multipliceras med en för input unik konstant för varje neuron i första nivån. Ovanpå det adderar man en konstant, en "bias" för varje neuron. Så totalt 2M * 64 = >100M. Exakt vad motsvarar det i linjäralgebra?
Det är multiplikation (och addition av "bias" konstanten) av 2Mx64 matriser. Inte 4x4 matriser, men är alltid möjligt att bryta ned större matriser i mindre delar för att i slutändan få något som tensor-cores hanterar direkt. Detta är något tensor-cores gör ~x10 snabbare jämfört med SMs + SMs kan då parallellt köra de shaders som fortfarande måste köras!
Edit: kom på avvägar själv här
Det vara bara en nivå. I nästa nivå är alla 64 neuroner (använder 64 i detta exempel, exakt hur många som används är något man måste testa sig fram till lite) ihopkopplade med varje neuron i första nivån. Det betyder antalet FLOP vi hade i fösta steget, ~>100 MFLOP nu ökar med en faktor 64 till -> 8 GFLOP
För att få ut alla 4k pixels i andra änden är andra raden neuronen kopplade till varenda av dessa 4k pixels, så 8 GFLOP ökas nu med en faktor 3840*2160 vilket tar oss till så många TFLOP att jag inser att nätverket man använder i praktiken innehåller förenklingar
Det är i alla fall matematiken som utförs, varje steg är jätteenkelt då det bara är summering av multiplikation med en konstant och indata samt addition av en konstant ("bias"). Är bara att man måste göra det väldigt många gånger per frame!!!
Medan tensor-cores mest "bara" är en extremt matriskrunschare så är RT-cores rent tekniskt rätt mycket mer imponerande. Vad de gör på en hög nivå är lura ut vilken triangel en stråle som går från kameran genom ett specifikt pixel på din skärm träffar. Vet man det vet man ju hur den ytan är orienterad (så man vet hur strålen studsar), man vet dess material (som man vet hur mycket ljuset kommer dämpas och spridas) etc.
Det som varit problemet med raytracing på GPUer tidigare är detta: varje stråle kan hanteras helt oberoende av alla andra strålar -> det är ett extremt parallellt problem. Så perfekt match för en GPU? Nej, orsaken till att multicore CPUer trots allt hänger med riktigt bra är därför att olika strålar kommer träffa olika trianglar, påverkas av olika material etc. Det betyder att efter man träffat första triangeln så kommer relativt få strålar följa ungefär samma väg vilket betyder att de divergerar i vilken typ av beräkning man måste göra i nästa steg, ju längre man går ju mer divergerar de.
GPUer (och SIMD på CPUer) är väldigt bra att hantera data-parallella operationer, d.v.s. man har olika data (olika strålar, olika pixels man kör shaders på etc) men man utför samma operation på all data.
Här har vi istället ett uppgiftsparallellt problem med i.o.f.s. hyfsat stora inslag av data-parallellism (så fungerar bättre än t.ex. hantera HTTP-sessioner som pratar med en database, något är helt uppgiftsparallellt och fungerar uselt på en GPU), men ändock uppgiftsparallellt.
Är fortfarande inte hemma på exakt vad en RT-core gör (står och stampar i väntan på Nvidias whitepaper för 2000-serien!!!), men uppenbarligen har man lurar ut ett sätt att specifikt göra en krets som hanterar den uppgiftsparallellism som krävs för raytracing.
Vad man gjort med RT-core redan med lanseringen förra veckan (av datacenter-modeller) är att helt förpassa CPU-rendering till historien. Även konsumentmodellerna kommer demolera alla existerande CPUer på denna uppgift, Tesla-modellerna var väl 10:1 mot Intels största servers (vilket rimligen borde betyda 4 st Xeon 8180 med totalt 112 kärnor per server).
Skrivet av Swedish Berserk:
Vad har deep learning med gaming att göra?
Undrade också länge det, men vad man primärt verkar rikta det mot inom spel är anti-aliasing/uppskalning på ett sätt vi aldrig upplevt förut. Detta kan om något vara den heliga graalen för att faktiskt kunna köra AAA-spel i 4k!
När det kommer till att använda deep-learning för AI är grafikkortet fel komponent, SIMD på CPUer är en långt bättre match för den typen av uppgift. Men i grunden skulle man göra på samma sätt Nvidia kommer göra för AA/uppskalning, utföra träningen av nätverket i datacenter och leverera modellen (matriserna med vikter och "bias" för varje neuron för varje lager i neuron-nätverket). Att träna ett nätverk kräver en superdator, att använda modellen som kommer ut från den träningen kan köras på en modern CPU (givet rimligt komplicerad modell).