FPGA Machbarkeitsstudie, Neue NN-Generation

Hancock schrieb:
Ich bin hier jetzt raus, du bist mir zu trollig
Fuer diesen Tiefschlag haste aber ganz schoen ausgeholt.
Schade.
 
diogeneo schrieb:
Aber weniger also CPUs verbrauchen sie auf jeden Fall.
Nein, absolut nicht. FPGAs sind sehr flexibel, aber nicht high-density und nicht stromsparend.

Das ist einer der Trade-Offs bei FPGAs. Flexibilität gegen Optimierung.
 
Dann scheine ich das irgendwie falsch zu sehen oder meine Vergleichskriterien sind irgendwie anders.
Mein FPGA-Board hat ein 5 Watt Netzteil, mein Note ein 100 Watt.
Gut, da haengt auch noch mehr dran. Deshalb habe ich beim Motherboard gemessen.
Da bin ich dann mit 50 Watt dabei.
Das sind nur schlappe 10 mal so viel.
Wo ist also die "Optimierung"?
 
Dein FPGA wird schlicht ein vielfaches weniger an Rechenleistung haben.
 
  • Gefällt mir
Reaktionen: TomH22
Hancock schrieb:
Nope, jede Mobilcpu braucht weniger, da die Power islands haben. Vergleich doch mal ein kleinen FPGA mit einem RP2040.
Ich habe hier einen Board mit einem Efinix Trion-T8, von der absoluten Leistungsaufnahme liegt der auch nur im Bereich von MCUs wie dem RP2040. Er ist hat 7384 Logik Elemente, damit kann man durchaus was anfangen. Allerdings wird in den meisten Fällen der RP2040 mit seinen zwei CPU Cores und seinen speziellen PIOs, die z.B. Statemaschinen ähnlich gut wie ein FPGA implementieren können, dem T8 überlegen sein.

FPGA sind natürlich immer einer direkten Implementierung der gleichen Logik in einem ASIC bezüglich Power und Area unterlegen. Sie können aber effizienter als eine Implementierung in Software sein.
In vielen Fällen sind FPGAs wirtschaftlicher als ASICs, wenn eben die Stückzahlen keinen ASIC rechtfertigen.

FPGAs sind außerdem gut bei Anwendungen mit geringer I/O Latenz gut einsetzbar, da man eben nicht erst Daten über ein I/O System z.B. per DMA in einen Speicher kopieren muss.

Hat aber jetzt alles nichts mit dem Thread des TE zu tun, er weiß glaube wirklich nicht so genau von was er redet....

diogeneo schrieb:
Aber weniger also CPUs verbrauchen sie auf jeden Fall.
Du darfst nicht Äpfel mit Birnen vergleichen. Ein typisches FPGA Board (z.B. Digilent Arty) ist eher mit einem Raspberry Pi oder ähnlichem vergleichbar. Aber selbst das hinkt. Ein aktueller Raspi hat 4 CPU Cores, die z.B. jeweils eine Vektor und SMID FPU haben. Generell eignen sich FPGAs nicht mehr wirklich, sobald man Floating Point Daten verarbeiten muss.
Es gibt natürlich Anwendungen die man mit ein CPU nicht hinbekommt, aber mit einem FPGA.

So stecken FPGA in sehr vielen Speicher Oszilloskopen. Daten mit 200 Mhz Sample Rate von einem A/D Wander abgreifen, ggf. ein wenig zu prozessieren und dann im DRAM ablegen, ist etwas was super gut mit einem FPGA geht. Aber auch da geht es wieder nicht um die Rechenleistung, sondern eben um den direkten I/O Pfad.

diogeneo schrieb:
NN brauchen sehr viel Rechenleitung weil seriell alles abgearbeitet werden muss.
Da waere die Parallelverarbeitung bei FPGAs sehr vorteilhaft.
NPUs und GPUs arbeiten auch mit hoher Parallelität und sind einem FPGA in von der rohen Rechenpower massiv überlegen. Eine GPU hat tausende Shader-ALUs, die alle mit FP Zahlen arbeiten können.

Ich glaube Du hast irgendeinen seltsamen Fehschluss, weil das Blockschaltbild eines FPGAs (Logik-Zellen die mit einem programmieren Interconnect verbunden sind) einen neuronalen Netz irgendwie ähnlich sieht.

