В 2024 году Python стал самым популярным языком программирования в мире — обгоняя JavaScript — согласно опросу с открытым исходным кодом Github 2024 года.
В течение многих лет инструментарий программного обеспечения NVIDIA CUDA не имел собственной поддержки Python. Но теперь это изменилось.
В GTC NVIDIA объявила о нативной поддержке и полной интеграции Python в свой инструментарий CUDA. Разработчики смогут использовать Python для прямого выполнения алгоритмических вычислений в графических процессорах.
«Мы усердно работали над тем, чтобы принести ускоренный Python, первый класс, в стек Cuda», — сказал Стивен Джонс, Cuda Architect, во время презентации на недавней конференции GTC.
Для программистов последствия огромны. CUDA родилась из C и C ++, и теперь кодеры не нуждаются в знаниях этих языков программирования, чтобы использовать инструментарий.
«Python для Cuda не должен выглядеть как C. Это должно выглядеть как Python», — сказал Джонс.
«Python Cuda — это не просто C, переведенный в синтаксис Python».
— Стивен Джонс, Cuda Architect
Кодеры могут использовать естественные интерфейсы Python и модель сценариев вызова функций и библиотек для создания программ искусственного интеллекта для выполнения на графических процессорах Nvidia.
«Python Cuda — это не просто C, переведенный в синтаксис Python. Это должно быть чем -то, что является естественным для разработчика Python», — сказал Джонс.
Native Python открывает новые двери
Нативная поддержка Nvidia для Python на CUDA открывает инструментарий разработчика миллионам разработчиков. Ранее CUDA требовала, чтобы разработчики знали C ++ или Fortran. У программного комплекта был какой -то инструмент Python, но он не был поддержан.
По данным Futurum Group, число пользователей CUDA составило всего 4 миллиона в 2023 году по сравнению с 2 миллионами в 2020 году. Но Python-самый быстрорастущий язык в мире. Nvidia получит доступ к миллионам кодировщиков Python, особенно в развивающихся странах, таких как Индия и Бразилия, где кодеры вносят горячие вклад в проекты с открытым исходным кодом.
Поддержка Python также сделает инфраструктуру Nvidia готовой к использованию на развивающихся рынках. Большая часть графических процессоров NVIDIA находится в сша и Европе, но телекоммуникационные и инфраструктурные компании в Индии создают крупные установки графических процессоров, которые будут работать в ближайшие годы.
Nvidia вкладывает топливо в рекрутинговых программистов и хочет поддерживать больше языков программирования, включая Rust и Julia.
Как была построена Pythonic Cuda
CUDA включает в себя библиотеки, SDK, компиляторы, время выполнения хоста, инструменты и предварительно упакованное программное обеспечение и алгоритмы. NVIDIA добавила части ко всему стеку Pythonic Cuda.
В центре внимания Nvidia было ускорение графического процессора, не выходя из Python. Cuda Python не может быть просто подношениями ядра; По словам Джонса, ему нужно все в стеке и плавный поток выполнения.
«Вы должны быть в состоянии написать ядро и бросить его в Pytorch, но вы также должны быть в состоянии назвать Pythonic Libraries и все эти другие вещи», — сказал Джонс.
По сути, в слое компилятора нет ничего, поскольку он построен вокруг компиляции только в времени (JIT). Это значительно уменьшает количество зависимостей в дереве для графических процессоров в стеке.
«Поддержание этой совместимости между всеми слоями станет огромной выгодой для производительности и возможности использовать сквозной Python»,-сказал Джонс.
Первоначально NVIDIA создала базовые привязки Python (которые включают в себя компилятор времени выполнения) и библиотеки Python, такие как Cupynumeric, который является заменой Numpy, наиболее широко используемой вычислительной библиотеки в Python. Cupinumeric изменяет только одну импортную директиву, и Numpy Code переходит от работы на процессоре до работы на графическом процессоре.
Cuda Core — это «переосмысление времени выполнения Cuda, чтобы быть естественным и изначально Python».
— Стивен Джонс, Cuda Architect
За последний год Nvidia сделал Cuda Core, что, по словам Джонса, является «питоническим переосмыслением времени выполнения Cuda, чтобы быть естественным и навидет питоном».
CUDA Core имеет поток выполнения Python, который полностью находится в процессе и в значительной степени опирается на компиляцию JIT.
«Вы не должны выпускать компиляторы командной строки или что-то в этом роде, вы должны быть полностью в процессе»,-сказал Джонс, добавив, что это значительно уменьшает количество зависимостей в дереве для графических процессоров в стеке.
NVIDIA создала библиотеку под названием NVMath Python с унифицированными интерфейсами как для вызовов на стороне хоста, так и для библиотеки на стороне устройства. По словам Джонса, способность сливать библиотеки приносит большие улучшения производительности.
Компания также создала библиотеки, которые могут получить доступ к ускоренным библиотекам C ++ непосредственно из кода Python.
«Потому что это находится на вершине базовой инфраструктуры, которую мы создали за эти годы… мы не введите их в Python. Мы позаботились о том, чтобы он ссылался в базовый код C ++, так что он связан [that] Ваша разница в производительности незначительна », — сказал Джонс.
Nvidia также добавила инструменты для профилировщиков и анализаторов кода.
Модель программирования
Python делает кодирование простым, и кодеры не должны сильно беспокоиться о базовом оборудовании. Имея это в виду, Nvidia добавляет кодирующий слой, который соответствует абстракции более высокого уровня для выполнения на графических процессорах.
Новая модель программирования, называемая интерфейсом Cutle, разрабатывается первой для Pythonic Cuda с расширением для C ++ CUDA, которое появится позже.
Куталь «в основном более платоническим», как сегодня думают программисты Python больше с точки зрения массивов, чем потоков (что является скорее признаком C ++).
Разработчики не могут волшебным образом принимать код Python и экспортировать его для ускорения графического процессора. CUDA обычно принимает проблему и разбивает ее на тысячи небольших блоков, которые обрабатываются отдельно на графических процессорах.
Блоки разбиты на меньшие плитки, которые запускают тысячи потоков, обрабатывая отдельные элементы. Ниды преобразуют одну операцию.
Возможность пройти весь путь до обработки отдельных элементов на уровне потока параллельно дает графическим процессорам массивную вычислительную мощность.
Но NVIDIA подумала, что выполнение графического процессора не нужно доходить до уровня потока. Обработка также может быть выполнена на полпути на уровне плиток, где вписывается модель программирования куталистики.
В отличие от C ++, Python не гранулирован по дизайну.
Cutle выполняет эффективную работу по картированию массивов с графическими процессорами на менее детальном уровне, что облегчает понимание и отладь кода. «И по сути, это выходит на то же показание», — сказал Джонс.
Данные в плитках могут быть структурированы как векторы, тензоры или массивы. Компиляторы могут выполнять лучшую работу по картированию потоков всего массива от одного блока потоков в графические процессоры.
«Очень часто компилятор будет лучше, чем я могу сделать, потому что компилятор глубоко понимает, что я делаю … [and] Прекрасные детали того, как работает GPU », — сказал Джонс.
В отличие от C ++, Python не гранулирован по дизайну.
«Там много таких вещей. Тритон Openai был бы хорошим примером. И я думаю, что они естественны для программ Python», — сказал Джонс.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Агам Шах освещал его более десяти лет. Помимо машинного обучения, оборудования и чипов, он также интересуется боевыми искусствами и Россией. Подробнее от Агама Шаха