すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:DataCache を使用して Alpaca-LoRa アプリケーションの構築を高速化する方法

最終更新日:Dec 28, 2024

このトピックでは、DataCache を使用して Alpaca-LoRa アプリケーションの構築を高速化する方法について説明します。Alpaca-LoRa アプリケーションを構築する場合、llama-7b-hf モデルデータと alpaca-lora-7b 重みデータを事前に DataCache からプルできます。Alpaca-LoRa アプリケーションに対応するエラスティックコンテナインスタンスを作成するときに、モデルデータと重みデータをインスタンスにマウントできます。これにより、データをプルする必要がなくなり、Apache-LoRa アプリケーションの起動が高速化されます。

背景情報

Alpaca-LoRa は、Low-Rank Adaptation (LoRA) 技術を使用して LLaMA (Large Language Model Meta AI) モデルで微調整された軽量言語モデルです。Alpaca-LoRa は、自然言語をシミュレートして対話やインタラクションを行い、ユーザーが入力した指示に基づいて異なるテキストを生成し、ユーザーがライティング、翻訳、コーディングなどのタスクを完了するのに役立ちます。

重要
  • Alibaba Cloud は、サードパーティモデルの合法性、セキュリティ、または正確性を保証しません。Alibaba Cloud は、それによって引き起こされた損害について責任を負いません。

  • サードパーティモデルのユーザー契約、使用仕様、および関連する法律および規制を遵守する必要があります。お客様は、サードパーティモデルの使用について、お客様自身の責任において行うことに同意するものとします。

前提条件

使用する仮想プライベートクラウド (VPC) は、インターネット NAT ゲートウェイに関連付けられています。VPC 内のリソースまたは VPC 内の vSwitch に接続されているリソースがインターネットにアクセスできるように、SNAT エントリが NAT ゲートウェイに構成されています。

説明

VPC がインターネット NAT ゲートウェイに関連付けられていない場合は、DataCache を作成してアプリケーションをデプロイするときに、VPC にエラスティック IP アドレス (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. Hugging Face にアクセスし、モデルの ID を取得します。

    この例では、次のモデルを使用します。Hugging Face でモデルを見つけ、モデルの詳細ページの上部にあるモデルの ID をコピーします。

    • decapoda-research/llama-7b-hf

    • tloen/alpaca-lora-7b

  2. DataCache を作成します。

    1. llama-7b-hf の DataCache を作成します。

      次の例は、CreateDataCache API オペレーションを呼び出して DataCache を作成する場合に使用されるパラメータを示しています。llama-7b-hf モデルデータは Hugging Face からプルされ、test という名前のバケットの /model/llama-7b-hf ディレクトリに保存されます。DataCache には llama-7b-hf という名前が付けられ、1 日間保持されます。

      重要

      SDK を使用して DataCache を作成する場合、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
      }
    2. alpaca-lora-7b の DataCache を作成します。

      次の例は、CreateDataCache API オペレーションを呼び出して DataCache を作成する場合に使用されるパラメータを示しています。alpaca-lora-7b モデルデータは Hugging Face からプルされ、test という名前のバケットの /model/alpaca-lora-7b ディレクトリに保存されます。DataCache には alpaca-lora-7b という名前が付けられ、1 日間保持されます。

      重要

      SDK を使用して DataCache を作成する場合、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
      }
  3. DataCache のステータスをクエリします。

    返された DataCache ID を使用して DescribeDataCaches API オペレーションを呼び出し、DataCache の情報をクエリします。DataCaches.Status で示される DataCache のステータスが Available の場合、DataCache は使用できる状態です。

Alpaca-lora アプリケーションのデプロイ

  1. DataCache を使用してエラスティックコンテナインスタンスを作成し、インスタンスに Alpaca-lora アプリケーションをデプロイします。

    次の例は、CreateContainerGroup API オペレーションを呼び出してエラスティックコンテナインスタンスを作成する場合に使用されるパラメータを示しています。インスタンスには、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"
        }
      ]
    }

  2. アプリケーションがデプロイされているかどうかを確認します。

    返されたインスタンス ID を使用して DescribeContainerGroupStatus API オペレーションを呼び出し、インスタンスとコンテナのステータスをクエリします。Status で示されるインスタンスのステータスと ContainerStatuses.State で示されるコンテナのステータスが Running の場合、インスタンスは作成され、コンテナは実行中です。

  3. アプリケーションへのインターネットアクセスを開きます。

    エラスティックコンテナインスタンスが存在する VPC が NAT ゲートウェイに関連付けられている場合は、DNAT エントリを作成して、インスタンスへのインターネットアクセスを許可する必要があります。詳細については、DNAT エントリの作成と管理 を参照してください。

    説明

    VPC が NAT ゲートウェイに関連付けられていない場合は、エラスティックコンテナインスタンスを作成するときに、VPC に EIP を関連付ける必要があります。この場合は、この手順をスキップします。

    次の例は、DNAT エントリを作成するときにパラメータを構成する方法を示しています。

    • パブリック IP アドレスの選択: NAT ゲートウェイに関連付けられている EIP を選択します。

    • プライベート IP アドレスの選択: Alpaca-lora アプリケーションがデプロイされているエラスティックコンテナインスタンスの IP アドレスを選択します。

    • ポート設定: 特定のポートを選択します。次に、パブリックポートを 80、プライベートポートを 7860、プロトコルタイプを TCP に設定します。

モデルのテスト

  1. エラスティックコンテナインスタンスが属するセキュリティグループにインバウンドルールを追加して、アプリケーションの外部ポートを開きます。

  2. ブラウザを開いて Alpaca-LoRa アプリケーションにアクセスします。

    DNAT を構成した場合は、DNAT エントリで構成したパブリック IP アドレスとパブリックポートを入力します。例: 47.94.XX.XX:80

    説明

    エラスティックコンテナインスタンスに EIP が関連付けられている場合は、EIP とコンテナの外部ポートを入力します。例: 47.94.XX.XX:7860

  3. テキストトランスクリプトを入力してモデルをテストします。

    例:

    lora-api.png