更改 MLflow 工件存储的子目录
Changing subdirectory of MLflow artifact store
Python API 中是否有任何内容可以让您更改工件子目录?例如,我有一个 .json 文件存储在这里:
s3://mlflow/3/1353808bf7324824b7343658882b1e45/artifacts/feature_importance_split.json
MlFlow 在 s3 中创建一个 3/
键。有没有办法更改以将此键修改为其他内容(日期或实验名称)?
正如我在上面评论的那样,是的,mlflow.create_experiment()
允许您使用 artifact_location
参数设置工件位置。
然而,有点相关,使用 create_experiment()
函数设置 artifact_location
的问题在于,一旦你创建了一个实验,如果你 运行 create_experiment()
再次运行。
我没有在文档中看到这一点,但已确认如果后端存储中已经存在实验,MlFlow 将不允许您再次 运行 相同的 create_experiment()
函数。从这个 post 开始,MLfLow 没有 check_if_exists
标志或 create_experiments_if_not_exists()
函数。
更令人沮丧的是,您也不能在 set_experiment()
函数中设置 artifcact_location
。
所以这是一个非常简单的解决方法,它也避免了“错误 mlflow.utils.rest_utils...”标准输出日志记录。
:
import os
from random import random, randint
from mlflow import mlflow,log_metric, log_param, log_artifacts
from mlflow.exceptions import MlflowException
try:
experiment = mlflow.get_experiment_by_name('oof')
experiment_id = experiment.experiment_id
except AttributeError:
experiment_id = mlflow.create_experiment('oof', artifact_location='s3://mlflow-minio/sample/')
with mlflow.start_run(experiment_id=experiment_id) as run:
mlflow.set_tracking_uri('http://localhost:5000')
print("Running mlflow_tracking.py")
log_param("param1", randint(0, 100))
log_metric("foo", random())
log_metric("foo", random() + 1)
log_metric("foo", random() + 2)
if not os.path.exists("outputs"):
os.makedirs("outputs")
with open("outputs/test.txt", "w") as f:
f.write("hello world!")
log_artifacts("outputs")
如果这是用户第一次创建实验,代码将 运行 变成一个 AttributeError 因为 experiment_id
不存在并且执行 except
代码块创建实验.
如果是第二个、第三个等等代码是运行,它只会执行try
语句下的代码,因为实验现在已经存在。 Mlflow 现在将在您的 s3 存储桶中创建一个 'sample' 密钥。没有经过全面测试,但至少对我有用。
Python API 中是否有任何内容可以让您更改工件子目录?例如,我有一个 .json 文件存储在这里:
s3://mlflow/3/1353808bf7324824b7343658882b1e45/artifacts/feature_importance_split.json
MlFlow 在 s3 中创建一个 3/
键。有没有办法更改以将此键修改为其他内容(日期或实验名称)?
正如我在上面评论的那样,是的,mlflow.create_experiment()
允许您使用 artifact_location
参数设置工件位置。
然而,有点相关,使用 create_experiment()
函数设置 artifact_location
的问题在于,一旦你创建了一个实验,如果你 运行 create_experiment()
再次运行。
我没有在文档中看到这一点,但已确认如果后端存储中已经存在实验,MlFlow 将不允许您再次 运行 相同的 create_experiment()
函数。从这个 post 开始,MLfLow 没有 check_if_exists
标志或 create_experiments_if_not_exists()
函数。
更令人沮丧的是,您也不能在 set_experiment()
函数中设置 artifcact_location
。
所以这是一个非常简单的解决方法,它也避免了“错误 mlflow.utils.rest_utils...”标准输出日志记录。 :
import os
from random import random, randint
from mlflow import mlflow,log_metric, log_param, log_artifacts
from mlflow.exceptions import MlflowException
try:
experiment = mlflow.get_experiment_by_name('oof')
experiment_id = experiment.experiment_id
except AttributeError:
experiment_id = mlflow.create_experiment('oof', artifact_location='s3://mlflow-minio/sample/')
with mlflow.start_run(experiment_id=experiment_id) as run:
mlflow.set_tracking_uri('http://localhost:5000')
print("Running mlflow_tracking.py")
log_param("param1", randint(0, 100))
log_metric("foo", random())
log_metric("foo", random() + 1)
log_metric("foo", random() + 2)
if not os.path.exists("outputs"):
os.makedirs("outputs")
with open("outputs/test.txt", "w") as f:
f.write("hello world!")
log_artifacts("outputs")
如果这是用户第一次创建实验,代码将 运行 变成一个 AttributeError 因为 experiment_id
不存在并且执行 except
代码块创建实验.
如果是第二个、第三个等等代码是运行,它只会执行try
语句下的代码,因为实验现在已经存在。 Mlflow 现在将在您的 s3 存储桶中创建一个 'sample' 密钥。没有经过全面测试,但至少对我有用。