mlflow R 安装 MLFLOW_PYTHON_BIN

Posted

技术标签:

【中文标题】mlflow R 安装 MLFLOW_PYTHON_BIN【英文标题】:mlflow R installation MLFLOW_PYTHON_BIN 【发布时间】:2020-06-23 18:00:27 【问题描述】:

我正在尝试在 R 中安装 mlflow,我收到此错误消息说

mlflow::install_mlflow() mlflow_conda_bin() 中的错误: 无法找到 conda 二进制文件。 Anaconda 安装了吗? 如果你不使用 conda,你可以将环境变量 MLFLOW_PYTHON_BIN 设置为你的 python 可执行文件的路径。

我已经尝试了以下

export MLFLOW_PYTHON_BIN="/usr/bin/python" 
source ~/.bashrc
echo $MLFLOW_PYTHON_BIN  -> this prints the /usr/bin/python.

或在 R 中,

sys.setenv(MLFLOW_PYTHON_BIN="/usr/bin/python")
sys.getenv() -> prints MLFLOW_PYTHON_BIN is set to /usr/bin/python.

还是不行

我不想使用 conda 环境。

如何解决这个错误?

【问题讨论】:

你解决了吗? 【参考方案1】:

install_mlflow 命令目前仅适用于 conda,对于令人困惑的消息,我们深表歉意。您可以:

安装 conda - 这是安装和使用 mlflow 的推荐方式

通过 pip 自己安装 mlflow python 包

要自己安装 mlflow,pip install correct(匹配 R 包)python 版本的 mlflow 并设置 MLFLOW_PYTHON_BIN 环境变量以及 MLFLOW_BIN evn 变量:例如

library(mlflow)
system(paste("pip install -U mlflow==", mlflow:::mlflow_version(), sep=""))
Sys.setenv(MLFLOW_BIN=system("which mlflow"))
Sys.setenv(MLFLOW_PYTHON_BIN=system("which python"))

【讨论】:

我尝试了第二种方法,但如果一直出现相同的消息...任何解决方案?谢谢 您需要在系统调用中设置 intern=TRUE 才能正确设置环境变量: Sys.setenv(MLFLOW_BIN=system("which mlflow", intern=TRUE)) Sys.setenv( MLFLOW_PYTHON_BIN=system("which python", intern=TRUE))【参考方案2】:

刚刚遇到这个问题,@Tomas 接受的答案非常有帮助。我在上面添加了一条评论,但是,对于一些额外的上下文,如果有任何其他 Enterprise Databricks R 用户在这篇文章中尝试使用 Databricks 上的 R 的 MLflow 包,我想创建一个更全面的回复。

Databricks MLflow quickstart guide 会告诉您需要运行以下命令:

library(mlflow)
install_mlflow()

但是,对于 Enterprise Databricks 用户,如果您的集群没有外部连接权限(很可能没有)并且无法连接到 Anaconda 存储库以下载必要的软件包,install_mlflow() 函数将失败。您可能会收到如下错误:

CondaHTTPError: HTTP 000 CONNECTION FAILED for url https://conda.anaconda.org/conda-forge/linux-64/current_repodata.js

好消息是,您的 Databricks 运行时应该已经安装了 MLflow。因此,您可以改为引用该安装,然后如@Tomas 所述,使用它为MLFLOW_BINMLFLOW_PYTHON_BIN 设置R 环境变量。从那里开始,R MLflow API 按规定工作(根据我的经验,但是 ymmv)。

上述解决方案的唯一问题是,当您在 R 中使用 system() 函数时,您需要设置 intern=TRUE in order capture the output of the command。 system() 函数的默认行为是intern=FALSE。因此,如果您没有显式设置intern=TRUE,那么退出代码0 将从您的system() 调用中返回(或者可能是另一个错误退出代码)并且Sys.setenv() 会将环境变量设置为0!

### intern=True missing ###
Sys.setenv(MLFLOW_BIN=system("which mlflow"))
Sys.setenv(MLFLOW_PYTHON_BIN=system("which python"))

示例输出(可以看到环境变量设置不正确):

s <- Sys.getenv()  
s[grep("MLFLOW", names(s))]
  
MLFLOW_BIN              0
MLFLOW_CONDA_HOME       /databricks/conda
MLFLOW_PYTHON_BIN       0
MLFLOW_PYTHON_EXECUTABLE
                        /databricks/python/bin/python
MLFLOW_TRACKING_URI     databricks

然而,当intern=TRUE,你会得到正确的环境变量:

### intern=True set ###
Sys.setenv(MLFLOW_BIN=system("which mlflow", intern=TRUE))
Sys.setenv(MLFLOW_PYTHON_BIN=system("which python", intern=TRUE))

示例输出:

s <- Sys.getenv()
s[grep("MLFLOW", names(s))]

MLFLOW_BIN              /databricks/python3/bin/mlflow
MLFLOW_CONDA_HOME       /databricks/conda
MLFLOW_PYTHON_BIN       /databricks/python3/bin/python
MLFLOW_PYTHON_EXECUTABLE
                        /databricks/python/bin/python
MLFLOW_TRACKING_URI     databricks

注意:这是使用 Databricks 运行时 9.1 LTS ML。这可能适用于其他 Databricks 运行时配置,也可能不适用。

【讨论】:

以上是关于mlflow R 安装 MLFLOW_PYTHON_BIN的主要内容,如果未能解决你的问题,请参考以下文章

mlflow执行import mlflow 报错:ImportError: No module named 'pkg_resources'

Spark发布了MLflow 0.2 内置TensorFlow 继承

MLflow - TypeError:仅支持 dict 和 DataFrame 输入类型

如何在 mlflow 中添加系数、p 值和相关变量名称?

更改 MLflow 工件存储的子目录

MLFlow Registry 高可用性