Вопрос или проблема
Извините, но я не уверен, что это правильное место для сообщения о моей проблеме, так как она связана с конгломератом трех систем, только одна из которых – Ubuntu. Я пришел сюда, только после того как сначала попробовал на форумах помощи для других двух компонентов (GitHub Actions и пакет R future
), но не смог продвинуться вперед. Пожалуйста, перенаправьте меня, если есть более подходящий форум.
У меня есть рабочий процесс R-CMD-CHECK в GitHub Actions для моего пакета по адресу ale/.github/workflows/R-CMD-check.yaml в главном · tripartio/ale. Это действие проверяет мой пакет на MacOS, Windows и трех версиях Ubuntu. Все в настоящее время проходит, кроме ubuntu-latest (devel)
, который выдает ошибку, связанную с фреймворком параллельной обработки future
. Примечательно, что серверы ubuntu-latest (release)
и ubuntu-latest (oldrel-1)
проходят тест без проблем (как и MacOS и Windows); проблема только с ubuntu-latest (devel)
.
Вот соответствующий фрагмент из последнего неудачного запуска: R-CMD-CHECK:
── R CMD build ─────────────────────────────────────────────────────────────────
* checking for file ‘.../DESCRIPTION’ ... OK
* preparing ‘ale’:
* checking DESCRIPTION meta-information ... OK
* installing the package to build vignettes
* creating vignettes ... ERROR
Error: --- re-building ‘ale-intro.Rmd’ using rmarkdown
--- finished re-building ‘ale-intro.Rmd’
--- re-building ‘ale-small-datasets.Rmd’ using rmarkdown
Quitting from lines 95-104 [lm_simple] (ale-small-datasets.Rmd)
Error: Error: processing vignette 'ale-small-datasets.Rmd' failed with diagnostics:
The total size of the 56 globals exported for future expression ('function (it.x_cols); {; if (!silent && is.null(bins)) {; progress_iterator(); }; ale_results <- list_transpose(calc_ale(data, model, it.x_cols,; ...; it.rtn; })); }') is 1.85 GiB.. This exceeds the maximum allowed size of 500.00 MiB (option 'future.globals.maxSize'). The three largest globals are 'abort' (99.45 MiB of class 'function'), 'action_dots' (99.42 MiB of class 'function') and 'as_label' (99.42 MiB of class 'function')
--- failed re-building ‘ale-small-datasets.Rmd’
--- re-building ‘ale-statistics.Rmd’ using rmarkdown
--- finished re-building ‘ale-statistics.Rmd’
--- re-building ‘ale-x-datatypes.Rmd’ using rmarkdown
Quitting from lines 123-134 [cars_full] (ale-x-datatypes.Rmd)
Error: Error: processing vignette 'ale-x-datatypes.Rmd' failed with diagnostics:
The total size of the 129 globals exported for future expression ('function (btit, btit.idxs); {; if (!silent) {; progress_iterator(); }; btit.model <- NULL; ...; else {; NULL; }') is 4.01 GiB.. This exceeds the maximum allowed size of 500.00 MiB (option 'future.globals.maxSize'). The three largest globals are 'abort' (83.31 MiB of class 'function'), 'abort_context' (83.30 MiB of class 'function') and 'trace_back' (83.29 MiB of class 'function')
--- failed re-building ‘ale-x-datatypes.Rmd’
SUMMARY: processing the following files failed:
‘ale-small-datasets.Rmd’ ‘ale-x-datatypes.Rmd’
Error: Error: Vignette re-building failed.
Execution halted
Error: Error in proc$get_built_file() : Build process failed
Calls: <Anonymous> ... build_package -> with_envvar -> force -> <Anonymous>
Execution halted
Error: Process completed with exit code 1.
Run ## --------------------------------------------------------------------
Show testthat output
Run actions/upload-artifact@v4
Warning: No files were found with the provided path: /home/runner/work/ale/ale/check. No artifacts will be uploaded.
Run actions/upload-artifact@v4
No files were found with the provided path: /home/runner/work/ale/ale/check/**/tests*/testthat/_snaps. No artifacts will be uploaded.
Я пробовал несколько методов из моего сообщения об ошибке в теме GitHub Actions сообщества Posit, но те немногие советы, которые я получил и tried, не помогли. Следуя подсказкам из моего сообщения об ошибке в вопросах GitHub пакета future, я могу подтвердить, что проблема не в неверной конфигурации самого пакета future
, а строго изолирована на сервере ubuntu-latest (devel)
, вызываемом действием GitHub.
Число экспортируемых объектов, указанных в приведенном выше журнале, не является необычным, но что мне кажется очень странным, так это огромный размер первых трех перечисленных функций:
- “Три самых больших глобальных переменных – ‘abort’ (99.45 MiB класса ‘function’), ‘action_dots’ (99.42 MiB класса ‘function’) и ‘as_label’ (99.41 MiB класса ‘function’)
- “Три самых больших глобальных переменных – ‘abort’ (83.31 MiB класса ‘function’), ‘abort_context’ (83.30 MiB класса ‘function’) и ‘trace_back’ (83.29 MiB класса ‘function’).
Насколько я могу судить, это все rlang
функции; у меня нет представления, почему они могут быть такими большими. Насколько я могу судить из журнала сборки выше, похоже, что сервер ubuntu-latest (devel)
считает, что пакет параллелизации {future} не выделяет достаточного места для объектов в моем тесте пакета. Ни одна из других сборок (включая две другие сборки Ubuntu) не сообщает об этой ошибке.
Мне кажется, что по какой-то причине установка {future} на ubuntu-latest (devel)
сильно переоценивает потребности в памяти для пакета, что не является проблемой в более ранних версиях Ubuntu. Возможно, где-то есть утечка памяти? Если ubuntu-latest (devel)
представляет собой предстоящую версию Ubuntu, то эту проблему следует расследовать и решить, прежде чем она попадет в выпуск Ubuntu.
Я знаю, что это очень специфическая проблема о конкретной системе, но если кто-то мог бы хотя бы направить меня к тому, кто поддерживает R-CMD-CHECK GitHub Action, это было бы отличным указателем. Как я уже упоминал в начале, я сначала опубликовал на их форуме, но не смог получить необходимую помощь там.
Ответ или решение
К сожалению, проблема, с которой вы столкнулись в процессе выполнения команды R-CMD-CHECK на сервере ubuntu-latest (devel)
, связана с экспортом глобальных объектов для пакетной обработки с использованием библиотеки future
. Давайте подробно рассмотрим эту проблему и предложим возможные решения.
Проблема с размером глобальных экспортов
Ваше сообщение указывает на то, что при сборке векторов на сервере ubuntu-latest (devel)
происходит ошибка, связанная с превышением максимально допустимого размера экспортируемых глобальных объектов. Вы получили сообщение о том, что общий размер экспортируемых объектов достиг 1.85 ГиБ и 4.01 ГиБ для двух разных вьетнамов, в то время как максимальный предел составляет 500 МиБ.
Наиболее заметными глобальными объектами, упомянутыми в логе, являются функции из пакета rlang
, такие как abort
, action_dots
и as_label
. Их размер особенно велик и вызывает вопрос о том, почему именно на ubuntu-latest (devel)
этот график значительно превышает допустимые пределы.
Возможные причины проблемы
-
Различия в конфигурации окружения: Поскольку другие серверы Ubuntu (
ubuntu-latest (release)
иubuntu-latest (oldrel-1)
) успешно проходят тесты, это может указывать на различия в библиотечных версиях, конфигурации пакетаfuture
или самой установки R на сервереdevel
. Рекомендуется проверить версии пакетов и их зависимости. -
Изменение в самой библиотеке future: Возможны изменения в библиотеке
future
, которые влияют на способ обработки глобальных переменных. Это состояние может быть специфичным для версии разработки Ubuntu и его конфигураций. -
Проблемы в коде: Необходимо убедиться, что в коде вьетнамов не происходит ненужной передачи больших глобальных объектов. Возможно, вы можете оптимизировать код, чтобы уменьшить необходимый объем данных или использовать более легковесные подходы.
Рекомендации по решению проблемы
-
Измените конфигурацию
future
: Вы можете попробовать установить максимальный размер для экспортируемых объектов, добавив следующую строку в ваш код:options(future.globals.maxSize = 1 * 1024^2) # Установка в 1ГиБ для тестирования
Это временное решение может помочь выявить, вызвана ли проблема недостаточным объемом памяти.
-
Оптимизация кода: Пересмотрите экспортируемые глобальные объекты и попытайтесь минимизировать их количество и размер. Убедитесь, что вы не передаете объекты, которые можно создать непосредственно в функции.
-
Тестирование на других серверах: Если у вас есть доступ к серверам с различными версиями Ubuntu, попробуйте реплицировать ошибку. Это может дать дополнительную информацию о том, как версия
devel
обрабатывает глобальные переменные. -
Обратитесь к сообществу: Поскольку у вас уже есть посты на форумах, предполагается, что вы хотите проконсультироваться с экспертами по
future
и GitHub Actions. Постарайтесь также обратиться непосредственно к разработчикам пакетаfuture
.
Заключение
Существует несколько факторов, которые могут вызвать такую проблему при использовании R-CMD-CHECK на сервере ubuntu-latest (devel)
. Вам необходимо будет активно исследовать конфигурацию ваших окружений, оптимизировать код и взаимодействовать с сообществом разработчиков. Проблема может оказаться резонирующей не только с вами, и совместные усилия по изучению могут привести к эффективному решению.
Если потребуется дальнейшая помощь, я рекомендую создать отдельную проблему на GitHub, возможно, указав конкретные версии R, future
и другие зависимости. Это может помочь собрать дополнительные данные от других пользователей, сталкивающихся с аналогичной ситуацией.