Удаленное выполнение MLflow для блоков данных из Windows создает неверный путь dbfs - PullRequest
1 голос
/ 04 октября 2019

Я исследую использование MLflow как часть наших инициатив в области науки о данных и хочу установить минимальный рабочий пример удаленного выполнения для блоков данных из окон.

Однако, когда я выполняю удаленное выполнениепуть создается локально на окнах в пакете MLflow, который отправляется в блоки данных. Этот путь указывает местоположение загрузки файла .tar.gz, соответствующего репозиторию Github, содержащему проект MLflow. В cmd это сочетание «\» и «/», но в кирпичах данных в этом пути вообще нет разделителей, что приводит к ошибке «rsync: No such file or directory (2)».

Чтобы быть более общим, я воспроизвел ошибку, используя стандартный пример MLflow и следуя этому руководству из блоков данных. Примером MLflow является sklearn_elasticnet_wine , но мне пришлось добавить значение по умолчанию к параметру, чтобы я его разветвил, и MLproject, который можно выполнить удаленно, можно найти по адресу ( раздвоенное репо ).

Проект можно выполнить удаленно с помощью следующей команды (при условии, что экземпляр блока данных был настроен)

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" соответствует кластеру, который нужно установить. в блоках данных и в этом примере имеет значение

{
    "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 имеет начальный '/'перед остальными' '.

Команда раскручивает кластер в блоках данных и готова выполнить задание, но в итоге выдает следующее сообщение об ошибке на стороне блоков данных:

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() в первой строке соединяет строку в «оконную моду» так, чтобы они имели обратную косую черту. Затем следующий вызов os.path.join() добавляет '/'. В этом случае файловая система блоков данных не может обработать этот путь, и что-то приводит к неправильной загрузке файла tar.gz или к неправильному пути.

Следует также отметить, что проект работает нормально локально.

Я использую следующие версии:

Windows 10

Python 3.6.8

MLflow 1.3.0 (также повторяется ошибка 1.2.0)

Любые отзывы и предложения приветствуются!

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Спасибо, что поставили эту проблему. Я также столкнулся с тем же в Windows 10.

Я решил эту проблему, заменив все «os.path» на «posixpath» в файле «databricks.py». Это прекрасно сработало для меня.

0 голосов
/ 11 октября 2019

Спасибо за улов, вы правы, что использование os.path.join при работе с путями DBFS некорректно, что приводит к неправильному пути, который нарушает выполнение проекта. Я подал на https://github.com/mlflow/mlflow/issues/1926 отслеживание этого, если вы заинтересованы в создании исправления PR (, см. Руководство для участника MLflow для получения информации о том, как это сделать ), чтобы заменить os.path.join здесь. с os.posixpath.join буду рад отзыву :)

...