本文以搭建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网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
说明如果VPC没有绑定公网NAT网关,您需要在创建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.yaml
llama-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.yaml
alpaca-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.yaml
alpacalora.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端口。
输入文本,测试模型。
示例如下: