Dela via


Guide till prestandajustering för modellinferens för djupinlärning

Det här avsnittet innehåller några tips för felsökning och prestandajustering för modellinferens på Azure Databricks. En översikt finns i arbetsflödet för slutsatsdragning för djupinlärning.

Vanligtvis finns det två huvuddelar i modellinferens: pipeline för dataindata och modellinferens. Datainmatningspipelinen är tung på data-I/O-indata och modellinferensen är tung på beräkningen. Det är enkelt att fastställa flaskhalsen i arbetsflödet. Här följer några metoder:

  • Minska modellen till en trivial modell och mät exemplen per sekund. Om skillnaden mellan slutpunkt och sluttid mellan den fullständiga modellen och den triviala modellen är minimal är dataindatapipelinen sannolikt en flaskhals, annars är modellinferens flaskhalsen.
  • Om du kör modellinferens med GPU kontrollerar du måtten för GPU-användning. Om GPU-användningen inte är kontinuerligt hög kan dataindatapipelinen vara flaskhalsen.

Optimera pipeline för dataindata

Användning av GPU:er kan effektivt optimera körningshastigheten för modellinferens. När GPU:er och andra acceleratorer blir snabbare är det viktigt att pipelinen för dataindata håller jämna steg med efterfrågan. Dataindatapipelinen läser in data i Spark Dataframes, transformerar dem och läser in dem som indata för modellinferens. Om dataindata är flaskhalsen finns här några tips för att öka I/O-dataflödet:

  • Ange maximalt antal poster per batch. Ett större antal maximala poster kan minska I/O-omkostnaderna för att anropa UDF-funktionen så länge posterna får plats i minnet. Ange batchstorleken genom att ange följande konfiguration:

    spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
    
  • Läs in data i batchar och förbearbeta dem när du förbearbetar indata i Pandas UDF.

    För TensorFlow rekommenderar Azure Databricks att du använder API:et tf.data. Du kan parsa kartan parallellt genom att ange num_parallel_calls i en map funktion och anropa prefetch och batch för prefetching och batchbearbetning.

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

    För PyTorch rekommenderar Azure Databricks att du använder klassen DataLoader. Du kan ange batch_size för batchbearbetning och num_workers för parallell datainläsning.

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