Run Gemma 2 Powered Chatbot on GKE Autopilot
Quick Links
生成式 AI 正以驚人的速度發展,大型語言模型 (LLM) 更是其中的佼佼者。這些模型展現了前所未有的語言理解和生成能力,為各個領域帶來革命性的應用。
然而,使用專有 LLM 模型也存在一些風險:
- 成本考量: 使用專有模型 API 通常需要支付高昂的費用,尤其是在需要處理大量數據或高併發請求的情況下。
- 資料隱私: 將敏感資料傳輸到第三方 API 可能存在資料洩露的風險。
- 功能限制: 專有模型的功能和客製化程度受限於 API 提供者。
開源 LLM 模型,如 Gemma 2,為我們提供了另一種選擇。 它們允許使用者自由地使用、修改和部署模型,無需擔心成本和資料隱私問題,並能根據自身需求進行客製化。
本工作坊將帶您學習如何在 Google Kubernetes Engine (GKE) Autopilot 上運行 Ollama 和 Open WebUI,並使用 Gemma 2 模型打造您自己的聊天機器人。 GKE Autopilot 是一種全託管的 Kubernetes 服務,可自動管理基礎架構,讓您專注於模型部署和應用開發。 它也是一個經濟高效的解決方案,可以根據您的需求自動擴展資源,避免不必要的成本支出。 Ollama 是一個用於運行 LLM 的工具,可以輕鬆地下載和運行各種開源模型。 Open WebUI 則提供了一個使用者友善的網頁介面,讓您可以輕鬆地與您的聊天機器人互動。
目的
透過本工作坊,您將學習到:
- 開源 LLM 模型 Gemma 2 的基本概念和應用
- Ollama 和 Open WebUI 的安裝和使用方法
- GKE Autopilot 的基礎知識和操作方法
- 如何在 GKE Autopilot 上部署和運行 Ollama 和 Open WebUI
- 如何使用 Open WebUI 與您的聊天機器人互動
環境準備
本工作坊將使用 Qwiklabs 提供的線上實驗室環境,讓您無需自行準備環境,即可快速上手 GKE Autopilot 和開源 LLM 模型。
Qwiklabs 是一個提供實作式學習環境的平台,讓您可以透過瀏覽器,在真實的 Google Cloud 雲端環境中進行操作和實驗。
操作步驟
- 填寫 Qwiklabs 啟用表單。
- 前往 Qwiklabs,使用啟用表單中提供的 Email 註冊帳號。 (如果您已經註冊過,請您登入)
- 前往 Qwiklabs 教室。
注意事項
請確認您已填寫 Qwiklabs 啟用表單,並且使用相同 Email 註冊 Qwiklabs 帳號。
開始實驗
在 Qwiklabs 教室中,找到名為 "Serving an Open-source Generative AI Model with GKE" 的實驗,並點擊 "Start Lab" 按鈕,啟動 Google Cloud 環境部署。
實驗室環境說明
- 實驗室會自動建立一個獨立的 Google Cloud 專案,供您進行操作。
- 實驗室提供的所有資源皆為暫時性,實驗結束後會自動刪除。
- 實驗室環境的詳細說明,請參考實驗中的 "Setup and Requirements" 章節。
啟動 Google Cloud Console
- 實驗開始後,請使用 無痕視窗 開啟實驗左側計時器下方的 "Open Google Console" 連結。
- 使用實驗提供的登入資訊登入 Google Cloud Console。
執行指令和編輯檔案
在本工作坊中,您將使用 Cloud Shell 和 Cloud Shell Editor 來執行指令和編輯檔案。
- Cloud Shell: 是一個內建於 Google Cloud Console 的線上終端機,提供預先配置好的開發環境,讓您可以直接在瀏覽器中執行 gcloud CLI、kubectl 等指令。
- Cloud Shell Editor: 是一個基於 Code OSS 的線上程式碼編輯器,與 Cloud Shell 整合,讓您可以方便地編輯 Cloud Shell 環境中的檔案。如果您熟悉 VS Code,那麼使用 Cloud Shell Editor 將會駕輕就熟。
開啟 Cloud Shell
在 Google Cloud Console 的右上角,點擊 Cloud Shell 圖示 即可開啟。
開啟 Cloud Shell Editor
在 Cloud Shell 視窗中,點擊工具列上的 Open Editor 圖示 即可開啟。
注意事項
- 請勿使用您自己的 Google Cloud 帳戶進行本實驗,以免產生額外費用。
- 開始實驗後,請保持實驗說明頁面開啟,避免非預期的實驗中斷。
- 登入 Google Cloud Console 之後,請參考本工作坊手冊完成後續步驟,實驗中的說明與本次工作坊內容無關。
任務 1. 準備 GKE Autopilot 叢集
Google Kubernetes Engine (GKE) Autopilot 是一種全託管的 Kubernetes 叢集管理方案,讓您無需管理基礎架構,即可輕鬆部署和擴展應用程式。
GKE Autopilot 特別適合 AI 工作負載,原因如下:
- 簡化管理: GKE Autopilot 全面管理節點、作業系統和 Kubernetes 控制平面,讓您專注於 AI 模型的開發和部署,無需費心於基礎架構的維護。
- 安全性增強: Autopilot 內建了多項安全功能,例如自動安全修補、網路政策和 Pod 安全政策,有效保護您的 AI 模型和資料安全。
- 成本優化: 您只需支付 Pod 實際使用的資源,無需預留節點容量,有效降低 AI 工作負載的成本。
請依照以下步驟建立 GKE Autopilot 叢集:
-
設定環境變數:為了方便後續操作,我們先設定叢集名稱和區域的環境變數。請將以下指令複製貼上至 Cloud Shell 中執行:
-
建立叢集: 執行以下指令建立 GKE Autopilot 叢集:
此指令會在
us-central1
區域建立一個名為my-cluster
的 GKE Autopilot 叢集。您可以根據需求修改叢集名稱和區域。 -
驗證叢集狀態:建立叢集需要一些時間,數分鐘後您可以使用以下指令驗證叢集狀態:
如果叢集運作正常,您會看到類似以下的輸出訊息,顯示 Kubernetes 控制平面、服務等資訊:
Kubernetes control plane is running at https://34.55.86.35 GLBCDefaultBackend is running at https://34.55.86.35/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy KubeDNS is running at https://34.55.86.35/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://34.55.86.35/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
任務 2. 部署 Ollama
GKE Autopilot 簡化了 Kubernetes 的操作,讓您擺脫基礎架構管理的負擔,專注於應用程式開發。您只需在 PodSpec 中定義所需的硬體資源,GKE Autopilot 便會自動挑選最合適的節點來運行您的 Ollama 模型。在本例中,由於我們指定了需要 NVIDIA L4 GPU,GKE Autopilot 會將 Ollama 部署到配備 GPU 的節點上。
Ollama 需要穩定的儲存空間來存放模型檔案,因此我們使用 StatefulSet 來部署。StatefulSet 能夠確保每個 Pod 擁有獨一無二的網路識別,並且在重新啟動或遷移後仍能保留其儲存空間。StatefulSet 中的 Persistent Volume 能夠將模型檔案持久化儲存,避免每次啟動 Pod 都需要重新下載模型,節省時間並提升效率。
請依照以下步驟部署 Ollama:
-
建立 YAML 檔案: 使用 Cloud Shell Editor 建立一個名為
ollama.yaml
的檔案,並將以下內容複製貼上:apiVersion: apps/v1 kind: StatefulSet metadata: name: ollama spec: selector: matchLabels: app: ollama serviceName: ollama template: metadata: labels: app: ollama spec: nodeSelector: cloud.google.com/gke-accelerator: nvidia-l4 cloud.google.com/gke-accelerator-count: "1" containers: - name: ollama image: ollama/ollama ports: - containerPort: 11434 resources: limits: nvidia.com/gpu: "1" volumeMounts: - name: ollama mountPath: /root/.ollama volumeClaimTemplates: - metadata: name: ollama spec: accessModes: - ReadWriteOnce storageClassName: standard-rwo resources: requests: storage: 30Gi --- apiVersion: v1 kind: Service metadata: name: ollama spec: selector: app: ollama clusterIP: None ports: - port: 11434
-
部署 Ollama: 儲存
ollama.yaml
檔案後,在 Cloud Shell 中執行以下指令: -
確認部署狀態: 執行以下指令觀察 Pod 的狀態:
等待
ollama-0
Pod 變成Running
狀態,表示 Ollama 已成功部署。
透過以上步驟,您已將 Ollama 模型部署至 GKE Autopilot。StatefulSet 確保了 Ollama 模型的穩定運行和資料持久化,讓您的 LLM 應用程式更加可靠。接下來,我們將使用 Ollama CLI 來取得 Gemma 2 模型並且與其進行互動。
任務 3. 使用 Ollama CLI 與 Gemma 2 互動
在這個任務中,我們將使用 Ollama CLI 與部署在 GKE Autopilot 上的 Ollama server 互動。Ollama CLI 是一個命令列工具,讓您可以輕鬆地管理和使用 Ollama 模型。
請依照以下步驟操作:
-
安裝 Ollama CLI:在 Cloud Shell 中執行以下指令安裝 Ollama CLI:
安裝過程中會出現一些訊息,如下所示:
>>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle ######################################################################## 100.0%#=#=# >>> Creating ollama user... >>> Adding ollama user to render group... >>> Adding ollama user to video group... >>> Adding current user to ollama group... >>> Creating ollama systemd service... WARNING: Unable to detect NVIDIA/AMD GPU. Install lspci or lshw to automatically detect and install GPU dependencies. >>> The Ollama API is now available at 127.0.0.1:11434. >>> Install complete. Run "ollama" from the command line.
-
將 Ollama 服務端口轉發到本地: 執行以下指令,將 Ollama 服務的 11434 端口轉發到本地的 11434 端口:
這個指令會建立一個連線,讓您可以透過本機的 11434 端口訪問叢集中的 Ollama 服務。請保持這個終端視窗開啟,不要關閉。
-
分割終端視窗: 點擊 Cloud Shell 視窗上方的「垂直分割」按鈕,將終端視窗分割成兩個分頁。
-
在新分頁中執行 Gemma 2 模型: 在新的終端分頁中,設定 OLLAMA_HOST 環境變數,指定 Ollama API 的地址,然後使用 ollama run 指令執行 Gemma 2 模型:
執行成功後,您會看到類似以下的輸出,表示 Gemma 2 模型已啟動,並準備好接收您的輸入:
現在您可以輸入文字與 Gemma 2 模型互動,例如:
Gemma 2 模型會根據您的輸入產生回應。
透過以上步驟,您已成功使用 Ollama CLI 與部署在 GKE Autopilot 上的 Gemma 2 模型互動。您可以嘗試不同的輸入,體驗 Gemma 2 模型的強大功能。
任務 4. 部署 Open WebUI,打造更友善的 Chatbot 互動介面
Ollama CLI 提供了基本的命令列互動功能,但若要使用更完整的 Chatbot 介面,我們可以部署 Open WebUI。Open WebUI 是一個開源的網頁介面,讓您可以透過圖形化介面與 Ollama 模型互動,體驗更便捷、更友善的 LLM 使用體驗。
請依照以下步驟部署 Open WebUI:
-
建立 YAML 檔案: 使用 Cloud Shell Editor 建立一個名為
openwebui.yaml
的檔案,並將以下內容複製貼上:apiVersion: apps/v1 kind: StatefulSet metadata: name: openwebui spec: selector: matchLabels: app: openwebui serviceName: openwebui template: metadata: labels: app: openwebui spec: containers: - name: openwebui image: ghcr.io/open-webui/open-webui:main ports: - containerPort: 8080 env: - name: OLLAMA_BASE_URL value: http://ollama:11434 - name: WEBUI_AUTH value: "False" resources: requests: cpu: "1" memory: 1Gi limits: cpu: "1" memory: 1Gi volumeMounts: - name: openwebui mountPath: /app/backend/data volumeClaimTemplates: - metadata: name: openwebui spec: accessModes: - ReadWriteOnce storageClassName: standard-rwo resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: openwebui spec: type: LoadBalancer selector: app: openwebui ports: - port: 80 targetPort: 8080
-
部署 Open WebUI: 儲存
openwebui.yaml
檔案後,在 Cloud Shell 中執行以下指令部署 Open WebUI: -
取得 Load Balancer IP 地址: 執行以下指令取得 Load Balancer 的外部 IP 地址:
在輸出結果中,找到
EXTERNAL-IP
欄位,即可看到 Load Balancer 的 IP 地址。 -
透過瀏覽器訪問 Open WebUI: 開啟瀏覽器,並在網址列輸入
http://<EXTERNAL-IP>
(將<EXTERNAL-IP>
替換成您取得的 Load Balancer IP 地址)。稍等片刻,Open WebUI 介面就會載入完成。您可以在介面中選擇 Gemma 2 模型,並開始進行互動。
透過以上步驟,您已成功部署 Open WebUI,並透過網頁介面與 Gemma 2 模型互動。Open WebUI 提供了更友善的操作方式和更豐富的功能,讓您可以更方便地探索 LLM 的應用。
完成!
🎉 恭喜您成功完成了本工作坊!
您現在已經掌握了在 Google Cloud 上使用 GKE Autopilot、Ollama 和 Open WebUI 部署並運行開源 LLM 模型 Gemma 2 的技能,可以構建自己的聊天機器人應用程式了!
回顧一下,您在本工作坊中學到了:
- 如何在 GKE Autopilot 上快速部署 Ollama,輕鬆載入 Gemma 2 模型。
- 如何使用 Ollama CLI 與 Gemma 2 模型進行初步互動和測試。
- 如何部署 Open WebUI,打造更直觀、更友善的聊天機器人介面。
- 如何透過 Load Balancer 將您的聊天機器人服務發佈到網路上。
有了這些知識,您可以:
- 進一步客製化您的聊天機器人,例如調整模型參數、設計不同的對話風格等。
- 將您的聊天機器人整合到其他應用程式中,例如網站、客服系統等,提升使用者體驗。
- 探索更多開源 LLM 模型,例如 LLaMA 2、Vicuna 等,打造功能更強大的聊天機器人。
- 利用 GKE Autopilot 的自動擴展和成本優化功能,有效控制聊天機器人的運行成本。
您可以繼續探索此專案,完成後請點擊 End Lab 按鈕來完成實驗。希望您喜歡這個工作坊,並期待您在聊天機器人開發的道路上走得更遠! 🚀
注意事項
當您結束實驗時,Google Cloud 專案中的所有資料將會被清除並刪除。