[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [UNIKRAFT/LIBTFLITE PATCH 1/4] Library skeleton



Hi George,

I have a minor comment below that I can fix on upstreaming. Other than that:

Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx>

On Fri, May 15, 2020 at 1:52 PM George Muraru <murarugeorgec@xxxxxxxxx> wrote:
>
> Signed-off-by: George Muraru <murarugeorgec@xxxxxxxxx>
> ---
>  CONTRIBUTING.md |  4 ++++
>  COPYING.md      | 38 ++++++++++++++++++++++++++++++++++
>  Config.uk       | 50 ++++++++++++++++++++++++++++++++++++++++++++
>  MAINTAINERS.md  | 10 +++++++++
>  README.md       | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 157 insertions(+)
>  create mode 100644 CONTRIBUTING.md
>  create mode 100644 COPYING.md
>  create mode 100644 Config.uk
>  create mode 100644 MAINTAINERS.md
>  create mode 100644 README.md
>
> diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
> new file mode 100644
> index 0000000..14f6ac6
> --- /dev/null
> +++ b/CONTRIBUTING.md
> @@ -0,0 +1,4 @@
> +Contributing to Unikraft
> +========================
> +
> +Please refer to the `CONTRIBUTING.md` file in the main Unikraft repository.
> diff --git a/COPYING.md b/COPYING.md
> new file mode 100644
> index 0000000..fd1dc8e
> --- /dev/null
> +++ b/COPYING.md
> @@ -0,0 +1,38 @@
> +License
> +=======
> +
> +Unikraft tensorflowlite wrappers
> +----------------------------------
> +
> +This repository contains wrapper code to build tensorflowlite with Unikraft.
> +Each C code file in this repository should declare who is the
> +copyright owner and under which terms and conditions the code is
> +licensed. If such a licence note is missing, the following copyright
> +notice will apply:
> +
> +       Copyright (c) Year, Institution. All rights reserved.
> +
> +       Redistribution and use in source and binary forms, with or without
> +       modification, are permitted provided that the following conditions
> +       are met:
> +
> +       1. Redistributions of source code must retain the above copyright
> +          notice, this list of conditions and the following disclaimer.
> +       2. Redistributions in binary form must reproduce the above copyright
> +          notice, this list of conditions and the following disclaimer in the
> +          documentation and/or other materials provided with the 
> distribution.
> +       3. Neither the name of the copyright holder nor the names of its
> +          contributors may be used to endorse or promote products derived 
> from
> +          this software without specific prior written permission.
> +
> +       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
> "AS IS"
> +       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
> THE
> +       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
> PURPOSE
> +       ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
> CONTRIBUTORS BE
> +       LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> +       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> +       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
> BUSINESS
> +       INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
> IN
> +       CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
> OTHERWISE)
> +       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
> OF THE
> +       POSSIBILITY OF SUCH DAMAGE.
> diff --git a/Config.uk b/Config.uk
> new file mode 100644
> index 0000000..8d483a2
> --- /dev/null
> +++ b/Config.uk
> @@ -0,0 +1,50 @@
> +menuconfig LIBTFLITE
> +    bool "TensorFlowLite - tensorflow lite library"
> +    select LIBCXX
> +    select LIBNEWLIBC
> +    select LIBPOSIX_SYSINFO
> +    select LIBPTHREAD_EMBEDDED
> +    select LIBCOMPILTER_RT
> +    select LIBCOMPILER_RT_ATOMIC
> +    select LIBEIGEN
> +    select LIBFFT2D
> +    select LIBFLATBUFFERS
> +    select LIBGEMMLOWP
> +    select LIBFARMHASH
> +    select LIBUK9P
> +    select LIB9PFS
> +    select LIBDEVFS
> +    select LIBDEVFS_AUTOMOUNT
> +    select LIBVFSCORE_AUTOMOUNT_ROOTFS
> +    select LIBUKLIBPARAM
> +    default n
> +
> +if LIBTFLITE
> +    choice LIBVFSCORE_ROOTFS
> +    default LIBVFSCORE_ROOTFS_9PFS
> +    endchoice
> +endif
> +
> +if LIBTFLITE
> +    config LIBTFLITE_EIGEN_DONT_ALIGN
> +    bool "Do not align the buffers used by eigen library"
> +    default y
> +endif
> +
> +if LIBTFLITE
> +    config LIBTFLITE_BUILD_WITH_RUY
> +    bool "Matrix multiplication library"
> +    default y
> +endif
> +
> +if LIBTFLITE
> +    config LIBTFLITE_BUILD_WITH_NNAPI
> +    bool "Build with Neural Network API"
> +    default n
> +endif
> +
> +if LIBTFLITE
> +    config LIBTFLITE_MAIN_FUNCTION
> +       bool "Provide main function"
> +       default y
> +endif
> diff --git a/MAINTAINERS.md b/MAINTAINERS.md
> new file mode 100644
> index 0000000..f53ffe5
> --- /dev/null
> +++ b/MAINTAINERS.md
> @@ -0,0 +1,10 @@
> +Maintainers List
> +================
> +
> +For notes on how to read this information, please refer to `MAINTAINERS.md` 
> in
> +the main Unikraft repository.
> +
> +       LIBGEMMLOWP-UNIKRAFT
> +       M:      George Muraru <murarugeorgec@xxxxxxxxx>
> +       L:      minios-devel@xxxxxxxxxxxxx
> +       F: *
> diff --git a/README.md b/README.md
> new file mode 100644
> index 0000000..cc8cfda
> --- /dev/null
> +++ b/README.md
> @@ -0,0 +1,55 @@
> +TensorFlowLite for Unikraft
> +=============================
> +
> +This is the port of tensorflowlite as external library
> +Please refer to the `README.md` as well as the documentation in the `doc/`
> +subdirectory of the main unikraft repository.
> +
> +## Build
> +TensorFlowLite interpreter depends on the following libraries, that need to
> +be added to `Makefile` in this order:
> +
> +* `pthreads`, e.g. `pthread-embedded`
> +* `libcxx`
> +* `libcxxabi`
> +* `libc`, e.g. `newlib`
> +* `libunwind`
> +* `libcompilerrt`
> +* `libgemmlowp`
> +* `libflatbuffers`
> +* `libfarmhash`
> +* `libeigen`
> +* `libfft2`
> +
> +## Root filesystem
> +### Creating the filesystem
> +TensorFlowLite needs a filesystem which should contain one or more *tflite*
> +models. Therefore, the filesystem needs to be created before running the VM.
> +
> +### Using the filesystem
> +Mounting the filesystem is a transparent operation. All you have to do
> +is to provide the right Qemu parameters in order for Unikraft to mount
> +the filesystem.  We will use the 9pfs support for filesystems and for
> +this you will need to use the following parameters:
> +
> +```bash
> +-fsdev local,id=myid,path=<some directory>,security_model=none \
> +-device 
> virtio-9p-pci,fsdev=myid,mount_tag=rootfs,disable-modern=on,disable-legacy=off

I'll add a sentence on how to launch this using qemu-guest [1], the
script that kraft uses to launch qemu; this is easier to use than a
long qemu line.

[1] https://github.com/unikraft/kraft/blob/master/scripts/qemu-guest

> +```
> +You should also use `vfs.rootdev=rootfs` (set by default) to specify the 
> 9pfs mounting
> +tag to Unikraft. To enable 9pfs, you'll need to select the following
> +menu options, all under `Library Configuration` (this should be already done 
> by the
> +`tflite` config file):
> +
> +* `uk9p: 9p client`
> +* `vfscore: VFS Core Interface`
> +         &rarr; `vfscore: Configuration`
> +         &rarr; `Automatically mount a root filesysytem`
> +         &rarr; `Default root filesystem`
> +         &rarr; `9PFS`
> +
> +## How to run
> +Currently, `main.cpp` contains a minimal example for loading a *tflite* 
> model and
> +printing the interpreter state. The sample program will try to load the 
> model from
> +`mobilenet_v1_1.0_224.tflite` (this model and other models from the same 
> family can
> +be downloaded from 
> [here](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md))
> --
> 2.25.1
>
>



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.