“Общий размер экспортируемых глобальных переменных x для будущего выражения” в R-CMD-CHECK только на ubuntu-latest (devel)

Вопрос или проблема

Извините, но я не уверен, что это правильное место для сообщения о моей проблеме, так как она связана с конгломератом трех систем, только одна из которых – 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) этот график значительно превышает допустимые пределы.

Возможные причины проблемы

  1. Различия в конфигурации окружения: Поскольку другие серверы Ubuntu (ubuntu-latest (release) и ubuntu-latest (oldrel-1)) успешно проходят тесты, это может указывать на различия в библиотечных версиях, конфигурации пакета future или самой установки R на сервере devel. Рекомендуется проверить версии пакетов и их зависимости.

  2. Изменение в самой библиотеке future: Возможны изменения в библиотеке future, которые влияют на способ обработки глобальных переменных. Это состояние может быть специфичным для версии разработки Ubuntu и его конфигураций.

  3. Проблемы в коде: Необходимо убедиться, что в коде вьетнамов не происходит ненужной передачи больших глобальных объектов. Возможно, вы можете оптимизировать код, чтобы уменьшить необходимый объем данных или использовать более легковесные подходы.

Рекомендации по решению проблемы

  1. Измените конфигурацию future: Вы можете попробовать установить максимальный размер для экспортируемых объектов, добавив следующую строку в ваш код:

    options(future.globals.maxSize = 1 * 1024^2)  # Установка в 1ГиБ для тестирования

    Это временное решение может помочь выявить, вызвана ли проблема недостаточным объемом памяти.

  2. Оптимизация кода: Пересмотрите экспортируемые глобальные объекты и попытайтесь минимизировать их количество и размер. Убедитесь, что вы не передаете объекты, которые можно создать непосредственно в функции.

  3. Тестирование на других серверах: Если у вас есть доступ к серверам с различными версиями Ubuntu, попробуйте реплицировать ошибку. Это может дать дополнительную информацию о том, как версия devel обрабатывает глобальные переменные.

  4. Обратитесь к сообществу: Поскольку у вас уже есть посты на форумах, предполагается, что вы хотите проконсультироваться с экспертами по future и GitHub Actions. Постарайтесь также обратиться непосредственно к разработчикам пакета future.

Заключение

Существует несколько факторов, которые могут вызвать такую проблему при использовании R-CMD-CHECK на сервере ubuntu-latest (devel). Вам необходимо будет активно исследовать конфигурацию ваших окружений, оптимизировать код и взаимодействовать с сообществом разработчиков. Проблема может оказаться резонирующей не только с вами, и совместные усилия по изучению могут привести к эффективному решению.

Если потребуется дальнейшая помощь, я рекомендую создать отдельную проблему на GitHub, возможно, указав конкретные версии R, future и другие зависимости. Это может помочь собрать дополнительные данные от других пользователей, сталкивающихся с аналогичной ситуацией.

Оцените материал
Добавить комментарий

Капча загружается...