Nur verarbeitet eine LUT in einem FPGA digitale 1-Bit Signale, sie realisiert eine beliebige boolsche Funktion mit N (N typisch 4 oder 6) Eingängen und einem Ausgang. Ein künstliches Neuron https://de.wikipedia.org/wiki/Datei:NeuronModel_deutsch.svg
implementiert aber eine recht komplexe reelle Funktion und arbeitet daher mit Floating Point Zahlen und nicht 1-Bit Digitalwerten.

Und irgendwie hast Du eine schwammige Idee das durch Übertaktung entstehende Bitfehler die irgendeine Zufallskomponente einbringen, die dein Netz "Denken" lassen soll, was auch immer Du damit meinst.
 
  • Gefällt mir
Reaktionen: abcddcba
TomH22 schrieb:
Es gibt natürlich Anwendungen die man mit ein CPU nicht hinbekommt, aber mit einem FPGA.
TomH22 schrieb:
Aber auch da geht es wieder nicht um die Rechenleistung, sondern eben um den direkten I/O Pfad.
TomH22 schrieb:
implementiert aber eine recht komplexe reelle Funktion und arbeitet daher mit Floating Point Zahlen und nicht 1-Bit Digitalwerten.
Hast Recht, aber Verbindungen in NN sind nur 1-Bit und nicht FP-Zahlen.
Deshalb glaube ich immer noch, dass es mit FPGAs wesentlich besser/einfacher implementierbar ist.

Korrigiere mich bitte, wenn ich damit falsch liege, aber ich glaube, dass man dem einen Ausgang auf fasst beliebig viele andere Eingaenge schalten kann. Das heisst also, dass ich auch die Eingaenge "vervielfaeligen" kann.
Damit einen Netzknoten zu simulieren, muesste also gut machbar sein.
Die eigentlich Rechenleistung brauche ich nicht im FPGA, sondern in dem Rechner, der die Programmierung von Diesem macht und das auch nur waehrend des Lernens.

Die Idee von Overclocking war ja auch nur um Fehler "auszunuetzen". Klar, dass wenn da zu viel Zufall mit reingeht, dass damit diese Idee nicht mehr optimal ist.


Zum Link:
Ich weiss, wie ein NN "simuliert" wird. Aber bei einem FPGA muss ich ja gar nichts simulieren.
  • Gewichte waeren mit den Fehlern hardwareabhaenig.
  • Die Uebertragungsfunktion kaeme aus der Programmierung vom FPGA.
  • Aktivierungsfunktion und Schwellwerte waeren auch mit den Fehlern hardwareabhaenig.

Zusammengefasst, ein neuer Ansatz fuer die Implementierung.
 
Zuletzt bearbeitet:
Vielleicht geht das in die Richtung in die Du denkst:

https://qengineering.eu/deep-learning-with-fpga-aka-bnn.html

Die Idee ist, dass man Gewichte und Input auf jeweils binäre Werte beschränkt.

Es ist jedenfalls nicht neuartiges daran FPGAs für NN-Aufgaben einzusetzen. Die Anwendungsfälle, wo das von Vorteil ist, sind aber überschaubar, also nichts Revolutionäres.

diogeneo schrieb:
Korrigiere mich bitte, wenn ich damit falsch liege, aber ich glaube, dass man dem einen Ausgang auf fasst beliebig viele andere Eingaenge schalten kann.
Ja klar, innerhalb des Resourcengrenzen des FPGA (hier Routing/Interconnect Ressourcen) natürlich.
Grundsätzlich kannst Du in einem FPGA jede digitale Logikschaltung implementieren, die nicht seine Kapazität sprengt. Eine weitere Einschränkung ist die Taktfrequenz, die ist ein mehrfaches geringer als bei einer gleichartigen Schaltung in einem ASIC.
 
  • Gefällt mir
Reaktionen: abcddcba
diogeneo schrieb:
Hast Recht, aber Verbindungen in NN sind nur 1-Bit und nicht FP-Zahlen.
Du scheinst bei allem was du hier an Themen im Forum aufmachst die Grundlagen nicht zu verstehen.
Eine Verbindung mit einem einzelne Bit abzubilden ist für alle Neuronalennetzwerke nahezu nutzlos. Da potentiell jedes Neuron mit jedem anderem Neuron verbunden werden kann, würde das bedeuten, dass um diese Möglichkeit abzubilden für jedes Neuron n-Bit vorhalten müsste, wobei n die Anzahl der Neuronen. Damit rennt deine Idee in eine kombinatorische Explosion was den Bedarf an Speicher.

