Inhaltsverzeichnis
1 Die Struktur der Trainingsdatenpipeline. Schauen wir uns zunächst den Pseudocode des Modelltrainings an die nächste Mini-Charge. In Schritt 2 werden sie an die Funktion train_step übergeben, die sie auf die GPU kopiert, einen Vorwärts- und Rückwärtsdurchlauf durchführt, um den Verlust und den Gradienten zu berechnen, und die Gewichte des Optimierers aktualisiert.
Da diese APIs auf Multithreading basieren, können sie durch den Python Global Interpreter Lock (GIL) eingeschränkt sein. Pythons GIL beschränkt den Bytecode auf jeweils nur einen Thread, der gleichzeitig ausgeführt wird. Wenn Sie reinen TensorFlow-Code in Ihrer Pipeline verwenden, leiden Sie im Allgemeinen nicht unter dieser Einschränkung, da die TensorFlow-Kernausführungs-Engine außerhalb des Geltungsbereichs der GIL arbeitet. Wenn die verwendete Bibliothek eines Drittanbieters jedoch die GIL-Beschränkungen nicht aufhebt oder Python zur Durchführung einer großen Anzahl von Berechnungen verwendet, ist es nicht möglich, sich auf Multithreading zur Parallelisierung der Pipeline zu verlassen.
Als nächstes verwenden Sie den Generator in einer Dummy-Trainingspipeline und messen die durchschnittliche Zeit, die zum Generieren von Mini-Datenmengen benötigt wird.
Ray verfügt über eine Dienstprogrammfunktion from_iterators, mit der parallele Iteratoren erstellt werden können, und Entwickler können damit die Generatorfunktion data_generator umschließen.
Heim Technologie-Peripheriegeräte KI Erstellen Sie mit Ray effiziente Deep-Learning-Datenpipelines

Erstellen Sie mit Ray effiziente Deep-Learning-Datenpipelines

Nov 02, 2023 pm 08:17 PM
深度学习 ray

Die für das Deep-Learning-Modelltraining erforderliche GPU ist leistungsstark, aber teuer. Um die GPU vollständig nutzen zu können, benötigen Entwickler einen effizienten Datenübertragungskanal, der Daten schnell an die GPU übertragen kann, wenn diese für die Berechnung des nächsten Trainingsschritts bereit ist. Die Verwendung von Ray kann die Effizienz des Datenübertragungskanals erheblich verbessern.

1 Die Struktur der Trainingsdatenpipeline. Schauen wir uns zunächst den Pseudocode des Modelltrainings an die nächste Mini-Charge. In Schritt 2 werden sie an die Funktion train_step übergeben, die sie auf die GPU kopiert, einen Vorwärts- und Rückwärtsdurchlauf durchführt, um den Verlust und den Gradienten zu berechnen, und die Gewichte des Optimierers aktualisiert.

Bitte erfahren Sie mehr über Schritt 1. Wenn der Datensatz zu groß ist, um in den Speicher zu passen, ruft Schritt 1 den nächsten Mini-Batch von der Festplatte oder dem Netzwerk ab. Darüber hinaus beinhaltet Schritt 1 auch eine gewisse Vorverarbeitung. Eingabedaten müssen in numerische Tensoren oder Tensorsammlungen umgewandelt werden, bevor sie dem Modell zugeführt werden. In einigen Fällen werden auch andere Transformationen am Tensor durchgeführt, bevor sie an das Modell übergeben werden, z. B. Normalisierung, Drehung um die Achse, zufälliges Mischen usw.

Wenn der Workflow streng nacheinander ausgeführt wird, ist Schritt 1 der Fall Zuerst ausführen und dann Schritt 2 ausführen, muss das Modell immer auf die Eingabe-, Ausgabe- und Vorverarbeitungsvorgänge des nächsten Datenstapels warten. Die GPU wird nicht effizient genutzt und bleibt beim Laden des nächsten Mini-Datenstapels im Leerlauf.

Um dieses Problem zu lösen, kann die Datenpipeline als Producer-Consumer-Problem betrachtet werden. Die Datenpipeline generiert kleine Datenmengen und schreibt sie in begrenzte Puffer. Das Modell/die GPU verbraucht kleine Datenmengen aus dem Puffer, führt Vorwärts-/Rückwärtsberechnungen durch und aktualisiert die Modellgewichtungen. Wenn die Datenpipeline kleine Datenmengen so schnell generieren kann, wie das Modell/die GPU sie verbraucht, ist der Trainingsprozess sehr effizient.

