Перейти к основному содержимому

Портирование и запуск моделей на Sophon

Портирование моделей на Sophon

Для запуска нейросетевых моделей на устройстве 3DV-EdgeAI-32 требуется преобразование исходной модели в формат bmodel — нативный формат инференса для TPU.

Компиляция ONNX-модели в формат bmodel выполняется с помощью специализированного инструмента TPU-MLIR, который оптимизирует вычислительный граф под архитектуру TPU и подготавливает модель к эффективному выполнению на целевом устройстве.

Предварительные требования

Все действия выполняются на устройстве, удовлетворяющем требованиям:

  • ЦП x86-64
  • ОС Ubuntu 16.04+
  • Оперативная память 12 ГБ или более
ВАЖНО

На устройстве должно быть установлено и настроено ПО Docker.

Продготовка окружения

  1. Загрузите архив с данными и весами YOLOv5. Расположите архив в примонтированной рабочей папке и распакуйте его.

    tar xf data.tar.gz
  2. Скачайте docker-образ.

    docker pull sophgo/tpuc_dev:v3.2
  3. Запустите контейнер.

    docker run --privileged --name bmodel -v $PWD:/workspace -it sophgo/tpuc_dev:v3.2
  4. Установите tpu-mlir в контейнере.

    pip3 install tpu_mlir==1.7

Компиляция модели

  1. Преобразуйте ONNX-файл в промежуточный формат mlir.

    mkdir -p export
    cd export

    model_transform \
    --model_name yolov5m \
    --model_def \
    ../models/onnx/yolov5m_v6.1_1output_1b.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 output \
    --test_input \
    ../datasets/test/dog.jpg \
    --test_result yolov5m_top_outputs.npz \
    --mlir yolov5m.mlir
  2. Преобразуйте файл mlir в bmodel (пример для точности FP16).

    model_deploy \
    --mlir yolov5m.mlir \
    --quantize F16 \
    --processor bm1684x \
    --test_input yolov5m_in_f32.npz \
    --test_reference yolov5m_top_outputs.npz \
    --tolerance 0.99,0.99 \
    --model yolov5m_1684x_f16.bmodel

В результате выполнения команд будет создан файл export/yolov5m_1684x_f16.bmodel.

Более подробная информация изложена в руководстве по TPU-MLIR.

Значения input_shapes и output_names для произвольного ONNX-файла можно получить с помощью приложения Netron.

img.png

Запуск модели на Python на примере Yolo5

Предварительные требования

Все действия выполняются на устройстве 3DV-EdgeAI-32.

Подготовка окружения

  1. Загрузите архив с зависимостями. Архив включает минимальный набор библиотек, необходимых для инференса на устройстве. Разместите архив в рабочей папке на устройстве и распакуйте.

    tar xf deps.tar
  2. Извлеките runtime библиотеки и настройте переменные окружения для поиска необходимых библиотек.

    sophon_lib_path="/opt/sophon/libsophon-current/lib"
    sophon_opencv_path="/opt/sophon/sophon-opencv-latest/opencv-python/"
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$sophon_lib_path"
    export PYTHONPATH="$PYTHONPATH:$sophon_opencv_path"
    echo >> ~/.bashrc
    echo "# set library search paths for sophon modules for python" >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:'$sophon_lib_path'"' >> ~/.bashrc
    echo 'export PYTHONPATH="$PYTHONPATH:'$sophon_opencv_path'"' >> ~/.bashrc
  3. Извлеките и установите пакет sophon для Python.

    tar xf sophon-sail_3.7.0.tar.gz
    pip3 install sophon-sail/python_wheels/soc/libsophon-0.4.9_sophonmw-0.7.0/py38/sophon_arm-3.7.0-py3-none-any.whl
  4. Склонируйте репозиторий sophon-demo.

    git clone -b release https://github.com/sophgo/sophon-demo.git
    ВАЖНО

    Если ваша модель не представлена в списке моделей, для которых уже есть пример, необходимо написать собственный пример по аналогии. Например, для resnet.

  5. Перейдите в папку примера инференса YOLOv5.

    cd sophon-demo/sample/YOLOv5
  6. Загрузите архив с данными и весами YOLOv. Разместите архив в папке примера YOLOv5 на устройстве и распакуйте его.

    tar xf data.tar.gz
    примечание

    Прилагаемый архив содержит минимальный набор файлов весов, необходимый для проверки инференса на устройстве. В качестве альтернативы для загрузки полного наброра весов и данных может использоваться скрипт из репозитория sophon-demo.

    chmod -R +x scripts/
    ./scripts/download.sh

Тест инференса на Python

Для запуска инференса на тестовом наборе изображений выполните команды:

  1. Для проверки модели с точностью FP32

    python3 python/yolov5_opencv.py --input datasets/test --bmodel models/BM1684X/yolov5s_v6.1_3output_fp32_1b.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5 --use_cpu_opt
  2. Для проверки модели с точностью INT8

    python3 python/yolov5_opencv.py --input datasets/test --bmodel models/BM1684X/yolov5s_v6.1_3output_int8_1b.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5 --use_cpu_opt

В результате выполнения команды в папке примера YOLOv5 будет создана папка results/images, содержащая изображения с визуализациями результатов детекции.

Расширенная информация о тестовом примере на Python собрана в файле README_EN.md.

к сведению

Специалисты 3DiVi имеют опыт портирования моделей нейросетей на архитектуру нейроускорителя Sophon. Чтобы ускорить процесс и сократить ваши затраты, вы можете обратиться к нам за соответствующими услугами:

  1. Портирование моделей. Для этого нам понадобятся ONNX-файлы ваших моделей. Для проверки желательно также предоставить набор контрольных примеров, либо тестовый датасет с метриками качества, посчитанными до конвертации.
  2. Квантизация и калибровка моделей. Для этого нам потребуются ваши датасеты (отдельный для калибровки, отдельный для проверки качества), а также метрики качества, посчитанные до конвертации.
  3. Оптимизация и ускорение. Чтобы оптимизировать модели для быстрой работы на 3DV-EdgeAI-32 нам может потребоваться словесное описание алгоритма препроцессинга/постпроцессинга, или же исходный код.

При необходимости мы также можем провести переобучение модели.

Оставьте заявку и мы обязательно поможем.