在Kubernetes上部署生成式人工智能應(yīng)用程序的分步指南
譯文譯者 | 李睿
審校 | 重樓
在當(dāng)今快節(jié)奏的技術(shù)和市場環(huán)境中,高效地部署人工智能(AI)/機器學(xué)習(xí)(ML)應(yīng)用程序至關(guān)重要。Kubernetes是一個強大的開源平臺,已經(jīng)成為管理和擴展容器化應(yīng)用程序的領(lǐng)先解決方案,確保它們在各種環(huán)境中無縫運行。
在本指南中,將引導(dǎo)開發(fā)人員逐步完成在Kubernetes上部署任何AI/ML應(yīng)用程序的過程。從容器化應(yīng)用程序到設(shè)置Kubernetes集群,再到部署AI/ML應(yīng)用程序,涵蓋了所有內(nèi)容。
為什么在Kubernetes上部署生成式人工智能應(yīng)用程序?
在Kubernetes上部署AI/ML應(yīng)用程序為管理復(fù)雜的AI/ML工作負載提供了一個強大的解決方案。其主要優(yōu)點之一是可擴展性。Kubernetes可以自動擴展基礎(chǔ)設(shè)施,有效地適應(yīng)不同的工作負載,并確保根據(jù)需求有效地分配資源。這種自動擴展功能對于處理AI/ML任務(wù)中涉及的大型計算至關(guān)重要。
此外,Kubernetes支持多云和混合云環(huán)境,提供靈活性并避免供應(yīng)商鎖定。它為開發(fā)、測試和部署提供了一致和統(tǒng)一的運行環(huán)境,增強了數(shù)據(jù)科學(xué)家和工程師之間的協(xié)作。
Kubernetes還確保了高可用性和容錯性,自動替換或重新調(diào)度失敗的容器,確保了AI/ML應(yīng)用程序的可靠性和健壯性。此外,它簡化了許多操作,包括更新和回滾,允許團隊更多地專注于構(gòu)建AI/ML模型,而不是管理基礎(chǔ)設(shè)施。
先決條件
- Docker Desktop安裝容器化應(yīng)用程序。
- 在安裝Minikube之后,將使用Minikube創(chuàng)建一個單節(jié)點集群。
- 下載并安裝Node.js,因為示例應(yīng)用程序是Node.js應(yīng)用程序。
- 注冊一個免費的SingleStore數(shù)據(jù)庫云帳戶,將應(yīng)用程序與數(shù)據(jù)庫集成。
教程
首先,注冊一個GitHub賬戶。
然后,將已經(jīng)可用的openai-quickstart-node存儲庫克隆到本地。
git clone https://github.com/pavanbelagatti/openai-quickstart-node.git
再導(dǎo)航到項目目錄。
cd openai-quickstart-node
安裝項目需求和依賴項。
npm install
創(chuàng)建一個.env文件并添加OpenAI API密鑰。
touch .env
在.env文件中,將OpenAI Key添加為環(huán)境變量,如下所示:
OPENAI_API_KEY=<Add Your OpenAI API Key>
使用以下命令運行應(yīng)用程序。
npm run dev
你可以在Local 3000上看到應(yīng)用程序。
為應(yīng)用程序編寫一個Dockerfile將其容器化
Dockerfile
touch Dockerfile
在其中添加以下Dockerfile說明。
Dockerfile
# Use the official Node.js image as a parent image
FROM node:14-alpine as build
# Set the working directory in the Docker container
WORKDIR /app
# Copy the package.json and package-lock.json files into the container at /app
COPY package*.json ./
# Install the dependencies
RUN npm install
# Copy the local files into the container at /app
COPY . .
# Build the application
RUN npm run build
# Start from a smaller image to reduce image size
FROM node:14-alpine as run
# Set the working directory in the Docker container
WORKDIR /app
# Copy over dependencies
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/.next ./.next
COPY --from=build /app/public ./public
COPY --from=build /app/package*.json ./
# Expose port 3000 for the app to be accessible externally
EXPOSE 3000
# Command to run the application
CMD ["npm", "start"]
構(gòu)建、標記并將其推送到DockerHub。
docker build -t <image name>
注:將圖像命名為generativeai-node-app。
然后,啟動容器。
已經(jīng)建立圖像!現(xiàn)在是使用以下命令啟動帶有指定端口的Docker容器時候了:
docker run -p 3002:3002 generativeai-node-app
然后,用DockerHub憑證重新構(gòu)建它。
docker build -t <your dockerhub username>/<image name>
將圖像推送到DockerHub。
docker push <your dockerhub username>/<image name>
可以通過訪問DockerHub來確認圖像是否被推送。
在Kubernetes上部署和公開應(yīng)用程序
為了部署和公開應(yīng)用程序,需要兩個yaml文件:deployment.yaml和service.yaml。
其中一個文件包含部署說明,另一個文件包含服務(wù)公開說明。
首先,看看deployment.yaml文件。
YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: genai-app
spec:
replicas: 2
selector:
matchLabels:
app: genai-app
template:
metadata:
labels:
app: genai-app
spec:
containers:
- name: genai-app
image: pavansa/generativeai-node-app:latest
ports:
- containerPort: 3000
以下是service.yaml文件
YAML
apiVersion: v1
kind: Service
metadata:
name: genai-app-service
spec:
selector:
app: genai-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
以下使用Minikube創(chuàng)建一個單節(jié)點Kubernetes集群,并將使用它來部署應(yīng)用程序。
使用以下的命令啟動Minikube。
minikube start
這是應(yīng)該看到的輸出。
注:保持Docker Desktop運行,并在其中啟用Kubernetes。以下圖片僅供參考。
使用下面的命令應(yīng)用部署文件。
kubectl apply -f deployment.yaml
類似地,應(yīng)用service yaml文件。
kubectl apply -f service.yaml
首先,使用下面的命令檢查pod的狀態(tài)。
kubectl get pods
應(yīng)該看到所需的輸出,如下圖所示:
以下檢查一下應(yīng)用程序的部署狀態(tài),看看所需的pod是否按預(yù)期運行。
kubectl get deployment
檢查一下應(yīng)用程序的服務(wù)狀態(tài)。
kubectl get service
以下看看是否可以公開應(yīng)用程序并訪問它。
minikube service <add your application service name> --url
應(yīng)該看到下面的輸出,并且能夠訪問應(yīng)用程序。
可以看到URL鏈接,以訪問應(yīng)用程序。
現(xiàn)在將應(yīng)用程序容器化,使用Kubernetes進行部署和公開。
為應(yīng)用程序集成數(shù)據(jù)庫
在Kubernetes上成功部署和公開AI/ML應(yīng)用程序之后,可能需要一個健壯且可擴展的數(shù)據(jù)庫來處理應(yīng)用程序數(shù)據(jù)。SingleStore是一個高性能、可擴展的SQL數(shù)據(jù)庫,非常適合AI/ML應(yīng)用程序。在本節(jié)將指導(dǎo)完成將SingleStore數(shù)據(jù)庫集成到kubernetes部署的應(yīng)用程序中的過程。
需要一個免費的SingleStore云帳戶。
創(chuàng)建一個工作區(qū),然后創(chuàng)建適合應(yīng)用程序的數(shù)據(jù)庫和表。
轉(zhuǎn)到SQL編輯器,如下圖所示:
使用下面的SQL語句創(chuàng)建一個新數(shù)據(jù)庫。
-- create a database
CREATE DATABASE <database name>;
接下來,使用USE命令切換到新數(shù)據(jù)庫。
USE <database name>;
然后,用所需的模式在新數(shù)據(jù)庫中創(chuàng)建一個表。
-- create a table
CREATE TABLE <table name> (
);
你可以在SQL編輯器中粘貼這些SQL命令,突出顯示它們,然后單擊Run按鈕。
在這個教程中,可以找到創(chuàng)建數(shù)據(jù)庫、表和在表中提供信息的整個過程。
更新Kubernetes部署配置
如果SingleStore數(shù)據(jù)庫運行在Kubernetes集群之外,可以更新應(yīng)用程序的Kubernetes部署配置,以允許連接到SingleStore數(shù)據(jù)庫。
YAML
apiVersion: apps/v1
kind: Deployment
...
spec:
containers:
- name: genai-app
...
env:
- name: DB_HOST
value: "<Your SingleStore DB Host>"
- name: DB_PORT
value: "<Your SingleStore DB Port>"
...
重新部署應(yīng)用程序
應(yīng)用更新后的Kubernetes部署配置,重新部署與SingleStore集成的應(yīng)用程序。
Kubectl apply -f deploy .yaml
驗證集成
在重新部署之后,需要驗證應(yīng)用程序是否成功連接到SingleStore數(shù)據(jù)庫,并按預(yù)期執(zhí)行數(shù)據(jù)庫操作。
通過執(zhí)行這些步驟,已經(jīng)成功地將SingleStore數(shù)據(jù)庫集成到Kubernetes部署的AI/ML應(yīng)用程序中,為管理應(yīng)用程序數(shù)據(jù)提供了一個健壯且可擴展的解決方案。
結(jié)論
現(xiàn)在成功完成了在Kubernetes上部署AI/ML應(yīng)用程序的綜合步驟!這一指南引導(dǎo)開發(fā)人員完成了從容器化應(yīng)用程序到在Kubernetes上部署和公開應(yīng)用程序的每個重要階段。
當(dāng)繼續(xù)探索和增強AI/ML部署時,需要考慮集成像SingleStore這樣的高性能數(shù)據(jù)庫來無縫地管理應(yīng)用程序數(shù)據(jù)。SingleStore提供可擴展性、速度和效率,確保AI/ML應(yīng)用程序在強大的數(shù)據(jù)庫后端以最佳方式運行。
原文標題:Deploying GenAI Applications on Kubernetes: A Step-By-Step Guide,作者:Pavan Belagatti