Bilder

Erstellen Sie mit Ray effiziente Deep-Learning-Datenpipelines2. Tensorflow tf.data APITensorflow tf.data API bietet eine Vielzahl von Funktionen, die zum effizienten Erstellen von Datenpipelines verwendet werden können, indem Hintergrundthreads verwendet werden, um kleine Datenmengen abzurufen Das Modell muss nicht warten. Das Vorababrufen der Daten reicht nicht aus. Wenn das Generieren kleiner Datenmengen langsamer ist, als die GPU die Daten verbrauchen kann, müssen Sie Parallelisierung verwenden, um das Lesen und Umwandeln der Daten zu beschleunigen. Zu diesem Zweck bietet Tensorflow Interleave-Funktionalität, um mehrere Threads zum parallelen Lesen von Daten zu nutzen, und parallele Mapping-Funktionalität, um mehrere Threads zum Transformieren kleiner Datenmengen zu verwenden.

Da diese APIs auf Multithreading basieren, können sie durch den Python Global Interpreter Lock (GIL) eingeschränkt sein. Pythons GIL beschränkt den Bytecode auf jeweils nur einen Thread, der gleichzeitig ausgeführt wird. Wenn Sie reinen TensorFlow-Code in Ihrer Pipeline verwenden, leiden Sie im Allgemeinen nicht unter dieser Einschränkung, da die TensorFlow-Kernausführungs-Engine außerhalb des Geltungsbereichs der GIL arbeitet. Wenn die verwendete Bibliothek eines Drittanbieters jedoch die GIL-Beschränkungen nicht aufhebt oder Python zur Durchführung einer großen Anzahl von Berechnungen verwendet, ist es nicht möglich, sich auf Multithreading zur Parallelisierung der Pipeline zu verlassen.

3 Verwenden Sie eine Multiprozessparallelisierung der Daten Pipeline

Betrachten Sie die folgende Generatorfunktion. Die Funktion simuliert das Laden und Durchführen einiger Berechnungen, um Mini-Batches von Datenbeispielen und Etiketten zu generieren.

for step in range(num_steps):sample, target = next(dataset) # 步骤1train_step(sample, target) # 步骤2
Nach dem Login kopieren

Als nächstes verwenden Sie den Generator in einer Dummy-Trainingspipeline und messen die durchschnittliche Zeit, die zum Generieren von Mini-Datenmengen benötigt wird.

def data_generator():for _ in range(10):# 模拟获取# 从磁盘/网络time.sleep(0.5)# 模拟计算for _ in range(10000):passyield (np.random.random((4, 1000000, 3)).astype(np.float32), np.random.random((4, 1)).astype(np.float32))
Nach dem Login kopieren

Es ​​wurde beobachtet, dass die durchschnittliche benötigte Zeit etwa 0,57 Sekunden betrug (gemessen auf einem Mac-Laptop mit Intel Core i7-Prozessor). Wenn es sich um eine echte Trainingsschleife handeln würde, wäre die GPU-Auslastung ziemlich gering, sie würde nur 0,1 Sekunden für die Berechnung aufwenden und dann 0,57 Sekunden im Leerlauf bleiben und auf den nächsten Datenstapel warten.

Um das Laden der Daten zu beschleunigen, können Sie einen Multiprozessgenerator verwenden.

generator_dataset = tf.data.Dataset.from_generator(data_generator,output_types=(tf.float64, tf.float64),output_shapes=((4, 1000000, 3), (4, 1))).prefetch(tf.data.experimental.AUTOTUNE)st = time.perf_counter()times = []for _ in generator_dataset:en = time.perf_counter()times.append(en - st)# 模拟训练步骤time.sleep(0.1)st = time.perf_counter()print(np.mean(times))
Nach dem Login kopieren

Wenn wir nun die Zeit messen, die wir mit dem Warten auf den nächsten Mini-Datenstapel verbringen, erhalten wir eine durchschnittliche Zeit von 0,08 Sekunden. Das ist fast eine 7-fache Beschleunigung, aber idealerweise sollte diese Zeit nahe bei 0 liegen.

Wenn Sie es analysieren, können Sie feststellen, dass viel Zeit für die Vorbereitung der Deserialisierung von Daten aufgewendet wird. In einem Multiprozessgenerator gibt der Produzentenprozess große NumPy-Arrays zurück, die vorbereitet und dann im Hauptprozess deserialisiert werden müssen. Wie lässt sich also die Effizienz beim Übergeben großer Arrays zwischen Prozessen verbessern?

