Delen via


Handleiding voor afstemmen van prestaties van deep learning-modeldeductie

Deze sectie bevat enkele tips voor foutopsporing en het afstemmen van prestaties voor modeldeductie in Azure Databricks. Zie de deep learning-deductiewerkstroom voor een overzicht.

Normaal gesproken zijn er twee hoofdonderdelen in modeldeductie: pijplijn voor gegevensinvoer en modeldeductie. De pijplijn voor gegevensinvoer is zwaar voor gegevens-I/O-invoer en modeldeductie is zwaar voor berekeningen. Het bepalen van het knelpunt van de werkstroom is eenvoudig. Hier volgen enkele benaderingen:

  • Verminder het model tot een triviaal model en meet de voorbeelden per seconde. Als het verschil tussen de eind- en eindtijd tussen het volledige model en het triviale model minimaal is, is de pijplijn voor gegevensinvoer waarschijnlijk een knelpunt, anders is modeldeductie het knelpunt.
  • Als u modeldeductie uitvoert met GPU, controleert u de metrische gegevens over gpu-gebruik. Als het GPU-gebruik niet continu hoog is, kan de pijplijn voor gegevensinvoer het knelpunt zijn.

Pijplijn voor gegevensinvoer optimaliseren

Het gebruik van GPU's kan de actieve snelheid voor modeldeductie efficiƫnt optimaliseren. Naarmate GPU's en andere accelerators sneller worden, is het belangrijk dat de pijplijn voor gegevensinvoer de vraag bijhoudt. De gegevensinvoerpijplijn leest de gegevens in Spark Dataframes, transformeert deze en laadt deze als invoer voor modeldeductie. Als gegevensinvoer het knelpunt is, volgen hier enkele tips om de I/O-doorvoer te verhogen:

  • Stel de maximumrecords per batch in. Een groter aantal records kan de I/O-overhead verminderen om de UDF-functie aan te roepen zolang de records in het geheugen passen. Als u de batchgrootte wilt instellen, stelt u de volgende configuratie in:

    spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
    
  • Laad de gegevens in batches en prefetch deze bij het vooraf verwerken van de invoergegevens in de pandas UDF.

    Voor TensorFlow raadt Azure Databricks het gebruik van de TF.data-API aan. U kunt de kaart parallel parseren door een functie in te map stellen num_parallel_calls en aan te roepen prefetch en batch voor prefetching en batching.

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

    Voor PyTorch raadt Azure Databricks aan om de DataLoader-klasse te gebruiken. U kunt instellen batch_size voor batchverwerking en num_workers voor het laden van parallelle gegevens.

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