1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sophgo-tpu-mlir

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

TPU-MLIR

Для китайской версии: README.

TPU-MLIR — это открытый компилятор машинного обучения на основе MLIR для TPU. Этот проект предоставляет полный набор инструментов, который может преобразовывать предварительно обученные нейронные сети из различных фреймворков в двоичные файлы bmodel, которые можно эффективно использовать на TPU.

SOPHGO стремится стать ведущим мировым поставщиком вычислительной мощности общего назначения. SOPHGO фокусируется на исследованиях, разработке и продвижении вычислительных продуктов, таких как глубокое обучение и процессоры RISC-V, и создал комплексную матрицу приложений, охватывающую сценарии «облако, периферия и конечная точка» с помощью своих собственных продуктов. SOPHGO предлагает вычислительные продукты и комплексные решения для таких приложений, как умные города, интеллектуальные вычислительные центры, умная безопасность, интеллектуальный транспорт, безопасное производство, промышленный контроль качества и интеллектуальные терминалы. У компании есть научно-исследовательские центры более чем в 10 городах Китая, включая Пекин, Шанхай, Шэньчжэнь, Циндао и Сямынь, а также в США и Сингапуре.

В настоящее время поддерживаются следующие фреймворки глубокого обучения: PyTorch, ONNX, TFLite и Caffe. Модели из других фреймворков необходимо преобразовать в модели ONNX.

Ресурсы

Вот некоторые ресурсы, которые помогут вам лучше понять проект:

Индекс Документы
01 TPU-MLIR paper
02 TPU-MLIR Technical Reference Manual
03 TPU-MLIR Quick Start
Индекс Sharing Sessions
01 TPU-MLIR Paper
02 LayerGroup
Индекс Тема Видео ссылки
01 Что такое Depp Learning Compiler? Depp Learning Compiler Intro
02 MLIR Intro Basic Syntax (1), Basic Syntax (2), Basic Syntax (3), Dialect Conversion, Pattern Rewriting
03 TPU-MLIR Intro Overview, Front-end Conversion, Lowering
04 Квантизация Overview, Formula Derivation, Calibration, QAT
05 Память TPU Ep1. ЭП2
06 Практика TPU-MLIR В формат Onnx, оптимизация графа, поддержка операторов, поддержка моделей, объединение предварительной обработки, проверка точности

Кроме того, мы опубликовали серию задач для всех, кто интересуется нашим проектом и хотел бы развивать его вместе с нами:

Индекс Задачи
01 Переписать шаблоны для PermuteOp
02 Реализовать вывод формы
03 Оптимизировать инструмент mlir2onnx

Дополнительные задачи можно найти в разделе «Проблемы».

Если у вас есть какие-либо вопросы по выполнению вышеуказанных задач, вы можете задать их или проверить существующие ответы на нашей платформе вопросов и ответов.

Как собрать

После клонирования кода этого проекта его необходимо скомпилировать в Docker.

  • Загрузите необходимое изображение из dockerhub.
docker pull sophgo/tpuc_dev:latest

# myname1234 — это просто пример, вы можете установить своё имя
docker run --privileged --name myname1234 -v $PWD:/workspace -it sophgo/tpuc_dev:latest

После создания контейнера каталог кода в Docker должен быть /workspace/tpu-mlir.

  • Сборка

Выполните следующую команду в каталоге проекта:

cd tpu-mlir
source ./envsetup.sh
./build.sh

Использование

Ознакомьтесь с использованием TPU-MLIR на простом примере компиляции yolov5s.onnx и запуска на платформе BM1684X TPU.

Модель взята с официального сайта yolov5: https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.onnx.

Она была помещена в путь проекта regression/model/yolov5s.onnx.

Подготовка

Сначала создайте каталог model_yolov5s на том же уровне каталога с этим проектом. Затем поместите в него модель и файлы изображений.

Операция выглядит следующим образом:

mkdir model_yolov5s && cd model_yolov5s
cp ${REGRESSION_PATH}/model/yolov5s.onnx .
cp -rf ${REGRESSION_PATH}/dataset/COCO2017 .
cp -rf ${REGRESSION_PATH}/image .
mkdir workspace && cd workspace

Модель в MLIR

Если модель принимает изображения в качестве входных данных, нам нужно изучить её предварительную обработку перед преобразованием. Предварительную обработку не нужно учитывать, если входным файлом является npz. Процесс предварительной обработки формулируется следующим образом:

$$ y = (x - mean) \times scale, $$

где x представляет входные данные.

Входом официальной модели yolov5 является изображение RGB. Каждое значение будет умножено на 1/255. Среднее значение и масштаб равны 0,0, 0,0, 0,0 и 0,0039216, 0,0039216, 0,0039216 соответственно.

Команда преобразования модели:

