Я хотел бы встроить библиотеку TPOT autoML в контейнер Docker из rocker/r-ver:4.1.0. Чтобы воплотить мечту, я воспользовался пакетом R reticulate. Этот проект вдохновил меня на создание Dockerfile. Однако он не работает в среде R.
На мой взгляд, некоторые зависимости Debian отсутствуют. Я добавил libstdc++6 или gcc, но это тоже не работает. У кого-нибудь есть идея? Большое спасибо.
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
Ну вот я запустил новый контейнер и получаю *** caught segfault *** address (nil), cause 'unknown'
могу воспроизвести эту ошибку, и иногда я получаю еще один Segfault, связанный с C. Распределение памяти в виртуальных средах и контейнерах может быть сложным, возможно, попробуйте снизить уровень абстракции (например, используя python непосредственно в докере).
Идея состоит в том, чтобы встроить TPOT autoML в Rscript. Я пробовал reticulate::source_python() но получил аналогичный результат. Тем не менее, библиотека хорошо работает с использованием собственного Python, как в примере, указанном в описании.
на моей машине TPOT также отлично работает, используя reticulate, но не из докера





Этот Dockerfile работает для меня. Ты?
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"]
Я не знаю, какое изменение помогло. Возможно, вы используете образ rocker/tidyverse, чтобы установить devtools?
Я всегда ставил WORKDIR и заметил, что ты этого не сделал. Возможно, что?
Общий совет заключается в том, что docker exec — отличный инструмент для отладки Dockerfiles. Вы можете начать с базового образа (т.
Вот результат:
/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"
После многих попыток лучший способ запустить TPOT в Docker со средой R — это переключиться на FROM rocker/tidyverse. Хорошая работа Артур!
Какую конкретную ошибку вы получаете?