Skip to content

Commit bc655c9

Browse files
Merge pull request #1858 from oracle-devrel/genai-ecosystem-digital-twin
Add an asset to demonstrate deploying a digital twin.
2 parents b64f08d + c7f6dc4 commit bc655c9

File tree

6 files changed

+200
-0
lines changed

6 files changed

+200
-0
lines changed

ai/ai-ecosystem/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Generative AI Ecosystem
2+
3+
Reviewed: 02.07.2025
4+
5+
# Team Publications
6+
7+
## GitHub
8+
9+
- [NVIDIA Omniverse Digital Twin](https://github.com/oracle-devrel/technology-engineering/tree/main/ai/ai-ecosystem/nvidia-omniverse-digital-twin)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
Copyright (c) 2025 Oracle and/or its affiliates.
2+
3+
The Universal Permissive License (UPL), Version 1.0
4+
5+
Subject to the condition set forth below, permission is hereby granted to any
6+
person obtaining a copy of this software, associated documentation and/or data
7+
(collectively the "Software"), free of charge and under any and all copyright
8+
rights in the Software, and any and all patent rights owned or freely
9+
licensable by each licensor hereunder covering either (i) the unmodified
10+
Software as contributed to or provided by such licensor, or (ii) the Larger
11+
Works (as defined below), to deal in both
12+
13+
(a) the Software, and
14+
(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
15+
one is included with the Software (each a "Larger Work" to which the Software
16+
is contributed by such licensors),
17+
18+
without restriction, including without limitation the rights to copy, create
19+
derivative works of, display, perform, and distribute the Software and make,
20+
use, sell, offer for sale, import, export, have made, and have sold the
21+
Software and the Larger Work(s), and to sublicense the foregoing rights on
22+
either these or other terms.
23+
24+
This license is subject to the following condition:
25+
The above copyright notice and either this complete permission notice or at
26+
a minimum a reference to the UPL must be included in all copies or
27+
substantial portions of the Software.
28+
29+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
33+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
34+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
35+
SOFTWARE.
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Digital Twin Example using NVIDIA Omniverse
2+
3+
This solution demonstrates how to run a digital twin of an automobile in a wind
4+
tunnel to evaluate the aerodynamic effect of modifications to the features of
5+
the car.
6+
The digital twin runs on the NVIDIA Omniverse software platform and uses GPU
7+
nodes on Oracle Cloud Infrastructure (OCI) to visualize the airflow over the
8+
car as well as AI inference to quickly assess how changes to the car will
9+
affect the airflow.
10+
11+
Reviewed: 02.07.2025
12+
13+
# When to use this asset?
14+
15+
This asset is ideal for developers, educators, or any professional looking for:
16+
17+
- Demonstrate Oracle Cloud capabilities: This is a great demo asset to showcase
18+
the abilities of OCI to run applications utilizing the NVIDIA Omniverse framework
19+
20+
# How to use this asset?
21+
22+
## Prerequisites
23+
24+
To run this tutorial, you will need:
25+
26+
* An OCI tenancy with limits set for GPU based instances, with a minimum of 2 GPUs available, either:
27+
* NVIDIA A10 for a minimum demonstration
28+
* NVIDIA L40S for optimal visualization performance
29+
* An access key to NVIDIA's NGC Catalog
30+
31+
The software setup is describe in depth [in the NVIDIA Omniverse Blueprint](https://github.com/NVIDIA-Omniverse-blueprints/digital-twins-for-fluid-simulation).
32+
33+
## Deploying the supporting GPU shape
34+
35+
1. Navigate to the "Instances" in the Cloud Console, and create a new instance:
36+
- Select "Canonical Ubuntu 24.04" as the image, and at the minimum "VM.GPU.A10.2" as the shape
37+
- Select a public subnet to place the machine in
38+
- Note the VCN and subnet used
39+
- Upload or paste your public SSH key
40+
- Increase the boot volume size to 150 Gb
41+
42+
2. After the instance has been created, navigate to the VCN that the instance uses, and create a new security list under the tab "Security". Use the following settings:
43+
<center><img src="files/subnet.png" alt="Security list settings opening ports for Omniverse kit and web applications" style="max-width:90%; height:auto;" /></center>
44+
45+
## Deploying the Digital Twin
46+
47+
1. SSH into the deployed shape and first enable the NVIDIA container toolkit repository:
48+
```console
49+
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
50+
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
51+
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
52+
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
53+
```
54+
55+
2. Update the package cache and install the required software:
56+
```console
57+
sudo apt update
58+
sudo apt install -y build-essential git-lfs docker-compose-v2
59+
sudo apt install -y nvidia-driver-570-server nvidia-container-toolkit
60+
```
61+
62+
3. Configure the container runtime, add the current user to the Docker group and reboot:
63+
```console
64+
sudo nvidia-ctk runtime configure --runtime=docker
65+
sudo usermod -aG docker ubuntu
66+
sudo reboot
67+
```
68+
69+
4. Open the ZeroMQ ports required for the web app to communicate with the
70+
inferencing backend:
71+
```console
72+
sudo iptables -I INPUT -p tcp -m multiport --dports 5555:5560 -j ACCEPT
73+
sudo iptables -I INPUT -p tcp -m multiport --sports 5555:5560 -j ACCEPT
74+
```
75+
76+
5. Log into the NVIDIA container registry using `$oauthtoken` as user and your
77+
NGC token as password. Then clone the digital twin example and build it:
78+
```console
79+
docker login nvcr.io
80+
git clone https://github.com/NVIDIA-Omniverse-blueprints/digital-twins-for-fluid-simulation.git
81+
cd digital-twins-for-fluid-simulation
82+
./build-docker.sh
83+
```
84+
85+
6. Copy the [configuration script `setup.sh`](./files/setup.sh) to the node and
86+
run it, then start the digital twin:
87+
```console
88+
bash ./setup.sh
89+
docker compose up
90+
```
91+
92+
7. You should now be able to navigate to your node's public IP, on port 5273 in
93+
a browser and evaluate the digital twin:
94+
<center><img src="files/twin_running.png" alt="A digital twin of a car in a wind tunnel, running in NVIDIA Omniverse" style="max-width:90%; height:auto;" /></center>
95+
96+
97+
# Acknowledgments
98+
99+
- **Author** - Matthias Wolf (Generative AI Ecosystem Black Belt)
100+
101+
# External links
102+
103+
* [NVIDIA Omniverse Blueprint for Digital Twins for Fluid Simulation](https://github.com/NVIDIA-Omniverse-blueprints/digital-twins-for-fluid-simulation)
104+
105+
# License
106+
107+
Copyright (c) 2025 Oracle and/or its affiliates.
108+
109+
Licensed under the Universal Permissive License (UPL), Version 1.0.
110+
111+
See [LICENSE](https://github.com/oracle-devrel/technology-engineering/blob/main/LICENSE) for more details.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
PRIVATE_IP=$(ip route get 1 | sed 's/^.*src \([^ ]*\).*$/\1/;q')
2+
PUBLIC_IP=$(curl ipinfo.io/ip)
3+
4+
sed -e "s/127.0.0.1/${PRIVATE_IP}/g" .env_template > .env
5+
6+
cat <<EOF | git apply
7+
diff --git a/compose.yml b/compose.yml
8+
index b89118a..06bed98 100644
9+
--- a/compose.yml
10+
+++ b/compose.yml
11+
@@ -7,7 +7,9 @@ services:
12+
dockerfile: kit-app/Dockerfile
13+
network: host
14+
privileged: true
15+
- network_mode: host
16+
+ networks:
17+
+ outside:
18+
+ ipv4_address: ${PUBLIC_IP}
19+
ports:
20+
- "1024:1024/udp"
21+
- "49100:49100/tcp"
22+
@@ -52,8 +54,8 @@ services:
23+
NGC_API_KEY: "\${NGC_API_KEY}"
24+
network_mode: host
25+
ipc: host
26+
- ports:
27+
- - "8080:8080"
28+
+ # ports:
29+
+ # - "8080:8080"
30+
zmq:
31+
image: "rtdt-zmq-service:latest"
32+
restart: unless-stopped
33+
@@ -73,3 +75,11 @@ services:
34+
volumes:
35+
ov-cache:
36+
ov-local-share:
37+
+
38+
+networks:
39+
+ outside:
40+
+ driver: bridge
41+
+ ipam:
42+
+ driver: default
43+
+ config:
44+
+ - subnet: ${PUBLIC_IP%.*}.0/24
45+
EOF
Loading
Loading

0 commit comments

Comments
 (0)