共用方式為


深度學習模型推斷效能微調指南

本節提供在 Azure Databricks 上針對模型推斷進行偵錯和效能微調的一些秘訣。 如需概觀,請參閱 深度學習推斷工作流程

模型推斷中通常有兩個主要部分:資料輸入管線和模型推斷。 資料輸入管線對資料 I/O 輸入很重,模型推斷在計算上很重。 判斷工作流程的瓶頸很簡單。 以下是一些方法:

  • 將模型縮減為簡單模型,並測量每秒的範例。 如果完整模型與一般模型之間的端對端時間差異很小,則資料輸入管線可能是瓶頸,否則模型推斷就是瓶頸。
  • 如果使用 GPU 執行模型推斷,請檢查 GPU 使用率 計量 。 如果 GPU 使用率不持續高,則資料輸入管線可能是瓶頸。

優化資料輸入管線

使用 GPU 可以有效率地優化模型推斷的執行速度。 當 GPU 和其他加速器變得更快時,資料輸入管線必須跟上需求。 資料輸入管線會將資料讀取至 Spark 資料框架、轉換資料,並將其載入為模型推斷的輸入。 如果資料輸入是瓶頸,以下是增加 I/O 輸送量的一些秘訣:

  • 設定每個批次的最大記錄。 較大的最大記錄數目可減少 I/O 額外負荷,只要記錄可以放入記憶體中,即可呼叫 UDF 函式。 若要設定批次大小,請設定下列設定:

    spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
    
  • 在 pandas UDF 中預先處理輸入資料時,以批次的方式載入資料並預先擷取資料。

    針對 TensorFlow,Azure Databricks 建議使用 tf.data API 。 您可以在函式中 map 設定 num_parallel_calls ,並呼叫 prefetchbatch 進行預先擷取和批次處理,以平行剖析對應。

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

    針對 PyTorch,Azure Databricks 建議使用 DataLoader 類別 。 您可以設定 batch_size 批次處理和 num_workers 平行載入資料。

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