4. Verwenden Sie Ray, um die Datenpipeline zu parallelisieren.

Hier kommt Ray ins Spiel. Ray ist ein Framework zum Ausführen verteilter Datenverarbeitung in Python. Es verfügt über einen Shared-Memory-Objektspeicher, um Objekte effizient zwischen verschiedenen Prozessen zu übertragen. Insbesondere können Numpy-Arrays im Objektspeicher ohne Serialisierung und Deserialisierung von Workern auf demselben Knoten gemeinsam genutzt werden. Ray macht es außerdem einfach, das Laden von Daten auf mehrere Maschinen zu skalieren und Apache Arrow zu verwenden, um große Arrays effizient zu serialisieren und zu deserialisieren.

Ray verfügt über eine Dienstprogrammfunktion from_iterators, mit der parallele Iteratoren erstellt werden können, und Entwickler können damit die Generatorfunktion data_generator umschließen.

from multiprocessing import Queue, cpu_count, Processdef mp_data_generator():def producer(q):for _ in range(10):# 模拟获取# 从磁盘/网络time.sleep(0.5)# 模拟计算for _ in range(10000000):passq.put((np.random.random((4, 1000000, 3)).astype(np.float32),np.random.random((4, 1)).astype(np.float32)))q.put("DONE")queue = Queue(cpu_count()*2)num_parallel_processes = cpu_count()producers = []for _ in range(num_parallel_processes):p = Process(target=producer, args=(queue,))p.start()producers.append(p)done_counts = 0while done_counts <p>Mit ray_generator wurde die Wartezeit auf den nächsten Mini-Datenstapel mit 0,02 Sekunden gemessen, was viermal schneller ist als mit der Multiprozessverarbeitung. </p>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonErstellen Sie mit Ray effiziente Deep-Learning-Datenpipelines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Methoden und Schritte zur Verwendung von BERT für die Stimmungsanalyse in Python Methoden und Schritte zur Verwendung von BERT für die Stimmungsanalyse in Python Jan 22, 2024 pm 04:24 PM

BERT ist ein vorab trainiertes Deep-Learning-Sprachmodell, das 2018 von Google vorgeschlagen wurde. Der vollständige Name lautet BidirektionalEncoderRepresentationsfromTransformers, der auf der Transformer-Architektur basiert und die Eigenschaften einer bidirektionalen Codierung aufweist. Im Vergleich zu herkömmlichen Einweg-Codierungsmodellen kann BERT bei der Textverarbeitung gleichzeitig Kontextinformationen berücksichtigen, sodass es bei Verarbeitungsaufgaben in natürlicher Sprache eine gute Leistung erbringt. Seine Bidirektionalität ermöglicht es BERT, die semantischen Beziehungen in Sätzen besser zu verstehen und dadurch die Ausdrucksfähigkeit des Modells zu verbessern. Durch Vorschulungs- und Feinabstimmungsmethoden kann BERT für verschiedene Aufgaben der Verarbeitung natürlicher Sprache verwendet werden, wie z. B. Stimmungsanalyse und Benennung

Analyse häufig verwendeter KI-Aktivierungsfunktionen: Deep-Learning-Praxis von Sigmoid, Tanh, ReLU und Softmax Analyse häufig verwendeter KI-Aktivierungsfunktionen: Deep-Learning-Praxis von Sigmoid, Tanh, ReLU und Softmax Dec 28, 2023 pm 11:35 PM

Aktivierungsfunktionen spielen beim Deep Learning eine entscheidende Rolle. Sie können nichtlineare Eigenschaften in neuronale Netze einführen und es dem Netz ermöglichen, komplexe Eingabe-Ausgabe-Beziehungen besser zu lernen und zu simulieren. Die richtige Auswahl und Verwendung von Aktivierungsfunktionen hat einen wichtigen Einfluss auf die Leistung und Trainingsergebnisse neuronaler Netze. In diesem Artikel werden vier häufig verwendete Aktivierungsfunktionen vorgestellt: Sigmoid, Tanh, ReLU und Softmax. Beginnend mit der Einführung, den Verwendungsszenarien und den Vorteilen. Nachteile und Optimierungslösungen werden besprochen, um Ihnen ein umfassendes Verständnis der Aktivierungsfunktionen zu vermitteln. 1. Sigmoid-Funktion Einführung in die Sigmoid-Funktionsformel: Die Sigmoid-Funktion ist eine häufig verwendete nichtlineare Funktion, die jede reelle Zahl auf Werte zwischen 0 und 1 abbilden kann. Es wird normalerweise verwendet, um das zu vereinheitlichen

