2

私はデータ サイエンス イニシアチブの一環として MLflow の使用を研究しており、Windows からのデータブリックでのリモート実行の最小限の実例を設定したいと考えています。

ただし、リモート実行を実行すると、databricks に送信される MLflow パッケージの Windows でローカルにパスが作成されます。このパスは、MLflow プロジェクトを含む Github リポジトリに対応する '.tar.gz' ファイルのアップロード場所を指定します。cmd では、これには '\' と '/' の組み合わせがありますが、databricks では、このパスに区切り記号がまったくないため、'rsync: No such file or directory (2)' エラーが発生します。

より一般的に言うと、MLflow の標準的な例を使用し、databricks のこのガイドに従ってエラーを再現しました。MLflow の例はsklearn_elasticnet_wineですが、パラメーターにデフォルト値を追加する必要があったため、それをフォークし、リモートで実行できる MLproject を ( forked repo ) で見つけることができます。

プロジェクトは、次のコマンドでリモートで実行できます (databricks インスタンスがセットアップされていることを前提としています)。

mlflow run https://github.com/aestene/mlflow#examples/sklearn_elasticnet_wine -b databricks -c db-clusterconfig.json --experiment-id <insert-id-here>

ここで、「db-clusterconfig.json」は Databricks で設定するクラスターに対応し、この例では次のように設定されています

{
    "autoscale": {
        "min_workers": 1,
        "max_workers": 2
    },
    "spark_version": "5.5.x-scala2.11",
    "node_type_id": "Standard_DS3_v2",
    "driver_node_type_id": "Standard_DS3_v2",
    "ssh_public_keys": [],
    "custom_tags": {},
    "spark_env_vars": {
        "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
    }
}

プロジェクトをリモートで実行する場合、これは cmd の出力です。

2019/10/04 10:09:50 INFO mlflow.projects: === Fetching project from https://github.com/aestene/mlflow#examples/sklearn_elasticnet_wine into C:\Users\ARNTS\AppData\Local\Temp\tmp2qzdyq9_ ===
2019/10/04 10:10:04 INFO mlflow.projects.databricks: === Uploading project to DBFS path /dbfs\mlflow-experiments\3947403843428882\projects-code\aa5fbb4769e27e1be5a983751eb1428fe998c3e65d0e66eb9b4c77355076f524.tar.gz ===
2019/10/04 10:10:05 INFO mlflow.projects.databricks: === Finished uploading project to /dbfs\mlflow-experiments\3947403843428882\projects-code\aa5fbb4769e27e1be5a983751eb1428fe998c3e65d0e66eb9b4c77355076f524.tar.gz ===
2019/10/04 10:10:05 INFO mlflow.projects.databricks: === Running entry point main of project https://github.com/aestene/mlflow#examples/sklearn_elasticnet_wine on Databricks ===
2019/10/04 10:10:06 INFO mlflow.projects.databricks: === Launched MLflow run as Databricks job run with ID 8. Getting run status page URL... ===
2019/10/04 10:10:18 INFO mlflow.projects.databricks: === Check the run's status at https://<region>.azuredatabricks.net/?o=<databricks-id>#job/8/run/1 ===

DBFS パスの先頭は「/」で、残りは「\」です。

コマンドは Databricks でクラスターを起動し、ジョブを実行する準備ができていますが、Databricks 側で次のエラー メッセージが表示されます。

rsync: link_stat "/dbfsmlflow-experiments3947403843428882projects-codeaa5fbb4769e27e1be5a983751eb1428fe998c3e65d0e66eb9b4c77355076f524.tar.gz" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]

同じパスが表示されますが、「\」が挿入されていません。このパスの作成をMLflow Github リポジトリ内のこのファイルに絞り込みました。次のコードでパスが作成されます (133 行目)。

dbfs_path = os.path.join(DBFS_EXPERIMENT_DIR_BASE, str(experiment_id),
                                     "projects-code", "%s.tar.gz" % tarfile_hash)
dbfs_fuse_uri = os.path.join("/dbfs", dbfs_path)

私の現在の仮説はos.path.join()、最初の行で、バックスラッシュが含まれるように「Windows のやり方」で文字列を結合するというものです。次に、次の呼び出しos.path.join()で「/」が追加されます。その後、databricks ファイル システムはこのパスを処理できず、何らかの原因で 'tar.gz' ファイルが正しくアップロードされないか、間違ったパスでアクセスされます。

また、プロジェクトがローカルで正常に実行されることにも言及する必要があります。

次のバージョンを実行しています。

ウィンドウズ10

パイソン 3.6.8

MLflow 1.3.0 (1.2.0 の障害も再現)

フィードバックや提案は大歓迎です!

4

2 に答える 2