AI ツールチェーン オペレーター (プレビュー) を使用して Azure Kubernetes Service (AKS) に AI モデルをデプロイする

AI ツールチェーン オペレーター (KAITO) は、AKS クラスターで OSS AI モデルを実行するエクスペリエンスを簡略化する AKS 用のマネージド アドオンです。 AI ツールチェーン オペレーターは、必要な GPU ノードを自動的にプロビジョニングし、関連付けられている推論サーバーを AI モデルへのエンドポイント サーバーとして設定します。 このアドオンを使用すると、オンボード時間が短縮され、インフラストラクチャのセットアップではなく、AI モデルの使用と開発に集中できます。

この記事では、AI ツールチェーン オペレーター アドオンを有効にし、AKS に AI モデルをデプロイする方法について説明します。

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。

開始する前に

  • この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、AKS における Kubernetes の中心概念に関するページを参照してください。
  • すべてのホステッド モデル推論用イメージおよび推奨されるインフラストラクチャのセットアップについては、KAITO GitHub リポジトリを参照してください。
  • 現在、AI ツールチェーン オペレーター アドオンは、KAITO バージョン v0.1.0 をサポートしています。KAITO モデル リポジトリからモデルを選択することを検討する際は、この点に注意してください。

前提条件

Azure CLI プレビュー拡張機能をインストールする

  1. az extension add コマンドを使用して Azure CLI プレビュー拡張機能をインストールします。

    az extension add --name aks-preview
    
  2. az extension update コマンドを使用して、拡張機能を更新して最新バージョンがあることを確認します。

    az extension update --name aks-preview
    

AI ツールチェーン オペレーター アドオン機能フラグを登録する

  1. az feature register コマンドを使用して、AIToolchainOperatorPreview 機能フラグを登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "AIToolchainOperatorPreview"
    

    登録が完了するまでに数分かかります。

  2. az feature show コマンドを使用して登録を確認します。

    az feature show --namespace "Microsoft.ContainerService" --name "AIToolchainOperatorPreview"
    

環境変数をエクスポートする

  • この記事では構成手順を簡略化するために、次のコマンドを使用して環境変数を定義できます。 プレースホルダーの値は、実際の値に置き換えてください。

    export AZURE_SUBSCRIPTION_ID="mySubscriptionID"
    export AZURE_RESOURCE_GROUP="myResourceGroup"
    export AZURE_LOCATION="myLocation"
    export CLUSTER_NAME="myClusterName"
    

AKS クラスターで AI ツールチェーン オペレーター アドオンを有効にする

次のセクションでは、AI ツールチェーン オペレーター アドオンを有効にして AKS クラスターを作成し、既定のホステッド AI モデルをデプロイする方法について説明します。

AI ツールチェーン オペレーター アドオンが有効になっている AKS クラスターを作成する

  1. az group create コマンドを使って Azure リソース グループを作成します。

    az group create --name ${AZURE_RESOURCE_GROUP} --location ${AZURE_LOCATION}
    
  2. --enable-ai-toolchain-operator--enable-oidc-issuer フラグを指定して az aks create コマンドを使用して、AI ツールチェーン オペレーター アドオンが有効になっている AKS クラスターを作成します。

    az aks create --location ${AZURE_LOCATION} \
        --resource-group ${AZURE_RESOURCE_GROUP} \
        --name ${CLUSTER_NAME} \
        --enable-oidc-issuer \
        --enable-ai-toolchain-operator
    

    Note

    AI ツールチェーン オペレーター アドオンを有効にすると、AKS によってマネージド ID が作成されます。 マネージド ID は、マネージド AKS クラスターに GPU ノード プールを作成するために使用されます。 次のセクションで紹介する手順に従って、適切なアクセス許可を手動で設定する必要があります。

    AI ツールチェーン オペレーターの有効化には、OIDC 発行者の有効化が必要です。

  3. 既存の AKS クラスターでは、az aks update コマンドを使用して、AI ツールチェーン オペレーター アドオンを有効にすることができます。

    az aks update --name ${CLUSTER_NAME} \
            --resource-group ${AZURE_RESOURCE_GROUP} \
            --enable-oidc-issuer \
            --enable-ai-toolchain-operator
    