Jenseits von ORB-SLAM3! SL-SLAM: Szenen mit wenig Licht, starkem Jitter und schwacher Textur werden verarbeitet Jenseits von ORB-SLAM3! SL-SLAM: Szenen mit wenig Licht, starkem Jitter und schwacher Textur werden verarbeitet May 30, 2024 am 09:35 AM

Heute diskutieren wir darüber, wie Deep-Learning-Technologie die Leistung von visionbasiertem SLAM (Simultaneous Localization and Mapping) in komplexen Umgebungen verbessern kann. Durch die Kombination von Methoden zur Tiefenmerkmalsextraktion und Tiefenanpassung stellen wir hier ein vielseitiges hybrides visuelles SLAM-System vor, das die Anpassung in anspruchsvollen Szenarien wie schlechten Lichtverhältnissen, dynamischer Beleuchtung, schwach strukturierten Bereichen und starkem Jitter verbessern soll. Unser System unterstützt mehrere Modi, einschließlich erweiterter Monokular-, Stereo-, Monokular-Trägheits- und Stereo-Trägheitskonfigurationen. Darüber hinaus wird analysiert, wie visuelles SLAM mit Deep-Learning-Methoden kombiniert werden kann, um andere Forschungen zu inspirieren. Durch umfangreiche Experimente mit öffentlichen Datensätzen und selbst abgetasteten Daten demonstrieren wir die Überlegenheit von SL-SLAM in Bezug auf Positionierungsgenauigkeit und Tracking-Robustheit.

Latente Raumeinbettung: Erklärung und Demonstration Latente Raumeinbettung: Erklärung und Demonstration Jan 22, 2024 pm 05:30 PM

Latent Space Embedding (LatentSpaceEmbedding) ist der Prozess der Abbildung hochdimensionaler Daten auf niedrigdimensionalen Raum. Im Bereich des maschinellen Lernens und des tiefen Lernens handelt es sich bei der Einbettung latenter Räume normalerweise um ein neuronales Netzwerkmodell, das hochdimensionale Eingabedaten in einen Satz niedrigdimensionaler Vektordarstellungen abbildet. Dieser Satz von Vektoren wird oft als „latente Vektoren“ oder „latent“ bezeichnet Kodierungen". Der Zweck der Einbettung latenter Räume besteht darin, wichtige Merkmale in den Daten zu erfassen und sie in einer prägnanteren und verständlicheren Form darzustellen. Durch die Einbettung latenter Räume können wir Vorgänge wie das Visualisieren, Klassifizieren und Clustern von Daten im niedrigdimensionalen Raum durchführen, um die Daten besser zu verstehen und zu nutzen. Die Einbettung latenter Räume findet in vielen Bereichen breite Anwendung, z. B. bei der Bilderzeugung, der Merkmalsextraktion, der Dimensionsreduzierung usw. Die Einbettung des latenten Raums ist das Wichtigste

Verstehen Sie in einem Artikel: die Zusammenhänge und Unterschiede zwischen KI, maschinellem Lernen und Deep Learning Verstehen Sie in einem Artikel: die Zusammenhänge und Unterschiede zwischen KI, maschinellem Lernen und Deep Learning Mar 02, 2024 am 11:19 AM

In der heutigen Welle rasanter technologischer Veränderungen sind künstliche Intelligenz (KI), maschinelles Lernen (ML) und Deep Learning (DL) wie helle Sterne und führen die neue Welle der Informationstechnologie an. Diese drei Wörter tauchen häufig in verschiedenen hochaktuellen Diskussionen und praktischen Anwendungen auf, aber für viele Entdecker, die neu auf diesem Gebiet sind, sind ihre spezifische Bedeutung und ihre internen Zusammenhänge möglicherweise noch immer rätselhaft. Schauen wir uns also zunächst dieses Bild an. Es ist ersichtlich, dass zwischen Deep Learning, maschinellem Lernen und künstlicher Intelligenz ein enger Zusammenhang und eine fortschreitende Beziehung besteht. Deep Learning ist ein spezifischer Bereich des maschinellen Lernens und des maschinellen Lernens

