🌱

正しいMLFLOW_TRACKING_URIがわからず15分嵌った話

2024/11/10に公開
mlflow.exceptions.MlflowException: When an mlflow-artifacts URI was supplied, the tracking URI must be a valid http or https URI, but it was currently set to file:///Users/hirayuki/Documents/Projects/mlflow/mlruns. Perhaps you forgot to set the tracking URI to the running MLflow server. To set the tracking URI, use either of the following methods:
1. Set the MLFLOW_TRACKING_URI environment variable to the desired tracking URI. `export MLFLOW_TRACKING_URI=http://localhost:5000`
2. Set the tracking URI programmatically by calling `mlflow.set_tracking_uri`. `mlflow.set_tracking_uri('http://localhost:5000')`

あとは試行錯誤していると下記のエラーも現れる可能性もあります。

mlflow.exceptions.MlflowException: API request to http://localhost:8081/api/2.0/mlflow/runs/create failed with exception HTTPConnectionPool(host='localhost', port=8081): Max retries exceeded with url: /api/2.0/mlflow/runs/create (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x15382c340>: Failed to establish a new connection: [Errno 61] Connection refused'))

ということでこの対応策を紹介します。結論から言うとエラーログに書かれている通り export MLFLOW_TRACKING_URI=http://localhost:5000 するか mlflow.set_tracking_uri('http://localhost:5000') をコードの中に書き込むかのどっちかです。
ただここで5000 portを使っているから嵌ってしまいました。

普通に mlflowの使っているportに向けて設定すればOK

https://github.com/mlflow/mlflow/issues/7819
こちらの issueにも色々と 5002 portなら通ったとか、 localhostだと直った等ありますが、基本的には mlflow serverが構えている portに対して実行するだけです。
普通にmlflow server 立ち上げてみましょう。
mlflow server --host 127.0.0.1 を実行します。

(main) hirayuki@MacBook-Air mlflow % mlflow server --host 127.0.0.1
[2024-11-10 15:00:11 +0900] [15026] [INFO] Starting gunicorn 23.0.0
[2024-11-10 15:00:11 +0900] [15026] [INFO] Listening at: http://127.0.0.1:5000 (15026)
[2024-11-10 15:00:11 +0900] [15026] [INFO] Using worker: sync
[2024-11-10 15:00:11 +0900] [15030] [INFO] Booting worker with pid: 15030

そうするとログにある通り、標準は 5000 portで立ち上がります。

quick start通りにして混乱

https://mlflow.org/docs/latest/getting-started/intro-quickstart/index.html
quick startだと最初の起動コマンドが
mlflow server --host 127.0.0.1 --port 8080 となっています。そうなると 8080 portで立ち上がります。

なのでこの場合

  • export MLFLOW_TRACKING_URI=http://localhost:8080
  • または pythonコード内に mlflow.set_tracking_uri("http://localhost:8080")

上記どちらかで直ります。

サーバやportに詳しい人にとっては、「何言ってんだこいつ?・・・」という感じのレベルの低いハマり方でしたが。。。

Discussion