1706356631
2024-01-27 10:43:30
このブログ投稿では、 Cluster.dev Kubernetes クラスター上の AWS クラウド上でチャットを使用して Hugging Face LLM の 1 つを効率的に起動し、本番環境に対応できるようにすることができます。
Hugging Face は、モデル、データセット、Python ライブラリに加えて、次のようなプロジェクトを含むローカル推論用の Docker コンテナも提供します。 テキスト生成の推論 (モデルを提供するための Docker コンテナ) および 猫UI (ChatGPT のインターフェイスに似た、モデルとの対話型チャット用の Docker イメージ)。
ローカルでのデプロイとテストにはこれで十分ですが、これを Kubernetes に迅速にデプロイするには、かなりの労力と多くの構成が必要になります。
そのため、複雑なインフラストラクチャの開発と管理に苦労することなく、クラウド アカウントに LLM を展開したいユーザーのために、このプロセスを簡素化することにしました。
データ サイエンティストは通常、モデルのテスト、微調整、提供に Python を利用します。 ただし、本番環境になると、DevOps チームはこれをインフラストラクチャ コードに統合する必要があります。 特に、Kubernetes は、SageMaker と比較して GPU ノードのコストが約 20% 低く、より柔軟なスケーラビリティを備えています。 Terraform は、Kubernetes にソフトウェアをデプロイするための Helm と組み合わせて、運用インフラストラクチャのプロビジョニングによく使用されます。
Cluster.dev のオープンソース フレームワークは、最小限のコマンドとドキュメントで包括的なインフラストラクチャとソフトウェアを展開する必要があるシナリオ向けに特別に設計されています。 これは、クラウド アカウントに任意のソフトウェアをインストールできるようにする、InstallShield (次 -> 次 -> インストール) に相当する Terraform および Helm と考えてください。 詳細については、次の URL を参照してください。 docs.cluster.dev。
ここでは Amazon AWS クラウドとマネージド EKS を使用したワークフローを示しますが、他のクラウド プロバイダーや Kubernetes バージョンにも適用できます。
前提条件
- AWS クラウド アカウントの認証情報。
- AWS クォータ g5 またはその他の必要なタイプの GPU インスタンスに対して要求された変更。
- Cluster.dev そして テラフォーム インストールされています。
- ハブから .safetensors ウェイトを使用してハグ フェイス モデルを選択します。 あるいは、モデルを S3 バケットにアップロードすることもできます。 の例を参照してください ブートストラップ.ipynb。
- Route53 DNS ゾーン (オプション)。
状態ファイルを保存するための S3 バケットを作成します。
aws s3 mb s3://cdev-states
次の例を使用してリポジトリのクローンを作成します。
git clone https://github.com/shalb/cdev-examples/
cd cdev-examples/aws/eks-model/cluster.dev/
設定ファイルの編集
project.yaml — プロジェクトの主要な構成として機能し、組織、地域、州のバケット名などの重要なグローバル変数を定義します。 また、グローバル環境変数の設定も容易になります。
backend.yaml — Terraform 状態を含む Cluster.dev 状態のバックエンドを構成し、で指定された変数に依存します。 project.yaml。
stack-eks.yaml— VPC、ドメイン、EKS (Kubernetes) 設定を含む AWS インフラストラクチャ構成の概要を説明します。 詳細な情報は、 スタックのドキュメント。
ここで最も重要な部分は、GPU ノードの構成です。 Capacity_type (ON_DEMAND、SPOT)、インスタンス タイプ、および自動スケーリング設定 (最小/最大/望ましい) を指定します。 さらに、必要に応じてディスク サイズとノード ラベルを設定します。 次に構成する主な設定は次のとおりです。
cluster_name: k8s-model # change this to your cluster name
domain: cluster.dev # if you leave this domain it would be auto-delegated with the zone *.cluster_name.cluster.dev
eks_managed_node_groups:
gpu-nodes:
name: ondemand-gpu-nodes
capacity_type: ON_DEMAND
block_device_mappings:
xvda:
device_name: "/dev/xvda"
ebs:
volume_size: 120
volume_type: "gp3"
delete_on_termination: true
instance_types:
- "g5.xlarge"
labels:
gpu-type: "a10g"
max_size: 1
desired_size: 1
min_size: 0
この YAML に同様のブロックを追加することで、追加のノード グループを作成できます。 利用可能な設定の完全なリストについては、対応するセクションを参照してください。 Terraformモジュール。
stack-model.yaml — HF モデル スタックについて説明し、 model-templateフォルダーに含まれており、必要な Nvidia ドライバーのインストールが含まれています。
モデル スタックは主に、 ハグフェイスモデル ヘルムチャートを準備し、開発を続けています。 デフォルトを確認してください 値.yaml 利用可能なチャート オプションの包括的なリストについては、こちらをご覧ください。 調整が必要な主な構成は次のとおりです。
chart:
model:
organization: "HuggingFaceH4"
name: "zephyr-7b-beta"
init:
s3:
enabled: false # if set to false the model would be cloned directly from HF git space
bucketURL: s3://k8s-model-zephyr/llm/deployment/zephyr-7b-beta # see ../bootstrap.ipynb on how to upload model
huggingface:
args:
- "--max-total-tokens"
- "4048"
#- --quantize
#- "awq"
replicaCount: 1
persistence:
accessModes:
- ReadWriteOnce
storageClassName: gp2
storage: 100Gi
resources:
requests:
cpu: "2"
memory: "8Gi"
limits:
nvidia.com/gpu: 1
chat:
enabled: true
スタックのデプロイ
セットアップが完了したら、コマンド 1 つですべてをデプロイできます。
cdev apply
作成するリソースのリスト:
Plan results:
+----------------------------+
| WILL BE DEPLOYED |
+----------------------------+
| cluster.route53 |
| cluster.vpc |
| cluster.eks |
| cluster.eks-addons |
| cluster.kubeconfig |
| cluster.outputs |
| model.nvidia-device-plugin |
| model.model |
| model.outputs |
+----------------------------+
プロセス全体には約 30 分かかります。アイデアを得るには、このビデオをチェックしてください。
このスタック上で実行できるいくつかのタスクを考えてみましょう。
Kubernetes との対話
の kubeconfig スタックのデプロイ後に取得するファイルを使用すると、クラスターへの認証、ワークロード、ログなどの確認が可能になります。
# First we need to export KUBECONFIG to use kubectl
export KUBECONFIG=`pwd`/kubeconfig
# Then we can examine workloads deployed in the `default` namespace, since we have defined it in the stack-model.yaml
kubectl get pod
# To get logs from model startup, check if the model is loaded without errors
kubectl logs -f
ノードのサイズとタイプの変更
大規模なモデルがあり、できればコスト効率の高いスポット インスタンスを使用して、それを大量のインスタンスで提供する必要があるシナリオを考えてみましょう。 これを実現するには、ノード グループのタイプを変更するだけです。
gpu-nodes:
name: spot-gpu-nodes
capacity_type: SPOT
block_device_mappings:
xvda:
device_name: "/dev/xvda"
ebs:
volume_size: 120
volume_type: "gp3"
delete_on_termination: true
instance_types:
- "g5.12xlarge"
labels:
gpu-type: "a10g"
max_size: 1
desired_size: 1
min_size: 0
変更を加えた後、実行して変更を適用します。 cdev apply。
スポット インスタンスはそのリージョンで常に利用できるとは限らないことに注意してください。 スポットリクエストを実行できない場合は、AWS コンソールの[EC2]->[Auto Scaling groups]->[eks-spot-gpu-nodes]->[Activity]を確認してください。 失敗した場合は、次のように変更することを検討してください。 ON_DEMANDまたはマニフェスト内のinstance_typesを調整してから再実行してください cdev apply。
機種変更
モデルを変更するには、その名前と組織を編集するだけです。 次に、実行して変更を適用します。 cdev apply:
model:
organization: "WizardLM"
name: "WizardCoder-15B-V1.0"
チャット UI の有効化
チャットUIを有効にするには、次のように設定します。 chart.chat.enable:true。 これにより、ポート転送してブラウザからアクセスできるサービスが提供されます。 外部アクセスの場合は、サンプルで示すように、イングレス構成を含めます。
chat:
enabled: true
modelConfig:
extraEnvVars:
- name: PUBLIC_ORIGIN
value: "http://localhost:8080"
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
hosts:
- host: chat.k8s-model.cluster.dev
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- chat.k8s-model.cluster.dev
secretName: huggingface-model-chat
を使用している場合は、 cluster.dev ドメインにプロジェクトのプレフィックスを付けた場合 (一意であることを確認してください)、DNS ゾーンは自動的に構成されます。 ドメインの HTTPS 証明書も自動的に生成されます。 進行状況を監視するには、次のコマンドを使用します。 kubectl describe certificaterequests.cert-manager.io
モデルの API を公開する場合は、対応するモデル セクションで Ingress を構成します。
モニタリングとメトリクス
Prometheus と Grafana をモニタリング用にセットアップする手順については、次のリンクを参照してください。 ブートストラップ.ipynb。 単一のオプションで監視を有効にした新しいスタック テンプレートをリリースする予定です。
この Loom ビデオでは、Grafana の構成を確認できます。
気軽に始めてみましょう 議論 GitHub リポジトリにあります。
HF モデルを実行するには多数の方法があります。 この記事では、Cluster.dev をインフラストラクチャ インストーラーとして使用し、AWS クラウド上でチャット付きの LLM を起動するシナリオについて説明します。 これは、IaC アプローチを使用して自分のバージョンの ChatGPT のようなモデルを組織に迅速に展開したいと考えている、十分な知識のある Kubernetes ユーザーにとって特に役立つと考えられます。
ありがとう!
ヴォロディミル・ツァップ、
CTO Cluster.dev
#AWS #Kubernetes #で #分で #ChatGPT #クローンを作成 #投稿者 #Cluster.dev #年 #月