Sehen Sie sich von den Grundlagen bis zur Praxis die Entwicklungsgeschichte des Elasticsearch-Vektorabrufs an Sehen Sie sich von den Grundlagen bis zur Praxis die Entwicklungsgeschichte des Elasticsearch-Vektorabrufs an Oct 23, 2023 pm 05:17 PM

1. Einleitung Die Vektorabfrage ist zu einem Kernbestandteil moderner Such- und Empfehlungssysteme geworden. Es ermöglicht einen effizienten Abfrageabgleich und Empfehlungen, indem es komplexe Objekte (wie Text, Bilder oder Töne) in numerische Vektoren umwandelt und Ähnlichkeitssuchen in mehrdimensionalen Räumen durchführt. Schauen Sie sich von den Grundlagen bis zur Praxis die Entwicklungsgeschichte von Elasticsearch Vector Retrieval_elasticsearch an. Als beliebte Open-Source-Suchmaschine hat die Entwicklung von Elasticsearch im Bereich Vektor Retrieval schon immer große Aufmerksamkeit erregt. In diesem Artikel wird die Entwicklungsgeschichte des Elasticsearch-Vektorabrufs untersucht, wobei der Schwerpunkt auf den Merkmalen und dem Fortschritt jeder Phase liegt. Wenn Sie sich an der Geschichte orientieren, ist es für jeden praktisch, eine umfassende Palette zum Abrufen von Elasticsearch-Vektoren einzurichten.

Super stark! Top 10 Deep-Learning-Algorithmen! Super stark! Top 10 Deep-Learning-Algorithmen! Mar 15, 2024 pm 03:46 PM

Fast 20 Jahre sind vergangen, seit das Konzept des Deep Learning im Jahr 2006 vorgeschlagen wurde. Deep Learning hat als Revolution auf dem Gebiet der künstlichen Intelligenz viele einflussreiche Algorithmen hervorgebracht. Was sind Ihrer Meinung nach die zehn besten Algorithmen für Deep Learning? Im Folgenden sind meiner Meinung nach die besten Algorithmen für Deep Learning aufgeführt. Sie alle nehmen hinsichtlich Innovation, Anwendungswert und Einfluss eine wichtige Position ein. 1. Hintergrund des Deep Neural Network (DNN): Deep Neural Network (DNN), auch Multi-Layer-Perceptron genannt, ist der am weitesten verbreitete Deep-Learning-Algorithmus. Als er erstmals erfunden wurde, wurde er aufgrund des Engpasses bei der Rechenleistung in Frage gestellt Jahre, Rechenleistung, Der Durchbruch kam mit der Datenexplosion. DNN ist ein neuronales Netzwerkmodell, das mehrere verborgene Schichten enthält. In diesem Modell übergibt jede Schicht Eingaben an die nächste Schicht und

AlphaFold 3 wird auf den Markt gebracht und sagt die Wechselwirkungen und Strukturen von Proteinen und allen Lebensmolekülen umfassend und mit weitaus größerer Genauigkeit als je zuvor voraus AlphaFold 3 wird auf den Markt gebracht und sagt die Wechselwirkungen und Strukturen von Proteinen und allen Lebensmolekülen umfassend und mit weitaus größerer Genauigkeit als je zuvor voraus Jul 16, 2024 am 12:08 AM

Herausgeber | Rettichhaut Seit der Veröffentlichung des leistungsstarken AlphaFold2 im Jahr 2021 verwenden Wissenschaftler Modelle zur Proteinstrukturvorhersage, um verschiedene Proteinstrukturen innerhalb von Zellen zu kartieren, Medikamente zu entdecken und eine „kosmische Karte“ jeder bekannten Proteininteraktion zu zeichnen. Gerade hat Google DeepMind das AlphaFold3-Modell veröffentlicht, das gemeinsame Strukturvorhersagen für Komplexe wie Proteine, Nukleinsäuren, kleine Moleküle, Ionen und modifizierte Reste durchführen kann. Die Genauigkeit von AlphaFold3 wurde im Vergleich zu vielen dedizierten Tools in der Vergangenheit (Protein-Ligand-Interaktion, Protein-Nukleinsäure-Interaktion, Antikörper-Antigen-Vorhersage) deutlich verbessert. Dies zeigt, dass dies innerhalb eines einzigen einheitlichen Deep-Learning-Frameworks möglich ist

See all articles