クラスターへの接続

  1. az aks get-credentials コマンドを使用して、クラスターに接続するように kubectl を構成します。

    az aks get-credentials --resource-group ${AZURE_RESOURCE_GROUP} --name ${CLUSTER_NAME}
    
  2. kubectl get コマンドを使用して、ご利用のクラスターへの接続を確認します。

    kubectl get nodes
    

環境変数をエクスポートする

  • 次のコマンドを使用して、MC リソース グループ、プリンシパル ID、KAITO ID の環境変数をエクスポートします。

    export MC_RESOURCE_GROUP=$(az aks show --resource-group ${AZURE_RESOURCE_GROUP} \
        --name ${CLUSTER_NAME} \
        --query nodeResourceGroup \
        -o tsv)
    export PRINCIPAL_ID=$(az identity show --name "ai-toolchain-operator-${CLUSTER_NAME}" \
        --resource-group "${MC_RESOURCE_GROUP}" \
        --query 'principalId' \
        -o tsv)
    export KAITO_IDENTITY_NAME="ai-toolchain-operator-${CLUSTER_NAME}"
    

AKS OpenID Connect (OIDC) 発行者を取得する

  • AKS OIDC 発行者 URL を取得し、それを環境変数としてエクスポートします。

    export AKS_OIDC_ISSUER=$(az aks show --resource-group "${AZURE_RESOURCE_GROUP}" \
        --name "${CLUSTER_NAME}" \
        --query "oidcIssuerProfile.issuerUrl" \
        -o tsv)
    

サービス プリンシパルに対するロール割り当てを作成する

  • az role assignment create コマンドを使用して、サービス プリンシパルに対する新しいロール割り当てを作成します。

    az role assignment create --role "Contributor" \
        --assignee "${PRINCIPAL_ID}" \
        --scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}/resourcegroups/${AZURE_RESOURCE_GROUP}"
    

フェデレーション ID 資格情報を確立する

  • az identity federated-credential create コマンドを使用して、マネージド ID、AKS OIDC 発行者、サブジェクトの間にフェデレーション ID 資格情報を作成します。

    az identity federated-credential create --name "kaito-federated-identity" \
        --identity-name "${KAITO_IDENTITY_NAME}" \
        -g "${MC_RESOURCE_GROUP}" \
        --issuer "${AKS_OIDC_ISSUER}" \
        --subject system:serviceaccount:"kube-system:kaito-gpu-provisioner" \
        --audience api://AzureADTokenExchange
    

デプロイが実行中であることを確認する

  1. kubectl rollout restart コマンドを使用して、ポッドで KAITO GPU プロビジョナーのデプロイを再起動します。

    kubectl rollout restart deployment/kaito-gpu-provisioner -n kube-system
    
  2. kubectl get コマンドを使用して、デプロイが実行されていることを確認します。

    kubectl get deployment -n kube-system | grep kaito
    

既定のホステッド AI モデルをデプロイする

  1. kubectl apply コマンドを使用して、KAITO モデル リポジトリから Falcon 7B-instruct モデルをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/Azure/kaito/main/examples/inference/kaito_workspace_falcon_7b-instruct.yaml
    
  2. kubectl get コマンドを使用して、ワークスペース内のライブ リソースの変更を追跡します。

    kubectl get workspace workspace-falcon-7b-instruct -w
    

    Note

    ワークスペース内のライブ リソースの変更を追跡するときは、マシンの準備には最大 10 分かかる場合があり、ワークスペースの準備には最大 20 分かかることに注意してください。

  3. kubectl get svc コマンドを使用して、サービスを確認し、サービス IP アドレスを取得します。

    export SERVICE_IP=$(kubectl get svc workspace-falcon-7b-instruct -o jsonpath='{.spec.clusterIP}')
    
  4. 次の curl コマンドを使用し、任意のサンプル入力を選択して、Falcon 7B-instruct モデルを実行します。

    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\":\"YOUR QUESTION HERE\"}"
    

リソースをクリーンアップする

これらのリソースが不要になった場合は、余分な Azure 料金の発生を避けるために削除できます。

  • az group delete コマンドを使用して、リソース グループとそれに関連付けられているリソースを削除します。

    az group delete --name "${AZURE_RESOURCE_GROUP}" --yes --no-wait
    

次のステップ

その他の推論モデル オプションについては、KAITO GitHub リポジトリを参照してください。