#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.