Step 6: OpenVINO™ Model Server Setup#

Configure the OpenVINO™ Model Server#

Perform configuration steps on the control plane.

  1. Go to the AMR_containers folder:

    cd <edge_insights_for_amr_path>/Edge_Insights_for_Autonomous_Mobile_Robots_*/AMR_server_containers
    
  2. Generate the keys used for the OpenVINO™ model server remote inference setups:

    chmod +x 01_docker_sdk_env/artifacts/02_edge_server/edge_server_fleet_management/ovms/generate_ovms_certs.sh
    sudo ./01_docker_sdk_env/artifacts/02_edge_server/edge_server_fleet_management/ovms/generate_ovms_certs.sh <control_plane_IP>
    

    Note

    The IP of the control plane is used to generate certificates.

  3. Copy the keys to the SFTP server. If the SFTP server is not configured, see Step 2: SFTP Server Setup.

    1. Open an SFTP terminal:

      sftp fdo_sftp@<sftp_server_ip>
      
    2. Copy the OpenVINO™ model server certificates to the SFTP server:

      mkdir /fdo_sftp/etc/amr/
      mkdir /fdo_sftp/etc/amr/ri-certs/
      cd /fdo_sftp/etc/amr/ri-certs/
      lcd <AMR_Server_Containers>/01_docker_sdk_env/artifacts/02_edge_server/edge_server_fleet_management/ovms/keys/
      put server.pem
      put client.key
      put client.pem
      
    3. Exit the SFTP terminal:

      exit
      

Start the OpenVINO™ Model Server#

On the control plane, install the playbook:

ansible-playbook AMR_server_containers/01_docker_sdk_env/docker_orchestration/ansible-playbooks/02_edge_server/openvino_model_server/ovms_playbook_install.yaml

If the playbook fails to install, see Troubleshooting.

Check the OpenVINO™ Model Server Installation#

  1. On the control plane, verify that the services, pods, and deployment are running:

    $ kubectl get all --output=wide --namespace ovms-tls
    
     NAME                                         READY   STATUS    RESTARTS      AGE   IP             NODE            NOMINATED NODE   READINESS GATES
     pod/ovms-deployment-75c7dffdc5-cgxp9         1/1     Running   1 (50m ago)   50m   10.245.202.9   glaic3roscube   <none>           <none>
    
     NAME                                         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE   SELECTOR
     service/ovms-service                         NodePort   10.110.177.249   <none>        3335:32762/TCP,2225:32763/TCP   50m   app.kubernetes.io/instance=ovms-tls-abcxzy,app.kubernetes.io/name=ovms-tls
    
     NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                                      SELECTOR
     deployment.apps/ovms-deployment              1/1     1            1           50m   ovms-tls     10.237.23.153:30003/intel/ovms-tls:2022.2   app.kubernetes.io/instance=ovms-tls-abcxzy,app.kubernetes.io/name=ovms-tls
    
     NAME                                         DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                                      SELECTOR
     replicaset.apps/ovms-deployment-75c7dffdc5   1         1         1       50m   ovms-tls     10.237.23.153:30003/intel/ovms-tls:2022.2   app.kubernetes.io/instance=ovms-tls-abcxzy,app.kubernetes.io/name=ovms-tls,pod-template-hash=75c7dffdc5
    

    Note

    CLUSTER-IP is a virtual IP that is allocated by Kubernetes* to a service. It is the Kubernetes* internal IP. Two different pods can communicate using this IP.

  2. On each edge node, verify that the Docker* container is running:

    docker ps | grep ovms-tls
    6b64514a4b9a   c9e7db04fe06                       "/usr/bin/dumb-init …"   10 minutes ago   Up 10 minutes             k8s_ovms-tls_ovms-deployment-5856948447-t78tz_ovms-tls_3cd84b35-c604-4948-9228-e381fd0714fa_1
    ceeaa7673bcd   k8s.gcr.io/pause:3.5               "/pause"                 10 minutes ago   Up 10 minutes             k8s_POD_ovms-deployment-5856948447-t78tz_ovms-tls_3cd84b35-c604-4948-9228-e381fd0714fa_1