#cuda #gpu #architecture #programming
Напоминалка, как устроена программная модель Cuda. Что такое потоки, блоки, сетки.
https://developer.nvidia.com/blog/cuda-refresher-cuda-programming-model/
Напоминалка, как устроена программная модель Cuda. Что такое потоки, блоки, сетки.
https://developer.nvidia.com/blog/cuda-refresher-cuda-programming-model/
NVIDIA Technical Blog
CUDA Refresher: The CUDA Programming Model
This is the fourth post in the CUDA Refresher series, which has the goal of refreshing key concepts in CUDA, tools, and optimization for beginning or intermediate developers.
#featureselection #diogenes #optimisation #gpu #cuda #cupy
Докладываю новости о проекте Диоген. Вчера добавил бюджет времени, переписал функции покрасивее, потестировал все ветки. С указанием допустимого времени работает просто отлично.
Сегодня ещё добавил функциональность random seed. Выяснилось, что нумба не подтягивает его из нампай "обычного" режима, надо в njit-нутой функции его ещё раз выставлять.
Отпрофилировал код на глубинах 1-2 взаимодействий признаков. Оказалось, что 80% времени кушает оценка кандидатов, и 20% времени - расчёт надёжности для лучших кандидатов. Из этих 80% основные опять же ~80% тратятся в прямой оценке MI кандидата и таргета.
Дальше они распадаются так: 20% на слияние многомерного вектора, 70% на перемешивание таргета (np.random.shuffle), 10% на сам расчёт MI из совместного распределения.
Очевидно, выгоднее всего оптимизировать шаффл таргета. Решил попробовать cupy как замену numpy: просто перенести таргет в память gpu и шаффлить прямо там. Улучшения таймингов это не дало, т.к. перемешанный, пусть и быстро, массив 120k элементов всё равно надо было копировать обратно в RAM для подсчёта MI.
К счастью, подумал я, cupy позволяет писать и запускать произвольные ядра Cuda в C++ прямо из питона. Почему бы не выполнить расчёт гистограммы и MI прямо на GPU? Капец я с этим намучался ) Я же совсем забыл, что программирование для GPU - это сущий ад после "обычного", в поточной парадигме: ваша программа выполняется сразу на тысячах потоков, куча ограничений и условий, разделяемая память,синхронизация, атомики, блоки... Плюс я совсем забыл С++ (даже то немногое, что знал). Да ещё cupy иногда радовал перлами типа невозможности подсчитать сумму массива без Visual Studio 2019 (хотя максимум считался нормально).
В итоге всё же добил эту идею, и сейчас у меня есть реализация критической части на Cuda )
Что же по скорости?
%timeit показывает, что массив 120k элементов ноутбучная 1050Ti шаффлит в 4 раза быстрее, чем i7-7700HQ. То есть я могу ожидать, что 0.8*0.8*0.7=40% всего времени исполнения сократится в 4 раза. Если поиск на CPU идёт 15 минут, то можно ожидать, что на GPU это будет 15*0.6+15*0,4/4=11 минут.
Напрямую сравнить CPU и GPU не получается, т.к. у разных библ разные сиды и порядок выполнения операций, а длительность всего поиска зависит от случайных решений. Пара запусков дала новое время 12.5-13.0 минут вместо 15. Возможно, где-то налажал, буду ещё профилировать. Но timeit шаффла массива 1M элементов даёт выигрыш уже не в 4, а в 40 раз, т.е., по идее, GPU будет ещё выгоднее для больших датасетов.
Докладываю новости о проекте Диоген. Вчера добавил бюджет времени, переписал функции покрасивее, потестировал все ветки. С указанием допустимого времени работает просто отлично.
Сегодня ещё добавил функциональность random seed. Выяснилось, что нумба не подтягивает его из нампай "обычного" режима, надо в njit-нутой функции его ещё раз выставлять.
Отпрофилировал код на глубинах 1-2 взаимодействий признаков. Оказалось, что 80% времени кушает оценка кандидатов, и 20% времени - расчёт надёжности для лучших кандидатов. Из этих 80% основные опять же ~80% тратятся в прямой оценке MI кандидата и таргета.
Дальше они распадаются так: 20% на слияние многомерного вектора, 70% на перемешивание таргета (np.random.shuffle), 10% на сам расчёт MI из совместного распределения.
Очевидно, выгоднее всего оптимизировать шаффл таргета. Решил попробовать cupy как замену numpy: просто перенести таргет в память gpu и шаффлить прямо там. Улучшения таймингов это не дало, т.к. перемешанный, пусть и быстро, массив 120k элементов всё равно надо было копировать обратно в RAM для подсчёта MI.
К счастью, подумал я, cupy позволяет писать и запускать произвольные ядра Cuda в C++ прямо из питона. Почему бы не выполнить расчёт гистограммы и MI прямо на GPU? Капец я с этим намучался ) Я же совсем забыл, что программирование для GPU - это сущий ад после "обычного", в поточной парадигме: ваша программа выполняется сразу на тысячах потоков, куча ограничений и условий, разделяемая память,синхронизация, атомики, блоки... Плюс я совсем забыл С++ (даже то немногое, что знал). Да ещё cupy иногда радовал перлами типа невозможности подсчитать сумму массива без Visual Studio 2019 (хотя максимум считался нормально).
В итоге всё же добил эту идею, и сейчас у меня есть реализация критической части на Cuda )
Что же по скорости?
%timeit показывает, что массив 120k элементов ноутбучная 1050Ti шаффлит в 4 раза быстрее, чем i7-7700HQ. То есть я могу ожидать, что 0.8*0.8*0.7=40% всего времени исполнения сократится в 4 раза. Если поиск на CPU идёт 15 минут, то можно ожидать, что на GPU это будет 15*0.6+15*0,4/4=11 минут.
Напрямую сравнить CPU и GPU не получается, т.к. у разных библ разные сиды и порядок выполнения операций, а длительность всего поиска зависит от случайных решений. Пара запусков дала новое время 12.5-13.0 минут вместо 15. Возможно, где-то налажал, буду ещё профилировать. Но timeit шаффла массива 1M элементов даёт выигрыш уже не в 4, а в 40 раз, т.е., по идее, GPU будет ещё выгоднее для больших датасетов.
#nvidia #cuda
В AMD продолжают рвать волосы под мышками от зависти, видимо. Как же так, карл, наши видеокарточки ведь ничем не хуже по железу, а поди-ка ты, никому и нахрен не нужны, кроме геймеров...
"Аналитики полагают, что продажи ускорителей NVIDIA H100 и A100 превысят полмиллиона единиц в четвертом квартале 2023 года. Между тем, спрос на H100 и A100 настолько велик, что срок поставки серверов на базе этих GPU достигает 52 недель. В то же время Omdia сообщает, что в целом объём поставок серверов в 2023 году сократится на 17–20 % по сравнению с прошлым годом, но при этом выручка в этом направлении вырастет на 6–8 % в годовом исчислении.
Следует также отметить, что многие из крупнейших покупателей специализированных ускорителей NVIDIA H100 и A100 сами разрабатывают собственные специализированные GPU для задач ИИ, высокопроизводительных вычислений и графики. Поэтому в перспективе объёмы закупок оборудования у NVIDIA этими компаниями снизятся по мере перехода на собственные решения.
Эксперты Omdia считают, что крупнейшими покупателями графических ускорителей NVIDIA H100 являются компании Meta и Microsoft. По мнению аналитиков, каждая из них закупила по 150 тыс. указанных ускорителей. В свою очередь Google, Amazon, Oracle и Tencent купили по 50 тыс. указанных специализированных ускорителей. Примечательно, что основная часть серверных ускорителей поставляется операторам гипермасштабируемых облачных услуг. В свою очередь, OEM-производители серверов (Dell, Lenovo, HPE) пока не могут забронировать достаточное количество графических процессоров для ИИ и высокопроизводительных вычислений, чтобы выполнить свои заказы на поставки серверов, утверждают специалисты Omdia."
https://3dnews.ru/1096589/nvidia-prodala-pochti-polmilliona-spetsializirovannih-iiuskoriteley-v-tretem-kvartale-utvergdayut-analitiki-omdia
В AMD продолжают рвать волосы под мышками от зависти, видимо. Как же так, карл, наши видеокарточки ведь ничем не хуже по железу, а поди-ка ты, никому и нахрен не нужны, кроме геймеров...
"Аналитики полагают, что продажи ускорителей NVIDIA H100 и A100 превысят полмиллиона единиц в четвертом квартале 2023 года. Между тем, спрос на H100 и A100 настолько велик, что срок поставки серверов на базе этих GPU достигает 52 недель. В то же время Omdia сообщает, что в целом объём поставок серверов в 2023 году сократится на 17–20 % по сравнению с прошлым годом, но при этом выручка в этом направлении вырастет на 6–8 % в годовом исчислении.
Следует также отметить, что многие из крупнейших покупателей специализированных ускорителей NVIDIA H100 и A100 сами разрабатывают собственные специализированные GPU для задач ИИ, высокопроизводительных вычислений и графики. Поэтому в перспективе объёмы закупок оборудования у NVIDIA этими компаниями снизятся по мере перехода на собственные решения.
Эксперты Omdia считают, что крупнейшими покупателями графических ускорителей NVIDIA H100 являются компании Meta и Microsoft. По мнению аналитиков, каждая из них закупила по 150 тыс. указанных ускорителей. В свою очередь Google, Amazon, Oracle и Tencent купили по 50 тыс. указанных специализированных ускорителей. Примечательно, что основная часть серверных ускорителей поставляется операторам гипермасштабируемых облачных услуг. В свою очередь, OEM-производители серверов (Dell, Lenovo, HPE) пока не могут забронировать достаточное количество графических процессоров для ИИ и высокопроизводительных вычислений, чтобы выполнить свои заказы на поставки серверов, утверждают специалисты Omdia."
https://3dnews.ru/1096589/nvidia-prodala-pochti-polmilliona-spetsializirovannih-iiuskoriteley-v-tretem-kvartale-utvergdayut-analitiki-omdia
3DNews - Daily Digital Digest
NVIDIA продала почти полмиллиона ИИ-ускорителей в третьем квартале, а новые партии расписаны на год вперёд
Основная доля выручки NVIDIA в размере $14,5 млрд в сегменте оборудования для центров обработки данных в третьем квартале пришлась на продажи специализированных графических ускорителей H100 для ИИ и высокопроизводительных вычислений (HPC).
#cuda
"Cписок возможностей, которые предлагаются свежим драйвером Nvidia R555 для графических процессоров GeForce RTX и ПК с RTX:
поддержка метакоманды DQ-GEMM для обработки квантования INT4 только по весу для LLM;
новые методы нормализации RMSNorm для моделей Llama 2, Llama 3, Mistral и Phi-3;
механизмы группового и многозапросного внимания, а также внимания скользящего окна для поддержки Mistral;
обновления KV для улучшения внимания;
поддержка GEMM-тензоров, не кратных 8, для улучшения производительности контекстной фазы.
Благодаря методам оптимизации, добавленным в это обновление, производительность больших языковых моделей Phi-3, Llama 3, Gemma и Mistral увеличивается до трёх раз."
https://3dnews.ru/1105200/posledniy-drayver-nvidia-vtroe-povishaet-iiproizvoditelnost-geforce-rtx-a-takge-pk-i-rabochih-stantsiy-s-poddergkoy-rtx
"Cписок возможностей, которые предлагаются свежим драйвером Nvidia R555 для графических процессоров GeForce RTX и ПК с RTX:
поддержка метакоманды DQ-GEMM для обработки квантования INT4 только по весу для LLM;
новые методы нормализации RMSNorm для моделей Llama 2, Llama 3, Mistral и Phi-3;
механизмы группового и многозапросного внимания, а также внимания скользящего окна для поддержки Mistral;
обновления KV для улучшения внимания;
поддержка GEMM-тензоров, не кратных 8, для улучшения производительности контекстной фазы.
Благодаря методам оптимизации, добавленным в это обновление, производительность больших языковых моделей Phi-3, Llama 3, Gemma и Mistral увеличивается до трёх раз."
https://3dnews.ru/1105200/posledniy-drayver-nvidia-vtroe-povishaet-iiproizvoditelnost-geforce-rtx-a-takge-pk-i-rabochih-stantsiy-s-poddergkoy-rtx
3DNews - Daily Digital Digest
Nvidia втрое ускорила работу ИИ на видеокартах GeForce RTX
Nvidia сообщила, что дополнительно увеличила ИИ-производительность своих видеокарт GeForce RTX и платформ RTX AI PC с выпуском последнего драйвера версии GeForce Game Ready 555.
#cuda #c_plus_plus #thrust #codegems
Показывают, как оптимизировать куда-ядро (расчёт гистограммы и блок внимания).
https://www.youtube.com/watch?v=V89I4B1krZ8
Показывают, как оптимизировать куда-ядро (расчёт гистограммы и блок внимания).
https://www.youtube.com/watch?v=V89I4B1krZ8
YouTube
Григорий Алексеев | Custom CUDA Kernels: Practical Approaches to Low-Level Optimizations
Спикер: Григорий Алексеев, AI Team in perplexity.ai
Тема доклада: Расскажет об опыте написания собственного CUDA-kernel-а для оптимизации Flash Attention
Data Fest 2024: https://ods.ai/events/datafest2024
Презентацию к докладу Вы можете скачать в треке OptimalDL:…
Тема доклада: Расскажет об опыте написания собственного CUDA-kernel-а для оптимизации Flash Attention
Data Fest 2024: https://ods.ai/events/datafest2024
Презентацию к докладу Вы можете скачать в треке OptimalDL:…