Der Trick die Verbindungen unter den Neuronen als Vektor abzubilden und die die Vektoren in reduzierten Datenformaten wie FP8 abzubilden kommt schon nicht von ungefähr.

Und jetzt kannst du natürlich sagen, dass deine Implementierung gar keine n-Verbindungen braucht, weil du das Training extern machst und nur jene Vektoren abbilden musst, die sich als nach dem Training ergeben haben. Das stimmt soweit, ignoriert aber, dass um einen solchen Vektor abzubilden man auf einem FPGA einen Pfad aus Gattern zwischen den Neuronen bauen müsste. Die Vektorlängen wären also irgendwo zwischen 1..1.000[1] Gattern zu finden. Imho reichlich sinnlos, selbst mit den kleinsten 8fach Gattern bedarf der kürzeste Vektor damit "8Bit"[2] und damit genauso viel wie ein FP8-Wert. Der Mittelwert der Vektoren wird jedoch eine Länge >>1 haben und damit ein Vielfaches an Speicher bzw. Gatterbudget fressen.
Und ganz nebenbei ergibt sich die erreichbare Frequenz von konfigurierten FPGAs aus der größten Länge an Pfaden. Mit dem Potentiel ein paar hundert Gatter quer über einen FPGA laufen zu haben sind Frequenzen im maximal zweistelligem Megaherzbereich erwartbar.

Dann ist da noch das Faß des "floor planning". Die abzubildenden Vektoren sind bei Neuralennetzwerken ja nicht im zweidimensionalem Raum sondern mittlerweile über 100Dimensionen groß. Eine Abbildung von so vielen Dimensionen auf ein zweidimensional angeordnete Schaltung (der FPGA) ist eine Hölle für sich. Mit den Einschränkungen die FPGAs beim Routing haben, ist damit zu rechnen, dass der Ausnutzungsgrad extrem schlecht wird.

Und was bei der Überlegung auch ganz fehlt. Was bringt es ein Netz im FPGA abzubilden und durchschreiten zu können. Es fehlt der Ansatz daraus sinnvoll irgend einen Mehrwert zu ziehen.

[1]Grobe Schätzung, das obere Limit ergibt sich vor allem aus den Preisen der FPGAs.
[2]Das Schlimme ist, dass es für das Implementieren eines 8fach Gattern und der Logik für die Konfigurierbarkeit ein Vielfaches an Transistoren notwendig ist im Vergleich zu einer adressierbaren SRAM- oder Dram-Zelle.


#############
@TomH22
Das was du da gefunden hast, ist mit dem was der TE beschreibt nicht annähernd vergleichbar.
 
@Piktogramm: Ich habe immer noch Mühe herausfinden, was der TE eigentlich will. Aber das ist eigentlich auch egal, ich habe eigentlich eher auf die anderen Beiträge in diesem Thread geantwortet.

Ich habe auch nur rudimentäre Ahnung von neuronalen Netzwerken, aber durchaus praktische Erfahrung mit FPGAs.

Mein Verständnis von NN Implementierungen ist, dass man eigentlich nicht das NN topologisch in Hardware abbbildet, sondern es per Vektorprozessing berechnet. Klassische Methoden zum Beschleunigen von Vektoroperationen wie Vektor Units, SIMD, GPUs eignen sich grundsätzlich dafür, aber mit spezialisierten Beschleunigern, die z.B. Datenformate wie FP8 unterstützen, geht es besser bzw. effizienter.

Alles was ich bisher bezüglich NN in FPGAs gesehen habe, verwendet grundsätzlich den gleichen Ansatz, und nutzt z.B. die DSP Cores in FPGAs um angepasste Beschleuniger aufzubauen. FPGA Beschleuniger kann man in diesem Zusammenhang ggf. mehr an eine bestimmte Topologie/Aufgabe anpassen.

Generell sind FPGAs aber nicht wohl nicht wirklich erste Wahl. Wenn man NN in FPGAs macht, hat man wohl eher die Motivation, dass man z.b. im Sensor Fusion Anwendungen ein NN sehr nahe am Sensor braucht.

BNNs (um die es unter anderem in meinem Link geht) sind wohl eine Lösungsansatz um auf sehr rechenschwacher Hardware (wie z.B. auch MCUs) implementiert zu werden.

