Я исследую использование 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)
Любые отзывы и предложения приветствуются!