Conector de classificação de imagem do ML - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conector de classificação de imagem do ML

Atenção

Esse conector passou para a fase de vida útil estendida e AWS IoT Greengrass não lançará atualizações que forneçam atributos, aprimoramentos para atributos existentes, patches de segurança ou correções de erros. Para obter mais informações, consulte Política de manutenção do AWS IoT Greengrass Version 1.

Os conectores ML Image Classification fornecem um serviço de inferência de aprendizado de máquina (ML) executado no AWS IoT Greengrass núcleo. Esse serviço de inferência local realiza a classificação de imagens usando um modelo treinado pelo algoritmo de classificação de imagens de SageMaker IA.

As funções Lambda definidas pelo usuário usam o Machine AWS IoT Greengrass Learning SDK para enviar solicitações de inferência ao serviço de inferência local. O serviço executa inferência localmente e retorna probabilidades de a imagem de entrada pertencer às categorias específicas.

AWS IoT Greengrass fornece as seguintes versões desse conector, que está disponível para várias plataformas.

Version 2

Conector

Descrição e ARN

Classificação de imagens ML Aarch64 JTX2

Serviço de inferência de classificação de imagens para NVIDIA Jetson. TX2 Compatível com a aceleração de GPU.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2

Classificação de imagens do ML x86_64

Serviço de inferência de classificação de imagem para plataformas x86_64.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/2

Classificação de imagens de ML ARMv7

Serviço de inferência de classificação de imagens para ARMv7 plataformas.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2

Version 1

Conector

Descrição e ARN

Classificação de imagens ML Aarch64 JTX2

Serviço de inferência de classificação de imagens para NVIDIA Jetson. TX2 Compatível com a aceleração de GPU.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/1

Classificação de imagens do ML x86_64

Serviço de inferência de classificação de imagem para plataformas x86_64.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/1

Classificação de imagens do ML Armv7

Serviço de inferência de classificação de imagem para plataformas Armv7.

ARN: arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/1

Para obter informações sobre alterações de versão, consulte o Changelog.

Requisitos

Esses conectores têm os seguintes requisitos:

Version 2
  • AWS IoT Greengrass Core Software v1.9.3 ou posterior.

  • Python, versão 3.7 ou 3.8, instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.

    nota

    Para usar o Python 3.8, execute o comando a seguir para criar um symblink da pasta de instalação padrão do Python 3.7 para os binários instalados do Python 3.8.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Isso configura seu dispositivo para atender ao requisito Python para AWS IoT Greengrass.

  • Dependências da MXNet estrutura Apache instalada no dispositivo principal. Para obter mais informações, consulte Instalando MXNet dependências no núcleo AWS IoT Greengrass.

  • Um recurso de ML no grupo Greengrass que faz referência a uma fonte de modelo de SageMaker IA. Esse modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA. Para obter mais informações, consulte Algoritmo de classificação de imagens no Amazon SageMaker AI Developer Guide.

  • O conector de feedback do ML adicionado ao grupo do Greengrass e configurado. Isso será necessário somente se você quiser usar o conector para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.

  • A função de grupo do Greengrass configurada para permitir a ação sagemaker:DescribeTrainingJob no trabalho de treinamento de destino, conforme mostrado no seguinte exemplo de política do IAM.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeTrainingJob" ], "Resource": "arn:aws:sagemaker:region:account-id:training-job:training-job-name" } ] }

    Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).

    Você pode conceder acesso granular ou condicional aos recursos (por exemplo, usando um esquema de nomeação * curinga). Se você alterar o trabalho de treinamento de destino no futuro, certifique-se de atualizar a função do grupo, conforme necessário.

  • AWS IoT Greengrass O Machine Learning SDK v1.1.0 é necessário para interagir com esse conector.