Korrigiere mich, wenn ich irgendwo falsch liege.
 
TomH22 schrieb:
BNNs (um die es unter anderem in meinem Link geht) sind wohl eine Lösungsansatz um auf sehr rechenschwacher Hardware (wie z.B. auch MCUs) implementiert zu werden.
Weniger mangelnde Rechenleistung als die Knappheit an Speicher wird in dem Artikel gelöst, den du verlinkt hast. An sich sind die Operationen ja alle gut mit ARM NEON abzubilden und selbst die eher teueren STM32 mit NEON gehen ab 4€ los, haben aber weniger als 1MB SRAM. Bei den ICE40 aus deinem Artikel haben selbst die großen mit 7680LE 128kbit (Bit!) Speicher.

Und auf externen Speicher zurückgreifen zu müssen (sowas wie HyperRam an SPI zum Beispiel) erhöht die BOM, Platinenfläche und macht die Energieeffizienz kaputt.

Edit: Die iCE40HX mit 7680LE listet Mouser mit 128kbit Speicher, der verlinkte Artikel schriebt aber etwas von 1024kbit.. Das ist grob Faktor 10, aber ändert auch nicht viel daran, dass es sehr wenig ist :)
 
TomH22 schrieb:
nichts Revolutionäres.
Habe nie behauptet, dass es das ist. Nur, dass man Overclocking dafuer einsetzt ist auf jeden Fall "neu".

TomH22 schrieb:
Taktfrequenz, die ist ein mehrfaches geringer als bei einer gleichartigen Schaltung in einem ASIC.
Wenn ich nicht uebertackte...

Piktogramm schrieb:
abzubilden für jedes Neuron n-Bit vorhalten müsste,
Wirfst mir vor, dass ich keine Ahnung habe, aber wie waere es, wenn Du zuerst vor Deiner Tuer kehrst?
Eine Neuronenverbindung kann nur an oder aus. Wie viel Bit braucht man denn dafuer?

Piktogramm schrieb:
Und ganz nebenbei ergibt sich die erreichbare Frequenz von konfigurierten FPGAs aus der größten Länge an Pfaden.
Damit spielst Du auf die Lichtgeschwindigkeit an. Keine Sorge, bis wir an solche Frequenzen kommen, wird es noch ne Weil dauern...

Und zu den Vektoren:
Die brauche ich nicht im FPGA, sondern nur in dem Teil, was die Programmierung vom FPGA berechnet.

Piktogramm schrieb:
Es fehlt der Ansatz daraus sinnvoll irgend einen Mehrwert zu ziehen.
Stimmt, KI ist nicht sinnvoll und hat auch keinen Mehrwert.

Piktogramm schrieb:
@TomH22
Das was du da gefunden hast, ist mit dem was der TE beschreibt nicht annähernd vergleichbar.
Danke fuer den Link Tom! Das ist das, was was Piktogramm einfach ausblendet, deshalb behauptet er, dass das nichts damit zu tun hat, weil es ihn ja eindeutig widerlegt.

Und noch was Grundstaetzliches:
Stromverbrauch ist die groesste Schwierigkeit bei KI und genau das ist bei FPGA weniger Schwierigkeit.
 
diogeneo schrieb:
Wirfst mir vor, dass ich keine Ahnung habe, aber wie waere es, wenn Du zuerst vor Deiner Tuer kehrst?
Eine Neuronenverbindung kann nur an oder aus. Wie viel Bit braucht man denn dafuer?
Ich habe beschrieben wo das Problem liegt..
Dann lass mich mal fragen. Angenommen du hast 100.000 Neuronen. Jetzt soll Neuron 0 (N0) eine Verbindung zu N11; N111 und N1111 erhalten, aber nicht zu allen anderen Neuronen. Gleichzeitig soll N1 auf N1; N11; N12 und N1337 zeigen aber nicht auf Andere. N2 zeigt nirgendwohin, N3 nur auf N3, N4 auf N0; N23; N42; N1337; N1338; N40000 sowie; N90000 bis N99999.

Wie willst du das abbilden?

diogeneo schrieb:
Damit spielst Du auf die Lichtgeschwindigkeit an. Keine Sorge, bis wir an solche Frequenzen kommen, wird es noch ne Weil dauern...
Die Lichtgeschwindigkeit ist an der Stelle kein Problem. Es ist Signalintegrität die schlicht und ergreifen leidet wenn man Signal durch zig Gatter mitsamt aller parasitären Induktivitäten und Kapazitäten.

