本文提供在筆記本和任務中使用無伺服器 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 中的全域限制
請參閱資源限制。