本文以搭建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。
accelerate appdirs loralib bitsandbytes black black[jupyter] datasets fire git+https://github.com/huggingface/peft.git transformers>=4.28.0 sentencepiece gradio scipy
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y \ git \ curl \ software-properties-common \ && add-apt-repository ppa:deadsnakes/ppa \ && apt install -y python3.10 \ && rm -rf /var/lib/apt/lists/* WORKDIR /workspace COPY requirements.txt requirements.txt RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10 \ && python3.10 -m pip install -r requirements.txt \ && python3.10 -m pip install numpy --pre torch --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu118 \ && python3.10 -m pip install --upgrade typing-extensions COPY . . EXPOSE 7860
使用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
。輸入文本,測試模型。
示例如下: