Подтвердить что ты не робот

Программирование на Python GPU

В настоящее время я работаю над проектом на python, и я хотел бы использовать графический процессор для некоторых вычислений.

На первый взгляд кажется, что доступно множество инструментов; на первый взгляд, я чувствую, что я что-то теряю.

Copperhead выглядит потрясающе, но еще не выпущен. Похоже, что им ограничивается запись низкоуровневых ядер CUDA или openCL; нет тяги, нет cudpp. Если id хотел бы что-то отсортировать, им придется сделать это сам.

Это не кажется мне совершенно правильным. Неужели я чего-то не хватает? Или этот графический процессор не совсем подходит к шумихе?

Изменить: GPULIB похоже, что это может быть то, что мне нужно. Документация носит рудиментарный характер, а привязки python упоминаются только мимоходом, но im применяется для ссылки для загрузки прямо сейчас. У кого-нибудь есть опыт с этим, или ссылки на аналогичные библиотеки для GPU для свободного использования? ReEdit: ok, привязки python infact nonexistant.

Edit2: Итак, я думаю, что лучше всего написать что-нибудь в C/CUDA и вызвать это из python?

4b9b3361

Ответ 1

PyCUDA обеспечивает очень хорошую интеграцию с CUDA и имеет несколько вспомогательных интерфейсов, чтобы сделать код CUDA проще, чем в прямом C api. Здесь приведен пример из Wiki, который выполняет 2D-FFT без необходимости использования кода C.

Ответ 2

Я опубликую здесь некоторую информацию, которую я прочитал в reddit. Это будет полезно для людей, которые приходят без четкого представления о том, что делают разные пакеты и как они соединяют cuda с Python:


С: Reddit

Там много путаницы в этой теме о том, что разные проекты стремятся сделать и как они готовы. Нет "GPU-бэкенда для NumPy" (тем более для любой из функций SciPy). Существует несколько способов написания кода CUDA внутри Python и некоторых объектов типа массива GPU, которые поддерживают подмножества методов NumPy ndarray (но не остальные NumPy, например linalg, fft и т.д.).

  • PyCUDA и PyOpenCL. Они устраняют многие проблемы, связанные с запуском ядер GPU (упрощенное создание массивов и передача памяти, отсутствие необходимости ручного освобождения и т.д.). По большей части, однако, вы все еще застреваете ядра ядра CUDA вручную, они просто попадают в ваш файл Python в виде строки с тройным кавычками. PyCUDA GPUarray включает в себя некоторые ограниченные функциональные возможности NumPy, поэтому, если вы делаете что-то очень простое, вы можете уйти без написания каких-либо ядер самостоятельно.

  • NumbaPro включает в себя декоратор cuda.jit, который позволяет писать ядра CUDA с использованием синтаксиса Python. На самом деле это не большая часть прогресса над тем, что делает PyCUDA (цитируемый источник ядра), это просто ваш код теперь выглядит более Pythonic. Однако он определенно не запускает существующий код NumPy на графическом процессоре.

  • Theano позволяет создавать символические деревья выражений, а затем компилирует их для работы на графическом процессоре. Это не NumPy и имеет только эквиваленты для небольшого подмножества функций NumPy.

  • gnumpy - это тонко документированная обертка вокруг CudaMat. Единственным поддерживаемым типом элемента является float32 и реализуется только небольшое подмножество NumPy.


Ответ 3

Я знаю, что эта ветка устарела, но я думаю, что могу привести некоторую релевантную информацию, которая отвечает на заданный вопрос.

В Continuum Analytics есть пакет, содержащий библиотеки, которые разрешают вам вычисления CUDA. В основном вы обрабатываете свой код, который должен быть распараллелен (внутри функции) с помощью декоратора, и вам нужно импортировать библиотеку. Таким образом, вам не нужны какие-либо знания о инструкциях CUDA.

Информацию можно найти на странице NVIDIA

https://developer.nvidia.com/anaconda-accelerate

или вы можете перейти непосредственно на страницу Continuum Analytics

https://store.continuum.io/cshop/anaconda/

Существует 30-дневный пробный период и бесплатная лицензия для ученых.

Я использую это широко и ускоряет мой код от 10 до 50 раз.

Ответ 4

Theano похоже, что это может быть то, что вы ищете. Насколько я понимаю, он очень способен выполнять тяжелый математический подъем с помощью графического процессора и, по-видимому, активно поддерживается.

Удачи!

Ответ 6

Я могу порекомендовать scikits.cuda. но для этого вам нужно скачать полную версию CULA (бесплатно для студентов). Другой - CUV. Если вы ищете что-то лучшее и готовое заплатить за это, вы также можете взглянуть на массив fire. Запиши сейчас, я использую scikits и вполне удовлетворяют до сих пор.

Ответ 7

Проверьте эту страницу для библиотеки с открытым исходным кодом, распространяемой с помощью Anaconda https://www.anaconda.com/blog/developer-blog/open-sourcing-anaconda-accelerate/

"Сегодня мы выпускаем два новых подпроекта Numba под названием pyculib и pyculib_sorting, которые содержат библиотеки графических процессоров NVIDIA Python и функции сортировки от Accelerate. Эти оболочки работают с массивами NumPy и массивами устройств Numba GPU для обеспечения доступа к ускоренные функции: cuBLAS: Линейная алгебра cuFFT: быстрое преобразование Фурье cuSparse: операции с разреженной матрицей cuRand: Генерация случайного числа (только функции хоста) Сортировка: быстрые алгоритмы сортировки, перенесенные из CUB и ModernGPU Идти вперед, проект Numba возьмет на себя управление pyculib и pyculib_sorting, выпустив обновления по мере необходимости, когда появятся новые выпуски Numba. Эти проекты лицензированы BSD, как и Numba "