Werner Schüle schrieb:
Und kannst du mir erklären, was INT8 Backend kann im Vergleich zu CUDA, FP16 für RTX Karten oder FP16 für GTX 16... Karten.
(ich habe zusammen mit Daniel sein Scorpio auf INT8 umgestellt und konnte auf meiner Karte die nps verdoppeln (gegenüber HALF)
Es geht hier darum, wie (also mit welchem Variablen-Typ) die Matrizen-Multiplikationen durchgeführt werden, die zum "abarbeiten" der Neuralnetze erforderlich sind.
fp32 (alte GTX-Karten): Fließkomma 32bit
fp16 (RTX Karten): Fließkomma 16bit (ca. 3x schneller als fp32)
INT8: Integer 8 Byte (= 64bit) (geht mit lc0 bisher nicht): Dies ist die schnellste Lösung. Zwar ist hier die Variablen-Breite mit 64bit am höchsten (was prinzipiell immer am langsamsten ist), aber Integerberechnungen sind immer deutlich schneller als Fließkomma-Berechnungen. Allerdings muß man bei Integerberechnungen eine feste Nachkommastellenzahl vorab festlegen (eben "festkomma", statt Fließkomma), sofern man Nachkommastellen braucht. Letzteres ist aber bei Matrizenmultiplikationen für Neuralnetzverarbeitung unerläßlich. Das Handling ist auch komplizierter, weil bei Integeroperationen eigentlich nur ganze Zahlen vorgesehen sind und man spezielle Routinen braucht, die die Nachkommastellen quasi "simulieren", da es sie, wie gesagt, bei Integervariablen eigentlich gar nicht gibt. Aber da Integervariablen generell so viel schneller sind als Fließkommavariablen, lohnt der Aufwand und es bleibt ein Geschwindigkeitsplus übrig. Welches du ja wohl auch gemessen hast.
Hoffe, das war halbwegs verständlich...