I would like to embed the TPOT autoML library in a Docker container from rocker/r-ver:4.1.0
. To make dream come true, I used the R package reticulate
. I was inspired by this project to build the Dockerfile. However, it doesn't work in R environment.
In my opinion, some debian dependencies are missing. I added libstdc++6
or gcc
but it doesn't work too. Anybody have an idea? Many thanks.
X_train <- iris[,-5]
y_train <- iris$Species
tpot <- reticulate::import("tpot")
tp <- tpot$TPOTClassifier(generations = 1)
fit <- tp$fit(X_train, y_train)
score <- fit$predict(X_train)
print(score)
FROM rocker/r-ver:4.1.0
RUN R -q -e 'install.packages("remotes")'
RUN R -q -e 'remotes::install_github("rstudio/reticulate", upgrade = "never")'
RUN R -q -e 'reticulate::install_miniconda()'
RUN R -q -e 'reticulate::conda_install("r-reticulate", c("python=3.8.13", "numpy<1.24"))'
RUN R -q -e 'reticulate::conda_install("r-reticulate", "tpot", pip = TRUE)'
COPY main.R main.R
CMD ["Rscript", "main.R"]
sudo docker build --no-cache -t tpot-demo .
sudo docker run tpot-demo
This Dockerfile works for me. You?
FROM rocker/tidyverse
WORKDIR /tpot_test
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt-get -y install git
RUN R -e "install.packages('reticulate')"
RUN R -e "reticulate::install_python()"
RUN R -e "reticulate::install_miniconda()"
RUN R -q -e 'install.packages("remotes")'
RUN R -q -e 'reticulate::conda_install("r-reticulate", c("python=3.8.13", "numpy<1.24"))'
RUN R -q -e 'reticulate::conda_install("r-reticulate", "tpot", pip = TRUE)'
COPY main.R main.R
CMD ["Rscript", "main.R"]
I don't know what change did the trick. Perhaps using the rocker/tidyverse
image so that devtools
gets installed?
I've always set a WORKDIR
and I notice you didn't. Perhaps that?
A general piece of advice is that docker exec
is a great tool for debugging Dockerfiles. You can start from a base image (i.e. rocker/tidyverse
), docker exec
into it, test commands one by one until you can get the whole sequence to work, and then code this sequence to the Dockerfile.
Here is the output:
/root/.local/share/r-miniconda/envs/r-reticulate/lib/python3.8/site-packages/tpot/builtins/__init__.py:36: UserWarning: Warning: optional dependency `torch` is not available. - skipping import of NN models.
warnings.warn("Warning: optional dependency `torch` is not available. - skipping import of NN models.")
[1] "setosa" "setosa" "setosa" "setosa" "setosa"
[6] "setosa" "setosa" "setosa" "setosa" "setosa"
[11] "setosa" "setosa" "setosa" "setosa" "setosa"
[16] "setosa" "setosa" "setosa" "setosa" "setosa"
[21] "setosa" "setosa" "setosa" "setosa" "setosa"
[26] "setosa" "setosa" "setosa" "setosa" "setosa"
[31] "setosa" "setosa" "setosa" "setosa" "setosa"
[36] "setosa" "setosa" "setosa" "setosa" "setosa"
[41] "setosa" "setosa" "setosa" "setosa" "setosa"
[46] "setosa" "setosa" "setosa" "setosa" "setosa"
[51] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[56] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[61] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[66] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[71] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[76] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[81] "versicolor" "versicolor" "versicolor" "virginica" "versicolor"
[86] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[91] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[96] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[101] "virginica" "virginica" "virginica" "virginica" "virginica"
[106] "virginica" "virginica" "virginica" "virginica" "virginica"
[111] "virginica" "virginica" "virginica" "virginica" "virginica"
[116] "virginica" "virginica" "virginica" "virginica" "virginica"
[121] "virginica" "virginica" "virginica" "virginica" "virginica"
[126] "virginica" "virginica" "virginica" "virginica" "virginica"
[131] "virginica" "virginica" "virginica" "versicolor" "virginica"
[136] "virginica" "virginica" "virginica" "virginica" "virginica"
[141] "virginica" "virginica" "virginica" "virginica" "virginica"
[146] "virginica" "virginica" "virginica" "virginica" "virginica"