Version 1
  • AWS IoT Greengrass Core Software v1.7 ou posterior.

  • Python versão 2.7 instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.

  • Dependências da MXNet estrutura Apache instalada no dispositivo principal. Para obter mais informações, consulte Instalando MXNet dependências no núcleo AWS IoT Greengrass.

  • Um recurso de ML no grupo Greengrass que faz referência a uma fonte de modelo de SageMaker IA. Esse modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA. Para obter mais informações, consulte Algoritmo de classificação de imagens no Amazon SageMaker AI Developer Guide.

  • A função de grupo do Greengrass configurada para permitir a ação sagemaker:DescribeTrainingJob no trabalho de treinamento de destino, conforme mostrado no seguinte exemplo de política do IAM.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeTrainingJob" ], "Resource": "arn:aws:sagemaker:region:account-id:training-job:training-job-name" } ] }

    Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).

    Você pode conceder acesso granular ou condicional aos recursos (por exemplo, usando um esquema de nomeação * curinga). Se você alterar o trabalho de treinamento de destino no futuro, certifique-se de atualizar a função do grupo, conforme necessário.

  • AWS IoT Greengrass O Machine Learning SDK v1.0.0 ou posterior é necessário para interagir com esse conector.

Parâmetros do conector

Esses conectores fornecem os parâmetros a seguir.

Version 2
MLModelDestinationPath

O caminho local absoluto do recurso do ML dentro do ambiente do Lambda. Esse é o caminho de destino especificado para o recurso de ML.

nota

Se você criou o recurso de ML no console, este é o caminho local.

Nome de exibição no AWS IoT console: caminho de destino do modelo

Obrigatório: true

Digite: string

Padrão válido: .+

MLModelResourceId

O ID do recurso de ML que faz referência ao modelo de origem.

Nome de exibição no AWS IoT console: recurso ARN do SageMaker job

Obrigatório: true

Digite: string

Padrão válido: [a-zA-Z0-9:_-]+

MLModelSageMakerJobArn

O ARN do trabalho de treinamento de SageMaker IA que representa a fonte do modelo de SageMaker IA. O modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA.

Nome de exibição no AWS IoT console: SageMaker job ARN

Obrigatório: true

Digite: string

Padrão válido: ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$

LocalInferenceServiceName

O nome para o serviço de inferência local. As funções Lambda definidas pelo usuário invocam o serviço passando o nome para a função do SDK invoke_inference_service do Machine AWS IoT Greengrass Learning. Para obter um exemplo, consulte Exemplo de uso.

Nome de exibição no AWS IoT console: nome do serviço de inferência local

Obrigatório: true

Digite: string

Padrão válido: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}

LocalInferenceServiceTimeoutSeconds

O tempo (em segundos) até que a solicitação de inferência seja encerrada. O valor mínimo é 1.

Nome de exibição no AWS IoT console: Tempo limite (segundo)

Obrigatório: true

Digite: string

Padrão válido: [1-9][0-9]*

LocalInferenceServiceMemoryLimitKB

A quantidade de memória (em KB) que o serviço tem acesso. O valor mínimo é 1.

Nome de exibição no AWS IoT console: limite de memória (KB)

Obrigatório: true

Digite: string

Padrão válido: [1-9][0-9]*

GPUAcceleration

O contexto de computação CPU ou GPU (acelerada). Essa propriedade se aplica somente ao JTX2 conector ML Image Classification Aarch64.

Nome de exibição no AWS IoT console: aceleração de GPU

Obrigatório: true

Digite: string

Valores válidos: CPU ou GPU

MLFeedbackConnectorConfigId

O ID da configuração de feedback a ser usada para fazer upload dos dados de entrada do modelo. Ele deve corresponder ao ID de uma configuração de feedback definida para o conector ML Feedback.

Esse parâmetro é necessário somente se você quiser usar o conector ML Feedback para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.

Nome de exibição no AWS IoT console: ID de configuração do conector ML Feedback

Obrigatório: false

Digite: string

Padrão válido: ^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Version 1
MLModelDestinationPath

O caminho local absoluto do recurso do ML dentro do ambiente do Lambda. Esse é o caminho de destino especificado para o recurso de ML.

nota

Se você criou o recurso de ML no console, este é o caminho local.

Nome de exibição no AWS IoT console: caminho de destino do modelo

Obrigatório: true

Digite: string

Padrão válido: .+

MLModelResourceId

O ID do recurso de ML que faz referência ao modelo de origem.

Nome de exibição no AWS IoT console: recurso ARN do SageMaker job

Obrigatório: true

Digite: string

Padrão válido: [a-zA-Z0-9:_-]+

MLModelSageMakerJobArn

O ARN do trabalho de treinamento de SageMaker IA que representa a fonte do modelo de SageMaker IA. O modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA.

Nome de exibição no AWS IoT console: SageMaker job ARN

Obrigatório: true

Digite: string

Padrão válido: ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$

LocalInferenceServiceName

O nome para o serviço de inferência local. As funções Lambda definidas pelo usuário invocam o serviço passando o nome para a função do SDK invoke_inference_service do Machine AWS IoT Greengrass Learning. Para obter um exemplo, consulte Exemplo de uso.

Nome de exibição no AWS IoT console: nome do serviço de inferência local

Obrigatório: true

Digite: string

Padrão válido: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}

LocalInferenceServiceTimeoutSeconds

O tempo (em segundos) até que a solicitação de inferência seja encerrada. O valor mínimo é 1.

Nome de exibição no AWS IoT console: Tempo limite (segundo)

Obrigatório: true

Digite: string

Padrão válido: [1-9][0-9]*

LocalInferenceServiceMemoryLimitKB

A quantidade de memória (em KB) que o serviço tem acesso. O valor mínimo é 1.

Nome de exibição no AWS IoT console: limite de memória (KB)

Obrigatório: true

Digite: string

Padrão válido: [1-9][0-9]*

GPUAcceleration

O contexto de computação CPU ou GPU (acelerada). Essa propriedade se aplica somente ao JTX2 conector ML Image Classification Aarch64.

Nome de exibição no AWS IoT console: aceleração de GPU

Obrigatório: true

Digite: string

Valores válidos: CPU ou GPU

Exemplo de criação de conector (AWS CLI)

Os seguintes comandos da CLI criam um ConnectorDefinition com uma versão inicial que contém um conector de classificação de imagem do ML.

Exemplo: instância de CPU

Este exemplo cria uma instância do conector Armv7l de classificação de imagem do ML.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }'
Exemplo: instância de GPU

Este exemplo cria uma instância do JTX2 conector ML Image Classification Aarch64, que suporta aceleração de GPU em uma placa NVIDIA Jetson. TX2

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "GPUAcceleration": "GPU", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }'
nota

A função do Lambda nesses conectores tem um ciclo de vida longo.

No AWS IoT Greengrass console, você pode adicionar um conector na página Conectores do grupo. Para obter mais informações, consulte Conceitos básicos de conectores do Greengrass (console).

Dados de entrada

Esses conectores aceitam um arquivo de imagem como entrada. Os arquivos de imagem de entrada devem estar no formato jpeg ou png. Para obter mais informações, consulte Exemplo de uso.

Esses conectores não aceitam mensagens MQTT como dados de entrada.

Dados de saída

Esses conectores retornam uma previsão formatada para o objeto identificado na imagem de entrada:

[0.3,0.1,0.04,...]

A previsão contém uma lista de valores que correspondem às categorias usadas no conjunto de dados de treinamento durante o treinamento do modelo. Cada valor representa a probabilidade de a imagem ficar na categoria correspondente. A categoria com a probabilidade mais alta é a previsão dominante.

Esses conectores não publicam mensagens MQTT como dados de saída.

Exemplo de uso

O exemplo de função do Lambda a seguir usa o SDK AWS IoT Greengrass de Machine Learning para interagir com um conector de classificação de imagem do ML.

nota

