MLflow сохраняет модели в относительном месте вместо отслеживания_uri

#mlflow

Вопрос:

извините, если мой вопрос слишком прост, но я не могу его решить. В настоящее время я экспериментирую с mlflow и сталкиваюсь со следующей проблемой:

Даже если я установил tracking_uri, артефакты mlflow сохраняются в ./mlruns/… папка относительно пути, по которому я бегу mlfow run path/to/train.py (в командной строке). Сервер mlflow выполняет поиск артефактов после tracking_uri ( mlflow server --default-artifact-root here/comes/the/same/tracking_uri ).

На следующем примере будет ясно, что я имею в виду:

Я установил следующее в сценарии обучения перед with mlflow.start_run() as run:

 mlflow.set_tracking_uri("file:///home/@myUser/@SomeFolders/mlflow_artifact_store/mlruns/")
 

Я ожидал бы, что mlflow сохранит все артефакты в том месте, которое я указал в uri-адресе реестра. Вместо этого он сохраняет артефакты относительно места, с которого я выполняю mlflow run path/to/train.py , т. Е. Выполняет следующее

 /home/@myUser/ mlflow run path/to/train.py
 

создает структуру:

 /home/@myUser/mlruns/@experimentID/@runID/artifacts
/home/@myUser/mlruns/@experimentID/@runID/metrics
/home/@myUser/mlruns/@experimentID/@runID/params
/home/@myUser/mlruns/@experimentID/@runID/tags
 

и поэтому он не находит артефакты запуска в tracking_uri, выдавая сообщение об ошибке:

 Traceback (most recent call last):
  File "train.py", line 59, in <module>
    with mlflow.start_run() as run:
  File "/home/@myUser/miniconda3/envs/mlflow-ff56d6062d031d43990effc19450800e72b9830b/lib/python3.6/site-packages/mlflow/tracking/fluent.py", line 204, in start_run
    active_run_obj = client.get_run(existing_run_id)
  File "/home/@myUser/miniconda3/envs/mlflow-ff56d6062d031d43990effc19450800e72b9830b/lib/python3.6/site-packages/mlflow/tracking/client.py", line 151, in get_run
    return self._tracking_client.get_run(run_id)
  File "/home/@myUser/miniconda3/envs/mlflow-ff56d6062d031d43990effc19450800e72b9830b/lib/python3.6/site-packages/mlflow/tracking/_tracking_service/client.py", line 57, in get_run
    return self.store.get_run(run_id)
  File "/home/@myUser/miniconda3/envs/mlflow-ff56d6062d031d43990effc19450800e72b9830b/lib/python3.6/site-packages/mlflow/store/tracking/file_store.py", line 524, in get_run
    run_info = self._get_run_info(run_id)
  File "/home/@myUser/miniconda3/envs/mlflow-ff56d6062d031d43990effc19450800e72b9830b/lib/python3.6/site-packages/mlflow/store/tracking/file_store.py", line 544, in _get_run_info
    "Run '%s' not found" % run_uuid, databricks_pb2.RESOURCE_DOES_NOT_EXIST
mlflow.exceptions.MlflowException: Run '788563758ece40f283bfbf8ba80ceca8' not found
2021/07/23 16:54:16 ERROR mlflow.cli: === Run (ID '788563758ece40f283bfbf8ba80ceca8') failed ===
 

Почему это так? Как я могу изменить место, где хранятся артефакты, создается эта структура каталогов? Я попытался mlflow run --storage-dir here/comes/the/path , установив tracking_uri, registry_uri. Если я запущу /home/path/to/tracking/uri mlflow run path/to/train.py , это сработает, но мне нужно запускать сценарии удаленно.

Моей конечной целью было бы изменить uri артефакта на диск NFS, но даже на моем локальном компьютере я не могу этого сделать.

Спасибо, что прочитали это, еще больше спасибо, если вы предложите решение! 🙂 Хорошего вам дня!

Ответ №1:

Эта проблема была решена следующим образом:

Я смешал tracking_uri с backend_store_uri.

tracking_uri-это место, где сохраняются данные, связанные с MLflow (например, теги, параметры, метрики и т. Д.), Которые могут быть базой данных. С другой стороны, artifact_location-это место, где находятся артефакты (другие, не связанные с MLflow данные, принадлежащие сценариям предварительной обработки/обучения/оценки/и т.д.). Что привело меня к ошибкам, так это то, что, запустив сервер mlflow из командной строки, нужно настроить для —backend-store-uri tracking_uri (также в сценарии, установив mlflow.set_tracking_uri()) и для —по умолчанию-расположение артефактов расположение артефактов. Как-то я не понял, что отслеживание_ури = backend_store_uri.