diogeneo schrieb:
Und zu den Vektoren:
Die brauche ich nicht im FPGA, sondern nur in dem Teil, was die Programmierung vom FPGA berechnet.
Wenn du in irgend einer Form Verbindungen darstellen willst, dann sind diese Verbindungen immer Vektoren. Neuronalenetze ohne Verbindungen sind witzlos, du selbst beschreibst, dass du Verbindungen über True/False Bits abbilden willst. Bei aller Liebe, du selbst beschreibst Vektoren in deinem Ansatz. Halt ohne zu verstehen, dass Vektoren eine Richtung+Länge oder Koordinaten brauchen und im Falle von NN auch eine Wichtung.. Es bleiben dennoch Vektoren.

diogeneo schrieb:
Stimmt, KI ist nicht sinnvoll und hat auch keinen Mehrwert.
Da hast du etwas falsch verstanden. Mit Wohlwollen hast du einen Ansatz beschrieben, wie sich ein Graph in einem FPGA abbilden lassen soll. Daraus ergibt sich halt kein Mehrwert einen Graphen irgendwo abzubilden und vielleicht gar durchschreiten zu können. Bei dir fehlt jeglicher Ansatz irgendwelche Informationen auf die Neuronen zu mappen und wie dieses Mapping in einen FPGA zu gießen wären.
 
Piktogramm schrieb:
Wie willst du das abbilden?
Piktogramm schrieb:
Bei dir fehlt jeglicher Ansatz irgendwelche Informationen auf die Neuronen zu mappen
Habe nie geschrieben, dass das leicht ist. Und Du hast Recht, von 3 auf 2 Dimensionen zu gehen, bringt Schwierigkeiten. Leider sind ja FPGAs noch nicht 3D, kommt aber sicher noch.
Aber ob ich jetzt NN-Verbindungen simuliere, oder physische herstelle, bleibt der gleiche Ansatz.
 
Piktogramm schrieb:
Die iCE40HX mit 7680LE listet Mouser mit 128kbit Speicher, der verlinkte Artikel schriebt aber etwas von 1024kbit.
Bei den ICE40 gibt es glaube eine Variante mit zusätzlichem RAM, was aber im Gegensatz zu den Block RAMs außerhalb der FPGA Fabric liegt.
Piktogramm schrieb:
An sich sind die Operationen ja alle gut mit ARM NEON abzubilden und selbst die eher teueren STM32 mit NEON gehen ab 4€ los,
Neon gibt es bei den Cortex-M Kernen, die bei STM32 verbaut sind, nicht. Meist haben die immerhin eine Single precision FPU. Einige Chips haben HELIUM, das ist eine Vector FPU für MCU.
Aber klar, für MCU sind FP Berechnungen heutzutage meist kein Problem.
 
  • Gefällt mir
Reaktionen: Piktogramm
@TomH22
Ja STM nennt die Dinger dann nicht mehr MCU sondern MPU und es sind Cortex-A7 mit Neon verbaut, ab MP15 gibt es dann Cortex-M und ein Zweiten A7 hinzu und noch höhere Modelle kommen mit GPU/NPU.
Ich bleibe dabei, selbst wenn man ins eher teure Regal von STM greift, wird es schwer bis unmöglich bei Kosten, Energiebedarf, Performance und Speicherangebot etwas Besseres mit FPGAs zu bauen.

TIL: Es gibt ARM Helium :)

#######################
@diogeneo
Als ob NNs bei drei Dimensionen aufhören würden..
Und produktive NNs simulieren keine Neuronen, die Neuronen werden als Vektoren abgebildet. Der Ansatz ist auch mitnichten gleich, Vektoren sind Kollisionsfrei, physische Verbindungen nicht.
 
  • Gefällt mir
Reaktionen: TomH22
Piktogramm schrieb:
Als ob NNs bei drei Dimensionen aufhören würden..
Beim biologischen Vorbild tun sie das. Aber klar, wenn man mehr will, muss man natuerlich auch mehr reinstecken.
 
Gibt es eigendlich "Simulationen" von FPGAs, wo man das in Netz "durchspielen" kann?
 
Kann man das hier auch noch ohne Selbstgespraeche machen?
Warum ist Energie in KI jetzt kein Thema mehr?
 
Zurück
Oben