Skip to content

Commit 338f814

Browse files
authored
[Bug: 900] Create a version of MultimodalQnA example with Zilliz/Milvus as Vector DB (#1639)
Signed-off-by: Shifani Rajabose <[email protected]> Signed-off-by: Pallavi Jaini <[email protected]>
1 parent 87e3c0f commit 338f814

File tree

7 files changed

+2527
-0
lines changed

7 files changed

+2527
-0
lines changed

MultimodalQnA/docker_compose/intel/cpu/xeon/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,17 @@ cd GenAIExamples/MultimodalQnA/docker_compose/intel/cpu/xeon/
235235
docker compose -f compose.yaml up -d
236236
```
237237

238+
> Alternatively, you can run docker compose with `compose_milvus.yaml` to use the Milvus vector database:
239+
240+
```bash
241+
export MILVUS_HOST=${host_ip}
242+
export MILVUS_PORT=19530
243+
export MILVUS_RETRIEVER_PORT=7000
244+
export COLLECTION_NAME=mm_rag_milvus
245+
cd GenAIExamples/MultimodalQnA/docker_compose/intel/cpu/xeon/
246+
docker compose -f compose_milvus.yaml up -d
247+
```
248+
238249
### Validate Microservices
239250

240251
1. embedding-multimodal-bridgetower
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
services:
5+
whisper-service:
6+
image: ${REGISTRY:-opea}/whisper:${TAG:-latest}
7+
container_name: whisper-service
8+
ports:
9+
- "${WHISPER_PORT}:7066"
10+
ipc: host
11+
environment:
12+
no_proxy: ${no_proxy}
13+
http_proxy: ${http_proxy}
14+
https_proxy: ${https_proxy}
15+
restart: unless-stopped
16+
17+
milvus-etcd:
18+
container_name: milvus-etcd
19+
image: quay.io/coreos/etcd:v3.5.5
20+
environment:
21+
- ETCD_AUTO_COMPACTION_MODE=revision
22+
- ETCD_AUTO_COMPACTION_RETENTION=1000
23+
- ETCD_QUOTA_BACKEND_BYTES=4294967296
24+
- ETCD_SNAPSHOT_COUNT=50000
25+
volumes:
26+
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
27+
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
28+
healthcheck:
29+
test: ["CMD", "etcdctl", "endpoint", "health"]
30+
interval: 30s
31+
timeout: 20s
32+
retries: 3
33+
34+
milvus-minio:
35+
container_name: milvus-minio
36+
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
37+
environment:
38+
MINIO_ACCESS_KEY: minioadmin
39+
MINIO_SECRET_KEY: minioadmin
40+
ports:
41+
- "${MINIO_PORT1:-5044}:9001"
42+
- "${MINIO_PORT2:-5043}:9000"
43+
volumes:
44+
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
45+
command: minio server /minio_data --console-address ":9001"
46+
healthcheck:
47+
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
48+
interval: 30s
49+
timeout: 20s
50+
retries: 3
51+
52+
milvus-standalone:
53+
container_name: milvus-standalone
54+
image: milvusdb/milvus:v2.4.6
55+
command: ["milvus", "run", "standalone"]
56+
security_opt:
57+
- seccomp:unconfined
58+
environment:
59+
ETCD_ENDPOINTS: milvus-etcd:2379
60+
MINIO_ADDRESS: milvus-minio:9000
61+
volumes:
62+
- ${DOCKER_VOLUME_DIRECTORY:-.}/config/milvus.yaml:/milvus/configs/milvus.yaml
63+
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
64+
healthcheck:
65+
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
66+
interval: 30s
67+
start_period: 90s
68+
timeout: 20s
69+
retries: 3
70+
ports:
71+
- "19530:19530"
72+
- "${MILVUS_STANDALONE_PORT:-9091}:9091"
73+
depends_on:
74+
- "milvus-etcd"
75+
- "milvus-minio"
76+
77+
dataprep-multimodal-milvus:
78+
image: ${REGISTRY:-opea}/dataprep:${TAG:-latest}
79+
container_name: dataprep-multimodal-milvus
80+
depends_on:
81+
- milvus-standalone
82+
- lvm-llava
83+
ports:
84+
- "${DATAPREP_MMR_PORT}:5000"
85+
environment:
86+
no_proxy: ${no_proxy}
87+
http_proxy: ${http_proxy}
88+
https_proxy: ${https_proxy}
89+
MULTIMODAL_DATAPREP: true
90+
DATAPREP_COMPONENT_NAME: "OPEA_DATAPREP_MULTIMODALMILVUS"
91+
MILVUS_HOST: ${MILVUS_HOST}
92+
COLLECTION_NAME: ${COLLECTION_NAME:-LangChainCollection}
93+
LVM_ENDPOINT: "http://${LVM_SERVICE_HOST_IP}:${LVM_PORT}/v1/lvm"
94+
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
95+
restart: unless-stopped
96+
97+
embedding-multimodal-bridgetower:
98+
image: ${REGISTRY:-opea}/embedding-multimodal-bridgetower:${TAG:-latest}
99+
container_name: embedding-multimodal-bridgetower
100+
ports:
101+
- ${EMM_BRIDGETOWER_PORT}:${EMM_BRIDGETOWER_PORT}
102+
environment:
103+
no_proxy: ${no_proxy}
104+
http_proxy: ${http_proxy}
105+
https_proxy: ${https_proxy}
106+
EMM_BRIDGETOWER_PORT: ${EMM_BRIDGETOWER_PORT}
107+
PORT: ${EMM_BRIDGETOWER_PORT}
108+
healthcheck:
109+
test: ["CMD-SHELL", "http_proxy='' curl -f http://localhost:${EMM_BRIDGETOWER_PORT}/v1/health_check"]
110+
interval: 10s
111+
timeout: 6s
112+
retries: 18
113+
start_period: 30s
114+
entrypoint: ["python", "bridgetower_server.py", "--device", "cpu", "--model_name_or_path", $EMBEDDING_MODEL_ID]
115+
restart: unless-stopped
116+
117+
embedding:
118+
image: ${REGISTRY:-opea}/embedding:${TAG:-latest}
119+
container_name: embedding
120+
depends_on:
121+
embedding-multimodal-bridgetower:
122+
condition: service_healthy
123+
ports:
124+
- ${MM_EMBEDDING_PORT_MICROSERVICE}:${MM_EMBEDDING_PORT_MICROSERVICE}
125+
ipc: host
126+
environment:
127+
no_proxy: ${no_proxy}
128+
http_proxy: ${http_proxy}
129+
https_proxy: ${https_proxy}
130+
MMEI_EMBEDDING_ENDPOINT: ${MMEI_EMBEDDING_ENDPOINT}
131+
MM_EMBEDDING_PORT_MICROSERVICE: ${MM_EMBEDDING_PORT_MICROSERVICE}
132+
MULTIMODAL_EMBEDDING: true
133+
restart: unless-stopped
134+
135+
retriever-milvus:
136+
image: ${REGISTRY:-opea}/retriever:${TAG:-latest}
137+
container_name: retriever-milvus
138+
depends_on:
139+
- milvus-standalone
140+
ports:
141+
- "${MILVUS_RETRIEVER_PORT}:${MILVUS_RETRIEVER_PORT}"
142+
ipc: host
143+
environment:
144+
no_proxy: ${no_proxy}
145+
http_proxy: ${http_proxy}
146+
https_proxy: ${https_proxy}
147+
MILVUS_HOST: ${host_ip}
148+
BRIDGE_TOWER_EMBEDDING: ${BRIDGE_TOWER_EMBEDDING}
149+
LOGFLAG: ${LOGFLAG}
150+
RETRIEVER_COMPONENT_NAME: "OPEA_RETRIEVER_MILVUS"
151+
COLLECTION_NAME: ${COLLECTION_NAME:-LangChainCollection}
152+
restart: unless-stopped
153+
154+
lvm-llava:
155+
image: ${REGISTRY:-opea}/lvm-llava:${TAG:-latest}
156+
container_name: lvm-llava
157+
ports:
158+
- "${LLAVA_SERVER_PORT}:${LLAVA_SERVER_PORT}"
159+
environment:
160+
no_proxy: ${no_proxy}
161+
http_proxy: ${http_proxy}
162+
https_proxy: ${https_proxy}
163+
LLAVA_SERVER_PORT: ${LLAVA_SERVER_PORT}
164+
LVM_PORT: ${LVM_PORT}
165+
entrypoint: ["python", "llava_server.py", "--device", "cpu", "--model_name_or_path", $LVM_MODEL_ID]
166+
restart: unless-stopped
167+
168+
lvm:
169+
image: ${REGISTRY:-opea}/lvm:${TAG:-latest}
170+
container_name: lvm
171+
depends_on:
172+
- lvm-llava
173+
ports:
174+
- "${LVM_PORT}:${LVM_PORT}"
175+
ipc: host
176+
environment:
177+
no_proxy: ${no_proxy}
178+
http_proxy: ${http_proxy}
179+
https_proxy: ${https_proxy}
180+
LVM_COMPONENT_NAME: "OPEA_LLAVA_LVM"
181+
LVM_ENDPOINT: ${LVM_ENDPOINT}
182+
LLAVA_SERVER_PORT: ${LLAVA_SERVER_PORT}
183+
LVM_PORT: ${LVM_PORT}
184+
MAX_IMAGES: ${MAX_IMAGES:-1}
185+
restart: unless-stopped
186+
187+
multimodalqna:
188+
image: ${REGISTRY:-opea}/multimodalqna:${TAG:-latest}
189+
container_name: multimodalqna-backend-server
190+
depends_on:
191+
- milvus-standalone
192+
- dataprep-multimodal-milvus
193+
- embedding
194+
- retriever-milvus
195+
- lvm
196+
ports:
197+
- "${MEGA_SERVICE_PORT}:${MEGA_SERVICE_PORT}"
198+
environment:
199+
no_proxy: ${no_proxy}
200+
https_proxy: ${https_proxy}
201+
http_proxy: ${http_proxy}
202+
MEGA_SERVICE_HOST_IP: ${MEGA_SERVICE_HOST_IP}
203+
MEGA_SERVICE_PORT: ${MEGA_SERVICE_PORT}
204+
MM_EMBEDDING_SERVICE_HOST_IP: ${MM_EMBEDDING_SERVICE_HOST_IP}
205+
MM_EMBEDDING_PORT_MICROSERVICE: ${MM_EMBEDDING_PORT_MICROSERVICE}
206+
MM_RETRIEVER_SERVICE_HOST_IP: ${MM_RETRIEVER_SERVICE_HOST_IP}
207+
LVM_SERVICE_HOST_IP: ${LVM_SERVICE_HOST_IP}
208+
LVM_MODEL_ID: ${LVM_MODEL_ID}
209+
WHISPER_PORT: ${WHISPER_PORT}
210+
WHISPER_SERVER_ENDPOINT: ${WHISPER_SERVER_ENDPOINT}
211+
ipc: host
212+
restart: always
213+
214+
multimodalqna-ui:
215+
image: ${REGISTRY:-opea}/multimodalqna-ui:${TAG:-latest}
216+
container_name: multimodalqna-gradio-ui-server
217+
depends_on:
218+
- multimodalqna
219+
ports:
220+
- "${UI_PORT}:${UI_PORT}"
221+
environment:
222+
- no_proxy=${no_proxy}
223+
- https_proxy=${https_proxy}
224+
- http_proxy=${http_proxy}
225+
- BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT}
226+
- DATAPREP_INGEST_SERVICE_ENDPOINT=${DATAPREP_INGEST_SERVICE_ENDPOINT}
227+
- DATAPREP_GEN_TRANSCRIPT_SERVICE_ENDPOINT=${DATAPREP_GEN_TRANSCRIPT_SERVICE_ENDPOINT}
228+
- DATAPREP_GEN_CAPTION_SERVICE_ENDPOINT=${DATAPREP_GEN_CAPTION_SERVICE_ENDPOINT}
229+
- MEGA_SERVICE_PORT:=${MEGA_SERVICE_PORT}
230+
- UI_PORT=${UI_PORT}
231+
- DATAPREP_MMR_PORT=${DATAPREP_MMR_PORT}
232+
ipc: host
233+
restart: always
234+
235+
networks:
236+
default:
237+
driver: bridge

0 commit comments

Comments
 (0)