Você pode baixar o SDK na página de downloads do ‭AWS IoT Greengrass ‬SDK de Machine Learning‭.

O exemplo inicializa um cliente do SDK e de forma síncrona chama a função invoke_inference_service do SDK para invocar o serviço de inferência local. Ela passa o tipo de algoritmo, o nome do serviço, o tipo de imagem e o conteúdo da imagem. Em seguida, o exemplo analisa a resposta do serviço para obter os resultados de probabilidade (previsões).

Python 3.7
import logging from threading import Timer import numpy as np import greengrass_machine_learning_sdk as ml # We assume the inference input image is provided as a local file # to this inference client Lambda function. with open('/test_img/test.jpg', 'rb') as f: content = bytearray(f.read()) client = ml.client('inference') def infer(): logging.info('invoking Greengrass ML Inference service') try: resp = client.invoke_inference_service( AlgoType='image-classification', ServiceName='imageClassification', ContentType='image/jpeg', Body=content ) except ml.GreengrassInferenceException as e: logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e)) return except ml.GreengrassDependencyException as e: logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e)) return logging.info('resp: {}'.format(resp)) predictions = resp['Body'].read().decode("utf-8") logging.info('predictions: {}'.format(predictions)) # The connector output is in the format: [0.3,0.1,0.04,...] # Remove the '[' and ']' at the beginning and end. predictions = predictions[1:-1] count = len(predictions.split(',')) predictions_arr = np.fromstring(predictions, count=count, sep=',') # Perform business logic that relies on the predictions_arr, which is an array # of probabilities. # Schedule the infer() function to run again in one second. Timer(1, infer).start() return infer() def function_handler(event, context): return
Python 2.7
import logging from threading import Timer import numpy import greengrass_machine_learning_sdk as gg_ml # The inference input image. with open("/test_img/test.jpg", "rb") as f: content = f.read() client = gg_ml.client("inference") def infer(): logging.info("Invoking Greengrass ML Inference service") try: resp = client.invoke_inference_service( AlgoType="image-classification", ServiceName="imageClassification", ContentType="image/jpeg", Body=content, ) except gg_ml.GreengrassInferenceException as e: logging.info('Inference exception %s("%s")', e.__class__.__name__, e) return except gg_ml.GreengrassDependencyException as e: logging.info('Dependency exception %s("%s")', e.__class__.__name__, e) return logging.info("Response: %s", resp) predictions = resp["Body"].read() logging.info("Predictions: %s", predictions) # The connector output is in the format: [0.3,0.1,0.04,...] # Remove the '[' and ']' at the beginning and end. predictions = predictions[1:-1] predictions_arr = numpy.fromstring(predictions, sep=",") logging.info("Split into %s predictions.", len(predictions_arr)) # Perform business logic that relies on predictions_arr, which is an array # of probabilities. # Schedule the infer() function to run again in one second. Timer(1, infer).start() infer() # In this example, the required AWS Lambda handler is never called. def function_handler(event, context): return

A invoke_inference_service função no SDK do AWS IoT Greengrass Machine Learning aceita os seguintes argumentos.

Argumento

Descrição

AlgoType

O nome do tipo de algoritmo a ser usado para inferência. No momento, só há compatibilidade com image-classification.

Obrigatório: true

Digite: string

Valores válidos: image-classification

ServiceName

O nome do serviço de inferência local. Use o nome que você especificou para o parâmetro LocalInferenceServiceName quando você configurou o conector.

Obrigatório: true

Digite: string

ContentType

O tipo de mime da imagem de entrada.

Obrigatório: true

Digite: string

Valores válidos: image/jpeg, image/png

Body

O conteúdo do arquivo de imagem de entrada.

Obrigatório: true

Digite: binary

Instalando MXNet dependências no núcleo AWS IoT Greengrass

Para usar um conector ML Image Classification, você deve instalar as dependências da MXNet estrutura Apache no dispositivo principal. Os conectores usam a estrutura para fornecer o modelo de ML.

