全部產品
Search
文件中心

Elastic Container Instance:搭建Alpaca-LoRa

更新時間:Jul 06, 2024

本文以搭建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鏡像

請根據自身業務需求,參考以下步驟製作鏡像。

  1. 訪問alpaca-lora,將倉庫複製到本地。

  2. 修改倉庫中的requirements.txt和Dockerfile。

    展開查看requirements.txt

    accelerate
    appdirs
    loralib
    bitsandbytes
    black
    black[jupyter]
    datasets
    fire
    git+https://github.com/huggingface/peft.git
    transformers>=4.28.0
    sentencepiece
    gradio
    scipy

    展開查看Dockerfile

    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
  3. 使用Dockerfile構建鏡像。

  4. 將鏡像推送到鏡像倉庫中。

建立DataCache

  1. 訪問HuggingFace,擷取模型ID。

    本文使用以下兩個模型,在HuggingFace找到目標模型後,在模型詳情頁面頂部可以複製模型ID。

    • decapoda-research/llama-7b-hf

    • tloen/alpaca-lora-7b

  2. 建立DataCache。

    1. 建立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的交換器
    2. 建立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的交換器
  3. 查詢DataCache狀態。

    kubectl get edc

    當資料下載完成,DataCache的狀態為Available時,表示可以使用DataCache。樣本如下:

    lora1.png

部署Alpaca-lora應用

  1. 編寫應用的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
  2. 確認應用部署狀態。

    kubectl get deployment alpacalora
    kubectl get Pod

    樣本如下,可以看到Alpaca-lora應用已經部署成功。

    lora2.png

  3. 查看Service地址。

    kubectl get svc alpacalora-svc 

    返回樣本如下,Service對外地址(EXTERNAL-IP)為123.57.XX.XX。

    lora3.png

測試模型效果

  1. 在Pod所屬安全性群組中添加入方向規則,開放80連接埠。

  2. 開啟瀏覽器,訪問Service對外地址的80連接埠。

  3. 輸入文本,測試模型。

    樣本如下:

    lora4.png