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.txtis used to compile the synthetic data generation (SDG) workflow infrastructure needed to setup your project/environment(s).
- Override the content of - sdg-deploy.txtfile 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
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.
Users can update the existing deployment by simply running
./deploy-awswithout the xargs command and providing the configs at runtime. Please make sure the parameters match those supplied in the filesdg-deploy.txtwhen running the deployment for the first time using the commandcat 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.