本文以搭建Alpaca-LoRa为例,演示如何使用数据缓存。通过数据缓存提前拉取llama-7b-hf模型数据和alpaca-lora-7b权重数据,然后在创建Alpaca-LoRa应用实例时直接挂载模型和权重数据,可以免去在实例中拉取数据的等待时间,加速Apache-LoRa启动过程。
背景信息
Alpaca-LoRa是一种使用Lora技术在LLaMA模型进行微调的轻量级语言模型。它可以模拟自然语言进行对话交互,根据用户输入的指令来生成不同的文本,协助用户完成写作、翻译、编写代码等任务。
阿里云不对第三方模型的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。
您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。
前提条件
您使用的VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
如果VPC没有绑定公网NAT网关,您需要在创建数据缓存和部署应用时绑定EIP,以便可以拉取公网数据。
操作步骤
制作Alpaca-LoRa镜像
请根据自身业务需求,参考以下步骤制作镜像。
访问alpaca-lora,将仓库克隆到本地。
修改仓库中的requirements.txt和Dockerfile。
使用Dockerfile构建镜像。
将镜像推送到镜像仓库中。
创建数据缓存
访问HuggingFace,获取模型ID。
本文使用以下两个模型,在HuggingFace找到目标模型后,在模型详情页面顶部可以复制模型ID。
decapoda-research/llama-7b-hf
tloen/alpaca-lora-7b
创建数据缓存。
说明如果您的业务部署在中国内地地域,建议您在中国香港地域创建数据缓存,然后拷贝数据缓存到您需要的地域。
创建llama-7b-hf的数据缓存。
调用CreateDataCache接口创建数据缓存所采用的参数示例如下,表示从HuggingFace拉取llama-7b-hf模型数据,保存到名为test的Bucket的
/model/llama-7b-hf
目录。数据缓存名为llama-7b-hf,保留时长为1天。重要如果您通过SDK创建数据缓存,DataSource.Options中的各个参数前无需添加参数名的长度,例如
#10#repoSource
直接写成repoSource
,#6#repoId
直接写成repoId
即可。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "Bucket": "test", "Path": "/model/llama-7b-hf", "Name": "llama-7b-hf", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "decapoda-research/llama-7b-hf" } }, "RetentionDays": 1 }
创建alpaca-lora-7b的数据缓存。
调用CreateDataCache接口创建数据缓存所采用的参数示例如下,表示从HuggingFace拉取alpaca-lora-7b模型数据,保存到名为test的Bucket的
/model/alpaca-lora-7b
目录。数据缓存名为alpaca-lora-7b,保留时长为1天。重要如果您通过SDK创建数据缓存,DataSource.Options中的各个参数前无需添加参数名的长度,例如
#10#repoSource
直接写成repoSource
,#6#repoId
直接写成repoId
即可。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "Bucket": "test", "Path": "/model/alpaca-lora-7b", "Name": "alpaca-lora-7b", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "tloen/alpaca-lora-7b" } }, "RetentionDays": 1 }
查询数据缓存状态。
根据返回的数据缓存ID调用DescribeDataCaches接口查询数据缓存信息,当数据缓存的状态(DataCaches.Status)为Available时,表示可以使用该数据缓存。
部署Alpaca-lora应用
使用数据缓存创建ECI实例,部署Alpaca-lora应用。
调用CreateContainerGroup接口创建ECI实例所采用的参数示例如下,该ECI实例增加了20 GiB的临时存储空间,并挂载了llama-7b-hf和alpaca-lora-7b模型数据。实例内的容器使用准备好的Alpaca-lora镜像,模型数据在容器内的挂载路径分别为
/data/llama-7b-hf
和/data/alpaca-lora-7b
,容器启动后会运行python3.10 generate.py --load_8bit --base_model /data/llama-7b-hf --lora_weights /data/alpaca-lora-7b
。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "ContainerGroupName": "alpacalora", "DataCacheBucket": "test", "EphemeralStorage": 20, "Container": [ { "Name": "alpacalora", "Image": "registry-vpc.cn-beijing.aliyuncs.com/******/***-registry:v1.0", "Command": [ "/bin/sh", "-c" ], "Arg": [ "python3.10 generate.py --load_8bit --base_model /data/llama-7b-hf --lora_weights /data/alpaca-lora-7b" ], "Cpu": 16, "Memory": 64, "Port": [ { "Port": 7860, "Protocol": "TCP" } ], "VolumeMount": [ { "Name": "llama-model", "MountPath": "/data/llama-7b-hf" }, { "MountPath": "/data/alpaca-lora-7b", "Name": "alpacalora-weight" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/llama-7b-hf", "Name": "llama-model" }, { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/alpaca-lora-7b", "Name": "alpacalora-weight" } ] }
确认应用部署状态。
根据返回的实例ID调用DescribeContainerGroupStatus查询实例和容器状态。当实例状态(Status)和容器状态(ContainerStatuses.State)为Running,表示实例已经创建成功,容器正在运行。
对外开放应用。
在ECI实例所属VPC已绑定NAT网关的前提下,您需要创建DNAT条目,使得ECI实例可以对外提供公网访问服务。具体操作,请参见创建和管理DNAT条目。
说明如果VPC没有绑定NAT网关,则需要您在创建ECI实例时为其绑定一个EIP,此时可以跳过本步骤。
创建DNAT条目采用的配置项示例如下:
公网IP地址:选择NAT网关绑定的EIP地址。
私网IP地址:选择部署了Alpaca-lora应用的ECI实例。
端口设置:使用具体端口,公网端口配置为80,私网端口配置为7860,协议为TCP。
测试模型效果
在ECI实例所属安全组中添加入方向规则,开放应用对外端口。
打开浏览器,访问Alpaca-lora应用。
在配置了DNAT的情况下,请输入DNAT条目中配置的公网IP地址和公网端口,例如
47.94.XX.XX:80
。说明如果ECI实例单独绑定了EIP,请输入EIP地址和容器开放的端口,例如
47.94.XX.XX:7860
。输入文本,测试模型。
示例如下: