пространственные данные и параллельные вычисления

#r #performance #parallel-processing #hardware #spatial

#r #Производительность #параллельная обработка #аппаратное обеспечение #пространственные

Вопрос:

Я начну свою диссертационную работу в новом году. Я буду проводить интенсивный анализ больших пространственных данных (запускать модели пространственной регрессии и геовзвешенной регрессии с данными шейп-файла переписного листа США). Мой текущий компьютер зависает, когда я открываю шейп-файл. Это MacBook Pro с 4 ядрами, 16 ГБ оперативной памяти и процессорами 3,4 ГГц. Но я перехожу на iMac с 128 ГБ оперативной памяти, процессором 3,6 ГГц с 8 ядрами.

Однако я читал о параллельной обработке и понял, что R использует только одно ядро. Значит ли это, что дополнительные новые ядра будут бесполезны? Если да, то, может быть, я сэкономлю немного денег и не буду использовать дополнительные ядра? Я понимаю, что могу использовать параллельный пакет (и некоторые другие), но я не уверен, что это работает с пакетами пространственных регрессий.

Любые предложения здесь были бы очень признательны.

С наилучшими пожеланиями, Кейси

Ответ №1:

R способен использовать несколько ядер, но не так, как другие языки, такие как python. Когда вы используете parallel пакет, он в значительной степени запускает сеанс R для каждого назначенного ядра. Каждое ядро загружает копию данных и не использует общую память :'( . Итак, вы используете несколько ядер, ваши 8 физических ядер должны быть 16 виртуальными ядрами с гиперпоточностью. Например, если вы загружаете список из четырех фреймов данных, вы можете анализировать их параллельно, используя parallel пакет на четырех ядрах, каждое ядро запускает сеанс R, загружает данные и анализирует часть данных.

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

Поскольку выполнение того, что вы хотите, в последовательном режиме может занять много времени (скажем, для перебора тысяч независимых фреймов данных), параллельный переход может сэкономить вам время, и вы можете выполнить некоторые тесты масштабирования, чтобы определить количество ядер, которое будет наиболее эффективным (например, использование 20 ядер может сэкономить немного больше временичем использовать 16, потому что масштабирование не является линейным по времени с увеличением количества ядер, см. Ссылку 2 ниже). Если ваши данные огромны, вы можете столкнуться с ограничениями ОЗУ, потому что каждому ядру потребуется определенный объем ОЗУ для загрузки и обработки данных (например, возможно, вы можете использовать только 4 ядра, потому что каждому нужно загрузить 30 ГБ данных и сохранить их в ОЗУ, грубо говоря).

Я не могу говорить о том, какие пространственные пакеты будут работать параллельно, но если анализы на каждом ядре независимы друг от друга, то это не должно быть проблемой (у меня никогда не было проблем!). Если вы делаете что-то сложное, требующее объединения данных между ядрами, то, возможно, некоторые пакеты не справятся с этим.

Дополнительные ядра не будут бесполезными, но в конечном итоге наилучшее распределение компьютерных ресурсов зависит от данных и анализов. Думаю, я бы не стал основывать решение о том, какой компьютер приобрести, на одном проекте, в будущем вы можете выполнять больше научных вычислений и часто не обязательно иметь точное представление о требуемых ресурсах заранее. Кроме того, в вашем университете может также быть высокопроизводительная вычислительная инфраструктура для тяжелых задач.

Это не окончательный ответ, но он был слишком длинным для комментария (я могу удалить, если это неуместно)! Надеюсь, это поможет 🙂

Смотрите эти ссылки для получения более подробной информации:

P. S. В parallel пакете убедитесь, что вы используете правильную функцию для своей ОС, иначе она может просто выполняться однопоточно без вашего ведома.

P.P.S делайте все возможное, чтобы повысить эффективность последовательного программирования за счет эффективного программирования (например, используя числовую матрицу вместо фреймов данных или соблюдая осторожность при наборе больших данных, поскольку вы будете создавать копии в ОЗУ). Выполните некоторое профилирование, чтобы выяснить, где находятся ваши бутылочные горлышки, и сосредоточьтесь на них в первую очередь. Тогда беспокойтесь о параллельном переходе 🙂

Комментарии:

1. Спасибо за этот комментарий — я нашел его полезным. Наверное, я удивлен, что R использует только одно ядро. У Stata есть разные версии, которые работают на большем количестве ядер, но вам придется заплатить больше. Несколько уточняющих моментов (я новичок в этом): последовательный означает запуск одного ядра? Parallel может работать практически с любым пакетом, поскольку вы в основном зацикливаете свою команду на нескольких ядрах? Наверное, я удивлен, что не слышал об этом, потому что это звучит как пустая трата процессора, чтобы не делать этого

2. Привет, я обновил ответ, чтобы он был немного более понятным, и добавил несколько полезных ссылок, которые более подробно описывают. R — не самый эффективный язык на данный момент, когда дело доходит до параллельной обработки, но он способен использовать несколько ядер. Это очень сильно зависит от ваших данных, я обработал тысячи фреймов данных (100 ГБ) на языке R, используя parallel , но если в итоге вы получите действительно большие данные, то в какой-то момент вам придется перейти на язык более низкого уровня!

3. Спасибо за всю эту замечательную информацию. Я собираюсь углубиться в это и узнать больше о параллельной обработке. В основном меня интересует, как я могу сделать свой компьютер максимально эффективным, когда я работаю с огромным общенациональным шейп-файлом, который я буду использовать для построения графиков и запуска пространственной регрессии. Моя диссертация в основном посвящена пространственному анализу. Еще раз спасибо. Я мог бы @ you, если вы будете достаточно любезны для некоторых последующих действий

4. Конечно, я могу сделать все возможное. Небольшие изменения кода в нужном месте могут сэкономить несколько часов времени обработки. Проверьте microbenchmark profvis пакеты и для сравнения времени и кода профилирования.