nota

Esses conectores são fornecidos com uma MXNet biblioteca pré-compilada, portanto, você não precisa instalar a MXNet estrutura no dispositivo principal.

AWS IoT Greengrass fornece scripts para instalar as dependências das seguintes plataformas e dispositivos comuns (ou para usar como referência para instalá-los). Se você estiver usando uma plataforma ou dispositivo diferente, consulte a MXNet documentação da sua configuração.

Antes de instalar as MXNet dependências, verifique se as bibliotecas do sistema necessárias (com as versões mínimas especificadas) estão presentes no dispositivo.

NVIDIA Jetson TX2
  1. Instale CUDA Toolkit 9.0 e cuDNN 7.0. Você pode seguir as instruções em Configurar outros dispositivos no tutorial Conceitos básicos.

  2. Habilite repositórios universe para que o conector possa instalar softwares livres mantidos pela comunidade. Para obter mais informações, consulte Repositórios/Ubuntu na documentação do Ubuntu.

    1. Abra o arquivo /etc/apt/sources.list.

    2. Certifique-se de que as seguintes linhas permaneçam sem comentário.

      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
  3. Salve uma cópia do script de instalação a seguir em um arquivo denominado nvidiajtx2.sh no dispositivo de núcleo.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    nota

    Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev echo 'Install latest pip...' wget https://bootstrap.pypa.io/get-pip.py python get-pip.py rm get-pip.py pip install numpy==1.15.0 scipy echo 'Dependency installation/upgrade complete.'
  4. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. Salve uma cópia do script de instalação a seguir em um arquivo denominado x86_64.sh no dispositivo de núcleo.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." release=$(awk -F= '/^NAME/{print $2}' /etc/os-release) if [ "$release" == '"Ubuntu"' ]; then # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so # this is mostly to prepare dependencies on Ubuntu EC2 instance. apt-get -y update apt-get -y dist-upgrade apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 apt-get install -y python3.7 python3.7-dev elif [ "$release" == '"Amazon Linux"' ]; then # Amazon Linux. Expect python to be installed already yum -y update yum -y upgrade yum install -y compat-gcc-48-libgfortran libSM libXrender libXext else echo "OS Release not supported: $release" exit 1 fi python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    nota

    Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." release=$(awk -F= '/^NAME/{print $2}' /etc/os-release) if [ "$release" == '"Ubuntu"' ]; then # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so # this is mostly to prepare dependencies on Ubuntu EC2 instance. apt-get -y update apt-get -y dist-upgrade apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip elif [ "$release" == '"Amazon Linux"' ]; then # Amazon Linux. Expect python to be installed already yum -y update yum -y upgrade yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip else echo "OS Release not supported: $release" exit 1 fi pip install numpy==1.15.0 scipy opencv-python echo 'Dependency installation/upgrade complete.'
  2. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo x86_64.sh
Armv7 (Raspberry Pi)
  1. Salve uma cópia do script de instalação a seguir em um arquivo denominado armv7l.sh no dispositivo de núcleo.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." apt-get update apt-get -y upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    nota

    Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." apt-get update apt-get -y upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev # python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2 # This script installs python-numpy first so that python-opencv can be installed, and then install the latest # numpy-1.15.x with pip apt-get install -y python-numpy python-opencv dpkg --remove --force-depends python-numpy echo 'Install latest pip...' wget https://bootstrap.pypa.io/get-pip.py python get-pip.py rm get-pip.py pip install --upgrade numpy==1.15.0 picamera scipy echo 'Dependency installation/upgrade complete.'
  2. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo bash armv7l.sh
    nota

    Em um Raspberry Pi, usar o pip para instalar dependências de machine learning é uma operação com uso intensivo de memória que pode fazer com que o dispositivo fique sem memória e deixe de responder. Como alternativa, você pode aumentar temporariamente o tamanho da permuta:

    Em /etc/dphys-swapfile, aumente o valor da variável CONF_SWAPSIZE e, em seguida, execute o seguinte comando para reiniciar dphys-swapfile.

    /etc/init.d/dphys-swapfile restart

