Skip to content

Commit 882ec66

Browse files
authored
Merge pull request #289 from weaviate/add-support-for-nvidia-modules
Add support for NVIDIA modules
2 parents 7c279c4 + c12c7d8 commit 882ec66

File tree

5 files changed

+129
-2
lines changed

5 files changed

+129
-2
lines changed

.cicd/test.sh

+12-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,14 @@ function check_creates_template() {
182182
check_modules "--set modules.text2vec-databricks.enabled=true" "value: text2vec-databricks"
183183
check_modules "--set modules.generative-databricks.enabled=true" "value: generative-databricks"
184184
check_modules "--set modules.text2vec-mistral.enabled=true" "value: text2vec-mistral"
185-
185+
check_modules "--set modules.generative-nvidia.enabled=true" "value: generative-nvidia"
186+
check_modules "--set modules.reranker-nvidia.enabled=true" "value: reranker-nvidia"
187+
check_modules "--set modules.multi2vec-nvidia.enabled=true" "value: multi2vec-nvidia"
188+
check_modules "--set modules.text2vec-nvidia.enabled=true --set modules.text2vec-nvidia.apiKey=apiKey --set modules.generative-nvidia.enabled=true --set modules.generative-nvidia.apiKey=apiKey" "value: generative-nvidia,text2vec-nvidia"
189+
check_modules "--set modules.text2vec-nvidia.enabled=true --set modules.text2vec-nvidia.apiKey=apiKey --set modules.generative-nvidia.enabled=true --set modules.generative-nvidia.apiKey=apiKey --set modules.reranker-nvidia.enabled=true --set modules.reranker-nvidia.apiKey=apiKey" "value: generative-nvidia,text2vec-nvidia,reranker-nvidia"
190+
check_modules "--set modules.text2vec-nvidia.enabled=true --set modules.text2vec-nvidia.apiKey=apiKey --set modules.reranker-nvidia.enabled=true --set modules.reranker-nvidia.apiKey=apiKey" "value: text2vec-nvidia,reranker-nvidia"
191+
check_modules "--set modules.text2vec-nvidia.enabled=true --set modules.text2vec-nvidia.apiKey=apiKey --set modules.multi2vec-nvidia.enabled=true --set modules.multi2vec-nvidia.apiKey=apiKey" "value: multi2vec-nvidia,text2vec-nvidia"
192+
check_modules "--set modules.generative-nvidia.enabled=true --set modules.generative-nvidia.apiKey=apiKey" "value: generative-nvidia"
186193
check_modules "--set modules.text2vec-openai.enabled=true --set modules.text2vec-openai.azureApiKey=azureApiKey" "value: text2vec-openai"
187194
check_modules "--set modules.qna-openai.enabled=true --set modules.qna-openai.azureApiKey=azureApiKey" "value: qna-openai"
188195
check_modules "--set modules.generative-openai.enabled=true --set modules.generative-openai.azureApiKey=azureApiKey" "value: generative-openai"
@@ -238,6 +245,10 @@ function check_creates_template() {
238245
check_string_existence "--set modules.text2vec-mistral.enabled=true --set modules.text2vec-mistral.apiKey=mistralApiKey" "name: MISTRAL_APIKEY"
239246
check_string_existence "--set modules.generative-mistral.enabled=true --set modules.generative-mistral.apiKey=mistralApiKey --set modules.text2vec-mistral.enabled=true --set modules.text2vec-mistral.apiKey=mistralApiKey" "name: MISTRAL_APIKEY"
240247
check_string_existence "--set modules.multi2vec-cohere.enabled=true --set modules.multi2vec-cohere.apiKey=apiKey" "name: COHERE_APIKEY"
248+
check_string_existence "--set modules.multi2vec-nvidia.enabled=true --set modules.multi2vec-nvidia.apiKey=apiKey" "name: NVIDIA_APIKEY"
249+
check_string_existence "--set modules.text2vec-nvidia.enabled=true --set modules.text2vec-nvidia.apiKey=apiKey" "name: NVIDIA_APIKEY"
250+
check_string_existence "--set modules.reranker-nvidia.enabled=true --set modules.reranker-nvidia.apiKey=apiKey" "name: NVIDIA_APIKEY"
251+
check_string_existence "--set modules.generative-nvidia.enabled=true --set modules.generative-nvidia.apiKey=apiKey" "name: NVIDIA_APIKEY"
241252

242253
check_setting_has_value "--set replicas=3 --set env.RAFT_BOOTSTRAP_EXPECT=3" "name: RAFT_JOIN" "value: \"weaviate-0,weaviate-1,weaviate-2\""
243254
check_setting_has_value "--set replicas=3 --set env.RAFT_BOOTSTRAP_EXPECT=3" "name: RAFT_BOOTSTRAP_EXPECT" "value: \"3\""

weaviate/templates/_helpers.tpl

+12
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
{{- if (index .Values "modules" "generative-databricks" "enabled") -}}
5757
{{ $modules = append $modules "generative-databricks" }}
5858
{{- end -}}
59+
{{- if (index .Values "modules" "generative-nvidia" "enabled") -}}
60+
{{ $modules = append $modules "generative-nvidia" }}
61+
{{- end -}}
5962
{{- if or (index .Values "modules" "img2vec-neural" "enabled") (index .Values "modules" "img2vec-neural" "inferenceUrl") -}}
6063
{{ $modules = append $modules "img2vec-neural" }}
6164
{{- end -}}
@@ -89,6 +92,9 @@
8992
{{- if (index .Values "modules" "multi2vec-voyageai" "enabled") -}}
9093
{{ $modules = append $modules "multi2vec-voyageai" }}
9194
{{- end -}}
95+
{{- if (index .Values "modules" "multi2vec-nvidia" "enabled") -}}
96+
{{ $modules = append $modules "multi2vec-nvidia" }}
97+
{{- end -}}
9298
{{- if (index .Values "modules" "text2vec-openai" "enabled") -}}
9399
{{ $modules = append $modules "text2vec-openai" }}
94100
{{- end -}}
@@ -125,6 +131,9 @@
125131
{{- if (index .Values "modules" "text2vec-mistral" "enabled") -}}
126132
{{ $modules = append $modules "text2vec-mistral" }}
127133
{{- end -}}
134+
{{- if (index .Values "modules" "text2vec-nvidia" "enabled") -}}
135+
{{ $modules = append $modules "text2vec-nvidia" }}
136+
{{- end -}}
128137
{{- if (index .Values "modules" "ref2vec-centroid" "enabled") -}}
129138
{{ $modules = append $modules "ref2vec-centroid" }}
130139
{{- end -}}
@@ -143,6 +152,9 @@
143152
{{- if (index .Values "modules" "reranker-jinaai" "enabled") -}}
144153
{{ $modules = append $modules "reranker-jinaai" }}
145154
{{- end -}}
155+
{{- if (index .Values "modules" "reranker-nvidia" "enabled") -}}
156+
{{ $modules = append $modules "reranker-nvidia" }}
157+
{{- end -}}
146158
{{- if (index .Values "offload" "s3" "enabled") -}}
147159
{{ $modules = append $modules "offload-s3" }}
148160
{{- end -}}
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{{- $t2vNvidia := and (index .Values "modules" "text2vec-nvidia" "enabled") (index .Values "modules" "text2vec-nvidia" "apiKey") -}}
2+
{{- $generativeNvidia := and (index .Values "modules" "generative-nvidia" "enabled") (index .Values "modules" "generative-nvidia" "apiKey") }}
3+
{{- $rerankerNvidia := and (index .Values "modules" "reranker-nvidia" "enabled") (index .Values "modules" "reranker-nvidia" "apiKey") }}
4+
{{- $multi2vecNvidia := and (index .Values "modules" "multi2vec-nvidia" "enabled") (index .Values "modules" "multi2vec-nvidia" "apiKey") }}
5+
{{- $nvidia := or ($t2vNvidia) ($generativeNvidia) ($rerankerNvidia) ($multi2vecNvidia) }}
6+
{{- if $nvidia }}
7+
8+
{{- $apiKeys := list }}
9+
{{- if $t2vNvidia }}
10+
{{- $apiKeys = append $apiKeys (index .Values "modules" "text2vec-nvidia" "apiKey") -}}
11+
{{- end }}
12+
{{- if $generativeNvidia }}
13+
{{- $apiKeys = append $apiKeys (index .Values "modules" "generative-nvidia" "apiKey") -}}
14+
{{- end }}
15+
{{- if $rerankerNvidia }}
16+
{{- $apiKeys = append $apiKeys (index .Values "modules" "reranker-nvidia" "apiKey") -}}
17+
{{- end }}
18+
{{- if $multi2vecNvidia }}
19+
{{- $apiKeys = append $apiKeys (index .Values "modules" "multi2vec-nvidia" "apiKey") -}}
20+
{{- end }}
21+
22+
{{- if gt (len ($apiKeys | uniq)) 1 -}}
23+
{{- fail "nvidia modules activated, but their keys differ. Use the same key on all activated nvidia modules." }}
24+
{{- end }}
25+
26+
apiVersion: v1
27+
kind: Secret
28+
metadata:
29+
name: weaviate-nvidia
30+
labels:
31+
app.kubernetes.io/name: weaviate
32+
app.kubernetes.io/managed-by: {{ .Release.Service }}
33+
type: Opaque
34+
data:
35+
{{- if (index .Values "modules" "generative-nvidia" "apiKey") }}
36+
apiKey: {{ index .Values "modules" "generative-nvidia" "apiKey" | b64enc }}
37+
{{- else if (index .Values "modules" "reranker-nvidia" "apiKey") }}
38+
apiKey: {{ index .Values "modules" "reranker-nvidia" "apiKey" | b64enc }}
39+
{{- else if (index .Values "modules" "multi2vec-nvidia" "apiKey") }}
40+
apiKey: {{ index .Values "modules" "multi2vec-nvidia" "apiKey" | b64enc }}
41+
{{- else }}
42+
apiKey: {{ index .Values "modules" "text2vec-nvidia" "apiKey" | b64enc }}
43+
{{- end }}
44+
{{ end }}

weaviate/templates/weaviateStatefulset.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,13 @@ spec:
295295
name: weaviate-databricks
296296
key: token
297297
{{- end }}
298+
{{- if or (and (index .Values "modules" "text2vec-nvidia" "enabled") (index .Values "modules" "text2vec-nvidia" "apiKey")) (and (index .Values "modules" "generative-nvidia" "enabled") (index .Values "modules" "generative-nvidia" "apiKey")) (and (index .Values "modules" "reranker-nvidia" "enabled") (index .Values "modules" "reranker-nvidia" "apiKey")) (and (index .Values "modules" "multi2vec-nvidia" "enabled") (index .Values "modules" "multi2vec-nvidia" "apiKey")) }}
299+
- name: NVIDIA_APIKEY
300+
valueFrom:
301+
secretKeyRef:
302+
name: weaviate-nvidia
303+
key: apiKey
304+
{{- end }}
298305
{{- if and (index .Values "offload" "s3" "enabled") (index .Values "offload" "s3" "envconfig") }}
299306
{{- range $key, $value := index .Values "offload" "s3" "envconfig" }}
300307
- name: {{ $key }}

weaviate/values.yaml

+54-1
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,20 @@ modules:
11111111
# an environment variable
11121112
token: ''
11131113

1114+
# The text2vec-nvidia module uses NVIDIA API
1115+
# to dynamically compute vector embeddings based on the
1116+
# sentence's context.
1117+
# More information about NVIDIA's API can be found here:
1118+
# https://docs.api.nvidia.com/nim/reference/retrieval-apis
1119+
text2vec-nvidia:
1120+
1121+
# enable if you want to use NVIDIA text2vec module
1122+
enabled: false
1123+
1124+
# Set your NVIDIA API Key to be passed to Weaviate pod as
1125+
# an environment variable
1126+
apiKey: ''
1127+
11141128
# The multi2vec-clip modules uses CLIP transformers to vectorize both images
11151129
# and text in the same vector space. It is typically slow(er) on CPUs and should
11161130
# run with CUDA-enabled GPUs for optimal performance.
@@ -1316,6 +1330,19 @@ modules:
13161330
# an environment variable
13171331
apiKey: ''
13181332

1333+
# The multi2vec-nvidia module uses NVIDIA API
1334+
# to dynamically compute vector embeddings.
1335+
# More information about NVIDIA's API can be found here:
1336+
# https://docs.api.nvidia.com/nim/reference/retrieval-apis
1337+
multi2vec-nvidia:
1338+
1339+
# enable if you want to use NVIDIA multi2vec module
1340+
enabled: false
1341+
1342+
# Set your NVIDIA API Key to be passed to Weaviate pod as
1343+
# an environment variable
1344+
apiKey: ''
1345+
13191346
# The qna-transformers module uses neural networks, such as BERT,
13201347
# DistilBERT, to find an answer in text to a given question
13211348
qna-transformers:
@@ -1563,6 +1590,18 @@ modules:
15631590
# an environment variable
15641591
token: ''
15651592

1593+
# The generative-nvidia module uses NVIDIA API
1594+
# More information about NVIDIA's API can be found here:
1595+
# https://docs.api.nvidia.com/nim/reference/llm-apis
1596+
generative-nvidia:
1597+
1598+
# enable if you want to use NVIDIA generative module
1599+
enabled: false
1600+
1601+
# Set your NVIDIA API Key to be passed to Weaviate pod as
1602+
# an environment variable
1603+
apiKey: ''
1604+
15661605
# The img2vec-neural module uses neural networks, to generate
15671606
# a vector representation of the image
15681607
img2vec-neural:
@@ -1663,7 +1702,7 @@ modules:
16631702
# The reranker-jinaai module uses JinaAI API
16641703
# to dynamically compute a score for the relevance
16651704
# of the query with each of the initial search results.
1666-
# More information about Cohere API can be found here: https://jina.ai/reranker
1705+
# More information about JinaAI API can be found here: https://jina.ai/reranker
16671706
reranker-jinaai:
16681707

16691708
# enable if you want to use JinaAI module
@@ -1673,6 +1712,20 @@ modules:
16731712
# an environment variable
16741713
apiKey: ''
16751714

1715+
# The reranker-nvidia module uses NVIDIA API
1716+
# to dynamically compute a score for the relevance
1717+
# of the query with each of the initial search results.
1718+
# More information about NVIDIA's API can be found here:
1719+
# https://docs.api.nvidia.com/nim/reference/retrieval-apis
1720+
reranker-nvidia:
1721+
1722+
# enable if you want to use NVIDIA reranker module
1723+
enabled: false
1724+
1725+
# Set your NVIDIA API Key to be passed to Weaviate pod as
1726+
# an environment variable
1727+
apiKey: ''
1728+
16761729
# The reranker-transformers module uses Cross-Encoders for
16771730
# sentence pair scoring and sentence pair classification tasks.
16781731
# More information about Cross-Encoders can be found here:

0 commit comments

Comments
 (0)