From 86b0bd5a5ed272e008a69a28f2db5ec9e4a0e354 Mon Sep 17 00:00:00 2001 From: Grant Watson <2866599+grant-arm@users.noreply.github.com> Date: Tue, 3 Aug 2021 00:06:30 +0100 Subject: [PATCH] =?UTF-8?q?Docker=20env=20for=20Arm=C2=AE=20Ethos=E2=84=A2?= =?UTF-8?q?-U55=20Port=20(#8514)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Docker env for Arm® Ethos™-U55 Port * Added Arm® Corstone™-300 Reference System for testing * Added Arm® Ethos™-U driver stack * Added installation of Arm® Vela. Co-authored-by: Manupa Karunaratne Change-Id: Ie3cc43943c876d95618a39887aa666da20bcb1e4 * Docker env for Arm® Ethos™-U55 Port * Removes /opt/arm/cmake/bin from the path * Parameterizes Arm® Ethos™-U55 driver stack version number Change-Id: I2162b40f82241fd013643cbfa8847b60d7f4f5a1 * Docker env for Arm® Ethos™-U55 Port * Adds ethosu as an extra to /python/gen_requirements.py Change-Id: I2162b40f82241fd013643cbfa8847b60d7f4f5a1 * Docker env for Arm® Ethos™-U55 Port * Added comment explaining why Vela version needs to be pinned to 2.1.1 Change-Id: I1ade280faa5274cca78899f4dae9e596b16fb5df --- docker/Dockerfile.ci_cpu | 10 ++ .../ubuntu_install_ethosu_driver_stack.sh | 94 +++++++++++++++++++ docker/install/ubuntu_install_vela.sh | 27 ++++++ python/gen_requirements.py | 11 +++ 4 files changed, 142 insertions(+) create mode 100755 docker/install/ubuntu_install_ethosu_driver_stack.sh create mode 100644 docker/install/ubuntu_install_vela.sh diff --git a/docker/Dockerfile.ci_cpu b/docker/Dockerfile.ci_cpu index 07e798c4e615..a4dc5e0f7e69 100644 --- a/docker/Dockerfile.ci_cpu +++ b/docker/Dockerfile.ci_cpu @@ -116,3 +116,13 @@ RUN bash /install/ubuntu_install_androidsdk.sh ENV ANDROID_HOME=/opt/android-sdk-linux/ ENV ANDROID_NDK_HOME=/opt/android-sdk-linux/ndk/21.3.6528147/ +# Arm(R) Ethos(TM)-U NPU driver +COPY install/ubuntu_install_ethosu_driver_stack.sh /install/ubuntu_install_ethosu_driver_stack.sh +RUN bash /install/ubuntu_install_ethosu_driver_stack.sh + +# Install Vela compiler +COPY install/ubuntu_install_vela.sh /install/ubuntu_install_vela.sh +RUN bash /install/ubuntu_install_vela.sh + +# Update PATH +ENV PATH /opt/arm/gcc-arm-none-eabi/bin:$PATH diff --git a/docker/install/ubuntu_install_ethosu_driver_stack.sh b/docker/install/ubuntu_install_ethosu_driver_stack.sh new file mode 100755 index 000000000000..35b2b4c74b7b --- /dev/null +++ b/docker/install/ubuntu_install_ethosu_driver_stack.sh @@ -0,0 +1,94 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +set -e +set -u +set -o pipefail + +fvp_dir="/opt/arm/FVP_Corstone_SSE-300_Ethos-U55" +cmake_dir="/opt/arm/cmake" +ethosu_dir="/opt/arm/ethosu" +ethosu_driver_ver="21.05" +cmsis_ver="5.7.0" + +mkdir -p /opt/arm + +tmpdir=$(mktemp -d) + +cleanup() +{ + rm -rf "$tmpdir" +} + +trap cleanup 0 + +# Ubuntu 18.04 dependencies +apt-get update + +apt-get install -y \ + bsdmainutils \ + build-essential \ + cpp \ + git \ + linux-headers-generic \ + make \ + python-dev \ + python3 \ + ssh \ + wget \ + xxd + +# Download the FVP +mkdir -p "$fvp_dir" +cd "$tmpdir" +curl -sL https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/MPS3/FVP_Corstone_SSE-300_Ethos-U55_11.14_24.tgz | tar -xz +./FVP_Corstone_SSE-300_Ethos-U55.sh --i-agree-to-the-contained-eula --no-interactive -d "$fvp_dir" +rm -rf FVP_Corstone_SSE-300_Ethos-U55.sh license_terms + +# Setup cmake 3.19.5 +mkdir -p "${cmake_dir}" +cd "$tmpdir" +curl -sL -o cmake-3.19.5-Linux-x86_64.sh https://github.com/Kitware/CMake/releases/download/v3.19.5/cmake-3.19.5-Linux-x86_64.sh +chmod +x cmake-3.19.5-Linux-x86_64.sh +./cmake-3.19.5-Linux-x86_64.sh --prefix="${cmake_dir}" --skip-license +rm cmake-3.19.5-Linux-x86_64.sh +export PATH="${cmake_dir}/bin:${PATH}" + +# Install the GCC toolchain +mkdir -p /opt/arm/gcc-arm-none-eabi/ +gcc_arm_url='https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2?revision=ca0cbf9c-9de2-491c-ac48-898b5bbc0443&la=en&hash=68760A8AE66026BCF99F05AC017A6A50C6FD832A' +curl --retry 64 -sSL ${gcc_arm_url} | tar -C /opt/arm/gcc-arm-none-eabi --strip-components=1 -jx +export PATH="/opt/arm/gcc-arm-none-eabi/bin:${PATH}" + +# Clone Arm(R) Ethos(TM)-U NPU driver stack +mkdir "${ethosu_dir}" +cd "${ethosu_dir}" +git clone "https://review.mlplatform.org/ml/ethos-u/ethos-u-core-driver" core_driver +cd core_driver +git checkout tags/${ethosu_driver_ver} + +cd "${ethosu_dir}" +git clone "https://review.mlplatform.org/ml/ethos-u/ethos-u-core-platform" core_platform +cd core_platform +git checkout tags/${ethosu_driver_ver} + +# Clone CMSIS +cd "${ethosu_dir}" +git clone "https://github.com/ARM-software/CMSIS_5.git" cmsis +cd cmsis +git checkout -f tags/${cmsis_ver} diff --git a/docker/install/ubuntu_install_vela.sh b/docker/install/ubuntu_install_vela.sh new file mode 100644 index 000000000000..e75a99d9d563 --- /dev/null +++ b/docker/install/ubuntu_install_vela.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +set -e +set -u +set -o pipefail + +pip3 install -U setuptools +# In a refactor between v2.1.1 and v3.0.0, find_block_configs was removed from Vela. +# Since this is still required for the TVM port, it will be reinstated in Vela in a future release. +# Until then, it needs to be pinned to v2.1.1. +pip3 install ethos-u-vela==2.1.1 diff --git a/python/gen_requirements.py b/python/gen_requirements.py index b3a199ee1390..dac435146469 100755 --- a/python/gen_requirements.py +++ b/python/gen_requirements.py @@ -75,6 +75,16 @@ ], ), ), + # Provide support for Arm(R) Ethos(TM)-U NPU. + ( + "ethosu", + ( + "Requirements for using Arm(R) Ethos(TM)-U NPU", + [ + "ethos-u-vela", + ], + ), + ), # Relay frontends. ( "importer-caffe2", @@ -205,6 +215,7 @@ "docutils", "<0.17", ), # Work around https://github.com/readthedocs/sphinx_rtd_theme/issues/1115 + ("ethos-u-vela", "==2.1.1"), ("future", None), ("image", None), ("matplotlib", None),