Registro em log e solução de problemas

Dependendo das configurações do seu grupo, os registros de eventos e erros são gravados CloudWatch nos Registros, no sistema de arquivos local ou em ambos. Os logs desse conector usam o prefixo LocalInferenceServiceName. Se o conector se comportar de forma inesperada, verifique os logs do conector. Normalmente, eles contêm informações úteis de depuração, como uma dependência de biblioteca de ML ausente ou a causa de uma falha de startup do conector.

Se o AWS IoT Greengrass grupo estiver configurado para gravar registros locais, o conector grava arquivos de log emgreengrass-root/ggc/var/log/user/region/aws/. Para obter mais informações sobre o registro em log do Greengrass, consulte Monitoramento com logs do AWS IoT Greengrass.

Use as informações a seguir para ajudar a solucionar os problemas com os conectores de classificação de imagem do ML.

Bibliotecas do sistema necessárias

As guias a seguir listam as bibliotecas do sistema necessárias para cada conector de classificação de imagem do ML.

ML Image Classification Aarch64 JTX2
Biblioteca Versão mínima
ld-linux-aarch64.so.1GLIBC_2.17
libc.so.6GLIBC_2.17
libcublas.so.9.0não aplicável
libcudart.so.9.0não aplicável
libcudnn.so.7não aplicável
libcufft.so.9.0não aplicável
libcurand.so.9.0não aplicável
libcusolver.so.9.0não aplicável
libgcc_s.so.1GCC_4.2.0
libgomp.so.1GOMP_4.0, OMP_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.17
librt.so.1GLIBC_2.17
libstdc++.so.6GLIBCXX_3.4.21, CXXABI_1.3.8
ML Image Classification x86_64
Biblioteca Versão mínima
ld-linux-x86-64.so.2GCC_4.0.0
libc.so.6GLIBC_2.4
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.2.5
librt.so.1GLIBC_2.2.5
libstdc++.so.6CXXABI_1.3.8, GLIBCXX_3.4.21
ML Image Classification Armv7
Biblioteca Versão mínima
ld-linux-armhf.so.3GLIBC_2.4
libc.so.6GLIBC_2.7
libgcc_s.so.1GCC_4.0.0
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.4
libpthread.so.0GLIBC_2.4
librt.so.1GLIBC_2.4
libstdc++.so.6CXXABI_1.3.8, CXXABI_ARM_1.3.3, GLIBCXX_3.4.20

Problemas

Sintomas Solução

Em um Raspberry Pi, a mensagem de erro a seguir será registrada em log e você não está usando a câmera: Failed to initialize libdc1394

Execute o comando a seguir para desabilitar o driver:

sudo ln /dev/null /dev/raw1394

Essa operação é temporária e o symblink desaparecerá após a reinicialização. Consulte o manual de distribuição do seu sistema operacional para saber como criar automaticamente o link na reinicialização.

Licenças

Os conector de classificação de imagem do ML incluem o seguinte licenciamento/software de terceiros:

Licenciamento da Intel OpenMP Runtime Library. O runtime Intel® OpenMP* tem licença dupla, com uma licença comercial (COM) como parte dos produtos Intel® Parallel Studio XE Suite e uma licença de código aberto (OSS) BSD.

Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core.

Changelog

A tabela a seguir descreve as alterações em cada versão do conector.

Versão

Alterações

2

Foi adicionado o MLFeedbackConnectorConfigId parâmetro para suportar o uso do conector ML Feedback para carregar dados de entrada do modelo, publicar previsões em um tópico do MQTT e publicar métricas na Amazon. CloudWatch

1

Versão inicial.

Um grupo do Greengrass só pode conter uma versão do conector por vez. Para obter informações sobre como fazer upgrade de uma versão do conector, consulte Atualizar a versões do conector.

Consulte também