연습 - Azure IoT Edge를 사용하여 NVIDIA 임베디드 디바이스에 플랫폼 간 DeepStream 이미지 배포

완료됨

컨테이너화된 DeepStream Graph Composer 워크로드를 컨테이너 레지스트리에 게시하고 IoT Edge 런타임을 사용하여 NVIDIA Jetson 임베디드 디바이스를 프로비전했습니다. 이제 허브에서 배포 사양을 만들어 워크로드를 IoT Edge 모듈로 실행할 준비가 되었습니다.

  1. Azure Portal에서 이 모듈의 시작 부분에서 만든 IoT 허브로 이동합니다. 왼쪽 메뉴의 자동 디바이스 관리에서 IoT Edge를 선택합니다. 등록된 디바이스를 찾습니다.

    Azure Portal의 IoT Edge 디바이스 탭을 보여주는 스크린샷

  2. 현재 구성에 대한 세부 정보를 보려면 디바이스 이름을 선택합니다.

    IoT Edge 디바이스에 대한 개요를 보여주는 스크린샷

  3. 모듈 설정 탭을 선택하여 모듈 편집기를 엽니다.

    모듈 창을 보여주는 스크린샷

    NVIDIA 임베디드 디바이스가 컨테이너 레지스트리에서 컨테이너 워크로드를 끌어올 수 있도록 적절한 Container Registry 자격 증명을 제공해야 합니다.

  4. 별도의 브라우저 창에서 Azure Portal의 컨테이너 레지스트리로 이동합니다.

    Azure Container Registry 인스턴스에 대 한 개요를 보여주는 스크린샷

  5. 왼쪽 메뉴의 설정에서 액세스 키를 선택합니다. 액세스 키에서 로그인 서버, 사용자 이름암호 값을 기록해 둡니다. 이 값은 다음 단계에서 사용합니다.

    컨테이너 레지스트리에 대 한 자격 증명을 보여주는 스크린샷

  6. 모듈 설정이 열려 있는 브라우저 창으로 돌아갑니다. Container Registry 자격 증명에 컨테이너 레지스트리 액세스 키의 값을 입력합니다. 이러한 자격 증명을 사용하여 이 모듈 사양을 적용하는 모든 디바이스는 Azure의 컨테이너 레지스트리에서 컨테이너 워크로드를 안전하게 끌어올 수 있습니다.

    Azure IoT Hub에서 컨테이너 레지스트리 자격 증명을 입력을 보여주는 스크린샷

  7. 다음으로, 배포 사양의 일부로 사용자 지정 IoT Edge 모듈을 구성합니다. 모듈 창의 IoT Edge 모듈 섹션에서 추가>IoT Edge 모듈을 선택합니다.

    IoT Edge 모듈 추가를 보여주는 스크린샷

  8. IoT Edge 모듈 추가IoT Edge 모듈 이름에 모듈 이름 deepstream_test4_jetson을 입력합니다. 이미지 URI<로그인 서버>/deepstream_test4_jetson:v1을 입력합니다. <로그인 서버>의 경우 컨테이너 레지스트리의 URL을 사용합니다.

    IoT Edge 모듈의 이름과 이미지 URI 입력을 보여주는 스크린샷

  9. 다음으로 컨테이너 만들기 옵션 탭을 선택하여 GPU 가속 지원을 활성화하고 X11 소켓에 대한 액세스도 제공하여 컨테이너에서 비디오 출력을 렌더링할 수 있도록 하려면 다음을 추가합니다.

    {
    "NetworkingConfig": {
        "EndpointsConfig": {
            "host": {}
        }
    },
    "HostConfig": {
        "DeviceRequests": [
            {
                "Count": -1,
                "Capabilities": [
                    [
                        "gpu"
                    ]
                ]
            }
        ],
        "NetworkMode": "host",
        "Binds": [
            "/tmp/.X11-unix/:/tmp/.X11-unix/",
            "/tmp/argus_socket:/tmp/argus_socket"
        ]
    }
    }
    

    완료되면 업데이트를 선택합니다.

    모듈 창의 컨테이너 만들기 옵션을 보여주는 스크린샷

  10. 검토 + 만들기를 선택하면 디바이스 페이지의 모듈 설정으로 돌아갑니다.

    모듈 창에 강조 표시된 검토 및 만들기 단추를 보여주는 스크린샷

  11. 배포 텍스트 상자에는 디바이스에 제출하려는 배포 사양이 표시됩니다. 내용이 다음 예제와 유사한지 확인합니다.

    {
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired": {
                "modules": {
                    "deepstream_test4_jetson": {
                        "settings": {
                            "image": "<Login Server>.azurecr.io/deepstream_test4_jetson:v1",
                            "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"DeviceRequests\":[{\"Count\":-1,\"Capabilities\":[[\"gpu\"]]}],\"NetworkMode\":\"host\",\"Binds\":[\"/tmp/.X11-unix/:/tmp/.X11-unix/\",\"/tmp/argus_socket:/tmp/argus_socket\"]}}"
                        },
                        "type": "docker",
                        "version": "1.0",
                        "env": {
                            "DISPLAY": {
                                "value": ":0"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always"
                    }
                },
                "runtime": {
                    "settings": {
                        "minDockerVersion": "v1.25",
                        "registryCredentials": {
                            "<Your Registry Name>": {
                                "address": "<Login Server>.azurecr.io",
                                "password": "<Your Password>",
                                "username": "<Your Username>"
                            }
                        }
                    },
                    "type": "docker"
                },
                "schemaVersion": "1.1",
                "systemModules": {
                    "edgeAgent": {
                        "settings": {
                            "image": "mcr.microsoft.com/azureiotedge-agent:1.1",
                            "createOptions": ""
                        },
                        "type": "docker"
                    },
                    "edgeHub": {
                        "settings": {
                            "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
                        },
                        "type": "docker",
                        "status": "running",
                        "restartPolicy": "always"
                    }
                }
            }
        },
        "$edgeHub": {
            "properties.desired": {
                "routes": {
                    "route": "FROM /messages/* INTO $upstream"
                },
                "schemaVersion": "1.1",
                "storeAndForwardConfiguration": {
                    "timeToLiveSecs": 7200
                }
            }
        },
        "deepstream_test4_jetson": {
            "properties.desired": {}
        }
    }
    }
    
  12. 배포 구성이 올바른지 확인한 다음, 만들기를 선택하여 배포 프로세스를 시작합니다.

    배포 텍스트 상자와 만들기 단추를 보여주는 스크린샷

  13. 배포가 성공했는지 확인하려면 NVIDIA 임베디드 디바이스의 터미널에서 다음 명령을 실행합니다.

    sudo iotedge list
    
  14. 출력에 edgeAgent, edgeHubdeepstream_test4_jetson 모듈에 대해 running 상태가 표시되는지 확인합니다.

    디바이스가 디스플레이에 연결되어 있으면 다음 예제와 같이 DeepStream Graph Composer 애플리케이션의 시각화된 출력을 볼 수 있습니다.

    Jetson 하드웨어에서 실행되는 IoT Edge 모듈을 보여주는 스크린샷

  15. NVIDIA Jetson 임베디드 디바이스의 터미널에서 다음 명령을 실행하여 deepstream_test4_jetson 모듈의 출력을 모니터링합니다.

    sudo docker logs -f deepstream_test4_jetson
    

    몇 초마다 디바이스는 Azure IoT Hub의 등록된 허브로 원격 분석 데이터를 보냅니다. 다음 예와 같은 메시지가 나타납니다.

    Message sent : {
      "version" : "4.0",
      "id" : 1440,
      "@timestamp" : "2021-09-21T03:08:51.161Z",
      "sensorId" : "sensor-0",
      "objects" : [
        "-1|570|478.37|609|507.717|Vehicle|#|sedan|Bugatti|M|blue|XX1234|CA|-0.1"
      ]
    }
    
  16. IoT Edge 디바이스에 대한 디바이스 개요로 돌아가서 Azure Portal에서 실행 중인 모듈의 상태를 확인할 수 있습니다. 디바이스에 대해 나열된 관련 상태 및 다음 모듈이 표시됩니다.

    런타임 상태의 IoT Edge 디바이스 개요를 보여주는 스크린샷

  17. IoT Hub 개요 창에서 디바이스에서 허브로 메시지가 도착하는지 확인할 수 있습니다. 메시지가 증가하는 것을 볼 수 있습니다.

    IoT Hub 사용 창에서 받은 메시지를 나타내는 차트를 보여주는 스크린샷

축하합니다! DeepStream Graph Composer 워크로드의 프로덕션 등급 에지 배포를 성공적으로 개발하고 Azure IoT Edge를 사용하여 실제 디바이스에 배포했습니다.

사용 방법

이 모듈에 설명된 전략을 사용하여 라이브 카메라 피드를 사용하여 멸종 위기에 처한 종의 고유한 인스턴스를 계산하는 야생 동물 보호 솔루션을 지원하도록 기존 DeepStream 참조 그래프를 수정하려면 어떻게 해야 하나요? 이 솔루션을 지원하기 위해 수정해야 하는 구성 요소는 무엇인가요? 전체 배포 전략을 수정해야 하나요?