Как загрузить или вывести модели onnx на периферийные устройства, такие как Raspberry Pi? - PullRequest
0 голосов
/ 13 января 2020

Я просто хочу загрузить модели onnx в Raspberry Pi. Как загрузить модели onnx в периферийные устройства?

1 Ответ

2 голосов
/ 14 января 2020

Вы можете использовать ONNX Runtime для вывода модели ONNX в Raspberry Pi. Он поддерживает архитектуру Arm32v7l. Предварительная сборка двоичных файлов не предоставляется по состоянию на 2020/1/14. Так что вам нужно собрать его из исходного кода. Инструкция описана ниже. https://github.com/microsoft/onnxruntime/blob/master/dockerfiles/README.md#arm -32v7

  1. Установите DockerCE на свой компьютер для разработки, следуя инструкциям здесь

  2. Создать пустой локальный каталог

mkdir onnx-build
cd onnx-build
Сохраните файл Docker в ваш новый каталог

Dockerfile.arm32v7

FROM balenalib/raspberrypi3-python:latest-stretch-build

ARG ONNXRUNTIME_REPO=https://github.com/Microsoft/onnxruntime
ARG ONNXRUNTIME_SERVER_BRANCH=master

#Enforces cross-compilation through Quemu
RUN [ "cross-build-start" ]

RUN install_packages \
    sudo \
    build-essential \
    curl \
    libcurl4-openssl-dev \
    libssl-dev \
    wget \
    python3 \
    python3-pip \
    python3-dev \
    git \
    tar \
    libatlas-base-dev

RUN pip3 install --upgrade pip
RUN pip3 install --upgrade setuptools
RUN pip3 install --upgrade wheel
RUN pip3 install numpy

# Build the latest cmake
WORKDIR /code
RUN wget https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3.tar.gz
RUN tar zxf cmake-3.14.3.tar.gz

WORKDIR /code/cmake-3.14.3
RUN ./configure --system-curl
RUN make
RUN sudo make install

# Set up build args
ARG BUILDTYPE=MinSizeRel
ARG BUILDARGS="--config ${BUILDTYPE} --arm"

# Prepare onnxruntime Repo
WORKDIR /code
RUN git clone --single-branch --branch ${ONNXRUNTIME_SERVER_BRANCH} --recursive ${ONNXRUNTIME_REPO} onnxruntime

# Start the basic build
WORKDIR /code/onnxruntime
RUN ./build.sh ${BUILDARGS} --update --build

# Build Shared Library
RUN ./build.sh ${BUILDARGS} --build_shared_lib

# Build Python Bindings and Wheel
RUN ./build.sh ${BUILDARGS} --enable_pybind --build_wheel

# Build Output
RUN ls -l /code/onnxruntime/build/Linux/${BUILDTYPE}/*.so
RUN ls -l /code/onnxruntime/build/Linux/${BUILDTYPE}/dist/*.whl

RUN [ "cross-build-end" ]
Выполнить docker build

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

docker build -t onnxruntime-arm32v7 -f Dockerfile.arm32v7 .

Обратите внимание на полный путь к файлу .whl

  • Сообщается в конце сборки после строки # Build Output.
  • Должен следовать формату onnxruntime-0.3.0-cp35-cp35m-linux_armv7l.whl, но номер версии мог измениться. Вы будете использовать этот путь для извлечения файла колеса позже.

Убедитесь, что сборка прошла успешно

  • По завершении вы должны увидеть изображение отмеченный onnxruntime-arm32v7 в вашем списке docker изображений:
docker images
Извлечение файла колеса Python из docker образа

(Обновите путь / версию .whl-файла, указав в шаге 5)

docker create -ti --name onnxruntime_temp onnxruntime-arm32v7 bash
docker cp onnxruntime_temp:/code/onnxruntime/build/Linux/MinSizeRel/dist/onnxruntime-0.3.0-cp35-cp35m-linux_armv7l.whl .
docker rm -fv onnxruntime_temp

Это сохранит копию файла колеса, onnxruntime-0.3.0-cp35-cp35m-linux_armv7l.whl, в ваш рабочий каталог на хост-компьютере.

Скопируйте файл колеса (onnxruntime-0.3.0-cp35-cp35m-linux_armv7l.whl) на Raspberry Pi или другое устройство ARM

На устройстве установите Файл рабочего колеса ONNX

sudo apt-get update
sudo apt-get install -y python3 python3-pip
pip3 install numpy

# Install ONNX Runtime
# Important: Update path/version to match the name and location of your .whl file
pip3 install onnxruntime-0.3.0-cp35-cp35m-linux_armv7l.whl
Проверьте установку, следуя инструкциям здесь
...