この記事では、AKS 用の AI ツールチェーン オペレーター アドオン (プレビュー) を使用して、言語モデルの推論ワークロードを微調整してデプロイする方法について説明します。 次のタスクを実行する方法について説明します。
- Azure Container Registry (ACR) とリポジトリの詳細を参照するように環境変数を設定します。
- コンテナー レジストリ イメージのプッシュ/プル シークレットを作成し、プライベートな微調整アダプター イメージを格納および取得します。
- サポートされているモデルを選択し、データに合わせて微調整します。
- 推論サービス エンドポイントをテストします。
- リソースをクリーンアップします。
AI ツールチェーン オペレーター (KAITO) は、AKS クラスター上の AI モデルのデプロイと運用を簡略化する AKS 用のマネージド アドオンです。 KAITO バージョン 0.3.1 以降では、AKS マネージド アドオンを使用して、サポートされている基盤モデルを新しいデータで微調整し、AI モデルの精度を向上させることができます。 パラメーター効率の高い微調整方法とそのユース ケースの詳細については、「概念 - AKS 上で AI と機械学習ワークフローの言語モデルを微調整する」を参照してください。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
開始する前に
- この記事は、AKS クラスターがすでに存在していることを前提としています。 クラスターがない場合は、Azure CLI、Azure PowerShell、または Azure portal を使用して作成します。
- インストールおよび構成済みの Azure CLI バージョン 2.47.0 以降。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
前提条件
- Kubernetes コマンド ライン クライアント kubectl がインストールされ、構成されていること。 詳細については、kubectl のインストールに関するページを参照してください。
- AKS クラスターで、新規または既存の Azure Container Registry (ACR) 統合を構成します。
- AKS クラスターに AI ツールチェーン オペレーター アドオンをインストールします。
- 既に AI ツールチェーン オペレーター アドオンがインストールされている場合は、KAITO v0.3.1 以降が実行されるように AKS クラスターを最新バージョンに更新し、AI ツールチェーン オペレーター アドオン機能フラグが有効になっていることを確認します。
環境変数をエクスポートします
この記事では構成手順を簡略化するために、次のコマンドを使用して環境変数を定義できます。 プレースホルダーの値は、実際の値に置き換えてください。
ACR_NAME="myACRname"
ACR_USERNAME="myACRusername"
REPOSITORY="myRepository"
VERSION="repositoryVersion'
ACR_PASSWORD=$(az acr token create --name $ACR_USERNAME --registry $ACR_NAME --expiration-in-days 10 --repository $REPOSITORY content/write content/read --query "credentials.passwords[0].value" --output tsv)
プライベート レジストリ用の新しいシークレットを作成する
この例では、KAITO 微調整デプロイによってコンテナー化されたアダプター出力が生成され、KAITO ワークスペースには、アダプター イメージを ACR にプッシュするための認可として新しいプッシュ シークレットが必要です。
kubectl create secret docker-registry
コマンドを使用してモデルの微調整出力イメージを ACR にプッシュするための KAITO 微調整ワークスペース アクセスを提供する新しいシークレットを生成します。
kubectl create secret docker-registry myregistrysecret --docker-server=$ACR_NAME.azurecr.io --docker-username=$ACR_USERNAME --docker-password=$ACR_PASSWORD
AI モデルを微調整する
この例では、次の Phi-3-mini KAITO 微調整ワークスペース CRD を適用して qLoRA チューニング方法を使用し、Phi-3-mini 小規模言語モデルを微調整します。
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-tuning-phi-3-mini
resource:
instanceType: "Standard_NC24ads_A100_v4"
labelSelector:
matchLabels:
apps: tuning-phi-3-mini-pycoder
tuning:
preset:
name: phi3mini128kinst
method: qlora
input:
urls:
- “myDatasetURL”
output:
image: “$ACR_NAME.azurecr.io/$REPOSITORY:$VERSION”
imagePushSecret: myregistrysecret
この例では、入力の URL で指定されたパブリック データセットを使用します。 微調整データのソースとしてイメージを選択する場合は、KAITO 微調整 API 仕様を参照し、ACR からイメージをプルするように入力を調整してください。
Note
モデルの微調整には通常、モデル推論よりも多くの GPU メモリが必要となるため、GPU SKU の選択は重要です。 GPU のメモリ不足エラーを回避するには、NVIDIA A100 以上のレベルの GPU を使用することをお勧めします。
kubectl apply
コマンドを使用して、KAITO 微調整ワークスペース CRD を適用します。kubectl apply workspace-tuning-phi-3-mini.yaml
kubectl get workspace
コマンドを使用して、GPU リソース、微調整ジョブ、ワークスペースの準備状況を追跡します。kubectl get workspace -w
出力は次の出力例のようになります。
NAME INSTANCE RESOURCE READY INFERENCE READY JOB STARTED WORKSPACE SUCCEEDED AGE workspace-tuning-phi-3-mini Standard_NC24ads_A100_v4 True True 3m 45s
kubectl get pods
コマンドを使用して、微調整ジョブ ポッドの状態を確認します。kubectl get pods
Note
アダプターは、コンテナー イメージまたは Kubernetes でサポートされている任意のストレージの種類として、特定の出力場所に格納できます。
推論用に微調整されたモデルをデプロイする
次に、前のセクションで作成した Phi-3-mini アダプター イメージを、このモデルでの新しい推論デプロイに使用します。
以下の KAITO 推論ワークスペース CRD は、AKS クラスターにデプロイする次のリソースとアダプターで構成されています。
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini-adapter
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
apps: phi-3-adapter
inference:
preset:
name: “phi-3-mini-128k-instruct“
adapters:
-source:
name: kubernetes-adapter
image: $ACR_NAME.azurecr.io/$REPOSITORY:$VERSION
imagePullSecrets:
- myregistrysecret
strength: “1.0”
Note
必要に応じて、追加の "ソース" フィールドを定義することで、異なるデータ セットで同じモデルを使用して微調整デプロイで作成した複数のアダプターをプルできます。 さまざまなアダプターを使用して推論し、さまざまなコンテキストで微調整されたモデルのパフォーマンスを比較します。
kubectl apply
コマンドを使用して、KAITO 推論ワークスペース CRD を適用します。kubectl apply -f workspace-phi-3-mini-adapter.yaml
kubectl get workspace
コマンドを使用して、GPU リソース、推論サーバー、ワークスペースの準備状況を追跡します。kubectl get workspace -w
出力は次の出力例のようになります。
NAME INSTANCE RESOURCE READY INFERENCE READY JOB STARTED WORKSPACE SUCCEEDED AGE workspace-phi-3-mini-adapter Standard_NC6s_v3 True True True 5m 47s
kubectl get pods
コマンドを使用して、推論ワークロード ポッドの状態を確認します。kubectl get pods
ポッドが
Running
の状態になるまで、数分かかる場合があります。
モデル推論サービス エンドポイントをテストする
kubectl get svc
コマンドを使用して、モデル推論サービスを確認し、サービス IP アドレスを取得します。export SERVICE_IP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath=’{.spec.clusterIP}’)
kubectl run
コマンドを使用して、任意のサンプル入力で微調整された Phi-3-mini モデルを実行します。 次の例では、生成 AI モデルに "AKS とは何ですか?" と尋ねています。kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$SERVICE_IP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"What is AKS?\"}"
出力は次の例のようになります。
"Kubernetes on Azure" is the official name. https://learn.microsoft.com/en-us/azure/aks/ ...
リソースをクリーンアップする
これらのリソースが不要になった場合は、余分な Azure 料金の発生を避けるために削除できます。 リソースの推定コストを計算するには、Azure 料金計算ツールを使用できます。
kubectl delete workspace
コマンドを使用して、AKS クラスター上の KAITO ワークスペースと割り当てられたリソースを削除します。
kubectl delete workspace workspace-tuning-phi-3-mini
kubectl delete workspace workspace-phi-3-mini-adapter
次のステップ
- KAITO を使用して言語モデルを微調整する方法の詳細情報 - AKS エンジニアリング ブログ
- AI と機械学習のワークフローの MLOps と AKS のベストプラクティスについて調べる
- Azure Kubernetes Service でサポートされている GPU ファミリの詳細情報
Azure Kubernetes Service