使用 Open WebUI 在 Kubernetes 集群上部署 Llama3??
從今年開始,人們對大型語言模型 (LLM) 及其在 GPU 基礎(chǔ)設(shè)施上的部署的興趣顯著增加。這種不斷增長的熱情是由人工智能和機(jī)器學(xué)習(xí)的進(jìn)步推動的,這需要 GPU 能夠有效提供大量的計(jì)算能力。GPU 領(lǐng)先制造商 Nvidia 的股價(jià)也因這一趨勢而飆升。同樣誕生了大量的大模型,對于這些模型的部署和管理也變得越來越重要,在這方面 Ollama 和 OpenUI 是一個不錯的選擇。
Ollama 是一個開源的機(jī)器學(xué)習(xí)模型部署工具,它可以幫助您將模型部署到生產(chǎn)環(huán)境中,簡化大型語言模型 (LLM) 的管理和交互。Ollama 擁有各種一流的開源模型,例如 Llama 3、Phi 3、Mistral 等等,我們可以將 Ollama 看成是 Docker,但是專注于機(jī)器學(xué)習(xí)模型。
使用 Ollama 部署模型非常簡單,就類似于使用 Docker 部署應(yīng)用程序一樣。但是,如果你對 CLI 不熟悉,那么使用 Ollama 會有點(diǎn)痛苦。為了解決這個問題,我們可以使用一個 open-webui 的項(xiàng)目,它提供了一個漂亮的界面,可以讓您更輕松地部署模型。
為了更好地管理 Ollama,我們可以將 Ollama 部署到 Kubernetes 集群中。這樣,我們就可以更好地管理 Ollama,而不需要擔(dān)心 Ollama 的高可用性、擴(kuò)展性等問題。
當(dāng)然首先需要一個 Kubernetes 集群,最好帶有 GPU,但即使沒有 GPU,llama3 模型在僅使用 CPU 的情況下也能表現(xiàn)得相對較好。
$ kubectl version
Client Version: v1.28.11
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.7
部署 Ollama 到 Kubernetes
要部署 Ollama 和 Open-WebUI 到 Kubernetes 很簡單,因?yàn)?Open-WebUI 項(xiàng)目提供了一個 Helm Chart,可以讓我們更輕松地部署 Ollama 和 Open-WebUI。這個 charts 包被托管在 https://helm.openwebui.com,我們可以使用 Helm 添加這個 repo:
helm repo add open-webui https://helm.openwebui.com/
helm repo update
open-webui 這個 charts 包默認(rèn)情況下會部署 Ollama,我們可以根據(jù)自己的需求進(jìn)行配置,例如我們可以配置 Ollama 是否使用 GPU,是否開啟數(shù)據(jù)持久化等等,我們可以覆蓋默認(rèn)的配置來進(jìn)行配置,如下:
# myvalues.yaml
ollama:
enabled: true # 自動安裝 Ollama Helm Chart
ollama: # 配置 Ollama
gpu:
enabled: false # 是否使用 GPU
# type: 'nvidia'
# number: 1
# models: # 容器啟動的時候加載的模型
# - llama3
# - mistral
persistentVolume: # 配置持久化存儲
enabled: true
storageClass: nfs-client # 指定 storageClass
# existingClaim: "" # 也可以使用已經(jīng)存在的 PVC
# ========== Pipelines 配置 ==========
pipelines: # OpenAI API 插件框架
enabled: true
persistence:
enabled: true
storageClass: "nfs-client"
service:
type: NodePort
# ========== open-webui 配置 ==========
# ingress: # 配置 Ingress
# enabled: false
# host: "open-webui.example.com"
# 配置持久化存儲
persistence:
enabled: true
# existingClaim: "" # 也可以使用已經(jīng)存在的 PVC
storageClass: "nfs-client" # 指定 storageClass
service:
type: NodePort # 設(shè)置 Service 類型
# 指定 OpenAI API URL,如果不指定,默認(rèn)使用 Pipelines 服務(wù)的端點(diǎn) https://api.openai.com/v1
# openaiBaseApiUrl: ""
# 配置額外的環(huán)境變量
extraEnvVars:
- name: HF_ENDPOINT
value: https://hf-mirror.com
# - name: OPENAI_API_KEY # 指定 OpenAI API Key
# value: "0p3n-w3bu!"
在上面的配置中,我們可以配置 Ollama 是否使用 GPU,是否開啟數(shù)據(jù)持久化等等,對于 open-webui 部分,我們配置的是一個 NodePort 類型的 Service,這樣我們就可以通過 Node 的 IP 和 NodePort 來訪問 Open-WebUI 項(xiàng)目,當(dāng)然你也可以配置 Ingress 來訪問。
注意:Open-WebUI 項(xiàng)目默認(rèn)會去訪問 huggingface 的模型倉庫,因?yàn)槟承┰?,默認(rèn)情況下國內(nèi)是無法訪問的,所以我們需要配置 HF_ENDPOINT 環(huán)境變量來指定一個鏡像地址 https://hf-mirror.com,否則會出錯。
然后我們可以使用 Helm 安裝這個 charts 包:
helm upgrade --install ollama open-webui/open-webui -f myvalues.yaml --create-namespace --namespace kube-ai
部署完成后,會在 kube-ai 這個命名空間下運(yùn)行幾個 Pod,我們可以查看 Pod 的狀態(tài):
$ kubectl get pods -n kube-ai
NAME READY STATUS RESTARTS AGE
open-webui-0 1/1 Running 0 2m11s
open-webui-ollama-944dd68fc-wxsjf 1/1 Running 0 24h
open-webui-pipelines-557f6f95cd-dfgh8 1/1 Running 0 25h
因?yàn)樯厦嫖覀兣渲玫氖?nbsp;NodePort 類型的 Service,所以我們可以通過 Node 的 IP 和 NodePort 來訪問 Open-WebUI 項(xiàng)目:
$ kubectl get svc -n kube-ai
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
open-webui NodePort 10.96.1.212 <none> 80:31009/TCP 25h
open-webui-ollama ClusterIP 10.96.2.112 <none> 11434/TCP 25h
open-webui-pipelines NodePort 10.96.2.170 <none> 9099:32322/TCP 25h
使用
現(xiàn)在我們就可以通過 http://NodeIP:31009 來訪問 Open-WebUI 項(xiàng)目了。
第一次使用的時候需要注冊一個賬號,然后我們就可以登錄到 Open-WebUI 項(xiàng)目主頁了。
如果你有 Ollama 在其他地方運(yùn)行,我們可以將其添加為另一個連接。
首先需要配置連接 Ollama 的地址,然后我們就可以連接到 Ollama 了,連接成功后,我們就可以看到 Ollama 的模型列表了。
點(diǎn)擊左下角的用戶頭像,然后選擇 管理員面板,在管理員面板頁面選擇 設(shè)置 標(biāo)簽頁,然后切換到 外部連接 配置項(xiàng),我們可以設(shè)置 Ollama API 地址,我們這里使用的是 Helm 部署的 Ollama,默認(rèn)已經(jīng)為我們配置好了 Ollama API 地址。
接下來切換到 模型 標(biāo)簽頁,我們就可以從 Ollama 的模型倉庫中拉取模型了,可以下載的模型可以從 https://ollama.com/library 查看。比如我們這里選擇 llama3 模型,輸入 llama3 然后點(diǎn)擊右側(cè)的拉取下載按鈕,就會開始下載這個模型了,在頁面中也可以看到下載的進(jìn)度。
模型拉取完成后,切回到首頁,我們就可以選擇切換到 Llama3 模型了。
接下來我們就可以使用 Llama3 模型為我們服務(wù)了。
總結(jié)
在本文中,我們探討了使用 Open WebUI 在 Kubernetes 集群上部署 Llama3 的過程。通過容器化和編排技術(shù),我們成功地將 AI powered 的聊天機(jī)器人部署到了可擴(kuò)展和維護(hù)的環(huán)境中。Open WebUI 的簡潔界面和 Kubernetes 的強(qiáng)大自動化能力,讓我們簡化了部署過程,減少了手動干預(yù)。隨著世界對 AI 驅(qū)動解決方案的不斷依賴,這種技術(shù)組合將扮演關(guān)鍵角色,快速地帶領(lǐng)創(chuàng)新應(yīng)用程序 Llama3 告訴市場。AI Powered 的聊天機(jī)器人的未來看起來非常光明,Open WebUI 和 Kubernetes 將繼續(xù)領(lǐng)先,期待著下一個令人興奮的發(fā)展?。ㄟ@一段就來自 Llama3 模型生成)