このトピックでは、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 は、それによって引き起こされた損害について責任を負いません。
サードパーティモデルのユーザー契約、使用仕様、および関連する法律および規制を遵守する必要があります。お客様は、サードパーティモデルの使用について、お客様ご自身の責任において行うことに同意するものとします。
前提条件
DataCache カスタムリソース定義 (CRD) がクラスターにデプロイされています。詳細については、DataCache CRD のデプロイを参照してください。
クラスターが存在する仮想プライベートクラウド (VPC) は、インターネット NAT ゲートウェイに関連付けられています。VPC 内のリソースまたは VPC 内の vSwitch に接続されているリソースがインターネットにアクセスできるように、インターネット NAT ゲートウェイ用に SNAT エントリが構成されています。
説明VPC がインターネット NAT ゲートウェイに関連付けられていない場合は、DataCache を作成してアプリケーションをデプロイするときに、VPC に Elastic IP アドレス (EIP) を関連付ける必要があります。これにより、インターネットからデータをプルできます。
手順
Alpaca-LoRa イメージの作成
ビジネス要件に基づいてイメージを作成します。
alpaca-lora にアクセスし、リポジトリをオンプレミスマシンにクローンします。
リポジトリ内の requirements.txt と Dockerfile を変更します。
Dockerfile を使用してイメージをビルドします。
イメージをイメージリポジトリにプッシュします。
DataCache の作成
Hugging Face にアクセスし、モデルの ID を取得します。
この例では、次のモデルを使用します。Hugging Face でモデルを見つけ、モデルの詳細ページの上部にあるモデルの ID をコピーします。
decapoda-research/llama-7b-hf
tloen/alpaca-lora-7b
DataCache の作成
llama-7b-hf の DataCache を作成します。
kubectl apply -f llama-7b-hf.yamlllama-7b-hf.yaml ドキュメント:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: llama-7b-hf spec: path: /model/llama-7b-hf # モデルデータのストレージパスを指定します。 bucket: test # DataCache を格納するバケットを指定します。 dataSource: type: URL options: repoSource: "HuggingFace/Model" # データソースが Hugging Face であるモデルを指定します。 repoId: "decapoda-research/llama-7b-hf" # モデルの ID を指定します。 netConfig: securityGroupId: sg-2ze63v3jtm8e6sy****** vSwitchId: vsw-2ze94pjtfuj9vaym****** # SNAT ゲートウェイが構成されている vSwitch を指定します。alpaca-lora-7b の DataCache を作成します。
kubectl apply -f alpaca-lora-7b.yamlalpaca-lora-7b.yaml ドキュメント:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: alpaca-lora-7b spec: path: /model/alpaca-lora-7b # モデルデータのストレージパスを指定します。 bucket: test # DataCache を格納するバケットを指定します。 dataSource: type: URL options: repoSource: "HuggingFace/Model" # データソースが Hugging Face であるモデルを指定します。 repoId: "tloen/alpaca-lora-7b" # モデルの ID を指定します。 netConfig: securityGroupId: sg-2ze63v3jtm8e6sy****** vSwitchId: vsw-2ze94pjtfuj9vaym****** # SNAT ゲートウェイが構成されている vSwitch を指定します。
DataCache のステータスをクエリします。
kubectl get edcデータがダウンロードされ、DataCache のステータスが Available になると、DataCache を使用できるようになります。例:

Alpaca-lora アプリケーションのデプロイ
Alpaca-lora アプリケーションの YAML 構成ファイルを記述し、その YAML ファイルを使用してアプリケーションをデプロイします。
kubectl create -f alpacalora.yaml次のサンプルコードは、alpacalora.yaml のサンプルコンテンツを提供します。2 つのリソースオブジェクトを作成できます。
Deployment: Deployment の名前は alpacalora です。Deployment にはポッドレプリカが含まれています。ポッドには 20 GiB の追加の一時ストレージスペースがあります。llama-7b-hf および alpaca-lora-7b DataCache はポッドにマウントされます。ポッド内のコンテナーのイメージは、作成した Alpaca-LoRa イメージです。コンテナーが起動されると、コンテナーは
python3.10 generate.py --load_8bit --base_model /data/llama-7b-hf --lora_weights /data/alpaca-lora-7bを実行します。Service: Service の名前は alpacalora-svc です。Service のタイプは LoadBalancer です。Service はポート 80 を公開し、
app: alpacaloraラベルが付いたポッドのポート 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 を格納するバケットを指定します。 k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" # 一時ストレージスペースを 20 GiB 増やします。 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 の IP アドレスを表示します。
kubectl get svc alpacalora-svc次の例では、
EXTERNAL-IP列に表示されている Service の IP アドレスは 123.57.XX.XX です。
モデルのテスト
ポッドが属するセキュリティグループにインバウンドルールを追加し、ポート 80 を開きます。
ブラウザーを開き、ポート 80 経由で Service の外部 IP アドレスにアクセスします。
テキストトランスクリプトを入力してモデルをテストします。
例:
