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.
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
Если модель принимает изображения в качестве входных данных, нам нужно изучить её предварительную обработку перед преобразованием. Предварительную обработку не нужно учитывать, если входным файлом является 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 | Нет | Динамический код для поддержки динамической формы |
Перед преобразованием в модель 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
), для обнаружения объектов. Прочитайте код, чтобы узнать, как используется модель:
Следующий код используется для проверки вывода моделей ONNX/f32/int8 соответственно:
detect_yolov5.py \
--input ../image/dog.jpg \
--model ../yolov5s.onnx \
--output dog_origin.jpg
detect_yolov5.py \
--input ../image/dog.jpg \
--model yolov5s_1684x_f16.bmodel \
--output dog_f16.jpg
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 )