Skip to content

Commit 4a7756e

Browse files
Merge branch 'main' into exacc-education-update
2 parents e984c85 + fe6e71d commit 4a7756e

27 files changed

+953
-222
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
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
**/__pycache__/
22
venv/
3-
files/venv/
4-
**/config.py
3+
config.py
54
.DS_Store
65
data/
76
*.log
87
*.txt
8+
!requirements.txt

ai/generative-ai-service/hr-goal-alignment/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ See [LICENSE](./LICENSE) for more details.
2828

2929
---
3030

31+
> ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK.
3132
3233

3334
## Disclaimer
3435

35-
ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK.
36+
ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK.

ai/generative-ai-service/hr-goal-alignment/files/Org_Chart.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Copyright (c) 2025 Oracle and/or its affiliates.
21
import streamlit as st
32
from urllib.parse import quote, unquote
43

@@ -100,7 +99,7 @@ def create_org_chart():
10099
"""
101100

102101
# Display the chart with HTML component
103-
st.components.v1.html(html_chart, height=520, scrolling=True) # type: ignore
102+
st.components.v1.html(html_chart, height=520, scrolling=True)
104103

105104
# Show details section for selected employee
106105
# ------------------------------------------------------------
@@ -182,5 +181,5 @@ def chip_style(val):
182181
else "background-color:#f8d7da;font-weight:bold"
183182
)
184183

185-
styled = goals_pretty.style.applymap(chip_style, subset=[LABEL_COL]) # type: ignore
184+
styled = goals_pretty.style.applymap(chip_style, subset=[LABEL_COL])
186185
st.dataframe(styled, use_container_width=True, hide_index=True)

ai/generative-ai-service/hr-goal-alignment/files/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ The system integrates with Oracle Database and uses OCI's Generative AI models t
5151
├── utils.py
5252
├── requirements.txt
5353
└── README.md
54+
```
5455

5556
## Setup Instructions
5657

ai/generative-ai-service/hr-goal-alignment/files/app.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Copyright (c) 2025 Oracle and/or its affiliates.
21
import streamlit as st
32
from pathlib import Path
43

@@ -30,4 +29,4 @@
3029

3130

3231
pg = st.navigation(pages)
33-
pg.run()
32+
pg.run()

ai/generative-ai-service/hr-goal-alignment/files/config_template.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Copyright (c) 2025 Oracle and/or its affiliates.
21
# config_template.py
32

43
# === OCI Configuration ===

ai/generative-ai-service/hr-goal-alignment/files/course_vector_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Copyright (c) 2025 Oracle and/or its affiliates.
21
from typing import List, Dict, Optional
32
from langchain_community.vectorstores import OracleVS
43
import os
@@ -13,7 +12,6 @@
1312
from langchain_text_splitters import RecursiveCharacterTextSplitter
1413
from langchain_community.embeddings import OCIGenAIEmbeddings
1514
from langchain_core.documents import Document
16-
from langchain_community.vectorstores.utils import DistanceStrategy
1715

1816
# Use the project's config file
1917
import config
@@ -62,7 +60,7 @@ def _initialize_vector_store(self) -> OracleVS:
6260
client=self.db_conn, # Use the connection passed in __init__
6361
embedding_function=self.embeddings, # Use the embeddings initialized in __init__
6462
table_name=config.VECTOR_TABLE_NAME, # Use table name from project config
65-
distance_strategy=DistanceStrategy.COSINE
63+
distance_strategy="COSINE"
6664
)
6765

6866
# LLM initialization removed.
@@ -169,3 +167,5 @@ def similarity_search(self, query: str, k: int = 5) -> List[Document]:
169167
except Exception as e:
170168
logger.error(f"Error during similarity search: {e}", exc_info=True)
171169
return []
170+
171+

ai/generative-ai-service/hr-goal-alignment/files/data_ingestion_courses.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Copyright (c) 2025 Oracle and/or its affiliates.
21
import logging
32
import sys
43
import oracledb

0 commit comments

Comments
 (0)