Freigeben über


Deep Learning-Modellrückschluss: Leitfaden zur Leistungsoptimierung

Dieser Abschnitt enthält Tipps zum Debuggen und zur Leistungsoptimierung für Modellrückschlüsse auf Azure Databricks. Eine Übersicht finden Sie im Deep Learning-Rückschlussworkflow.

In der Regel bestehen Modellrückschlüsse aus zwei Hauptbestandteilen: die Dateneingabepipeline und die Rückschlüsse selbst. Die Dateneingabepipeline ist stark belastet mit Daten-E/A-Eingaben, und der Modellrückschluss ist sehr rechenintensiv. Das Ermitteln von Engpässen im Workflow ist einfach. Hier sind einige Ansätze:

  • Reduktion des Modells auf ein triviales Modell und Messung der Beispiele pro Sekunde. Wenn der Unterschied zwischen der End-to-End-Zeit zwischen dem vollständigen Modell und dem trivialen Modell minimal ist, ist wahrscheinlich die Dateneingabepipeline ein Engpass, andernfalls ist der Modellrückschluss der Engpass.
  • Wenn Sie Modellrückschlüsse mit einer GPU ausführen, überprüfen Sie die GPU-Auslastungsmetriken. Wenn die GPU-Auslastung nicht kontinuierlich hoch ist, dann ist die Dateneingabepipeline möglicherweise der Engpass.

Optimieren der Dateneingabepipeline

Die Verwendung von GPUs kann die Ausführungsgeschwindigkeit für Modellrückschlüsse wirksam optimieren. Da GPUs und andere Beschleuniger immer schneller werden, ist es entscheidend, dass die Dateneingabepipeline mit der Anforderung Schritt hält. Die Dateneingabepipeline liest die Daten in Spark-Datenrahmen, transformiert sie und lädt sie als Eingabe für den Modellrückschluss. Wenn die Dateneingabe der Engpass ist, finden Sie hier Tipps zum Erhöhen des E/A-Durchsatzes:

  • Maximale Datensätze pro Batch festlegen. Eine größere Anzahl von maximalen Datensätzen kann den E/A-Aufwand zum Aufrufen der UDF-Funktion reduzieren, sofern die Datensätze in den Arbeitsspeicher passen. Zum Festlegen der Batchgröße die folgende Konfiguration angeben:

    spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
    
  • Die Daten in Batches laden, und vorab abrufen, wenn die Eingabedaten in der pandas-UDF vorverarbeitet werden.

    Für TensorFlow empfiehlt Azure Databricks die Verwendung der tf.data-API. Sie können die Zuordnung parallel parsen, indem Sie num_parallel_calls in einer map-Funktion festlegen und prefetch und batch für Vorabrufe und Batchverarbeitung verwenden.

    dataset.map(parse_example, num_parallel_calls=num_process).prefetch(prefetch_size).batch(batch_size)
    

    Für PyTorch empfiehlt Azure Databricks die DataLoader-Klasse. Sie können batch_size für die Batchverarbeitung und num_workers für das parallele Laden von Daten festlegen.

    torch.utils.data.DataLoader(images, batch_size=batch_size, num_workers=num_process)