Archiv verlassen und diese Seite im Standarddesign anzeigen : PS3-Cluster als Gehirn für Roboter:
the_playstat
25.02.2009, 02:37
Ich besitze seit längerem einen PS3-Cluster.
Im Moment nutze Ich ihn für sehr komplexe Simulationen,
HD-Video-Coding und aufwendige Berechnungen.
Im Moment überlege Ich, diese enorme Rechenleistung zu nutzen,
um eine Roboter-KI zu programmieren.
Die 8x PS3 laufen unter Linux.
Jede PS3 besitzt 1 PPC und 6 zur Verfügung stehende SPEs.
Zusammen 8*7 56 Cores mit einer Gesammtrechenleistung von 1,2 Teraflops.
Genutzt wird ein SPE-SDK und verschiedene Tools, die z.B. Programmsequenzen zerlegen und auf die Prozessoren aufteilen.
Die Rechenleistung ist enorm.
Kein Vergleich zu normalen PCs.
Daher ideal für aufwendigere KI-Ideen.
Im Moment suche Ich nach Programmteilen z.B. zur Bilderkennung, ...
Da Ich schon KI-Programme geschrieben habe, will Ich jetzt eine Stufe weiter gehen. Allerdings ist das Ganze doch sehr aufwendig.
D.h. je mehr Routinen Ich nicht selber programmieren muß, um so besser.
Vor allem in Hinblick auf Sensorik.
Speicherkapazität ist unproblematisch.
Der Cluster verfügt z.B. über 12 Terabyte an HDD-Speicher.
Damit sollte der Aufbau z.B. eines Gedächnisses kein Problem darstellen.
Wie vieleicht schon bei meiner kleinen Robotorsammlung zu sehen,
versuche Ich immer zuerst, schon fertige Elemente zu nutzen bzw anzupassen. Die SPE-SDK z.B. vom Hersteller IBM.
Dadurch versuche Ich den Eigenanteil der Programmierung nicht ins uferlose steigen zu lassen. Mein Gedanke ist eher Module in eine Ki zu integrieren. Selbst die Ki in parallele Teile aufzusplitten, die dann bestimmte Prioritäten bekommen.
Hi,
wenn du den Cluster schon seit Längerem betreibst, kannst du vielleicht etwas zu der Skalierfähigkeit sagen? Klar alles was sich parallelisieren lässt läuft schneller als bei sequentieller Bearbeitung, aber es kommen ja ebenso neue Dinge wie Kommunikationsoverhead, Datenkonsistenzabgleiche etc.pp. hinzu. Wenn du nicht einzelne Knoten deines Clusters speziell einzelnen Aufgaben (Knoten1=Bilderkennung, Knoten2=Bahnplanung, Knoten3=...) zuweisen willst, dann ist es schon sehr wichtig, wie schnell die Interprozesskommunikation zwischen 2 Prozessen auf 2 physikalisch getrennten Knoten ist. Wenn man das weis, kann man abschätzen, ob z.B. ein neuronales Netzwerk über alle PS3 verteilt Sinn macht oder halt nicht.
cydodon
the_playstat
02.03.2009, 17:08
Begrenzt wird die Leistung haupsächlich durch das LAN (1000BASE-T) (1Gbit)
Der Cell selbst hat einen internen Bus, der mit ca. 50 GByte/s arbeitet.
Der 64Bit-PPC hat 2 Pipelines wivon man z.B. einen für das Management nutrzen kann. Leider stehen unter Linux nur 6 der SPEs zur verfügung.
Ein SPE ist Reserve und ein SPE wird unter Linux als Supervisor eingesetzt.
Die SPE-SDK und die Zwischensoftware arbeit schon ausgesprochen gut und optimiert die Programme so weit möglich für eine Paralele Abarbeitung.
Ich denke Rechenleistung ist nicht das Problem.
Nur das LAN und der recht kleine RAM-Speicher.
Wegplanung sollte da wirklich kein Problem sein.
Ich habe bisher ein paar Testroutinen wie Mandelbrotgrafik, Videocoding, 3D-Rendering getestet. Funktionierte sehr, sehr gut.
Im Schnitt ca. 150x schneller als mit einem PC.
Aber sicher ist der 1Gbit-Flaschenhals ein gewisses Problem.
Aber selbst wenn Ich Probleme auf eine PS3 verteile, ist der Faktor ca. 17-25x
Ich würde gerne einen Roboter mit Videokamera, ...
z.B. wie den Robonova über den Grid/Cluster steuern.
Eventuell macht es Sinn, bestimmte Prozesse auf einer
PS3 zu belassen. Das muß Ich dann austesten, ob das Sinn macht.
Mir geht es erstmal um die die Sammlung von Quellcode.
Die Software prüft schon von allein, in wieweit die Programme für Multiprozessing geeignet sind und verteilt diese entsprechend.
Das Problem bin Ich los. Das geschieht automatisch.
Ich sehe schon, du bist sehr optimistisch! :)
Ich kenne leider keine Quellcodesammlungen, die aus dem Bereich Robotik Code für den Cell listen würde. Für die eine oder andere Idee lohnt sich sicher ein Besuch der Cell-Homepage und der verlinkten Anwendungsbeispiele, aber Code gibt es da natürlich nicht.
Die Anwendungen, die bereits für die PS3 umgesetzt wurden (Fraktalgrafiken, Videoen-/decoding, 3D-Rednering) hast du ja schon probiert. In Sachen Bildverarbeitung würde ich eventuell versuchen mal Bibliotheken wie OpenCV o.ä. auf einer PS3 laufen zu lassen und mir die Performance anzusehen. Aber ob das alles so out-of-the-box läuft und ohne groß Programmieren funktioniert, wage ich fast zu bezweifeln.
Ein nettes Projekt wäre sicher, wenn eine PS3 für die Steuerung des Robonova verwendet wird, eine ein Simulationsmodell des Roboters errechnet, eine weitere die wirklichen Bewegungen und Sensordaten des physischen Roboters erfasst und damit dann die Modellparamter verfeinert. So könnte man ein adaptives Robotermodell schaffen mit dem dann wiederum die Bahn- und Bewegungsplanung auf der ersten PS3 durchgeführt wird...
Weitere schöne Anwendungen "unbegrenzter" Rechenleistung wären natürlich auch Spracherkennung und Sprachsynthese für den Robonova.
cydodon
the_playstat
03.03.2009, 00:40
Ein nettes Projekt wäre sicher, wenn eine PS3 für die Steuerung des Robonova verwendet wird, eine ein Simulationsmodell des Roboters errechnet, eine weitere die wirklichen Bewegungen und Sensordaten des physischen Roboters erfasst und damit dann die Modellparamter verfeinert. So könnte man ein adaptives Robotermodell schaffen mit dem dann wiederum die Bahn- und Bewegungsplanung auf der ersten PS3 durchgeführt wird...
Weitere schöne Anwendungen "unbegrenzter" Rechenleistung wären natürlich auch Spracherkennung und Sprachsynthese für den Robonova.
Genau: Spracherkennung und Synthese dürfte kein Problem sein.
Da gibt es ja massenhaft Code für.
Die Robodance-Software nutzt ja schon eine Sprachsteuerung von Robotern über Skype (Internet).
Das verbraucht auch kaum Resourcen. Das macht ein SPE im Schlaf.
Mir reichen Codes in Hochsprache (z.B. in C)
Die Konvertierung macht ein entsprechendes Kompilerprogramm.
Das wird quasi automatisch angepaßt.
Anpassen müßte Ich da nur die I/O-Schnittstellen, ...
Die Video-Digitalisierung geschieht über Linux (USB-Video-Capturekarte).
Die Datenübertragung an den Robonova könnte Ich z.B. über Bluthooth machen. Für den Anfang erstmal IR oder USB-Seriell-Adapter.
Einen Robonova - Bausatz habe Ich gerade gekauft. :)
Ich würde am liebsten die Bewegungen statt durch den
ATMEGA128L durch den Cluster erledigen und den
ATMEGA128L als reinen "Durchreicher".
Sprich Er soll nur die Sensordaten und die Befehle für die
Servos durchreichen. Eventuell gewisse einfache Muster.
Die Idee ist eine Trennung in Bewustsein und autonomer Selbststeuerung.
Sprich, daß der ATM128L dafür sorgt, daß der Roboter nicht fällt.
Oder meint Ihr, daß es sinnvoller wäre, schon Servo-Routinen im ATM128 zu hinterlegen? Allerdings hat das den Nachteil, daß die Bewegungen nicht so komplex flexibel variierbar sind. Z.B. keine durch den Roboter lernbare Bewegungen sondern nur die Auswahl vorgefertigter Bewegungen.
Man könnte zwar eine Feedback-Anpassung z.B. durch einen Gyro- oder Tilt-Sensor machen (kommt sowiso rein), aber Ich glaube nicht, daß der ATM128L eine derart notwendige komlexe dynamische Anpassung der Bewegungen schafft.
Am liebsten wäre mir, wenn der ATM128L solange der Cluster den Roboter steuert sich nur für den Notfall bereithält. Wenn z.B. der Datenstrom abreist. Dann könnte der ATM auf ein Ausfall- oder Notfall-Programm umschalten und die Robotersteuerung übernehmen.
Der Robonova soll eine Kamera, Microphone, ein Gyro- oder Tilt-, ein Ultraschall-Sensor, ein Kompass oder GPS-Modul und eine leistungsfähigere Datenverbindung bekommen.
Also max. Kamera + Microphone + 3x Sensoren + Datenverbindung.
Eventuell noch Temperatursensor und änliche Sensoren, die quasi kaum Platz und Gewicht benötigen.
Ich will den Roboter aber auf keinen Fall überladen.
Die Kameradaten will Ich direkt per Funk übertragen,
da es bisher noch keine leistungsfähigen Erkennungssysteme gibt.
Der Robonova muß ohnehin schon mit den Sensoren genug schleppen.
Ich will Ihn nicht noch mehr belasten.
Mir ist durchaus klar, daß das Ganze ziemlich heftig ist.
Genau deshalb, will Ich schon vorhandenen Quellcode nutzen.
Wenn Ich wirklich Alles selbst schreiben muß, wird das Ganze sicherlich etliche Jahre dauern. Alleine Bilderkennung, neuronales Netzwerk, ...
Ein Kameramodul + Mikrophone incl. Antenne habe Ich schon und Ich arbeite gerade an der Verarbeitung der Capturedaten vom USB-AV-Capturemodul.
Die Streamdaten muß Ich dann an die entsprechenden Erkennungs-Programme übergeben.
Ich habe da mal eine Frage die evtl. etwas offtopic ist: du sagtest der Cluster hat eine rechenleistung von 1,2TFLOP/s? Ein Rechner mit ein oder 2 GraKas hat doch aber die gleiche (theoretische) Rechenleistung, warum nutzt du nicht sowas? Das dürfte kleiner und auch etwas günstiger sein, vor allem aber dürfte aber der datendurchsatz höher sein.
wegen der Bilderkennung usw... ich würde mal bei einigen UNI's gucken, da dürfts einiges geben. ansonsten kenne ich auch nur OpenCV und für Spracherkennung sei mal dieshier empfohlen:
http://htk.eng.cam.ac.uk/
ciao, Zachso
the_playstat
04.03.2009, 16:50
GPUs sind einfach zu dumm.
Eine GPU hat nur einen sehr eingeschränkten Befehlssatz.
CPU = 1 Professor
SPE = 10 Dipl. Ings.
GPU = 100 die nicht wissem was Sie tun.
Eine GPU ist einfach nicht dafür ausgelegt, komplexe Programme wie KI oder neuronale Netzwerke zu simulieren.
Von daher ist der wert nicht aussagekräftig.
Als gutes Beispiel würde Ich z.B. das Folding Home Projekt sehen.
90% werden durch PCs und GPUs berechnet, 10% durch PS3-Systeme.
Trotzdem stemmen die PS3 90% der Rechenleisung.
In den schnellsten Supercomputern der Werl werden Cell verwendet.
Z.B. im Roadrunner in Los Alamos.
Wen es sinnvoll wäre GPUs einzusetzen, würde man es sicher tun.
Mach aber Niemand. ;)
Aber sicher kann man simple Aufgaben auf eine GPU auslagern.
Allerdings brauch man da auch wieder entsprechende DevKits, ...
pacer_one
04.03.2009, 17:01
Was ist eigentlich der Grund deines Posts?
ich habe die eigentliche Frage wohl übersehen.
the_playstat
04.03.2009, 23:23
Ich habe da mal eine Frage die evtl. etwas offtopic ist: du sagtest der Cluster hat eine rechenleistung von 1,2TFLOP/s? Ein Rechner mit ein oder 2 GraKas hat doch aber die gleiche (theoretische) Rechenleistung, warum nutzt du nicht sowas?
Leider sind GPUs einfach nicht flexibel genug.
Die hohe Rechenleistung bezieht sich auf einfache Grafikeffekte, Filter, Berechnungen, ...
Für komplexere Algorithmen sind Sie nicht geschaffen.
Eher für sich stark wiederholende einfache Befehle.
Da du schon selbst die Trennung in ein "Roboterbewusstsein" auf dem Cluster und ein "Verhaltensreflexsystem" auf dem AVR angesprochen hast, könntest du mal bei der Steuerung von Industrierobotern auf Ideensuche gehen. Meines Wissens nach werden dort die komplexen Bahnberechnungen im Vorhinein erledigt, dann die Bahndaten an die Steuerung übertragen, die dann "nur noch" in Echtzeit die Regelung übernehmen muss und halt versucht den Roboter entlang der optimalen Bahn zu steuern. Da geht dann jede Menge mathematische Theorie zu ein (Konvergenzverhalten der Regelungsalgorithmen, rough-path Optimierungen etc.pp.).
So wäre in deinem Fall der Cluster für die Generierung der Bahndaten zuständig und der AVR würde die Umsetzung zur Servoansteurung übernehmen und in gewissen Grenzen Reflexe wie Motorstop bei Kolliosion oder was weis ich.
cydodon
the_playstat
06.03.2009, 18:09
Gute Idee.
Hab gerade meinen Robonova von der Post abgeholt.
Sehr ordentlicher Baukasten. :)
Zusammen hätten die Einzelteile auch nicht weniger gekostet.
Hab 619,- für den Robi + IR Remote Set bezahlt.
Jetzt muß Ich erstmal die Anleitungen büffeln, ...
Und natürlich den Robi zusammenschrauben.
Ist ja nicht sehr schwer. :)
the_playstat
31.03.2009, 02:22
Der Roboter ist jetzt fertig und morgen werde Ich Ihn das erste mal testen.
Bin mit dem aufbau sehr zufrieden.
Hatte bisher nur einen kleinen Fehler gehabt.
Hab die Servos nicht korekt am Microcontroller montiert,
da es zwei verschiedene Platinen-Versionen gibt und Ich natürlich
das falsche Layout genommen habe.
Nach dem Anschalten hat Er dann versucht, auf einem Bein zu stehen.
Nach der Neuverkabelung am Micro-Controller war dann alles super.
thewulf00
31.03.2009, 09:59
Hast Du auch Bilder/Videos davon?
Ich bin an KI-Experimenten generelll sehr interessiert, so dass ich unbedingt auf dem Laufenden gehalten werden will. Leider habe ich für eigene KI-Projekte zu wenig Wissen/Erfahrung.
Squall_Halle
03.05.2009, 14:24
Etwas Offtopic:
Hey the_playstat melde dich bitte, wenn du magst, mal bei mir.
Ich programmiere auch etwas, und würde mich gern etwas mehr um Programmierung auf der PS3 kümmer.
Hätte da 1-2 Fragen an dich.
Wäre echt Klasse !!!!
ICQ 333961506
Email: BoehserOnkelTobias@web.de
Schreib mir mal bitte.
Gruß Squall
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.