Skip to content

Commit 0c14a99

Browse files
authored
Merge branch 'main' into jb/sycl_oneapi_update
2 parents 2ea5445 + aa35979 commit 0c14a99

File tree

44 files changed

+1664
-680
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1664
-680
lines changed

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/docker-compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ services:
174174
3dpose-estimation:
175175
build:
176176
context: ./services/3d-pose-estimation
177-
dockerfile: src/Dockerfile
177+
dockerfile: Dockerfile
178178
args:
179179
HTTP_PROXY: ${HTTP_PROXY}
180180
HTTPS_PROXY: ${HTTPS_PROXY}

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/Chart.yaml

Lines changed: 0 additions & 6 deletions
This file was deleted.

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/README.md

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,12 @@ Check available images:
1818
```bash
1919
docker images | grep intel/hl-ai
2020
```
21-
## If Docker Images Are Missing
2221

23-
If the required images are **not present locally**, Kubernetes pods will fail with `ImagePullBackOff`.
24-
25-
### Build Images Locally
26-
27-
From the repository root, build each service image:
28-
29-
```bash
30-
# MDPnP
31-
docker build -t intel/hl-ai-mdpnp:1.0.0 mdpnp-service/
32-
33-
# DDS Bridge
34-
docker build -t intel/hl-ai-dds-bridge:1.0.0 dds-bridge/
35-
36-
# Aggregator
37-
docker build -t intel/hl-ai-aggregator-service:1.0.0 aggregator-service/
38-
39-
# AI ECG
40-
docker build -t intel/hl-ai-ecg:1.0.0 ai-ecg/backend/
41-
42-
# 3D Pose
43-
docker build -t intel/hl-ai-3dpose:1.0.0 3d-pose-estimation/src/
44-
45-
# Metrics
46-
docker build -t intel/hl-ai-metrics-service:1.0.0 metrics-service/
47-
48-
```
4922

5023
## Install
5124

5225
```bash
53-
cd health-and-life-sciences-ai-suite/helm
26+
cd health-and-life-sciences-ai-suite/helm/multi_modal_patient_monitoring
5427

5528
helm install health-ai . \
5629
--namespace health-ai \
@@ -86,6 +59,7 @@ kubectl logs -n health-ai deploy/aggregator
8659
kubectl logs -n health-ai deploy/ai-ecg
8760
kubectl logs -n health-ai deploy/pose
8861
kubectl logs -n health-ai deploy/metrics
62+
kubectl logs -n health-ai deploy/ui
8963
```
9064

9165
Healthy services will show:
@@ -95,27 +69,46 @@ Healthy services will show:
9569
- No crash loops
9670

9771

98-
## Access Services (Port Forward)
99-
AI ECG
72+
## Access the Frontend UI
73+
The UI is exposed using a NodePort service.
74+
75+
Get the Minikube IP:
10076
```bash
101-
kubectl port-forward svc/ai-ecg 8000:8000 -n health-ai
77+
minikube ip
78+
```
79+
Get the UI NodePort:
80+
```bash
81+
kubectl get svc ui -n health-ai
82+
```
83+
Open your browser and go to:
84+
```bash
85+
http://<minikube-ip>:<nodeport>
10286
```
103-
http://localhost:8000/docs
104-
105-
Aggregator
87+
Example:
10688
```bash
107-
kubectl port-forward svc/aggregator 8001:50051 -n health-ai
89+
http://192.168.49.2:30007/
10890
```
109-
http://localhost:8000/docs
91+
This will open the Health AI Suite frontend dashboard.
11092

93+
From here you can access:
11194

112-
Pose
113-
```bash
114-
kubectl port-forward svc/pose 8002:8001 -n health-ai
115-
```
116-
http://localhost:8002/docs
95+
- 3D Pose Estimation
11796

97+
- ECG Monitoring
11898

99+
- RPPG Monitoring
100+
101+
- MdPnP service
102+
103+
- Metrics Dashboard
104+
105+
## On Bare Metal Kubernetes (On-Prem)
106+
NodePort still works.
107+
108+
User must access:
109+
```bash
110+
http://<Node-Internal-IP>:<nodePort>
111+
```
119112

