メインコンテンツまでスキップ

サーバレス GPU コンピュートのベスト プラクティス

この記事では、ノートブックとジョブでサーバレス GPU コンピュートを使用するためのベスト プラクティスの推奨事項を紹介します。

これらの推奨事項に従うことで、Databricks 上のワークロードの生産性、コスト効率、信頼性が向上します。

@distributed デコレータ内にデータ読み込みコードを移動する

データセットのサイズは、pickle で許可される最大サイズを超える可能性があります。したがって、次のようにデコレータ内でデータセットを生成することをお勧めします。

Python
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)
....

正しいコンピュートを使用する

  • サーバレスGPUコンピュートを使用します。 このオプションには、互換性のために最適化された torch、cuda、torchvision が付属しています。正確なパッケージ バージョンは環境のバージョンによって異なります。

  • 環境サイドパネルでアクセラレータを選択します。

    • リモート分散トレーニング ワークロードの場合は、後でリモート H100 にジョブを送信するクライアントとなる A10 GPU を使用します。
    • ノートブック自体で大規模なインタラクティブ ジョブを実行するには、ノートブックを H100 に接続して、1 つのノード (8 つの H100 GPU) を占有します。
  • GPU の占有を回避するには、git clone や MDS 変換などの一部の操作のためにノートブックを CPU クラスターに接続することができます。

MLflowの推奨事項

最適な ML 開発サイクルを実現するには、Databricks で MLflow 3 を使用します。次のヒントに従ってください。

  • 環境のMLflowバージョン 3.0 以降にアップグレードし、 MLflow 3ディープラーニング ワークフローのMLflowディープラーニング フローに従います。

  • MLFlowLoggerstep問題を適切なバッチ数に設定します。 MLflow 、ログに記録できるメトリクス ステップは 1,000 万件に制限されています。 リソース制限を参照してください。

  • PyTorch Lightning をトレーナーとして使用する場合は、 mlflow.pytorch.autolog()を有効にします。

  • モデル トレーニング コードをmlflow.start_run() API スコープ内にカプセル化して、MLflow 実行名をカスタマイズします。これにより、実行名を制御でき、以前の実行から再開できるようになります。 mlflow.start_run(run_name="your-custom-name")またはMLflowをサポートするサードパーティ ライブラリ ( Hugging Face Transformers など) のrun_name懸念を使用して実行名をカスタマイズできます。 それ以外の場合、デフォルトの実行名はjobTaskRun-xxxxxです。

    Python
    from transformers import TrainingArguments
    args = TrainingArguments(
    report_to="mlflow",
    run_name="llama7b-sft-lr3e5", # <-- MLflow run name
    logging_steps=50,
    )
  • サーバレス GPU API 、システム メトリクスをログに記録するためのMLflowエクスペリメントを起動します。 デフォルトでは、ユーザーが環境変数MLFLOW_EXPERIMENT_NAMEで上書きしない限り、名前/Users/{WORKSPACE_USER}/{get_notebook_name()}が使用されます。

    • MLFLOW_EXPERIMENT_NAME環境変数を設定するときは、絶対パスを使用します。たとえば、 /Users/<username>/my-experiment
    • エクスペリメント名には既存のフォルダー名を含めることはできません。 たとえば、 my-experiment既存のフォルダーである場合、上記の例ではエラーが発生します。
    Python
    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 を指定します。

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

複数ユーザーコラボレーション

  • すべてのユーザーが共有コード(ヘルパーモジュール、environment.yamlなど)にアクセスできるようにするには、/Workspace/Users/<your_email>/のようなユーザー固有のフォルダーの代わりに、 /Workspace/Reposまたは/Workspace/Sharedに git フォルダーを作成します。
  • アクティブに開発中のコードの場合は、ユーザー固有のフォルダー/Workspace/Users/<your_email>/内の Git フォルダーを使用し、リモート Git リポジトリにプッシュします。これにより、複数のユーザーがユーザー固有のクローン (およびブランチ) を持つことができ、バージョン管理にはリモート Git リポジトリを引き続き使用できます。Databricks で Git を使用するためのベスト プラクティスを参照してください。
  • 共同作業者はノートブックを共有したりコメントしたりできます。

Databricksのグローバル制限

リソース制限を参照してください。