Ich habe von der hohen perf Aufgabe an einigen der Pakete suchen Ansicht Umgang mit GPU - Berechnungen, und da die meisten GPU scheint eine Größenordnung stärker bei der Durchführung einfacher Genauigkeit arithmetics als DP sein diejenigen , ich habe mich gefragt:
- Warum gibt keines der Pakete dem Benutzer mehr Kontrolle über die Art der erforderlichen Präzision? Ich kann viele Anwendungen in Statistiken sehen, bei denen die SP-Arithmetik (dh die mit 7-stelliger Genauigkeit codierte Zahl) für den praktischen Gebrauch gut genug ist (wenn ich die damit verbundenen Gewinne überschätze, lassen Sie es mich wissen).
- Ist Python diesbezüglich flexibler? Wenn ja warum ? Ich verstehe nicht, warum das Fehlen eines "einzelnen" Typs in R die Aufnahme einer solchen Option (zusammen mit einer Warnung) in beispielsweise GPUtools oder Magma unmöglich machen würde (obwohl ich froh sein werde, falsch angezeigt zu werden).
PS: Ich denke speziell an Anwendungen, bei denen die Zahlen bereits dimensionsmäßig skaliert und zentriert sind (so dass Chebychevs Ungleichung verbindlich ist).
Antworten:
Aus der GPUtools-Hilfedatei geht hervor , dass dies
useSingle=TRUE
die Standardeinstellung für die Funktionen ist.quelle
quelle
Ich nehme an, dass Sie mit GPU-Programmierung das Programmieren von NVIDIA-Karten meinen? In diesem Fall sind die zugrunde liegenden Codeaufrufe von R und Python an C / CUDA .
Der einfache Grund dafür, dass nur eine einzige Genauigkeit angeboten wird, ist, dass dies von den meisten GPU-Karten unterstützt wird.
Die neue nvidia Fermi- Architektur unterstützt jedoch doppelte Genauigkeit. Wenn Sie dieses Jahr eine NVIDIA-Grafikkarte gekauft haben, dann ist es wahrscheinlich eine Fermi. Auch hier sind die Dinge nicht einfach:
Die Beantwortung der Frage in Ihrem Titel "Ist die Genauigkeit mit einfacher Genauigkeit in Ordnung?" Hängt von Ihrer Bewerbung ab (Entschuldigung, Mist!). Ich nehme an, jeder verwendet jetzt doppelte Präzision, weil es keinen Leistungseinbruch mehr gibt.
Als ich mich mit GPUs beschäftigte, wurde die Programmierung plötzlich viel komplizierter. Sie müssen sich um Dinge kümmern wie:
quelle
useSingle=TRUE
scheint die Standardeinstellung in den Funktionen zu sein. Vermisse ich hier etwas?Die überwiegende Mehrheit der im Umlauf befindlichen GPUs unterstützt nur Gleitkommazahlen mit einfacher Genauigkeit.
Bei der Titelfrage müssen Sie sich die Daten ansehen, die Sie verarbeiten, um festzustellen, ob eine einzelne Genauigkeit für Sie ausreicht. Oft werden Sie feststellen, dass Singles für> 90% der von Ihnen verarbeiteten Daten durchaus akzeptabel sind, für die letzten 10% jedoch spektakulär scheitern. Wenn Sie nicht auf einfache Weise feststellen können, ob Ihr bestimmter Datensatz fehlschlägt oder nicht, müssen Sie für alles die doppelte Genauigkeit verwenden.
quelle
OK, eine neue Antwort auf eine alte Frage, aber jetzt noch relevanter. Die Frage, die Sie stellen, hat mit endlicher Präzision zu tun, normalerweise im Bereich der Signalanalyse und der experimentellen Mathematik.
Mit Floats mit doppelter Genauigkeit (DP) können wir so tun, als gäbe es keine Probleme mit endlicher Präzision, genau wie bei den meisten mathematischen Problemen der realen Welt. In der experimentellen Mathematik gibt es kein Vortäuschen.
SP-Floats (Single Precision) zwingen uns, Quantisierungsrauschen zu berücksichtigen. Wenn unsere Modelle für maschinelles Lernen Rauschen wie neuronale Netze (NN), Faltungsnetze (CNN), Restnetze (ResN) usw. von Natur aus zurückweisen, liefert SP meistens ähnliche Ergebnisse wie DP.
Bei Floats mit halber Genauigkeit (HP) (jetzt in Cuda Toolkit 7.5 unterstützt) müssen Quantisierungseffekte (Rauschen und Rundungen) berücksichtigt werden. Höchstwahrscheinlich werden wir bald sehen, dass HP in den gängigen Toolkits für maschinelles Lernen verfügbar ist.
Es gibt neuere Arbeiten, um Berechnungen mit geringerer Genauigkeit in Floats sowie Zahlen mit fester Genauigkeit zu erstellen . Die stochastische Rundung hat die Konvergenz ermöglicht, mit CNNs zu verfahren, während die Lösung ohne sie divergiert. Diese Artikel helfen Ihnen dabei, die Probleme bei der Verwendung von Zahlen mit endlicher Genauigkeit beim maschinellen Lernen besser zu verstehen.
So beantworten Sie Ihre Fragen:
SP ist nicht so schlecht. Wie Sie betonen, ist es doppelt so schnell, aber Sie können auch mehr Ebenen in den Speicher einfügen. Ein Bonus besteht darin, Overhead zu sparen, indem Daten auf und von der GPU abgerufen werden. Die schnelleren Berechnungen und der geringere Overhead führen zu geringeren Konvergenzzeiten. Trotzdem ist HP bei einigen Problemen in einigen Teilen des Netzwerks besser und in anderen nicht.
Beachten Sie, dass der Trend in neuronalen Netzen jetzt zu sehr tiefen Schichten geht, mit Läufen von mehr als einigen Tagen, die auf den schnellsten GPU-Clustern üblich sind.
quelle