Инструмент глубокого обучения — введение в GPU
1 GPU для глубокого обучения
Развитие науки и техники в современной истории меняется с каждым днем, и закон Мура показывает свою силу, и одна за другой появляются различные лежащие в его основе технологии.
Как самая горячая индустрия в последние годы, искусственный интеллект, она также не так уж и много с точки зрения сжигания денег. Как мы все знаем, для обучения и рассуждений искусственного интеллекта требуются массивные высокопроизводительные вычисления.Друзья, которые занимаются глубоким обучением, знают, что модели SOTA в области глубокого обучения часто требуют огромного объема памяти, что напрямую приводит к тому, что исследователям глубокого обучения необходимо настраивать Более мощные GPU-оборудование, иначе каждую минуту вы будете сталкиваться с дилеммой нехватки видеопамяти и вычислительной мощности. Крупные предприятия или исследовательские институты могут потратить много денег на развертывание высокопроизводительных вычислений, таких как GPT3 и другие модели SOTA, которые были особенно популярны в последние годы.Можно сказать, что если вы хотите работать быстро и быстро, у вас может не быть думать об этом. Сегодняшние модели ИИ сталкиваются с проблемами более высокого уровня, такими как диалоговый ИИ, сложность которых резко возрастает. Обучение этих моделей требует огромной вычислительной мощности и масштабируемости.
Возьмем в качестве примера современное современное решение NVIDIA A100. Тензорные ядра NVIDIA A100 используют точность тензорных вычислений с плавающей запятой (TF32), что обеспечивает до 20 раз большую производительность по сравнению с предыдущим поколением NVIDIA Volta без изменения кода; точность и FP16, производительность может быть дополнительно улучшена в 2 раза. 2048 графических процессоров A100 могут выполнять массовые учебные нагрузки, такие как BERT, за одну минуту, что является мировым рекордом по времени обучения.
Для очень больших моделей с огромными таблицами данных (например, DLRM для рекомендательных систем) A100 80 ГБ обеспечивает до 1,3 ТБ объединенной памяти на узел и работает до 3 раз быстрее, чем A100 40 ГБ. Лидерство продуктов NVIDIA продемонстрировано в MLPerf, отраслевом тесте для обучения искусственному интеллекту, с многочисленными рекордами производительности.
По сравнению с A100 40G, A100 80GB не имеет изменений в чипе графического процессора, это все еще ядро A100, 6912 ядер CUDA, частота ускорения 1,41 ГГц, производительность FP32 19,5 TFLOPS, производительность FP64 9,7 TFLOPS, Производительность INT8 составляет 624 TOPS, а TDP — 400 Вт. Основное изменение - видеопамять, раньше она была 40 Гб, спецификация HBM2, пропускная способность 1,6 Тб/с, теперь ее модернизировали до 80 Гб, тип видеопамяти также стал более продвинутым HBM2e, а частота была увеличена с 2,4 Гбит/с до 3,2 Гбит/с, в результате чего пропускная способность увеличилась с 1,6 ТБ/с до 2 ТБ/с.
2 Введение в GPU и GPU
Для широкой публики ЦП используется для обработки вычислений, а ГП используется для обработки изображений.С точки зрения возможностей ЦП может быть более мощным, так почему же глубокое обучение может использовать ГП для ускорения и повышения производительности? огромен Что касается улучшения, я скажу вам следующее, вы можете сначала заварить чашку чая и медленно взглянуть на него.
Подводя итог, каждый может понять это таким образом. Возьмем пример на рабочем месте. Я думаю, что многие люди сталкивались с этим. ЦП - это человек восемнадцатого класса, который владеет уи, но на рабочем месте, потому что он владеет в слишком много, все разделено.Когда я к нему попал, он был в бешеном обороте, и все не замечали, что он делал, только то, что он не делал. А что касается ГПУ, то он более лицемерен и обладает определенными способностями, но объем его возможностей ограничен, и он выбирает работу, По сравнению с тяжелой работой ЦП, он хочет делать только то, что может дать результат, и игнорировать остальных. В более широком смысле, есть еще некоторые люди, которые являются SBPU, что такое SBPU, то есть их способности не очень хороши. Они могут взять кредит на чужой кредит первого класса, но они не могут сделать это сами. Они полагаются на позорные средства и грязные меры, чтобы занять рынок.Чужие кредиты для собственного использования, а затем безумно дует PPT. Ну, не по теме, вернемся к делу быстрее.
2.1 Введение в ЦП
Центральный процессор (CPU) является одним из основного оборудования электронных компьютеров и основных аксессуаров в компьютере. Его функция в основном заключается в интерпретации компьютерных инструкций и обработке данных в компьютерном программном обеспечении. ЦП является основным компонентом компьютера, который отвечает за чтение инструкций, их декодирование и выполнение. Центральный процессор в основном включает в себя две части, а именно контроллер и арифметический блок, который также включает в себя кэш-память и шину, реализующую связь между ними и данными и управлением. Тремя основными компонентами электронного компьютера являются центральный процессор, внутренняя память и устройства ввода/вывода. Основными функциями центрального процессора являются обработка инструкций, выполнение операций, управление временем и обработка данных.
В компьютерной архитектуре ЦП является основным аппаратным блоком, который управляет и распределяет все аппаратные ресурсы компьютера (например, память, блоки ввода и вывода) и выполняет общие операции. Центральный процессор является вычислительным и управляющим ядром компьютера. Операции всех уровней программного обеспечения в компьютерной системе в конечном итоге будут сопоставлены с операциями ЦП через набор инструкций.
Суть: ЦП состоит из нескольких ядер, оптимизированных для последовательной последовательной обработки.Конечно, он также может быть распараллелен с помощью таких технологий, как многоядерность и гиперпоточность, но он ограничен сложным рабочим процессом, энергопотреблением, тепловыделением, размером и т. д. , ЦП.Влияние, ядра общего ЦП не будет слишком много, что также является преимуществом графического процессора.
2.2 Введение в графический процессор
Графический процессор (англ. Graphics Processing Unit, сокращенно GPU), также известный как ядро дисплея, визуальный процессор, чип дисплея, представляет собой разновидность специального оборудования, используемого в персональных компьютерах, рабочих станциях, игровых приставках и некоторых мобильных устройствах (например, планшетах). компьютеры, смартфоны и т. д.) и т. д.) на микропроцессоре для операций, связанных с изображениями и графикой. [1] Графический процессор снижает зависимость графической карты от ЦП и выполняет часть работы исходного ЦП, особенно при обработке 3D-графики.Сжатие текстур и наложение рельефа, четырехпиксельный 256-битный движок рендеринга с двойной текстурой и т. д. можно сказать, что аппаратная технология T&L является отличительной чертой GPU. Основными производителями графических процессоров являются NVIDIA и ATI.
2.3 Разница между CPU и GPU
Во-первых, проанализируйте характеристики GPU и CPU и объясните, почему GPU имеет преимущества в параллельных вычислениях по сравнению с CPU.
- режим миссии
- ЦП состоит из нескольких ядер, оптимизированных для последовательной последовательной обработки.
- Графические процессоры имеют массивно-параллельную вычислительную архитектуру, состоящую из тысяч более мелких и эффективных ядер, предназначенных для одновременного выполнения нескольких задач. При этом немалая часть времени CPU уходит на выполнение таких задач, как прерывания периферии и переключение процессов, тогда как у GPU больше времени на параллельные вычисления.
- Функциональное позиционирование
- Графическому процессору необходимо отображать миллионы вершин или треугольников одновременно при рендеринге экрана, поэтому графический процессор предназначен для полной поддержки параллельных вычислений.
- ЦП выполняет не только вычислительные задачи, но и такие задачи, как логическое управление.
- системная интеграция
- Как вид внешнего устройства, GPU имеет гораздо меньше ограничений по размеру, мощности, тепловыделению, совместимости и т. д., чем CPU, что позволяет GPU иметь большую видеопамять и пропускную способность.
2.4 Ключ к успеху GPU в глубоком обучении — CUDA
Графические процессоры существуют уже давно, так почему же они начали сиять только в последние несколько лет? Лично я считаю, что основных причин две:
- В последние годы требования глубокого обучения нейронных сетей к вычислительной мощности растут, особенно большое количество суперкомпьютерных операций в областях CV и NLP.
- В прошлом NVIDIA и другие производители не предоставляли моста между GPU и глубоким обучением, и фактическое использование GPU на глубокой пунктирной линии стоило очень дорого, но до появления CUDA этот мост был успешно открыт. Обеспечивает прочную основу для распространенности графических процессоров.
На программном уровне он абстрагируется в единый программный интерфейс через CUDA и поддерживает несколько языков программирования, таких как C/C++/Python/Java. Этот уровень абстракции CUDA очень важен, так как с помощью этого уровня абстракции код нисходящих разработчиков можно быстро мигрировать на разные аппаратные платформы, восходящий cuBLAS (совместимый с интерфейсом BLAS) для научных вычислений инкапсулируется на основе CUDA. .), ПО промежуточного слоя и библиотеки кода, такие как cuDNN, для глубокого обучения. Это промежуточное программное обеспечение очень важно для сред глубокого обучения, таких как Tensorflow и PyTorch, которые могут упростить использование CUDA и базового оборудования для вычислительных задач машинного обучения.
3 Архитектура графического процессора
3.1 Физическая архитектура GPU
Все еще взяв в качестве примера графический процессор NVIDIA A100, в целом A100 имеет 6192 ядра, поэтому вы можете понять, что это суперпроцессор, который может выполнять 6192 ядра параллельно. Как показано ниже
Базовой единицей графического процессора является SM.На самом деле, в графическом процессоре NVidia самым основным процессорным блоком является так называемый SP (потоковый процессор).В графическом процессоре NVidia будет много SP, которые могут выполнять вычисления одновременно. время; каждый SP добавит некоторые другие блоки для формирования SM (потокового мультипроцессора). Несколько SM образуют так называемые TPC (кластеры обработки текстур).
Здесь мы временно рассматриваем SM как базовую единицу планирования вычислений на GPU. SM имеет 64 ядра для вычислений. Для A100 на весь GPU приходится 108 героев, эмм, 108 SM, поэтому общее количество ядер A100 составляет 64 * 108 = 6192. Смотрите, она достаточно мощная, одна карта может выполнять 6192 параллельных вычислительных задачи одновременно. Для схемы архитектуры этого SM просто добавьте следующее:
- Верхний уровень — это уровень PCIE, который интегрируется в сервер с помощью периферийных устройств через интерфейс PCIE.
- Зеленая часть — это вычислительное ядро графического процессора, например, у A100 6192 ядра.
- Средняя синяя часть — это кеш L2.
- NVLink — это компонент, обеспечивающий связь между несколькими графическими процессорами. Он оптимизирует обмен данными между графическими процессорами, снижает нагрузку на ЦП и повышает эффективность передачи данных. Это часто используется при распределенном обучении.
- HBM2 с обеих сторон - это видеопамять.Текущий A100 имеет два вида видеопамяти: 40G и 80G.Если у вас есть деньги, просто купите 80G, это половина видеопамяти.
Поскольку SM так важен, давайте взглянем на аппаратное обеспечение SM.
Соответствующая структура SM:
3.2 Логическая архитектура графического процессора
Если архитектура Grid — Block — Thread CUDA соответствует реальному оборудованию, то она будет аналогична GPU — Streaming Multiprocessor — Streaming Processor; вся Grid будет напрямую брошена на GPU для выполнения, а Block примерно соответствует SM, поток Это примерно соответствует SP. Конечно, это утверждение не очень точное, всего лишь простая метафора.
- ядро: содержимое/код/функция, выполняемая потоком
- Поток: наименьшая единица, которая выполняет ядро и запланирована для выполнения в ядре CUDA.
- Деформация: у графического процессора есть много потоковых мультипроцессоров для управления и планирования блоков потоков.
- Блок темы: . В SM запланировано выполнение нескольких комбинаций потоков. SM может выполнять несколько блоков потоков одновременно, но блок потоков может быть отправлен только одному SM. Графические процессоры имеют много потоковых мультипроцессоров, которые управляют планированием блоков потоков.
- Сетка: комбинация нескольких блоков потоков, запланированных для выполнения на всем графическом процессоре.
В то же время Thread, Thread Block и Grid имеют разные ресурсы хранения, к которым они могут получить доступ из-за их разных уровней. Например, Thread может получить доступ только к своим собственным регистрам, Thread Block может получить доступ к кэшу L1 в SM, а Grid может получить доступ к кэшу L2 и большей памяти HBM.
4 графических процессора
Работа GPU в основном состоит из четырех шагов:
- Скопируйте данные с хоста на устройство
- ЦП отправляет выполнение обработки данных на ГП;
- Отправить функцию ядра, которая должна быть выполнена с устройства на устройство
- Скопируйте результат расчета с устройства на хост
4.1 Практика программирования CUDA
// Device code
__global__ void VecAdd(float* A, float* B, float* C, int N)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < N)
C[i] = A[i] + B[i];
}
// Host code
int main()
{
int N = ...;
size_t size = N * sizeof(float);
// Allocate input vectors h_A and h_B in host memory
float* h_A = (float*)malloc(size);
float* h_B = (float*)malloc(size);
float* h_C = (float*)malloc(size);
// Initialize input vectors
...
// Allocate vectors in device memory
float* d_A;
cudaMalloc(&d_A, size);
float* d_B;
cudaMalloc(&d_B, size);
float* d_C;
cudaMalloc(&d_C, size);
// Copy vectors from host memory to device memory
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
// Invoke kernel
int threadsPerBlock = 256;
int blocksPerGrid =
(N + threadsPerBlock - 1) / threadsPerBlock;
VecAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);
// Copy result from device memory to host memory
// h_C contains the result in host memory
cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);
// Free device memory
cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);
// Free host memory
...
}
Например, вот как отразить мощность графического процессора: если каждое ядро в графическом процессоре имеет уникальный идентификатор, например, ядро 0 выполняет C[0] = A[0] + B[0], ядро 127 Просто выполните C [127] = А[127] + В[127]. int i = blockDim.x * blockIdx.x + threadIdx.x, в основном для вычисления идентификатора потока, поэтому о кодировании потока см. следующее введение.
Итак, о кодировании потоков см. следующее введение.
- threadIdx — это тип uint3, представляющий индекс потока.
- BoydIDX - это тип uint3, который представляет собой индекс блок резьбы. Обычно в блоке резьбы обычно есть несколько потоков.
- blockDim dim3 — это тип, представляющий собой размер блоков потоков.
- gridDim — это тип dim3, представляющий размер сетки, и обычно в сетке имеется несколько блоков потоков.
- На следующем рисунке наглядно показана взаимосвязь между несколькими понятиями:
4.2 Ускорение на основе графического процессора
Там еще много всего про весь GPU.Просто напишу это сначала.Открою специальную тему позже.Вот несколько простых пунктов:
- слияние операторов
- Пространственная фильтрация
- High Level Graph Opt
- CPU & GPU Filter