Аннотация: с точки зрения оптимизации памяти и оптимизации вычислений мы проанализируем, как оптимизировать вывод модели глубокого обучения.
Эта статья опубликована в сообществе HUAWEI CLOUD."XEngine-оптимизация выводов для глубокого обучения", Автор: ross.xw.
предисловие
Цикл разработки модели глубокого обучения, включая этап обучения и этап развертывания. На этапе обучения пользователям необходимо собирать обучающие данные, определять собственную структуру модели и обучать на оборудовании ЦП или ГП.Этот процесс многократно оптимизируется, пока не будет обучена модель с удовлетворительной точностью. После того, как у нас есть модель, нам нужно развернуть и запустить службу модели.Мы ожидаем, что задержка службы будет как можно меньше, а пропускная способность - как можно выше. здесь будет изоптимизация памяти,Вычислительная оптимизацияДва аспекта для анализа того, как оптимизировать вывод модели глубокого обучения.
1. Оптимизация видеопамяти
1.1 Распределение видеопамяти
Вывод модели должен занимать определенный объем видеопамяти (взяв в качестве примера вывод графического процессора), который в основном включает следующие четыре части:
1. Неуправляемое пространство
2. Данные пользователя
3. Параметры модели
4. Пространство для выполнения
1. Значение активации, рассчитанное оператором
2. Временное пространство, необходимое для расчета операции
Среди них «неконтролируемое пространство» относится к пространству, выделенному системой, например, к пространству видеопамяти, занимаемому контекстом CUDA каждого процесса, которое обычно составляет около 100–300 МБ; «пользовательские данные» относятся к выделенному пространству видеопамяти. пользователем, например, объем памяти, занимаемый входными и выходными данными модели, тензорное пространство; «параметры модели» относятся к пространству видеопамяти, занимаемому параметрами обученной модели глубокого обучения. Нам необходимо загрузить параметры модели в видеопамять перед расчетом; Требуемый объем памяти.
Если взять в качестве примера модель ResNet-50, то пропорция выделяемого пространства памяти выглядит следующим образом. Мы видим, что по мере увеличения размера пакета пространство выполнения будет расти линейно,рабочее пространствостать узким местом использования памяти.
Разные модели имеют разное распределение памяти. В сценарии NLP в последние годы появились модели трансформаторного типа со многими моделями с большими параметрами.Пространство параметров моделистанет узким местом видеопамяти.
Далее мы объясним, как оптимизировать пространство памяти с точки зрения оптимизации активации и оптимизации параметров, и, наконец, расширимся до совместного использования пространства памяти несколькими моделями.
1.2 Оптимизация активации
Центральная идея оптимизации значения активации — повторное использование памяти. Вывод отличается от обучения.Вычисление вывода имеет только прямой процесс.Когда вычисляется операция, занимаемое ею входное пространство может фактически повторно использоваться последующими операциями.
1.3 Оптимизация параметров
Оптимизация параметров в основном предназначена для решения проблемы очень больших моделей.Если модель слишком большая, необходимо несколько карт, если одна карта не подходит. Пространство параметров не совпадает с активацией, это фиксированное значение, заранее обученное, а значение активации рассчитывается временно. Это делает нас неспособными использовать метод повторного использования. Эти параметры всегда должны храниться в одном месте. Мы можем учиться на идее многоуровневой буферизации.Обученные параметры можно кэшировать на диске и в памяти процессора и читать заранее, когда это необходимо, поэтому нам не нужно хранить все параметры в видеопамяти. Возможна загрузка карты.
Чтобы уменьшить влияние копирования данных на производительность логических выводов, предварительную выборку данных и вычисления необходимо распараллелить. В вычислениях на GPU мы можем распараллелить вычисления и копирование через поток cuda + событие, как показано на следующем рисунке:
1.4 Мультимодельное совместное использование видеопамяти
В дополнение к оптимизации активации и оптимизации параметров в рамках одной модели, в сценариях обслуживания с несколькими моделями с несколькими параллелизмом мы можем дополнительно совместно использовать видеопамять с несколькими моделями. Предположим следующее:
-
Модель: М1, М2, М3...
-
Активное пространство: A1, A2, A3...
-
Пространство параметров: P1, P2, P3...
1.5 Эффект оптимизации видеопамяти
Здесь выбираются модели сценариев CV и NLP, сравнивается использование памяти механизмом вывода XEngine и другими механизмами времени выполнения, и мы видим очевидные оптимизации. Если оптимизация параметров (ParamOpt) не учитывается для повышения производительности, использование памяти может быть дополнительно уменьшено.
2. Вычислительная оптимизация
2.1 Вычислительный анализ
На рисунке ниже берется фрагмент модели ResNet-50 и абстрагируется в конвейерный процесс вычислений и доступа к памяти. Мы видим, что каждый расчет OP соответствует расчету ядра CUDA, и каждый расчет ядра будет считывать данные из видеопамяти (глобальной памяти) и выполнять вычисления на встроенном ядре CUDA. На рисунке справа показана архитектура хранения CUDA, которая также соответствует принципу пирамидального доступа к памяти, то есть чем ближе к чипу, тем выше скорость доступа к памяти. Среди них глобальная память — это видеопамять графического процессора, а скорость доступа — самая медленная; общая память на чипе — вторая; самая быстрая — регистровое пространство на чипе. Когда в модели много операторов OP, расчет вывода модели будет многократно считывать и записывать видеопамять, а эффективность относительно низкая.Для решения этой проблемы обычно используется метод слияния графов, когда OP скорость расчета выше, скорость расчета вывода всей модели будет выше, поэтому нам нужна высокопроизводительная реализация оператора. Будут проанализированы следующие два аспекта.
2.2 Слияние графов
Технология слияния графов относится к вычислению слияния некоторых OP, а вычисление ядра нескольких OP преобразуется в вычисление ядра объединенного OP. Благодаря этой оптимизации количество повторных операций чтения и записи в видеопамять может быть уменьшено, а данные могут сохраняться в видеопамяти после выполнения как можно большего количества вычислений на микросхеме путем однократного считывания данных. В то же время накладные расходы на запуск ядра могут быть уменьшены. Реализация объединенного оператора может быть сгенерирована путем рукописного ввода ядра CUDA или вызова сторонних библиотек или CodeGen.
В левой части рисунка ниже показана структура графика модели resnet-50 до и после оптимизации. Обычно используемый метод слияния для моделей типа CV заключается в объединении линейного расчета и активации, например, Conv + BN + Relu для расчета слияния.
На следующем рисунке показаны изменения до и после слияния графов модели Берта.
2.3 Высокопроизводительные операторы
- библиотека высокопроизводительных вычислений
Cublas/cudnn/cutlass
- Ядро CUDA, написанное от руки
Cuda programming guide
Cuda best practice guide
- вычисления с низкой точностью
FP16/INT8/TensorCore (half2, dp4a, wmma)
- CodeGen
ТВМ/XLA/MLIR…
2.4 Эффект вычислительной оптимизации
XEngine оптимизирован для моделей типа Bert, а тестовая среда — NVIDIA V100, вычисления FP32. Ниже приведено сравнение производительности.По сравнению с неоптимизированной версией оригинальной платформы, когда длина последовательности относительно мала, наблюдается значительное улучшение производительности. В то же время его также сравнивают с SOTA-решением FasterTransformer от NVIDIA, которое имеет небольшое преимущество.
- Сравнение производительности логического вывода XEngine и Pytorch:
- Сравнение производительности логического вывода между XEngine и FasterTransformer:
3. Резюме
В этой статье в основном анализируются идеи и методы оптимизации, обычно используемые при выводе моделей, с точки зрения оптимизации памяти и оптимизации вычислений, а также приводятся результаты оптимизации. Я надеюсь, что вам будет полезно провести инженерную оптимизацию рассуждений.
Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~