120113
## Uninstall
121114
```bash
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: v2
2+
name: multi_modal_patient_monitoring
3+
description: Health AI Suite - Multi Modal Patient Monitoring
4+
type: application
5+
version: 0.1.0
6+
appVersion: "1.0"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{{- define "health-ai.name" -}}
2+
health-ai
3+
{{- end }}
4+
5+
{{- define "health-ai.namespace" -}}
6+
{{ .Values.namespace }}
7+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: aggregator
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: aggregator
10+
template:
11+
metadata:
12+
labels:
13+
app: aggregator
14+
spec:
15+
containers:
16+
- name: aggregator
17+
image: "{{ .Values.aggregator.image.repository }}/{{ .Values.aggregator.image.name }}:{{ .Values.aggregator.image.tag }}"
18+
imagePullPolicy: {{ .Values.aggregator.image.pullPolicy }}
19+
ports:
20+
- containerPort: 8001
21+
- containerPort: 50051
22+
env:
23+
- name: METRICS_SERVICE_URL
24+
value: http://metrics:9000
25+
- name: DDS_BRIDGE_CONTROL_URL
26+
value: http://dds-bridge:8082
27+
- name: POSE_3D_CONTROL_URL
28+
value: http://pose:8083
29+
- name: RPPG_CONTROL_URL
30+
value: http://rppg:8084
31+
- name: AI_ECG_URL
32+
value: http://ai-ecg:8000/predict_stream_next
33+
- name: AGGREGATOR_GRPC
34+
value: aggregator:50051
35+
# Ensure control-plane HTTP calls to in-cluster services
36+
# do not go through the corporate proxy.
37+
- name: NO_PROXY
38+
value: "aggregator,dds-bridge,rppg,pose,ai-ecg,metrics,mdpnp,localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16"
39+
- name: no_proxy
40+
value: "aggregator,dds-bridge,rppg,pose,ai-ecg,metrics,mdpnp,localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: ai-ecg
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: ai-ecg
10+
template:
11+
metadata:
12+
labels:
13+
app: ai-ecg
14+
spec:
15+
initContainers:
16+
- name: copy-models
17+
image: "{{ .Values.assets.image.repository }}/{{ .Values.assets.image.name }}:{{ .Values.assets.image.tag }}"
18+
imagePullPolicy: {{ .Values.assets.image.pullPolicy }}
19+
command: ["/bin/sh", "-c"]
20+
args:
21+
- cp -r /opt/assets/models/* /models/
22+
volumeMounts:
23+
- name: models
24+
mountPath: /models
25+
26+
containers:
27+
- name: ai-ecg
28+
image: "{{ .Values.aiEcg.image.repository }}/{{ .Values.aiEcg.image.name }}:{{ .Values.aiEcg.image.tag }}"
29+
imagePullPolicy: {{ .Values.aiEcg.image.pullPolicy }}
30+
securityContext:
31+
privileged: true
32+
envFrom:
33+
- configMapRef:
34+
name: device-config
35+
ports:
36+
- containerPort: 8000
37+
volumeMounts:
38+
- name: models
39+
mountPath: /models
40+
- name: dri
41+
mountPath: /dev/dri
42+
- name: dev
43+
mountPath: /dev
44+
45+
volumes:
46+
- name: models
47+
emptyDir: {}
48+
- name: dri
49+
hostPath:
50+
path: /dev/dri
51+
- name: dev
52+
hostPath:
53+
path: /dev
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: dds-bridge
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: dds-bridge
10+
template:
11+
metadata:
12+
labels:
13+
app: dds-bridge
14+
spec:
15+
containers:
16+
- name: dds-bridge
17+
image: "{{ .Values.ddsBridge.image.repository }}/{{ .Values.ddsBridge.image.name }}:{{ .Values.ddsBridge.image.tag }}"
18+
imagePullPolicy: {{ .Values.ddsBridge.image.pullPolicy }}
19+
ports:
20+
- containerPort: 8082
21+
env:
22+
# gRPC connection to aggregator's VitalService
23+
- name: GRPC_HOST
24+
value: aggregator
25+
- name: GRPC_PORT
26+
value: "50051"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: device-config
5+
data:
6+
device.env: |-
7+
# Default inference devices
8+
# Valid values: CPU | GPU | NPU | AUTO
9+
10+
ECG_DEVICE={{ .Values.devices.ECG_DEVICE | quote }}
11+
RPPG_DEVICE={{ .Values.devices.RPPG_DEVICE | quote }}
12+
MDPNP_DEVICE={{ .Values.devices.MDPNP_DEVICE | quote }}
13+
POSE_3D_DEVICE={{ .Values.devices.POSE_3D_DEVICE | quote }}
14+
ECG_DEVICE: {{ .Values.devices.ECG_DEVICE | quote }}
15+
RPPG_DEVICE: {{ .Values.devices.RPPG_DEVICE | quote }}
16+
MDPNP_DEVICE: {{ .Values.devices.MDPNP_DEVICE | quote }}
17+
POSE_3D_DEVICE: {{ .Values.devices.POSE_3D_DEVICE | quote }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: mdpnp
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: mdpnp
10+
template:
11+
metadata:
12+
labels:
13+
app: mdpnp
14+
spec:
15+
containers:
16+
- name: mdpnp
17+
image: "{{ .Values.mdpnp.image.repository }}/{{ .Values.mdpnp.image.name }}:{{ .Values.mdpnp.image.tag }}"
18+
imagePullPolicy: {{ .Values.mdpnp.image.pullPolicy }}

0 commit comments

Comments
 (0)