model_transform.py \
    --model_name yolov5s \
    --model_def ../yolov5s.onnx \
    --input_shapes [[1,3,640,640]] \
    --mean 0.0,0.0,0.0 \
    --scale 0.0039216,0.0039216,0.0039216 \
    --keep_aspect_ratio \
    --pixel_format rgb \
    --output_names 350,498,646 \
    --test_input ../image/dog.jpg \
    --test_result yolov5s_top_outputs.npz \
    --mlir yolov5s.mlir

Аргументы model_transform.py:

Аргумент Требуется? Описание
model_name Да Название модели
model_def Да Файл определения модели
--- --- ---
mlir Да Файл MLIR
quantize Да Тип квантизации (F32/F16/BF16/INT8)
processor Да Платформа, на которой будет использоваться модель. В настоящее время поддерживается только bm1684x. В будущем будут поддерживаться и другие платформы TPU
calibration_table Нет Путь к таблице квантования. Требуется при квантовании INT8
tolerance Нет Допуск для минимального сходства между результатами вывода квантованного MLIR и вывода MLIR fp32
correctnetss Нет Допуск для минимальной схожести результатов вывода симулятора и квантованного вывода MLIR. По умолчанию 0,99 и 0,90
excepts Нет Имена слоёв сети, которые необходимо исключить из проверки. Разделяются запятой
debug Нет Если открыть отладку, файл модели будет сохранён; или будет удалён после завершения преобразования
model Да Имя файла выходной модели (включая путь)
dynamic Нет Динамический код для поддержки динамической формы

Преобразование MLIR в модель INT8

Перед преобразованием в модель INT8 необходимо выполнить калибровку, чтобы получить таблицу калибровки. Количество входных данных составляет от 100 до 1000 в зависимости от ситуации.

Затем используйте таблицу калибровки для создания симметричной модели int8. Как правило, не рекомендуется использовать асимметричную модель, если симметричная модель уже соответствует требованиям, поскольку производительность асимметричной модели будет немного хуже, чем у симметричной.

Вот пример использования существующих 100 изображений из COCO2017 для... Калибровка:

run_calibration.py yolov5s.mlir \
  --dataset ../COCO2017 \
  --input_num 100 \
  -o yolov5s_cali_table

Преобразование в симметрично квантованную модель INT8:

model_deploy.py \
  --mlir yolov5s.mlir \
  --quantize INT8 \
  --calibration_table yolov5s_cali_table \
  --processor bm1684x \
  --test_input yolov5s_in_f32.npz \
  --test_reference yolov5s_top_outputs.npz \
  --tolerance 0,85,0,45 \
  --model yolov5s_1684x_int8.bmodel

Сравнение результатов

В этом проекте есть образец YOLOv5, написанный на Python (путь: python/samples/detect_yolov5.py), для обнаружения объектов. Прочитайте код, чтобы узнать, как используется модель:

  1. предварительная обработка входных данных;
  2. вывод модели для получения выходных данных;
  3. постобработка выходных данных.

Следующий код используется для проверки вывода моделей ONNX/f32/int8 соответственно:

  • Модель ONNX:
detect_yolov5.py \
  --input ../image/dog.jpg \
  --model ../yolov5s.onnx \
  --output dog_origin.jpg
  • Bmodel F16:
detect_yolov5.py \
  --input ../image/dog.jpg \
  --model yolov5s_1684x_f16.bmodel \
  --output dog_f16.jpg
  • Симметрично квантованная модель INT8:
detect_yolov5.py \
  --input ../image/dog.jpg \
  --model yolov5s_1684x_int8.bmodel \
  --output dog_int8.jpg

Результаты разных моделей сравниваются ниже:

Вспомогательные инструменты

Инструмент для запуска модели model_runner.py

Поддерживает форматы bmodel/mlir/pytorch/onnx/tflite/caffe.

model_runner.py \
  --input resnet18_in_f32.npz \
  --model resnet18_1684x_f32.bmodel \
  --output resnet18_output.npz

Инструмент для работы с bmodel

Файл bmodel можно просмотреть и отредактировать с помощью model_tool:

  model_tool
    --info model_file : показать краткую информацию о модели
    --print model_file : показать подробную информацию о модели
    --extract model_file : извлечь одну многосетевую bmodel в несколько односетевых bmodels
    --combine file1 .. fileN -o new_file: объединить bmodels в одну bmodel по пути к файлу
    --combine_dir dir1 .. dirN -o new_dir: объединить bmodels в одну bmodel по пути к каталогу
    --dump model_file start_offset byte_size out_file: выгрузить двоичные данные из файла bmodel

Например, чтобы получить основную информацию о bmodel:

model_tool --info resnet18_1684x_f32.bmodel

Ссылки

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
BSD-2-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/sophgo-tpu-mlir.git
git@api.gitlife.ru:oschina-mirror/sophgo-tpu-mlir.git
oschina-mirror
sophgo-tpu-mlir
sophgo-tpu-mlir
master