RStudio/R 上的 Tensorflow 设置 |中央操作系统
Tensorflow setup on RStudio/ R | CentOS
在过去的 5 天里,我试图让 Keras/Tensorflow 包在 R 中工作。我使用 RStudio 进行安装并使用了 conda
、miniconda
、virtualenv
但它每次都崩溃了。安装库不应该是一场噩梦,尤其是当我们谈论 R(最好的统计语言之一)和 TensorFlow(最好的深度学习库之一).有人可以分享在 CentOS 7 上安装 Keras/Tensorflow 的可靠方法吗?
以下是我用来在 RStudio 中安装 tensorflow
的步骤。
因为每次我 运行 tensorflow::tf_config()
时 RStudio 都会崩溃,所以我无法检查出了什么问题。
devtools::install_github("rstudio/reticulate")
devtools::install_github("rstudio/keras") # This package also installs tensorflow
library(reticulate)
reticulate::install_miniconda()
reticulate::use_miniconda("r-reticulate")
library(tensorflow)
tensorflow::tf_config() **# Crashes at this point**
sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tensorflow_2.7.0.9000 keras_2.7.0.9000 reticulate_1.22-9000
loaded via a namespace (and not attached):
[1] Rcpp_1.0.7 lattice_0.20-45 png_0.1-7 zeallot_0.1.0
[5] rappdirs_0.3.3 grid_3.6.0 R6_2.5.1 jsonlite_1.7.2
[9] magrittr_2.0.1 tfruns_1.5.0 rlang_0.4.12 whisker_0.4
[13] Matrix_1.3-4 generics_0.1.1 tools_3.6.0 compiler_3.6.0
[17] base64enc_0.1-3
更新 1
安装 tensorflow 时 RStudio 不崩溃的唯一方法是执行以下步骤 -
首先,我使用 conda 创建了一个新的虚拟环境
conda create --name py38 python=3.8.0
conda activate py38
conda install tensorflow=2.4
然后在 RStudio 中,我安装了 reticulate 并激活了我之前使用 conda 创建的虚拟环境
devtools::install_github("rstudio/reticulate")
library(reticulate)
reticulate::use_condaenv("/root/.conda/envs/py38", required = TRUE)
reticulate::use_python("/root/.conda/envs/py38/bin/python3.8", required = TRUE)
reticulate::py_available(initialize = TRUE)
ts <- reticulate::import("tensorflow")
当我尝试在 RStudio 中导入 tensorflow
时,它会加载库 /lib64/libstdc++.so.6
而不是 /root/.conda/envs/py38/lib/libstdc++.so.6
并且出现以下错误 -
Error in py_module_import(module, convert = convert) :
ImportError: Traceback (most recent call last):
File "/root/.conda/envs/py38/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
File "/home/R/x86_64-redhat-linux-gnu-library/3.6/reticulate/python/rpytools/loader.py", line 39, in _import_hook
module = _import(
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/.conda/envs/py38/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/errors
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
这是里面的东西 /lib64/libstdc++.so.6
> strings /lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
为了解决库问题,我在 RStudio 中添加了具有 GLIBCXX_3.4.20
的正确 libstdc++.so.6
库的路径。
system('export LD_LIBRARY_PATH=/root/.conda/envs/py38/lib/:$LD_LIBRARY_PATH')
还有,还有
Sys.setenv("LD_LIBRARY_PATH" = "/root/.conda/envs/py38/lib")
但我仍然得到同样的错误 ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20'
。 RStudio 仍然以某种方式首先加载 /lib64/libstdc++.so.6
而不是 /root/.conda/envs/py38/lib/libstdc++.so.6
而不是 RStudio
,如果我在 R
控制台中执行上述步骤,那么我也会得到完全相同的错误。
更新二:
已发布解决方案
也许我失败的尝试会帮助其他人解决这个问题;我的方法:
- 启动干净的 CentOS 7 虚拟机
- 安装 R 和一些依赖项
sudo yum install epel-release
sudo yum install R
sudo yum install libxml2-devel
sudo yum install openssl-devel
sudo yum install libcurl-devel
sudo yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver
- 通过linux 安装程序脚本下载并安装 Anaconda
- 创建一个新的 conda 环境
conda init
conda create --name tf
conda activate tf
conda install -c conda-forge tensorflow
** 在此 conda env 中,您可以在 python 中导入 tensorflow 而不会出错;现在通过 R
访问 tf
- 通过 devtoolset 安装更新的 gcc
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
- 尝试通过网状包在 R 中使用 tensorflow
scl enable devtoolset-7 R
install.packages("remotes")
remotes::install_github('rstudio/reticulate')
reticulate::use_condaenv("tf", conda = "~/anaconda3/bin/conda")
reticulate::repl_python()
# This works as expected but the command "import tensorflow" crashes R
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
# Also tried:
install.packages("devtools")
devtools::install_github('rstudio/tensorflow')
devtools::install_github('rstudio/keras')
library(tensorflow)
install_tensorflow() # "successful"
tensorflow::tf_config()
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
- 尝试旧版本的 tensorflow/keras
devtools::install_github('rstudio/tensorflow@v2.4.0')
devtools::install_github('rstudio/keras@v2.4.0')
library(tensorflow)
tf_config()
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
- 尝试更新版本的 R (v4.0)
# deactivate conda
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
export R_VERSION=4.0.0
curl -O https://cdn.rstudio.com/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
sudo yum install R-${R_VERSION}-1-1.x86_64.rpm
scl enable devtoolset-7 /opt/R/4.0.0/bin/R
install.packages("devtools")
devtools::install_github('rstudio/reticulate')
reticulate::use_condaenv("tf", conda = "~/anaconda3/bin/conda")
reticulate::repl_python()
# 'import tensorflow' resulted in "core dumped"
我猜问题出在 R/CentOS,因为您可以通过 python 正常导入和使用 tensorflow,但我不确定还能尝试什么。
我还想说,我对 Ubuntu(tensorflow、macOS 和 Windows 特别支持)没有任何问题,我遇到了这些文档一些帮助:https://wiki.hpcc.msu.edu/display/ITH/Installing+TensorFlow+using+anaconda / https://wiki.hpcc.msu.edu/pages/viewpage.action?pageId=22709999
我花了15天多的时间终于解决了这个问题。
启动干净的 CentOS 7 VM,安装 R 和依赖项(摘自 Jared 的回答)-
yum install epel-release
yum install R
yum install libxml2-devel
yum install openssl-devel
yum install libcurl-devel
yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver
现在,创建conda环境
yum install conda
conda clean -a # Clean cache and remove old packages, if you already have conda installed
# Install all the packages together and let conda handle versioning. It is important to give a Python version while setting up the environment. Since Tensorflow supports python 3.9.0, I have used this version
conda create -y -n "tf" python=3.9.0 ipython tensorflow keras r-essentials r-reticulate r-tensorflow
conda activate tf
在服务器上打开一个新端口(7878
或选择您想要的任何端口号)以使用新的 conda
环境库访问 RStudio
iptables -A INPUT -p tcp --dport 7878 -j ACCEPT
/sbin/service iptables save
然后按如下方式启动 RStudio -
/usr/lib/rstudio-server/bin/rserver \
--server-daemonize=0 \
--www-port 7878 \
--rsession-which-r=$(which R) \
--rsession-ld-library-path=$CONDA_PREFIX/lib
您将在默认端口 8787
上拥有完整的早期环境,并在 7878
.
上拥有 Tensorflow 和 Keras 的新环境
以下代码现在可以在 RStudio 中正常工作
install.packages("reticulate")
install.packages("tensorflow")
library(reticulate)
library(tensorflow)
ts <- reticulate::import("tensorflow")
在过去的 5 天里,我试图让 Keras/Tensorflow 包在 R 中工作。我使用 RStudio 进行安装并使用了 conda
、miniconda
、virtualenv
但它每次都崩溃了。安装库不应该是一场噩梦,尤其是当我们谈论 R(最好的统计语言之一)和 TensorFlow(最好的深度学习库之一).有人可以分享在 CentOS 7 上安装 Keras/Tensorflow 的可靠方法吗?
以下是我用来在 RStudio 中安装 tensorflow
的步骤。
因为每次我 运行 tensorflow::tf_config()
时 RStudio 都会崩溃,所以我无法检查出了什么问题。
devtools::install_github("rstudio/reticulate")
devtools::install_github("rstudio/keras") # This package also installs tensorflow
library(reticulate)
reticulate::install_miniconda()
reticulate::use_miniconda("r-reticulate")
library(tensorflow)
tensorflow::tf_config() **# Crashes at this point**
sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tensorflow_2.7.0.9000 keras_2.7.0.9000 reticulate_1.22-9000
loaded via a namespace (and not attached):
[1] Rcpp_1.0.7 lattice_0.20-45 png_0.1-7 zeallot_0.1.0
[5] rappdirs_0.3.3 grid_3.6.0 R6_2.5.1 jsonlite_1.7.2
[9] magrittr_2.0.1 tfruns_1.5.0 rlang_0.4.12 whisker_0.4
[13] Matrix_1.3-4 generics_0.1.1 tools_3.6.0 compiler_3.6.0
[17] base64enc_0.1-3
更新 1 安装 tensorflow 时 RStudio 不崩溃的唯一方法是执行以下步骤 -
首先,我使用 conda 创建了一个新的虚拟环境
conda create --name py38 python=3.8.0
conda activate py38
conda install tensorflow=2.4
然后在 RStudio 中,我安装了 reticulate 并激活了我之前使用 conda 创建的虚拟环境
devtools::install_github("rstudio/reticulate")
library(reticulate)
reticulate::use_condaenv("/root/.conda/envs/py38", required = TRUE)
reticulate::use_python("/root/.conda/envs/py38/bin/python3.8", required = TRUE)
reticulate::py_available(initialize = TRUE)
ts <- reticulate::import("tensorflow")
当我尝试在 RStudio 中导入 tensorflow
时,它会加载库 /lib64/libstdc++.so.6
而不是 /root/.conda/envs/py38/lib/libstdc++.so.6
并且出现以下错误 -
Error in py_module_import(module, convert = convert) :
ImportError: Traceback (most recent call last):
File "/root/.conda/envs/py38/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
File "/home/R/x86_64-redhat-linux-gnu-library/3.6/reticulate/python/rpytools/loader.py", line 39, in _import_hook
module = _import(
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/.conda/envs/py38/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/errors
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
这是里面的东西 /lib64/libstdc++.so.6
> strings /lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
为了解决库问题,我在 RStudio 中添加了具有 GLIBCXX_3.4.20
的正确 libstdc++.so.6
库的路径。
system('export LD_LIBRARY_PATH=/root/.conda/envs/py38/lib/:$LD_LIBRARY_PATH')
还有,还有
Sys.setenv("LD_LIBRARY_PATH" = "/root/.conda/envs/py38/lib")
但我仍然得到同样的错误 ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20'
。 RStudio 仍然以某种方式首先加载 /lib64/libstdc++.so.6
而不是 /root/.conda/envs/py38/lib/libstdc++.so.6
而不是 RStudio
,如果我在 R
控制台中执行上述步骤,那么我也会得到完全相同的错误。
更新二:
已发布解决方案
也许我失败的尝试会帮助其他人解决这个问题;我的方法:
- 启动干净的 CentOS 7 虚拟机
- 安装 R 和一些依赖项
sudo yum install epel-release
sudo yum install R
sudo yum install libxml2-devel
sudo yum install openssl-devel
sudo yum install libcurl-devel
sudo yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver
- 通过linux 安装程序脚本下载并安装 Anaconda
- 创建一个新的 conda 环境
conda init
conda create --name tf
conda activate tf
conda install -c conda-forge tensorflow
** 在此 conda env 中,您可以在 python 中导入 tensorflow 而不会出错;现在通过 R
访问 tf- 通过 devtoolset 安装更新的 gcc
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
- 尝试通过网状包在 R 中使用 tensorflow
scl enable devtoolset-7 R
install.packages("remotes")
remotes::install_github('rstudio/reticulate')
reticulate::use_condaenv("tf", conda = "~/anaconda3/bin/conda")
reticulate::repl_python()
# This works as expected but the command "import tensorflow" crashes R
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
# Also tried:
install.packages("devtools")
devtools::install_github('rstudio/tensorflow')
devtools::install_github('rstudio/keras')
library(tensorflow)
install_tensorflow() # "successful"
tensorflow::tf_config()
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
- 尝试旧版本的 tensorflow/keras
devtools::install_github('rstudio/tensorflow@v2.4.0')
devtools::install_github('rstudio/keras@v2.4.0')
library(tensorflow)
tf_config()
# Error: *** caught segfault *** address 0xf8, cause 'memory not mapped'
- 尝试更新版本的 R (v4.0)
# deactivate conda
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
export R_VERSION=4.0.0
curl -O https://cdn.rstudio.com/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
sudo yum install R-${R_VERSION}-1-1.x86_64.rpm
scl enable devtoolset-7 /opt/R/4.0.0/bin/R
install.packages("devtools")
devtools::install_github('rstudio/reticulate')
reticulate::use_condaenv("tf", conda = "~/anaconda3/bin/conda")
reticulate::repl_python()
# 'import tensorflow' resulted in "core dumped"
我猜问题出在 R/CentOS,因为您可以通过 python 正常导入和使用 tensorflow,但我不确定还能尝试什么。
我还想说,我对 Ubuntu(tensorflow、macOS 和 Windows 特别支持)没有任何问题,我遇到了这些文档一些帮助:https://wiki.hpcc.msu.edu/display/ITH/Installing+TensorFlow+using+anaconda / https://wiki.hpcc.msu.edu/pages/viewpage.action?pageId=22709999
我花了15天多的时间终于解决了这个问题。
启动干净的 CentOS 7 VM,安装 R 和依赖项(摘自 Jared 的回答)-
yum install epel-release
yum install R
yum install libxml2-devel
yum install openssl-devel
yum install libcurl-devel
yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver
现在,创建conda环境
yum install conda
conda clean -a # Clean cache and remove old packages, if you already have conda installed
# Install all the packages together and let conda handle versioning. It is important to give a Python version while setting up the environment. Since Tensorflow supports python 3.9.0, I have used this version
conda create -y -n "tf" python=3.9.0 ipython tensorflow keras r-essentials r-reticulate r-tensorflow
conda activate tf
在服务器上打开一个新端口(7878
或选择您想要的任何端口号)以使用新的 conda
环境库访问 RStudio
iptables -A INPUT -p tcp --dport 7878 -j ACCEPT
/sbin/service iptables save
然后按如下方式启动 RStudio -
/usr/lib/rstudio-server/bin/rserver \
--server-daemonize=0 \
--www-port 7878 \
--rsession-which-r=$(which R) \
--rsession-ld-library-path=$CONDA_PREFIX/lib
您将在默认端口 8787
上拥有完整的早期环境,并在 7878
.
以下代码现在可以在 RStudio 中正常工作
install.packages("reticulate")
install.packages("tensorflow")
library(reticulate)
library(tensorflow)
ts <- reticulate::import("tensorflow")