本文以搭建Alpaca-LoRa為例,示範如何使用DataCache。通過DataCache提前拉取llama-7b-hf模型資料和alpaca-lora-7b權重資料,然後在建立Alpaca-LoRa應用Pod時直接掛載模型和權重資料,可以免去在Pod中拉取資料的等待時間,加速Apache-LoRa啟動過程。
背景資訊
Alpaca-LoRa是一種使用Lora技術在LLaMA模型進行微調的輕量級語言模型。它可以類比自然語言進行對話互動,根據使用者輸入的指令來產生不同的文本,協助使用者完成寫作、翻譯、編寫代碼等任務。
阿里雲不對第三方模型的合法性、安全性、準確性進行任何保證,阿里雲不對由此引發的任何損害承擔責任。
您應自覺遵守第三方模型的使用者協議、使用規範和相關法律法規,並就使用第三方模型的合法性、合規性自行承擔相關責任。
前提條件
叢集中已部署DataCache CRD。具體操作,請參見部署DataCache CRD。
叢集所屬VPC已綁定公網NAT Gateway,並配置SNAT條目允許該VPC或下屬交換器的資源可以訪問公網。
說明如果VPC沒有綁定公網NAT Gateway,您需要在建立DataCache和部署應用時綁定EIP,以便可以拉取公網資料。
操作步驟
製作Alpaca-LoRa鏡像
請根據自身業務需求,參考以下步驟製作鏡像。
訪問alpaca-lora,將倉庫複製到本地。
修改倉庫中的requirements.txt和Dockerfile。
使用Dockerfile構建鏡像。
將鏡像推送到鏡像倉庫中。
建立DataCache
訪問HuggingFace,擷取模型ID。
本文使用以下兩個模型,在HuggingFace找到目標模型後,在模型詳情頁面頂部可以複製模型ID。
decapoda-research/llama-7b-hf
tloen/alpaca-lora-7b
建立DataCache。
建立llama-7b-hf的DataCache。
kubectl apply -f llama-7b-hf.yamlllama-7b-hf.yaml的內容如下:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: llama-7b-hf spec: path: /model/llama-7b-hf # 設定模型資料的儲存路徑 bucket: test # 指定DataCache Bucket dataSource: type: URL options: repoSource: "HuggingFace/Model" # 指定資料來源為HuggingFace的模型 repoId: "decapoda-research/llama-7b-hf" # 指定模型ID netConfig: securityGroupId: sg-2ze63v3jtm8e6sy****** vSwitchId: vsw-2ze94pjtfuj9vaym****** # 指定已配置SNAT的交換器建立alpaca-lora-7b的DataCache。
kubectl apply -f alpaca-lora-7b.yamlalpaca-lora-7b.yaml的內容如下:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: alpaca-lora-7b spec: path: /model/alpaca-lora-7b # 設定模型資料的儲存路徑 bucket: test # 指定DataCache Bucket dataSource: type: URL options: repoSource: "HuggingFace/Model" # 指定資料來源為HuggingFace的模型 repoId: "tloen/alpaca-lora-7b" # 指定模型ID netConfig: securityGroupId: sg-2ze63v3jtm8e6sy****** vSwitchId: vsw-2ze94pjtfuj9vaym****** # 指定已配置SNAT的交換器
查詢DataCache狀態。
kubectl get edc當資料下載完成,DataCache的狀態為Available時,表示可以使用DataCache。樣本如下:

部署Alpaca-lora應用
編寫應用的YAML設定檔,然後使用該YAML檔案部署Alpaca-lora應用。
kubectl create -f alpacalora.yamlalpacalora.yaml的內容樣本如下,可以建立兩個資來源物件:
Deployment:名稱為alpacalora,包含一個Pod副本。Pod增加了20 GiB的臨時儲存空間,並掛載了llama-7b-hf和alpaca-lora-7b快取資料。Pod內容器使用的鏡像為您製作好的Alpaca-LoRa鏡像,容器啟動後會運行
python3.10 generate.py --load_8bit --base_model /data/llama-7b-hf --lora_weights /data/alpaca-lora-7b。Service:名稱為alpacalora-svc,類型為LoadBalancer,對外公開80連接埠,可以將流量轉寄到帶有
app: alpacalora的Label的Pod的7860連接埠。
apiVersion: apps/v1 kind: Deployment metadata: name: alpacalora labels: app: alpacalora spec: replicas: 1 selector: matchLabels: app: alpacalora template: metadata: labels: app: alpacalora annotations: k8s.aliyun.com/eci-data-cache-bucket: "test" # 指定DataCache Bucket k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" # 增加臨時儲存空間 spec: containers: - name: alpacalora image: registry.cn-hangzhou.aliyuncs.com/****/alpaca-lora:v3.5 # 使用您製作好的鏡像 command: ["/bin/sh","-c"] args: ["python3.10 generate.py --load_8bit --base_model /data/llama-7b-hf --lora_weights /data/alpaca-lora-7b"] # 按需替換啟動命令參數 resources: limits: cpu: "16000m" memory: "64.0Gi" ports: - containerPort: 7860 volumeMounts: - mountPath: /data/llama-7b-hf # llama-7b-hf在容器內的掛載路徑 name: llama-model - mountPath: /data/alpaca-lora-7b # alpaca-lora-7b在容器內的掛載路徑 name: alpacalora-weight volumes: - name: llama-model hostPath: path: /model/llama-7b-hf # llama-7b-hf的儲存路徑 - name: alpacalora-weight hostPath: path: /model/alpaca-lora-7b # alpaca-lora-7b的儲存路徑 --- apiVersion: v1 kind: Service metadata: name: alpacalora-svc spec: ports: - port: 80 targetPort: 7860 protocol: TCP selector: app: alpacalora type: LoadBalancer確認應用部署狀態。
kubectl get deployment alpacalora kubectl get Pod樣本如下,可以看到Alpaca-lora應用已經部署成功。

查看Service地址。
kubectl get svc alpacalora-svc返回樣本如下,Service對外地址(
EXTERNAL-IP)為123.57.XX.XX。
測試模型效果
在Pod所屬安全性群組中添加入方向規則,開放80連接埠。
開啟瀏覽器,訪問Service對外地址的80連接埠。
輸入文本,測試模型。
樣本如下:
