Appendix - Sim2Deploy Cloud Quickstart

Deployment Config File Samples

secret.sh

#!/bin/bash

# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.
#
# _aws_access_key_id -> AWS access key id to create resources
export _aws_access_key_id='<replace_content_between_quotes_with_your_value>'
# _aws_secret_access_key -> AWS secret access key to create resources
export _aws_secret_access_key='<replace_content_between_quotes_with_your_value>'
# _ssh_public_key -> Your public ssh key's content
export _ssh_public_key='<replace_content_between_quotes_with_your_value>'
# _ngc_api_key -> Your ngc api key value
export _ngc_api_key='<replace_content_between_quotes_with_your_value>'
# _turnserver_password -> Password for turn server
export _turnserver_password='<replace_content_between_quotes_with_your_value>'

config-template.yml

# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.

# NOTE: Refer to examples for various configuration options


name: 'my-deployment-name'
spec:
  infra:
    csp: 'aws'
    backend:
      access_key: "{{ lookup('env', 'AWS_ACCESS_KEY_ID') }}"
      secret_key: "{{ lookup('env', 'AWS_SECRET_ACCESS_KEY') }}"
      dynamodb_table: '########'
      bucket: '########'
      region: '########'
      encrypt: true
    provider:
      access_key: "{{ lookup('env', 'AWS_ACCESS_KEY_ID') }}"
      secret_key: "{{ lookup('env', 'AWS_SECRET_ACCESS_KEY') }}"
    configs:
      cns:
        version: 11.0
        override_values: {}
      access_cidrs:
      - 'my-org-ip-cidr'
      region: 'us-west-2'
      ssh_public_key: "{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_rsa.pub') }}"
      ssh_private_key_path: "{{ lookup('env', 'HOME') + '/.ssh/id_rsa' }}"
      additional_ssh_public_keys: []
      coturn:
        private_instance: false
        type: 't3.small'
        disk_size_gb: 256
      coturn_settings:
        realm: "example-realm"
        username: "coturn-admin"
        password: 'password'    ## Set the Password for Turn Server
      isaacsim:
        create_isaac: true  ### Set to false if isaacsim is not required
        type: 'g6e.4xlarge'      
      clusters:
        app:
          private_instance: true
          master:
            type: 'g5.48xlarge'
            labels: {}
            taints: []
          nodes: {}
          ports:
            app:
              port: 31080
              path: /api/v2.1/analytics/livez
            grafana:
              port: 32300
              path: login
            prometheus:
              port: 30090
              path: graph
            kibana:
              port: 31560
              path: /api/status
          features:
            cns: true
            platform: true
            app: true
  platform:
    configs:
      platform_namespace: 'platform'
      grafana_port: 'grafana'
      prometheus_port: 'prometheus'
      ngc_cli_api_key: "{{ lookup('env', 'NGC_CLI_API_KEY') }}"
  app:
    configs:
      app_namespace: 'app'
      app_port: 'app'
      ngc_cli_api_key: "{{ lookup('env', 'NGC_CLI_API_KEY') }}"

      helm_values_dir:
        source_directory: "{{ playbook_dir }}/k8s-helm-values/MTMC-RTLS-SDG"
        destination_directory: "/mnt/helm-values"

      sdg_data:
        ngc_res_sdg_data_url: "nfgnkvuikvjm/mdx-v2-0/metropolis-apps-sample-input-data:v2.1-06132024"
        ngc_k8s_values_res_url: "nfgnkvuikvjm/mdx-v2-0/metropolis-apps-k8s-deployment:v2.1-06142024"

      isaacsim_configs:
        isaac_image: 'nvcr.io/nvidia/isaac-sim:4.0.0'
        oige: 'no'
        orbit: 'no'
        isaaclab: 'no'

    apps_state:
      cleanup_app: 'true'
      mtmc_app: 'false'
      pa_app: 'false'
      rtls_app: 'false'
      retail_app: 'false'
      rtls_sdg_app: 'true'

    helm_configs:
      app_chart_url: https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0
      nvstreamer_app_chart_url: https://helm.ngc.nvidia.com/rxczgrvsg8nx/vst-1-0
      vst_app_chart_url: https://helm.ngc.nvidia.com/rxczgrvsg8nx/vst-1-0
      wdm_ds_app_chart_url: https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0

      app_chart_version: 1.0.37
      nvstreamer_app_chart_version: 0.2.32
      vst_app_chart_version: 1.0.30
      wdm_ds_app_chart_version: 0.0.33

config-multi-node-template.yml

# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.

# NOTE: Refer to examples for various configuration options


name: 'my-deployment-name'
spec:
  infra:
    csp: 'aws'
    backend:
      access_key: "{{ lookup('env', 'AWS_ACCESS_KEY_ID') }}"
      secret_key: "{{ lookup('env', 'AWS_SECRET_ACCESS_KEY') }}"
      dynamodb_table: '########'
      bucket: '########'
      region: '########'
      encrypt: true
    provider:
      access_key: "{{ lookup('env', 'AWS_ACCESS_KEY_ID') }}"
      secret_key: "{{ lookup('env', 'AWS_SECRET_ACCESS_KEY') }}"
    configs:
      cns:
        version: 11.0
        override_values: {}
      access_cidrs:
      - 'my-org-ip-cidr'
      region: 'us-west-2'
      ssh_public_key: "{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_rsa.pub') }}"
      ssh_private_key_path: "{{ lookup('env', 'HOME') + '/.ssh/id_rsa' }}"
      additional_ssh_public_keys: []
      coturn:
        private_instance: false
        type: 't3.small'
        disk_size_gb: 256
      coturn_settings:
        realm: "example-realm"
        username: "coturn-admin"   
        password: 'password'    ## Set the Password for Turn Server
      isaacsim:
        create_isaac: true  ### Set to false if isaacsim is not required
        type: 'g6e.4xlarge'      
      clusters:
        app:
          private_instance: true
          master:
            type: 'g5.48xlarge'
            labels: {}
            taints: []
          nodes:
            worker:
              type: 'g5.48xlarge'
              labels: {}
              taints: []
          ports:
            app:
              port: 31080
              path: /api/v2.1/analytics/livez
            grafana:
              port: 32300
              path: login
            prometheus:
              port: 30090
              path: graph
            kibana:
              port: 31560
              path: /api/status
          features:
            cns: true
            platform: true
            app: true
  platform:
    configs:
      platform_namespace: 'platform'
      grafana_port: 'grafana'
      prometheus_port: 'prometheus'
      ngc_cli_api_key: "{{ lookup('env', 'NGC_CLI_API_KEY') }}"
  app:
    configs:
      app_namespace: 'app'
      app_port: 'app'
      ngc_cli_api_key: "{{ lookup('env', 'NGC_CLI_API_KEY') }}"

      helm_values_dir:
        source_directory: "{{ playbook_dir }}/k8s-helm-values/MTMC-RTLS-SDG"
        destination_directory: "/mnt/helm-values"

      sdg_data:
        ngc_res_sdg_data_url: "nfgnkvuikvjm/mdx-v2-0/metropolis-apps-sample-input-data:v2.1-06132024"
        ngc_k8s_values_res_url: "nfgnkvuikvjm/mdx-v2-0/metropolis-apps-k8s-deployment:v2.1-06142024"

      isaacsim_configs:
        isaac_image: 'nvcr.io/nvidia/isaac-sim:4.0.0'
        oige: 'no'
        orbit: 'no'
        isaaclab: 'no'

    apps_state:
      cleanup_app: 'true'
      mtmc_app: 'false'
      pa_app: 'false'
      rtls_app: 'false'
      retail_app: 'false'
      rtls_sdg_app: 'true'

    helm_configs:
      app_chart_url: https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0
      nvstreamer_app_chart_url: https://helm.ngc.nvidia.com/rxczgrvsg8nx/vst-1-0
      vst_app_chart_url: https://helm.ngc.nvidia.com/rxczgrvsg8nx/vst-1-0
      wdm_ds_app_chart_url: https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0

      app_chart_version: 1.0.37
      nvstreamer_app_chart_version: 0.2.32
      vst_app_chart_version: 1.0.30
      wdm_ds_app_chart_version: 0.0.33

Parameter Explanation

  • Explanation for each parameter can be found here.

sdg-deploy.txt

  • Deployment template sdg-deploy.txt is used to compile the synthetic data generation (SDG) workflow infrastructure needed to setup your project/environment(s).

  • Override the content of sdg-deploy.txt file with your environment/application specific values. This will drive the configuration of Infrastructure and application being installed.

    sdg-deploy.txt

    --deployment-name=<deploy-name> 
    --region '<aws-region-name>' 
    --isaac 
    --isaac-instance-type 'g5.12xlarge' 
    --isaac-image 'nvcr.io/nvidia/isaac-sim:4.0.0' 
    --oige 'no' 
    --orbit 'no'
    --isaaclab 'no' 
    --ngc-api-key '<ngc-api-key>' 
    --ngc-api-key-check 
    --aws-access-key-id '<aws-access-key>' 
    --aws-secret-access-key '<aws-secret-key>' 
    --no-ovami 
    --existing 'ask'
    

Parameter Explanation

  • All the entries of this config file are explained in the table below:

    SDG Deploy Template

    Parameter name

    Type

    Optional

    Description

    deployment-name

    string

    Deployment name for SDG App.

    region

    string

    AWS Region to deploy the infrastructure required for sdg.

    isaac

    To Deploy/configure Isaac Sim in provisioned VM so as to run simulation and generate new data. Defaults to “yes”

    isaac-instance-type

    string

    yes

    AWS VM type to use for SDG App. By default it is configured to use 4xA10 GPU VM - g5.12xlarge.

    isaac-image

    string

    yes

    Docker Image to use for isaacsim deployment. We will use latest released docker supported for simulation workflow.

    isaaclab

    To Deploy/configure Isaac Sim Lab in provisioned VM so as to run simulation and generate new data. Defaults to “no”

    ngc-api-key

    string

    NGC API Key to pull docker from NGC team - mdx-v2.0

    aws-access-key-id

    string

    AWS Access Key ID for accessing and provisiong infra in AWS CSP.

    aws-secret-access-key

    string

    AWS Secret Key ID for authenticating and provisiong infra in AWS CSP.

Sample Output for Bucket Details

Apply complete! Resources: <nn> added, <nn> changed, <nn> destroyed.

Outputs:

S3_Bucket_details = {
  "<bastion_infra key>" = "<S3_Bucket_Name>"
}

app_infra = {
  "<app_infra key>" = {
    "private_ips" = [
      "<private_ip_of_app_instace>",
    ]
  }
}
app_infra = {
  "<app_infra key>" = {
    alb_dns_name = <dns_name_for_aws_lb>
    }
  }  
bastion_infra = {
  "<bastion_infra key>" = {
    "private_ip" = "<bastion_instance_private_ip>"
    "public_ip" = "<bastion_instance_public_ip>"
  }
}
coturn_infra = {
  "<coturn_infra key" = {
    "port" = 3478
    "private_ip" = "<coturn_instance_private_ip>"
    "public_ip" = "<coturn_instance_public_ip>"
  }
}

Verify SDG Deployment

Outputs:

cloud = "aws"
isaac_ip = "<public-ip-aws-vm>"
isaac_vm_id = "<VM-Resource-ID>"
ovami_ip = "NA"
ssh_key = <sensitive>

*************************************************
* Isaac Sim is deployed at <AWS-VM-Public-IP> *
*************************************************

* To connect to Isaac Sim via SSH:

ssh -i state/<deployment-name>/key.pem -o StrictHostKeyChecking=no ubuntu@<AWS-VM-Public-IP>

* To connect to Isaac Sim via noVNC:

1. Open http://<AWS-VM-Public-IP>:6080/vnc.html?host=<AWS-VM-Public-IP>&port=6080 in your browser.
2. Click "Connect" and use password "<random-generate-password>"

* To connect to Isaac Sim via NoMachine:

0. Download NoMachine client at https://downloads.nomachine.com/, install and launch it.
1. Click "Add" button.
2. Enter Host: "<AWS-VM-Public-IP>".
3. In "Configuration" > "Use key-based authentication with a key you provide",
   select file "state/sdg-test-isaac-1/key.pem".
4. Click "Connect" button.
5. Enter "ubuntu" as a username when prompted.

Use ssh command in below format to log into Application instance.

Replace content between '<' and '>' with its appropriate values.
#pem file refered here must the key associated to the public key used in initial steps of setup.
ssh -i <path-to-pem-file> -o StrictHostKeyChecking=no -o ProxyCommand="ssh -i <path-to-pem-file> -W %h:%p -o StrictHostKeyChecking=no ubuntu@<bastion-vm-public-ip>" ubuntu@<app-vm-private-ip>

#To connect to Isaac Sim via SSH:
ssh -i state/<deployment-name>/key.pem -o StrictHostKeyChecking=no ubuntu@<AWS-VM-Public-IP>

Once logged into the terminal, run below command to see the docker status for Isaac Sim container.

$ docker ps

$ docker logs isaacsim
[127.981s] app ready
[128.169s] Isaac Sim App is loaded. <<=== this log line means isaacsim UI is fully operational. It can be accessed using NoMachine or VNC.
$

Note

Based on several conditions, Isaac SIM UI may take up to 15-20 mins to turn into Active state.

Workaround for SDG Deploy Error

Deploy Error seen

[Isaac Automator v3.0.0]:/app$ cat sdg-deploy.txt | xargs ./deploy-aws --existing repair
* Deploymemnt exists, what would you like to do? See --help for details. (repair, modify, replace, run_ansible) [replace]: Aborted!
[Isaac Automator v3.0.0]:/app$ cat sdg-deploy.txt | xargs ./deploy-aws --existing=repair
* Deploymemnt exists, what would you like to do? See --help for details. (repair, modify, replace, run_ansible) [replace]: Aborted!

Workaround

  1. While running the SDG deploy workflow script, if you see the above error for an existing deployment, please clean up the existing deployment using ./destroy <deployment-name> or update sdg-deploy.txt with a new deployment name.

  2. Users can update the existing deployment by simply running ./deploy-aws without the xargs command and providing the configs at runtime. Please make sure the parameters match those supplied in the file sdg-deploy.txt when running the deployment for the first time using the command cat sdg-deploy.txt | xargs ./deploy-aws.

Tear Down Deployment

To tear down all the infrastructure along with application that we created through above scripts,

run bash mtmc-app-deploy uninstall command for RTLS app teardown.

Important

Both install and uninstall Options needs to be run with care. We recommend preview option to see the changes before install. If you are looking for an option to print the details of your past installation, use show-results option.

$ ./destroy <deployment-name>

Note

Please run destroy command from where deployment was triggered as state files are kept locally for SDG deployment.