mlflow R 安装 MLFLOW_PYTHON_BIN

mlflow R installation MLFLOW_PYTHON_BIN

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

mlflow::install_mlflow() Error in mlflow_conda_bin() : Unable to find conda binary. Is Anaconda installed? If you are not using conda, you can set the environment variable MLFLOW_PYTHON_BIN to the path of yourpython executable.

我试过以下方法

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环境

如何克服这个错误?

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

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

  • 安装 mlflow python 通过 pip 自行打包

要自己安装 mlflow,pip install 正确(匹配 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"))

只是 运行,@Tomas 接受的答案非常有帮助。我在上面添加了一条评论,但是对于一些额外的上下文,如果任何其他 Enterprise Databricks R 用户 运行 试图在 Databricks 上使用 R 的 MLflow 包 post,我想创建一个更彻底的响应。

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 运行time 上应该已经安装了 MLflow。因此,您可以改为引用该安装,然后如@Tomas 所述,使用它为 MLFLOW_BINMLFLOW_PYTHON_BIN 设置 R 环境变量。从那里开始,R MLflow API 按规定工作(以我的经验,但是 ymmv)。

上述解决方案的唯一问题是,当您在 R 中使用 system() 函数时,需要设置 intern=TRUE in order capture the output of the commandsystem() 函数的默认行为是 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 运行time 9.1 LTS ML。这可能适用于也可能不适用于其他 Databricks 运行时间配置。