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

OSCHINA-MIRROR/MegEngine-mgeconvert

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

MgeConvert

MgeConvert — это конвертер, предназначенный для моделей MegEngine. Он позволяет преобразовывать модели MegEngine в форматы сторонних фреймворков.

В настоящее время поддерживаются следующие сторонние фреймворки: Caffe, ONNX и TFLite. Поддерживаемые модели включают ResNet, ResNext и ShuffleNet. При необходимости адаптации других моделей может потребоваться добавить поддержку дополнительных операторов.

На данный момент MgeConvert также поддерживает преобразование моделей ONNX в mge/TracedModule.

Структура конвертера MgeConvert включает три части:

  • frontend — часть, расположенная в каталоге frontend, поддерживает форматы моделей mge и traced module и преобразует сериализованный вычислительный граф MegEngine в структуру IR-графа;
  • converter_ir — часть, которая находится в каталоге converter_ir, содержит определение графа и операторов IR, а также правила преобразования для вычислительного графа и квантификаторы для обработки квантованных моделей;
  • backend — часть, находящаяся в каталоге backend, включает преобразователи для Caffe, ONNX и TFLite, которые могут преобразовать структуру IR-графа в модели сторонних фреймворков.

Feature 支持说明

TracedModule tflite caffe onnx torchscript
QAT :white_check_mark: :white_check_mark: :memo: :white_check_mark:
Quantized :white_check_mark: :boom: :memo: :boom:
Float32 :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Mge tflite caffe onnx
QAT :boom: :boom: :boom:
Quantized :memo: :boom: :memo:
Float32 :white_check_mark: :white_check_mark: :white_check_mark:

依赖说明

Для работы MgeConvert требуется наличие установленной версии MegEngine (>=1.0).

  1. Caffe:

    • Python packages: protobuf >= 3.11.0.
  2. ONNX:

    • Python packages: protobuf, onnx >= 1.8.0, onnxruntime, onnxoptimizer == 0.2.7, onnx-simplifier == 0.3.6.
  3. TFLite:

    • Python packages: pybind11 == 2.6.2;
    • third party: flatbuffers == 1.12.0.
  4. Torchscript:

    • torch >= 1.10.

Примечание: при установке перечисленные зависимости будут перезаписаны локальными версиями.

Установка способа

Если ранее была установлена версия MgeConvert 0.5.0 или более ранняя, перед установкой новой версии необходимо удалить старую с помощью команды:

sudo pip3 uninstall mgeconvert

Pip установка (рекомендуется)

Начиная с версии v1.0.0 MgeConvert поддерживает установку из исходного кода. Для установки преобразователя Caffe можно использовать следующую команду:

pip3 install mgeconvert --user --install-option="--targets=caffe"

Примечание: параметр --targets может принимать значения caffe, onnx, tflite и all. Значение all означает установку всех доступных преобразователей. Параметр --targets также может принимать несколько значений одновременно, например, --targets=caffe,tflite.

Примечание: схема преобразователя TFLite по умолчанию использует версию r2.3. Можно выбрать другую версию схемы TFLite с помощью параметра --tfversion, например, --install-option="--targets=tflite --tfversion=r2.4".

Установка из исходного кода

Инструкции по установке из исходного кода аналогичны инструкциям для pip-установки. В качестве примера рассмотрим установку преобразователя Caffe:

  1. Клонируйте репозиторий MgeConvert:
git clone https://github.com/MegEngine/mgeconvert.git@v0.5.0
cd mgeconvert
pip3 install . --user --install-option="--targets=caffe"

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

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

Конвертеры различаются в зависимости от формата входной модели:

  1. Модели, полученные с помощью MegEngine jit.trace dump, преобразуются с использованием конвертеров с префиксом mge_to.
  2. Текст технической направленности из области разработки и тестирования программного обеспечения на русском языке:

TracedModule — это модель, которая экспортируется в виде сериализованной модели. Конвертер для таких моделей называется tracedmodule_to.

1. Использование командной строки

Скрипт выполняется в папке ~/.local/bin. Перед выполнением скрипта добавьте эту папку в переменную окружения PATH.

Командная строка поддерживает автозаполнение команд. Для этого выполните команду convert --init.

Чтобы узнать о поддерживаемых фреймворках для преобразования, выполните команду:

convert -h

В качестве примера рассмотрим преобразование модели mge в caffe. Чтобы узнать параметры преобразования, выполните следующую команду:

convert mge_to_caffe -h

1.1 Преобразование модели в формат Caffe

1.1.1 Преобразование float-модели

Пример команды для преобразования модели:

convert mge_to_caffe -i model.mge -c out.prototxt -b out.caffemodel

Пример команды для преобразования TracedModule-модели:

convert tracedmodule_to_caffe -i model.tm -c out.prototxt -b out.caffemodel
1.1.2 Преобразование QAT-модели

Преобразование QAT-модели в Caffe

mgeconvert позволяет преобразовывать QAT-модель в Caffe. По умолчанию при преобразовании QAT-модели создаётся файл с параметрами квантизации. Вы можете указать путь к файлу параметров квантизации с помощью параметра quantize_file_path:

convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json

Вы можете выбрать квантизацию параметров модели с помощью параметра param_fake_quant:

convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --param_fake_quant

Если в QAT-модели нет QuantStub для обработки входных данных, вы можете использовать параметры input_data_type, input_scales и input_zero_points при преобразовании. Если есть несколько значений масштаба или нулевых точек, разделите их запятыми:

convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --input_data_type quint8 --input_scales 0.125 --input_zero_points 128

1.2 Преобразование в формат TFlite

TFlite-конвертер поддерживает float32 и квантованные TracedModule-модели.

1.2.1 Преобразование float-моделей

Пример команды для преобразования float-модели:

convert mge_to_tflite -i model.mge -o out.tflite

Пример команды для преобразования TracedModule-модели:

convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite

1.2.2 Преобразование QAT-моделей

Для преобразования QAT-модели можно использовать параметр require_quantize в конвертере tracedmodule_to_tflite. Это позволит преобразовать модель в формат, который поддерживает квантованную информацию (int8/uint8/int16/int32):

convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --require_quantize

Также можно не использовать параметр --require_quantize, чтобы преобразовать модель в float32-формат и создать файл с параметрами квантизации:

convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json

Можно также использовать параметр param_fake_quant, чтобы выбрать, будет ли квантизация параметров модели:

convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json --param_fake_quant

Если в QAT-модели нет QuantStub для обработки входных данных, можно использовать параметры input_data_type, input_scales и input_zero_points при преобразовании. Если есть несколько значений масштаба или нулевых точек, разделите их запятыми:

convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --input_data_type quint8 --input_scales 0.125,0.125 --input_zero_points 128,128 --require_quantize

1.3 Преобразование между форматами ONNX

Mgeconvert может преобразовывать модели между форматом ONNX. Поддерживаются версии opset от 7 до 12. ONNX-модели могут быть преобразованы в mge/TracedModule без ограничений по версии opset. В настоящее время поддерживается только преобразование float-моделей.

Пример команды для преобразования mge-модели в ONNX:

convert mge_to_onnx -i model.mge -o out.onnx

Пример команды для преобразования TracedModule-модели в ONNX:

convert tracedmodule_to_onnx -i tracedmodule.tm -o out.onnx

Пример команды для обратного преобразования ONNX в mge:

convert onnx_to_mge -i model.onnx -o out.mge

Пример команды для обратного преобразования ONNX в TracedModule:

convert onnx_to_tracedmodule -i tracedmodule.onnx -o out.tm

2. Использование Python-интерфейса

См. примеры в wiki.

FAQ

  1. При установке возникает ошибка, подобная этой:
error removing /home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info: 
[Errno 13] Permission denied: '/home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info/PKG-INFO'

Это проблема с правами доступа при использовании sudo для установки старой версии. Сначала удалите старую версию, а затем установите новую:

sudo pip3 uninstall mgeconvert
  1. При использовании tflite-конвертера возникает ошибка «ImportError: /home//lib/python3.6/site-packages/mgeconvert/backend/ir_to_tflite/pyflexbuffers/fbconverter.so: undefined symbol: _ZN11flatbuffers13ClassicLocale9instance_E».

Эта проблема связана с несоответствием версий libflatbuffers.so и зависимостей. Используйте libflatbuffers.so, скомпилированный mgeconvert:

export LD_LIBRARY_PATH=$MGECONVERT_PATH/backend/ir_to_tflite/pyflexbuffers/lib:$LD_LIBRARY_PATH

Список поддерживаемых операторов

TracedModule -> {tflite, caffe, onnx}
--------------------------
Abs
AveragePool
Cast
Conv
Clip
Concat
Div
Dropout
Flatten
Gather
Gemm
GlobalAveragePool
GlobalMaxPool
Hardsigmoid
LSTM
MaxPool
Mul
Pow
Reduce
Relu
Reshape
Resize
Shape
Sigmoid
Slice
Softmax
Sqrt
Sub
Transpose
Unsqueeze

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

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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