部署通義千問(wèn)應(yīng)用
本文以ModelScope社區(qū)的通義千問(wèn)-7B-Chat模型為例,演示如何使用DataCache。通過(guò)DataCache提前拉取通義千問(wèn)-7B-Chat模型數(shù)據(jù),然后在創(chuàng)建通義千問(wèn)的應(yīng)用Pod時(shí)直接掛載模型數(shù)據(jù),可以免去在Pod中拉取模型數(shù)據(jù)的等待時(shí)間,加速應(yīng)用部署。
背景信息
通義千問(wèn)-7B(Qwen-7B)是阿里云研發(fā)的通義千問(wèn)大模型系列的70億參數(shù)規(guī)模的模型。基于Transformer的大語(yǔ)言模型,在超大規(guī)模的預(yù)訓(xùn)練數(shù)據(jù)上進(jìn)行訓(xùn)練得到了Qwen-7B。本文使用的通義千問(wèn)-7B-Chat是在Qwen-7B的基礎(chǔ)上,使用對(duì)齊機(jī)制打造了基于大語(yǔ)言模型的AI助手。更多信息,請(qǐng)參見(jiàn)Qwen-7B-Chat。
前提條件
集群中已部署DataCache CRD。具體操作,請(qǐng)參見(jiàn)部署DataCache CRD。
集群所屬VPC已綁定公網(wǎng)NAT網(wǎng)關(guān),并配置SNAT條目允許該VPC或下屬交換機(jī)的資源可以訪(fǎng)問(wèn)公網(wǎng)。
說(shuō)明如果VPC沒(méi)有綁定公網(wǎng)NAT網(wǎng)關(guān),您需要在創(chuàng)建DataCache和部署應(yīng)用時(shí)綁定EIP,以便可以拉取公網(wǎng)數(shù)據(jù)。
準(zhǔn)備運(yùn)行環(huán)境
硬件要求
需使用的GPU規(guī)格要求如下。ECI支持的GPU規(guī)格,請(qǐng)參見(jiàn)規(guī)格說(shuō)明。
CPU:無(wú)嚴(yán)格限制
內(nèi)存:>16 GiB
GPU:≥1
顯存:>16 GB(顯存過(guò)低可能會(huì)出現(xiàn)OOM)
軟件環(huán)境
通義千問(wèn)-7B-Chat依賴(lài)的庫(kù)和配置較多,ECI已經(jīng)制作好了一個(gè)公共容器鏡像,包含了一個(gè)基于Gradio的WebUI,您可以直接使用該鏡像或者將其作為基礎(chǔ)鏡像進(jìn)行二次開(kāi)發(fā)。鏡像地址為registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0,大小約為15 GB。
操作步驟
創(chuàng)建DataCache
訪(fǎng)問(wèn)ModelScope,獲取模型ID。
本示例使用通義千問(wèn)-7B-Chat模型的v1.1.4版本。在ModelScope找到目標(biāo)模型后,在模型詳情頁(yè)面頂部可以復(fù)制模型ID。
編寫(xiě)DataCache的YAML配置文件,然后使用該YAML文件創(chuàng)建DataCache拉取通義千問(wèn)-7B-Chat模型。
kubectl create -f datacache-test.yaml
datacache-test.yaml的內(nèi)容示例如下:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: qwen spec: bucket: test path: /model/qwen/ dataSource: type: URL options: repoSource: ModelScope/Model # 指定數(shù)據(jù)源為ModelScope的模型 repoId: qwen/Qwen-7B-Chat # 指定模型ID revision: v1.1.4 # 指定模型版本 retentionDays: 1 netConfig: securityGroupId: sg-2ze63v3jtm8e6s****** vSwitchId: vsw-2ze94pjtfuj9vay****** # 指定已配置SNAT的交換機(jī)
查詢(xún)DataCache狀態(tài)。
kubectl get edc
當(dāng)數(shù)據(jù)下載完成,DataCache的狀態(tài)為Available時(shí),表示可以使用DataCache。示例如下:
部署通義千問(wèn)應(yīng)用
編寫(xiě)應(yīng)用的YAML配置文件,然后使用該YAML文件部署通義千問(wèn)應(yīng)用。
kubectl create -f qwen.yaml
qwen.yaml的內(nèi)容示例如下,可以創(chuàng)建一個(gè)包含1個(gè)Pod副本的Deployment,Pod使用GPU規(guī)格,并掛載了通義千問(wèn)模型。Pod內(nèi)容器使用包含通義千問(wèn)WebUI應(yīng)用的鏡像,容器啟動(dòng)后會(huì)運(yùn)行
python Qwen-7B/web_demo.py --server_port 8888
啟動(dòng)WebUI。說(shuō)明以下YAML示例中,系統(tǒng)會(huì)自動(dòng)創(chuàng)建并為Pod綁定一個(gè)EIP。如果您的集群所屬VPC已綁定公網(wǎng)NAT網(wǎng)關(guān),可去掉該Annotation,在Pod創(chuàng)建成功后,您可以配置DNAT條目實(shí)現(xiàn)外部訪(fǎng)問(wèn)Pod。實(shí)際業(yè)務(wù)場(chǎng)景中,建議創(chuàng)建Service來(lái)統(tǒng)一提供Pod訪(fǎng)問(wèn)入口。
apiVersion: apps/v1 kind: Deployment metadata: name: qwen-web labels: app: qwen spec: replicas: 1 selector: matchLabels: app: qwen template: metadata: name: qwen labels: app: qwen alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: "ecs.gn7i-c8g1.2xlarge" # 指定GPU規(guī)格 k8s.aliyun.com/eci-data-cache-bucket: "test" # 指定DataCache Bucket k8s.aliyun.com/eci-data-cache-provisionedIops: "35000" # 設(shè)置ESSD AutoPL云盤(pán)預(yù)配置的讀寫(xiě)IOPS k8s.aliyun.com/eci-data-cache-burstingEnabled: "true" # 設(shè)置ESSD AutoPL云盤(pán)開(kāi)啟Brust,加速應(yīng)用啟動(dòng) k8s.aliyun.com/eci-with-eip: "true" # 自動(dòng)創(chuàng)建并綁定EIP,以便外部可以訪(fǎng)問(wèn) spec: containers: - name: qwen image: registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0 # 使用制作好的通義千問(wèn)鏡像 resources: limits: nvidia.com/gpu: "1" # 設(shè)置容器所需的GPU數(shù) command: ["/bin/sh"] args: ["-c","python Qwen-7B/web_demo.py --server_port 8888"] # 啟動(dòng)WebUI volumeMounts: - name: "model-qwen" mountPath: "/data/model/" # 模型數(shù)據(jù)在容器內(nèi)的掛載路徑 volumes: - name: "model-qwen" hostPath: path: "/model/qwen/" # 掛載模型數(shù)據(jù)
確認(rèn)應(yīng)用部署狀態(tài)。
kubectl get deployment qwen-web kubectl get Pod
示例如下,可以看到通義千問(wèn)應(yīng)用已經(jīng)部署成功。
確認(rèn)模型數(shù)據(jù)的掛載情況。
kubectl exec -it <POD_NAME> -- bash ls /data/model
示例如下,可以看到容器的
/data/model
目錄下已掛載模型數(shù)據(jù)。查看Pod綁定的EIP地址。
kubectl describe pod <pod_name>
在返回的Pod詳情的Annotations中可以獲取Pod綁定的EIP地址。
測(cè)試模型效果
在Pod所屬安全組中添加入方向規(guī)則,開(kāi)放8888端口。
打開(kāi)瀏覽器,訪(fǎng)問(wèn)通義千問(wèn)的Web頁(yè)面。
本文示例的通義千問(wèn)應(yīng)用已單獨(dú)綁定了EIP,可以直接輸入Pod的EIP地址和容器開(kāi)放的端口進(jìn)行訪(fǎng)問(wèn),例如
39.106.XX.XX:8888
。輸入文本,測(cè)試通義千問(wèn)-7B-Chat的模型效果。
示例如下: