Merge branch 'master' of github.com:clearlinux/clear-linux-documentation into rtd-theme

This commit is contained in:
Kevin Putnam
2019-07-22 12:09:39 -07:00
4 changed files with 282 additions and 234 deletions
+79 -57
View File
@@ -3,11 +3,11 @@
Data Analytics Reference Stack
##############################
This guide shows you how to use the Data Analytics Reference Stack
(DARS), and to optionally build your own images with the baseline Dockerfiles
provided in the `DARS repository`_. Our assumption is that |CL-ATTR| is the
host. However, any system that supports Docker\* containers can be used to
follow these steps.
This guide explains how to use the :abbr:`DARS (Data Analytics Reference Stack)`,
and to optionally build your own DARS container image.
Any system that supports Docker\* containers can be used with DARS. This steps
in this guide use |CL-ATTR| as the host system.
.. contents::
:local:
@@ -16,96 +16,118 @@ follow these steps.
The Data Analytics Reference Stack release
******************************************
The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large amounts of data. More detail is available on the `DARS architecture and performance benchmarks`_.
The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large
amounts of data. More detail is available on the
`DARS architecture and performance benchmarks`_.
The Data Analytics Reference Stack provides two pre-built Docker images, available on `Docker Hub`_:
The Data Analytics Reference Stack provides two pre-built Docker images,
available on `Docker Hub`_:
* A |CL|-derived `DARS with OpenBlas`_ stack optimized for `OpenBLAS`_
* A |CL|-derived `DARS with MKL`_ stack optimized for `MKL`_
* A |CL|-derived `DARS with Intel® MKL`_ stack optimized for `MKL`_
We recommend you view the latest component versions for each image in the
:file:`README` found in the `DARS repository`_. Because |CL| is a rolling
distribution, the package version numbers in the |CL|-based containers may
not be the latest released by |CL|.
:file:`README` found in the `Data Analytics Reference Stack`_ GitHub\*
repository. Because |CL| is a rolling distribution, the package version numbers
in the |CL|-based containers may not be the latest released by |CL|.
.. note::
The Data Analytics Reference Stack is a collective work, and each piece
of software within the work has its own license. Please see the `terms
of use`_ for more details about licensing and usage of the Data Analytics
Reference Stack.
of software within the work has its own license. Please see the
`DARS Terms of Use`_ for more details about licensing and usage of the Data
Analytics Reference Stack.
Using the Docker Images
Using the Docker images
***********************
To immediately start using the latest stable DARS images, pull directly
from `Docker Hub`_. For this guide we'll use the `Dars with MKL`_ version of the stack.
#. To immediately start using the latest stable DARS images, pull an image
directly from `Docker Hub`_. This example uses the
`DARS with Intel® MKL`_ Docker image.
Once you have downloaded the image, you can run it with
#. Once you have downloaded the image, you can run it with
.. code-block:: bash
.. code-block:: bash
docker run -it --ulimit nofile=1000000:1000000 --name mkl <name of image>
docker run -it --ulimit nofile=1000000:1000000 --name mkl <name of image>
This will launch the image and drop you into a bash shell inside the
container. You will see output similar to the following:
This will launch the image and drop you into a bash shell inside the
container. You will see output similar to the following:
.. code-block:: console
.. code-block:: console
root@fd5155b89857 /root # spark-shell
spark-shell
Config directory: /usr/share/defaults/spark/
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.0
/_/
root@fd5155b89857 /root # spark-shell
spark-shell
Config directory: /usr/share/defaults/spark/
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.0
/_/
Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal)
Type in expressions to have them evaluated.
Type :help for more information.
Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
scala>
The :command:`--ulimit nofile` parameter is currently required in order to
increase the number of open files opened at certain point by the spark
engine.
The :command:`--ulimit nofile` parameter is currently required in order to
increase the number of open files opened at certain point by the spark
engine.
Building DARS Images
Building DARS images
********************
If you choose to build your own DARS container images, you can customize
them as needed. Use the provided Dockerfile as a baseline. To construct
images with |CL|, start with a |CL| development platform that
them as needed. Use the provided Dockerfile as a baseline.
To construct images with |CL|, start with a |CL| development platform that
has the :command:`containers-basic-dev` bundle installed. Learn more about
bundles and installing them by using :ref:`swupd-guide`.
First, clone the `DARS repository`_ from GitHub.
#. Clone the `Data Analytics Reference Stack`_ GitHub\* repository.
.. code-block:: bash
.. code-block:: bash
git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master
git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master
Then, inside the DARS directory, run :command:`make` to build OpenBLAS and
MKL images, and run :command:`make baseline` to build the baseline CentOS
image. Depending on the system, it may take a while to finish building.
Once completed, check the resulting images with :command:`Docker`
#. Inside the DARS directory, run :command:`make` to build OpenBLAS and MKL images.
.. code-block:: bash
.. code-block:: bash
docker images | grep dars
make
You can use any of the resulting images to launch fully functional
containers. If you need to customize the containers, you can edit the
provided :file:`Dockerfile`.
Run :command:`make baseline` to build the baseline CentOS image. Depending on
the system, it may take a while to finish building.
.. code-block:: bash
make baseline
#. Once completed, check the resulting images with :command:`Docker`
.. code-block:: bash
docker images | grep dars
#. You can use any of the resulting images to launch fully functional containers.
If you need to customize the containers, you can edit the provided :file:`Dockerfile`.
.. _Data Analytics Reference Stack: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars
.. _DARS repository: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars
.. _Docker Hub: https://hub.docker.com/
.. _OpenBLAS: http://www.openblas.net/
.. _MKL: https://software.intel.com/en-us/mkl
.. _CentOS: https://www.centos.org/
.. _DARS with OpenBLAS: https://hub.docker.com/r/clearlinux/stacks-dars-openblas/
.. _DARS with MKL: https://hub.docker.com/r/clearlinux/stacks-dars-mkl/
.. _DARS with Intel® MKL: https://hub.docker.com/r/clearlinux/stacks-dars-mkl/
.. _DARS architecture and performance benchmarks: https://clearlinux.org/stacks/data-analytics-stack-v1
.. _terms of use: https://clearlinux.org/stacks/data-analytics/terms-of-use
.. _DARS Terms of Use: https://clearlinux.org/stacks/data-analytics/terms-of-use
+44 -38
View File
@@ -44,19 +44,19 @@ The Deep Learning Reference Stack is available in the following versions:
Stack features
==============
* Deep Learning Reference Stack `V3.0 release announcement`_.
* `DLRS V3.0`_ release announcement.
* Deep Learning Reference Stack v2.0 including current
`PyTorch benchmark results`_.
`PyTorch benchmark`_.
* Deep Learning Reference Stack v1.0 including current
`TensorFlow benchmark results`_.
* `Release notes on Github\*`_ for the latest release of Deep Learning Reference
Stack.
`TensorFlow benchmark`_ results.
* `DLRS Release notes`_ on Github\* for the latest release of Deep Learning
Reference Stack.
.. note::
The Deep Learning Reference Stack is a collective work, and each piece of software within the work has its own license. Please see the `terms of use`_ for more details about licensing and usage of the Deep Learning Reference Stack.
The Deep Learning Reference Stack is a collective work, and each piece of
software within the work has its own license. Please see the `DLRS Terms of Use`_
for more details about licensing and usage of the Deep Learning Reference Stack.
Prerequisites
=============
@@ -104,19 +104,22 @@ We validated these steps against the following software package versions:
.. note::
The Deep Learning Reference Stack was developed to provide the best user experience when executed on a |CL| host. However, as the stack runs in a container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services.
The Deep Learning Reference Stack was developed to provide the best user
experience when executed on a |CL| host. However, as the stack runs in a
container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services.
TensorFlow single and multi-node benchmarks
*******************************************
This section describes running the `TensorFlow benchmarks`_ in single node.
This section describes running the `TensorFlow Benchmarks`_ in single node.
For multi-node testing, replicate these steps for each node. These steps
provide a template to run other benchmarks, provided that they can invoke
TensorFlow.
.. note::
Performance test results for the Deep Learning Reference Stack and for this guide were obtained using `runc` as the runtime.
Performance test results for the Deep Learning Reference Stack and for this
guide were obtained using `runc` as the runtime.
#. Download either the `Eigen`_ or the `Intel MKL-DNN`_ Docker image
from `Docker Hub`_.
@@ -198,28 +201,30 @@ The benchmark workload runs in a Kubernetes cluster. The guide uses
.. warning::
If you choose the Intel® MKL-DNN or Intel® MKL-DNN-VNNI image, your platform must support the Intel® AVX-512 instruction set. Otherwise, an *illegal instruction* error may appear, and you wont be able to complete this guide.
If you choose the Intel® MKL-DNN or Intel® MKL-DNN-VNNI image, your platform
must support the Intel® AVX-512 instruction set. Otherwise, an
*illegal instruction* error may appear, and you wont be able to complete this guide.
Kubernetes setup
================
Follow the instructions in the :ref:`kubernetes` tutorial to get set up on
|CL|. The Kubernetes community also has
`instructions for creating a cluster`_.
|CL|. The Kubernetes community also has instructions for creating a cluster,
described in `Creating a single control-plane cluster with kubeadm`_.
Kubernetes networking
=====================
We used `flannel`_ as the network provider for these tests. If you
prefer a different network layer, refer to the Kubernetes
`networking documentation`_ for setup.
prefer a different network layer, refer to the Kubernetes network documentation
described in `Creating a single control-plane cluster with kubeadm`_ for setup.
Kubectl
=======
You can use kubectl to run commands against your Kubernetes cluster. Refer to
the `kubectl overview`_ for details on syntax and operations. Once you have a
the `Overview of kubectl`_ for details on syntax and operations. Once you have a
working cluster on Kubernetes, use the following YAML script to start a pod with
a simple shell script, and keep the pod open.
@@ -297,7 +302,7 @@ Kubeflow
========
Once you have Kubernetes running on your nodes, set up `Kubeflow`_ by
following these instructions from the `quick start guide`_.
following these instructions from the `Getting Started with Kubeflow`_ guide.
.. code-block:: bash
@@ -329,7 +334,7 @@ This creates the CustomResourceDefinition (CRD) endpoint to launch a TFJob.
Run a TFJob
===========
#. Select this link for the `ksonnet registries for deploying TFJobs`_.
#. Get the ksonnet registries for deploying TFJobs from `dlrs-tfjob`_.
#. Install the TFJob components as follows:
@@ -367,8 +372,8 @@ Results of running this guide
You must parse the logs of the Kubernetes pod to retrieve performance
data. The pods will still exist post-completion and will be in
Completed state. You can get the logs from any of the pods to inspect the
benchmark results. More information about `Kubernetes logging`_ is available
from the Kubernetes community.
benchmark results. More information about Kubernetes logging is available
in the Kubernetes `Logging Architecture`_ documentation.
Use Jupyter Notebook
********************
@@ -455,7 +460,9 @@ deep learning frameworks. Refer to `Jupyter Notebook`_ for details.
Uninstallation
**************
To uninstall the Deep Learning Reference Stack, you can choose to stop the container so that it is not using system resources, or you can stop the container and delete it to free storage space.
To uninstall the Deep Learning Reference Stack, you can choose to stop the
container so that it is not using system resources, or you can stop the
container and delete it to free storage space.
To stop the container, execute the following from your host system:
@@ -472,7 +479,8 @@ To stop the container, execute the following from your host system:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e131dc71d339 clearlinux/stacks-dlrs-oss "/bin/sh -c 'bash'" 23 seconds ago Up 21 seconds oss
#. You can then use the ID or container name to stop the container. This example uses the name "oss":
#. You can then use the ID or container name to stop the container. This example
uses the name "oss":
.. code-block:: bash
@@ -528,8 +536,8 @@ To stop the container, execute the following from your host system:
Related topics
**************
* Deep Learning Reference Stack `V3.0 release announcement`_
* `TensorFlow benchmarks`_
* `DLRS V3.0`_ release announcement
* `TensorFlow Benchmarks`_
* `PyTorch benchmarks`_
* `Kubeflow`_
* :ref:`kubernetes` tutorial
@@ -541,17 +549,15 @@ Related topics
.. _Docker Hub: https://hub.docker.com/
.. _TensorFlow benchmarks: https://www.tensorflow.org/guide/performance/benchmarks
.. _TensorFlow Benchmarks: https://www.tensorflow.org/guide/performance/benchmarks
.. _PyTorch benchmarks: https://github.com/pytorch/pytorch/blob/master/caffe2/python/convnet_benchmarks.py
.. _instructions for creating a cluster: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
.. _Creating a single control-plane cluster with kubeadm: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
.. _flannel: https://github.com/coreos/flannel
.. _networking documentation: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
.. _quick start guide: https://www.kubeflow.org/docs/started/getting-started/
.. _Getting Started with Kubeflow: https://www.kubeflow.org/docs/started/getting-started/
.. _Eigen: https://hub.docker.com/r/clearlinux/stacks-dlrs-oss/
@@ -563,24 +569,24 @@ Related topics
.. _Intel MKL-DNN-VNNI: https://hub.docker.com/r/clearlinux/stacks-dlrs-mkl-vnni
.. _V3.0 release announcement: https://clearlinux.org/stacks/deep-learning-reference-stack-v3
.. _DLRS V3.0: https://clearlinux.org/stacks/deep-learning-reference-stack-v3
.. _ksonnet registries for deploying TFJobs: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob
.. _dlrs-tfjob: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob
.. _Kubernetes logging: https://kubernetes.io/docs/concepts/cluster-administration/logging/
.. _Logging Architecture: https://kubernetes.io/docs/concepts/cluster-administration/logging/
.. _TensorFlow benchmark results: https://clearlinux.org/stacks/deep-learning-reference-stack
.. _TensorFlow benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack
.. _PyTorch benchmark results: https://clearlinux.org/stacks/deep-learning-reference-stack-pytorch
.. _PyTorch benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack-pytorch
.. _Jupyter Notebook: https://jupyter.org/
.. _kubectl overview: https://kubernetes.io/docs/reference/kubectl/overview/
.. _Overview of kubectl: https://kubernetes.io/docs/reference/kubectl/overview/
.. _launcher.py: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow
.. _terms of use: https://clearlinux.org/stacks/deep-learning/terms-of-use
.. _DLRS Terms of Use: https://clearlinux.org/stacks/deep-learning/terms-of-use
.. _Release notes on Github\*: https://github.com/clearlinux/dockerfiles/blob/master/stacks/dlrs/releasenote.md
.. _DLRS Release notes: https://github.com/clearlinux/dockerfiles/blob/master/stacks/dlrs/releasenote.md
.. _Intel® quantization tools: https://github.com/IntelAI/tools/blob/master/tensorflow_quantization/README.md#quantization-tools
+62 -58
View File
@@ -3,6 +3,22 @@
Enable AWS Greengrass\* and OpenVINO™ toolkit
#############################################
This guide explains how to enable AWS Greengrass\* and OpenVINO™ toolkit.
Specifically, the guide demonstrates how to:
* Set up the Intel® edge device with |CL-ATTR|
* Install the OpenVINO™ toolkit and Amazon Web Services\* (AWS\*)
Greengrass\* software stacks
* Use AWS Greengrass\* and AWS Lambda\* to deploy the FaaS samples from
the cloud
.. contents::
:local:
:depth: 1
Overview
********
Hardware accelerated Function-as-a-Service (FaaS) enables cloud developers to
deploy inference functionalities [1] on Intel® IoT edge devices with
accelerators (CPU, Integrated GPU, Intel® FPGA, and Intel® Movidius™
@@ -12,19 +28,6 @@ using a containerized environment. Hardware-accelerated FaaS provides the
best-in-class performance by accessing optimized deep learning libraries on
Intel® IoT edge devices with accelerators.
This guide demonstrates how to:
* Set up the Intel® edge device with |CL-ATTR|
* Install the OpenVINO™ toolkit and Amazon Web Services\* (AWS\*)
Greengrass\* software stacks
* Use AWS Greengrass\* and AWS Lambda\* to deploy the FaaS samples from
the cloud
Refer to the following topics:
.. contents:: :local:
:depth: 1
Supported platforms
*******************
@@ -75,8 +78,8 @@ see Greengrass user below).
useradd <userid>
passwd <userid>
#. Next, enable the :command:`sudo` command for your new ``<userid>``. Add
``<userid>`` to the *wheel* group:
#. Next, enable the :command:`sudo` command for your new <userid>. Add
<userid> to the `wheel` group:
.. code-block:: bash
@@ -120,20 +123,22 @@ There are two types of provided models that can be used in conjunction with
AWS Greengrass for this guide: classification or object detection.
To complete this guide using an image classification model,
download the BVLC AlexNet model files `bvlc_alexnet.caffemodel`_ and `deploy.prototxt`_
to the default model_location at :file:`/usr/share/openvino/models`.
Any custom pre-trained classification models can be used with the
classification sample.
download the BVLC AlexNet model files `bvlc_alexnet.caffemodel`_ and
`deploy.prototxt`_ to the default model_location at
:file:`/usr/share/openvino/models`. Any custom pre-trained classification models
can be used with the classification sample.
For object detection, the sample models optimized for Intel® edge platforms
are included with the computer-vision-basic bundle installation at :file:`/usr/share/openvino/models`.
These models are provided as an example; however, you may also use a custom SSD model
with the Greengrass object detection sample.
are included with the computer-vision-basic bundle installation at
:file:`/usr/share/openvino/models`. These models are provided as an example;
you may also use a custom SSD model with the Greengrass object detection sample.
Run model optimizer
-------------------
Follow these instructions for `converting deep learning models to Intermediate Representation using Model Optimizer`_. To optimize either of the sample models described above, run one of the following commands.
Follow the instructions in the `Model Optimizer Developer Guide`_ for converting
deep learning models to Intermediate Representation using Model Optimizer. To
optimize either of the sample models described above, run one of the following commands.
For classification using BVLC AlexNet model:
@@ -155,11 +160,11 @@ For object detection using SqueezeNetSSD-5Class model:
In these examples:
* ``<model_location>`` is :file:`/usr/share/openvino/models`.
* `<model_location>` is :file:`/usr/share/openvino/models`.
* ``<data_type>`` is FP32 or FP16, depending on target device.
* `<data_type>` is FP32 or FP16, depending on target device.
* ``<output_dir>`` is the directory where the Intermediate Representation
* `<output_dir>` is the directory where the Intermediate Representation
(IR) is stored. IR contains .xml format corresponding to the network
structure and .bin format corresponding to weights. This .xml file should be
passed to :command:`<PARAM_MODEL_XML>`.
@@ -168,7 +173,7 @@ In these examples:
batch size 10 by default. In order to use any other batch size, the
entire input shape must be provided as an argument to the model
optimizer. For example, to use batch size 1, you must provide:
``--input_shape [1,3,227,227]``
`--input_shape [1,3,227,227]`
Configure AWS Greengrass group
@@ -178,7 +183,7 @@ For each Intel® edge platform, you must create a new AWS Greengrass group
and install AWS Greengrass core software to establish the connection between
cloud and edge.
#. To create an AWS Greengrass group, follow the instructions in
#. To create an AWS Greengrass group, follow the instructions in
`Configure AWS IoT Greengrass on AWS IoT`_.
#. To install and configure AWS Greengrass core on edge platform, follow
@@ -189,7 +194,7 @@ cloud and edge.
.. note::
You do not need to run the :file:`cgroupfs-mount.sh` script in step #6
of Module 1 of the `AWS Greengrass developer guide`_ because this is
of Module 1 of the `AWS Greengrass Developer Guide`_ because this is
enabled already in |CL|.
#. Be sure to download both the security resources and the AWS Greengrass
@@ -203,7 +208,8 @@ cloud and edge.
Create and package Lambda function
**********************************
#. Complete steps 1-4 of the AWS Greengrass guide at `Create and Package a Lambda Function`_.
#. Complete steps 1-4 of the AWS Greengrass guide at
`Create and Package a Lambda Function`_.
.. note::
@@ -211,15 +217,15 @@ Create and package Lambda function
environment on the edge device.
#. In step 5, replace :file:`greengrassHelloWorld.py` with the classification or object detection
Greengrass sample from `Edge-Analytics-Faas`_:
#. In step 5, replace :file:`greengrassHelloWorld.py` with the classification or
object detection Greengrass sample from `Edge-Analytics-Faas`_:
* Classification: `greengrass_classification_sample.py`_
* Object Detection: `greengrass_object_detection_sample_ssd.py`_
#. Zip the selected Greengrass sample with the extracted Greengrass SDK folders from the previous
step into :file:`greengrass_sample_python_lambda.zip`.
#. Zip the selected Greengrass sample with the extracted Greengrass SDK folders
from the previous step into :file:`greengrass_sample_python_lambda.zip`.
The zip should contain:
@@ -234,8 +240,8 @@ Create and package Lambda function
zip -r greengrass_lambda.zip greengrasssdk
greengrass_object_detection_sample_ssd.py
#. Return to the AWS documentation section called `Create and Package a Lambda Function`_
and complete the procedure.
#. Return to the AWS documentation section called
`Create and Package a Lambda Function`_ and complete the procedure.
.. note::
@@ -253,8 +259,8 @@ Configure Lambda function
After creating the Greengrass group and the Lambda function, start
configuring the Lambda function for AWS Greengrass.
#. Follow steps 1-8 in `Configure the Lambda Function for AWS IoT Greengrass`_ in the AWS
documentation.
#. Follow steps 1-8 in `Configure the Lambda Function for AWS IoT Greengrass`_
in the AWS documentation.
#. In addition to the details mentioned in step 8, change the Memory limit
to 2048 MB to accommodate large input video streams.
@@ -298,7 +304,8 @@ configuring the Lambda function for AWS Greengrass.
Add local resources
===================
Refer to the AWS documentation for details about `local resources and access privileges`_.
Refer to the AWS documentation `Access Local Resources with Lambda Functions and Connectors`_
for details about local resources and access privileges.
The following table describes the local resources needed for the CPU:
@@ -330,9 +337,8 @@ The following table describes the local resources needed for the CPU:
Deploy Lambda function
**********************
Refer to the AWS documentation for instructions on how to
`deploy the lambda function to AWS Greengrass core device`_. Select
*Deployments* on the group page and follow the instructions.
Refer to the AWS documentation `Deploy Cloud Configurations to an AWS IoT Greengrass Core Device`_ for instructions on how to deploy the lambda function to AWS
Greengrass core device. Select *Deployments* on the group page and follow the instructions.
Output consumption
==================
@@ -341,7 +347,7 @@ There are four options available for output consumption. These options are
used to report, stream, upload, or store inference output at an interval
defined by the variable :command:`reporting_interval` in the AWS Greengrass samples.
a. IoT cloud output:
#. IoT cloud output:
This option is enabled by default in the AWS Greengrass samples using the
:command:`enable_iot_cloud_output` variable. You can use it to verify the lambda
@@ -353,9 +359,11 @@ a. IoT cloud output:
results such as bounding box coordinates of objects, class label, and
class confidence are published.
Follow the instructions here to `view the output on IoT cloud`_.
Refer to the AWS documentation
`Verify the Lambda Function Is Running on the Device`_ for instructions on
how to view the output on IoT cloud.
b. Kinesis streaming:
#. Kinesis streaming:
This option enables inference output to be streamed from the edge device
to cloud using Kinesis [3] streams when :command:`enable_kinesis_output` is set
@@ -364,7 +372,7 @@ b. Kinesis streaming:
Kinesis stream name, Kinesis shard, and AWS region in the AWS Greengrass
samples.
c. Cloud storage using AWS S3 bucket:
#. Cloud storage using AWS S3 bucket:
When the :command:`enable_s3_jpeg_output` variable is set to True, it enables
uploading and storing processed frames (in jpeg format) in an AWS S3
@@ -372,7 +380,7 @@ c. Cloud storage using AWS S3 bucket:
Greengrass samples to store the JPEG images. The images are named using the
timestamp and uploaded to S3.
d. Local storage:
#. Local storage:
When the :command:`enable_s3_jpeg_output` variable is set to True, it enables
storing processed frames (in jpeg format) on the edge device. The images
@@ -382,9 +390,9 @@ d. Local storage:
References
**********
1. AWS Greengrass: https://aws.amazon.com/greengrass/
2. AWS Lambda: https://aws.amazon.com/lambda/
3. AWS Kinesis: https://aws.amazon.com/kinesis/
#. AWS Greengrass: https://aws.amazon.com/greengrass/
#. AWS Lambda: https://aws.amazon.com/lambda/
#. AWS Kinesis: https://aws.amazon.com/kinesis/
.. _Edge-Analytics-FaaS: https://github.com/intel/Edge-Analytics-FaaS/tree/v1.0/AWS%20Greengrass
@@ -396,7 +404,7 @@ References
.. _greengrass_object_detection_sample_ssd.py: https://github.com/intel/Edge-Analytics-FaaS/blob/v1.0/AWS%20Greengrass/greengrass_object_detection_sample_ssd.py
.. _converting deep learning models to Intermediate Representation using Model Optimizer: https://software.intel.com/en-us/articles/OpenVINO-ModelOptimizer
.. _Model Optimizer Developer Guide: https://software.intel.com/en-us/articles/OpenVINO-ModelOptimizer
.. _AWS Greengrass Developer Guide: https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html
@@ -406,14 +414,10 @@ References
.. _Configure the Lambda Function for AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/config-lambda.html
.. _local resources and access privileges: https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html
.. _Access Local Resources with Lambda Functions and Connectors: https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html
.. _deploy the lambda function to AWS Greengrass core device: https://docs.aws.amazon.com/greengrass/latest/developerguide/configs-core.html
.. _Deploy Cloud Configurations to an AWS IoT Greengrass Core Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/configs-core.html
.. _Edge-optmized models repository: https://github.com/intel/Edge-optimized-models
.. _view the output on IoT cloud: https://docs.aws.amazon.com/greengrass/latest/developerguide/lambda-check.html
.. _this link to add local resources and access privileges: https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html
.. _Verify the Lambda Function Is Running on the Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/lambda-check.html
.. _Create and Package a Lambda Function: https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html
+97 -81
View File
@@ -3,10 +3,10 @@
mixer
#####
**mixer** is the tool used by the |CL-ATTR| team to generate official update content
and releases. The update content generated by mixer is then consumed by swupd on
a downstream client. The same mixer tool is available as part of |CL| to create
your own customized update content and releases.
**mixer** is the tool used by the |CL-ATTR| team to generate official update
content and releases. The update content generated by mixer is then consumed
by swupd on a downstream client. The same mixer tool is available as part of
|CL| to create your own customized update content and releases.
.. contents::
:local:
@@ -21,19 +21,12 @@ mixer uses the following sources as inputs to generate update content:
* Locally-defined bundles with their corresponding local RPM packages
* Locally-defined bundles with upstream RPM packages
Using the mixer tool, you select which set of content from these sources will be
part of your update. You can select content from each of these sources to make a
unique combination of functionality for your custom update content, known as a
**mix**.
Using the mixer tool, you select which set of content from these sources
will be part of your update. You can select content from each of these sources to make a unique combination of functionality for your custom update content, known as a **mix**.
The update content that mixer generates consists of various pieces of OS
content, update metadata, as well as a complete image. The OS content includes
all files in an update, as well as zero- and delta-packs for improved update
performance. The update metadata, stored as manifests, describes all of the bundle
information for the update. Update content produced by mixer is then published
to a web server and consumed by clients via swupd. Refer to
:ref:`swupd <swupd-guide>` for additional information regarding updates and
update content.
content, update metadata, as well as a complete image. The OS content
includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to :ref:`swupd <swupd-guide>` for additional information regarding updates and update content.
How it works
************
@@ -67,7 +60,7 @@ Prerequisites
If you use a proxy server, you must set your proxy environment variables and
create a proxy configuration file for the Docker daemon and container.
Consult your IT department for the correct values if you are behind a
Consult your IT department for the correct values if you are behind a
corporate proxy.
Refer to `Configure Docker proxy info`_ for instruction.
@@ -232,8 +225,6 @@ mixer for a new mix.
CONTENTURL="http://192.168.25.52"
VERSIONURL="http://192.168.25.52"
Example 2: Create a simple mix
==============================
@@ -253,6 +244,27 @@ set to get a smaller kernel image, which will also be faster to load.
mixer bundle remove kernel-native
mixer bundle add kernel-kvm
#. In this case, we will add the `editors` bundle from upstream, but we will
remove the `joe` editor.
.. code-block:: bash
mixer bundle add editors
mixer bundle edit editors
#. Use an editor and manually remove `joe` from the bundle definition.
.. code-block:: bash
$EDITOR ./local-bundles/editors
#. List the bundles in the mix again to confirm removal.
.. code-block:: bash
mixer bundle list --tree
#. Build bundles:
.. code-block:: bash
@@ -343,8 +355,8 @@ Example 3: Deploy updates to target
===================================
The image created in Example 2 is directly bootable in QEMU. In this example,
we'll boot the image from Example 2 to verify it, and update the image from mix
version 10 (from which the image was built), to mix version 20.
we'll boot the image from Example 2 to verify it, and update the image from
mix version 10 (from which the image was built), to mix version 20.
#. Set up the QEMU environment.
@@ -381,13 +393,17 @@ version 10 (from which the image was built), to mix version 20.
swupd bundle-list
swupd bundle-list -a
.. note::
You cannot see the curl bundle that you added in Example 2 because
your mix is still on version 10.
#. Now we will add the `editors` bundle that we modified.
Check for updates. You should see that version 20 is available. Use swupd to
update your mix:
.. code-block:: bash
swupd bundle add editors
#. Try to start the `joe` editor. It should not appear because we removed it
from the original `editors` bundle.
#. Next we will update from version 10 to 20 to capture the newly
available bundles. Use :command:`swupd` to update your mix:
.. code-block:: bash
@@ -395,7 +411,7 @@ version 10 (from which the image was built), to mix version 20.
swupd update
swupd bundle-list -a
Now your mix should be at version 20 and curl is now available. Try using
#. Now your mix should be at version 20 and curl is now available. Try using
curl. This will fail because curl is not yet installed:
.. code-block:: console
@@ -416,6 +432,7 @@ version 10 (from which the image was built), to mix version 20.
poweroff
.. Example: Create a mix with custom RPM
.. -------------------------------------
.. TODO future example to show copy into local-rpms...
@@ -538,30 +555,34 @@ Format version
Compatible versions of an OS are tracked with an OS *compatibility epoch*.
Versions of an OS within an epoch are fully compatible and can update to any
other version within that epoch. The compatibility epoch is set as the `Format`
variable in the :file:`mixer.state` file. Variables in the :file:`mixer.state`
are used by mixer between executions and should not be manually changed.
other version within that epoch. The compatibility epoch is set as the
`Format` variable in the :file:`mixer.state` file. Variables in the
:file:`mixer.state` are used by mixer between executions and should not be
manually changed.
If `Format` increments to a new epoch (a "format bump"), the OS has changed in
such a way that updating from build M in format X to build N in format Y will
not work. Generally, this scenario occurs when the software updater or the software
has a change such that it is no longer compatible with the previous update
scheme, or when a package is removed from the update stream and the update
must ensure the files associated with that package are removed from the system.
A format bump is like modifying the foundation of a house to create a new
level. If `Format` increments to a new epoch (a "format bump"), the OS has
changed in such a way that updating from build A in format X to build B in
format Y will not work.
A format bump is required when:
* The software updater, :command:`swupd`, or the software is no longer
compatible with the previous update scheme
* A package is removed from the update stream and the update must ensure the
files associated with that package are removed from the system
Using a format increment, we make sure pre- and co-requisite changes flow out
with proper ordering. The updated client will only update to the latest
release in its respective format version, unless overridden by command line
flags. In this way, we can guarantee that all clients update to the final version
in their given format.
flags. In this way, we can guarantee that all clients update to the final
version in their given format.
The given format *must* contain all the changes needed to understand the content
built in the next format. Only after reaching the final release in the old
format can a client continue to update to releases in the new format.
The given format *must* contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format.
The format version is incremented only when a compatibility breakage is
introduced. Normal updates, such as updating a software package, do not require a
format increment.
introduced. Normal updates, such as updating a software package, do not require a format increment.
.. rst-class:: content-collapse
@@ -569,44 +590,41 @@ Bundles
=======
mixer stores information about the bundles included in a mix in a flat file
called :file:`mixbundles`, which is located in the path set by the VERSIONS_PATH
variable in :file:`builder.conf`. :file:`mixbundles` is automatically created
when the mix is initiated. mixer will refresh the file each time you change the
bundles in the mix.
called :file:`mixbundles`, which is located in the path set by the VERSIONS_PATH variable in :file:`builder.conf`. :file:`mixbundles` is automatically created when the mix is initiated. mixer will refresh the file each time you change the bundles in the mix.
Bundles can include other bundles. Nested bundles can themselves include other
bundles. If you see an unexpected bundle in your mix, it is likely a nested
bundle in one of the bundles you explicitly added.
Bundles can include other bundles. Nested bundles can themselves include
other bundles. If you see an unexpected bundle in your mix, it is likely a
nested bundle in one of the bundles you explicitly added.
A bundle will fill into one of two categories: upstream or local. Upstream
bundles are those provided by |CL|. Local bundles are either modified upstream
bundles or new local bundles.
bundles are those provided by |CL|. Local bundles are either modified upstream bundles or new local bundles.
Upstream bundles
----------------
mixer automatically downloads and caches upstream bundle definition files. These
definition files are stored in the upstream-bundles directory in the workspace.
Do not modify the files in this directory. This directory is simply a mirror for
mixer to use. mixer will automatically delete the contents of this directory
before repopulating it on-the-fly if a new version must be downloaded.
mixer automatically downloads and caches upstream bundle definition files.
These definition files are stored in the upstream-bundles directory in the
workspace. Do not modify the files in this directory. This directory is
simply a mirror for mixer to use. mixer will automatically delete the
contents of this directory before repopulating it on-the-fly if a new
version must be downloaded.
The mixer tool automatically caches the bundles for the |CL| version configured
in the :file:`upstreamversion` file. mixer also cleans up old versions once they
are no longer needed.
The mixer tool automatically caches the bundles for the |CL| version
configured in the :file:`upstreamversion` file. mixer also cleans up old
versions once they are no longer needed.
Local bundles
-------------
Local bundles are bundles that you create, or are edited versions of upstream
bundles. Local bundle definition files are stored in the local-bundles directory
in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory
in the :file:`builder.conf` file.
bundles. Local bundle definition files are stored in the local-bundles
directory in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory in the :file:`builder.conf` file.
*mixer always checks for local bundles first and the upstream bundles second.*
So bundles in the local-bundles directory will always take precedence over any
upstream bundles that have the same name. This precedence enables you to copy
upstream bundles locally, and edit into a local variation.
*mixer always checks for local bundles first and the upstream bundles
second.* So bundles in the local-bundles directory will always take
precedence over any upstream bundles that have the same name. This
precedence enables you to copy upstream bundles locally, and edit into a
local variation.
Bundle configuration
--------------------
@@ -622,13 +640,11 @@ file in your favorite editor, making the desired edits, and saving your changes.
.. note::
Removing bundles from a mix: By default, removing a bundle will only
remove the bundle from the mix. The local bundle definition file will still
remain. To completely remove a bundle, including its local bundle definition
file, use the :command:`--local` flag.
remove the bundle from the mix. The local bundle definition file will
still remain. To completely remove a bundle, including its local bundle definition file, use the :command:`--local` flag.
If you remove the bundle definition file for a local, edited version of an
upstream bundle in a mix, the mix reverts to reference the original upstream
version of the bundle.
upstream bundle in a mix, the mix reverts to reference the original upstream version of the bundle.
.. rst-class:: content-collapse
@@ -656,8 +672,8 @@ Pull Docker container manually (optional)
-----------------------------------------
By default, mixer automatically pulls a Docker container for mixing if one
does not already exist. If you need to troubleshoot the mixer container, it may
be useful to manually pull a mixer Docker container.
does not already exist. If you need to troubleshoot the mixer container, it
may be useful to manually pull a mixer Docker container.
Versions of the mixer Docker container are available under the tags for the
`clearlinux/mixer repo <https://hub.docker.com/r/clearlinux/mixer/tags/>`_
@@ -695,7 +711,7 @@ If needed, use these steps to configure the Docker proxy information.
.. code-block:: bash
sudo mkdir -p /etc/systemd/system/docker.service.d
#. Create :file:`/etc/systemd/system/docker.service.d/http-proxy.conf` and
add the following using your own proxy values:
@@ -711,7 +727,7 @@ If needed, use these steps to configure the Docker proxy information.
sudo systemctl daemon-reload
Configure the Docker container proxies, to pass proxy settings to
Configure the Docker container proxies, to pass proxy settings to
containers:
#. Create a directory for your container config:
@@ -764,8 +780,8 @@ a firewall.
Set up a nginx web server for mixer
===================================
A web server is needed to host your update content. In this example, we use the
nginx web server, which comes with |CL|.
A web server is needed to host your update content. In this example, we use
the nginx web server, which comes with |CL|.
Set up a nginx web server for mixer with the following steps:
@@ -781,9 +797,9 @@ Set up a nginx web server for mixer with the following steps:
sudo mkdir -p /var/www
#. Create a symbolic link between your workspace updates and the updates on the
local nginx web server. In this example, `$HOME/mixer` is the workspace for
the mix.
#. Create a symbolic link between your workspace updates and the updates on
the local nginx web server. In this example, `$HOME/mixer` is the
workspace for the mix.
.. code-block:: bash