共用方式為


無伺服器 GPU 運算的最佳實務

本文提供在筆記本和任務中使用無伺服器 GPU 運算的最佳做法建議。

遵循這些建議,您將提升 Azure Databricks 上工作負載的生產力、成本效益和可靠性。

使用正確的運算

  • 使用無伺服器 GPU 運算。 此選項隨附針對相容性進行最佳化的 torch、cuda 和 torchvision。 確切的套件版本將取決於 環境版本
  • 在環境側邊面板中選取您的加速器。
    • 對於遠端分散式訓練工作負載,請使用 A10 GPU 作為用戶端,稍後將作業傳送至遠端 H100。
    • 若要在筆記本本身上執行大型互動式工作,您可以將筆記本連接到 H100,這將佔用 1 個節點(8 個 H100 GPU)。
  • 為了避免佔用 GPU,你可以把筆電接到 CPU 叢集上,做一些操作,比如 git 克隆或將 Spark Dataframe 轉換成 Mosaic Data Shard(MDS)格式。

MLflow 建議

如需最佳 ML 開發週期,請在 Databricks 上使用 MLflow 3。 請遵循以下提示:

  • 將您的環境 MLflow 升級至 3.6 或更新版本,並在 MLflow 3 深度學習工作流程中遵循 MLflow 深度學習流程。

  • step中的參數MLFlowLogger設定為合理的批次數。 MLflow 的限制為 10,000,000,000 個可記錄的計量步驟。 請參閱資源限制

  • 如果使用 Pytorch Lightning 作為訓練器,請啟用 mlflow.pytorch.autolog()

  • 在 API 範圍內封裝模型定型程式碼 mlflow.start_run() ,以自訂您的 MLflow 執行名稱。 這可讓您控制執行名稱,並能夠從先前的執行重新啟動。您可以在run_name中使用mlflow.start_run(run_name="your-custom-name")參數,或在支援 MLflow 的第三方庫(例如,Hugging Face Transformers)中自訂執行名稱。 否則,預設執行名稱為 jobTaskRun-xxxxx

    from transformers import TrainingArguments
    args = TrainingArguments(
        report_to="mlflow",
        run_name="llama7b-sft-lr3e5",  # <-- MLflow run name
        logging_steps=50,
    )
    
  • 無伺服器 GPU API 會啟動 MLflow 實驗來記錄系統計量。 依預設,它會使用名稱 /Users/{WORKSPACE_USER}/{get_notebook_name()} ,除非使用者使用環境變數 MLFLOW_EXPERIMENT_NAME覆寫它。

    • 設定 MLFLOW_EXPERIMENT_NAME 環境變數時,請使用絕對路徑。 例如,/Users/<username>/my-experiment
    • 實驗名稱不得包含現有的資料夾名稱。 例如,如果是現有資料夾,則 my-experiment 上述範例將出錯。
    import os
    from serverless_gpu import distributed
    os.environ['MLFLOW_EXPERIMENT_NAME'] = '/Users/{WORKSPACE_USER}/my_experiment'
    @distributed(gpus=num_gpus, gpu_type=gpu_type, remote=True)
    def run_train():
    # my training code
    
  • 若要從上一次執行繼續訓練,請指定上次執行的MLFLOW_RUN_ID,如下所示。

    import os
    os.environ[‘MLFLOW_RUN_ID’] = <previous_run_id>
    run_train.distributed()
    

多用戶協作

  • 為了確保所有使用者都可以存取共用程式碼(例如,協助程式模組、environment.yaml),請在 或 /Workspace/Repos 中建立 git 資料夾/Workspace/Shared,而不是使用者特定的資料夾,例如 /Workspace/Users/<your_email>/
  • 對於處於主動開發中的程式碼,請在使用者特定資料夾 /Workspace/Users/<your_email>/ 中使用 Git 資料夾,並推送至遠端 Git 存放庫。 這可讓多個使用者擁有使用者特定的複製 (和分支),但仍使用遠端 Git 存放庫進行版本控制。 請參閱在 Databricks 上使用 Git 的最佳 做法
  • 協作者可以在筆記本上 分享和發表評論

裝潢機內部 @distributed 的載荷資料

使用 無伺服器 GPU API 進行分散式訓練時,請將資料載入程式碼移入 @distributed 裝飾器內部。 資料集大小可能會超過 pickle 所允許的最大限制,因此建議在裝飾器中生成資料集,如下所示:

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Databricks 中的全域限制

請參閱資源限制