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

Container Service for Kubernetes:ACKでモデルをすばやくデプロイする

最終更新日:Nov 14, 2024

モデルをデプロイするときに、モデルのソースとモデルをオンデマンドでデプロイするプラットフォームを選択できます。 このトピックでは、例としてQwen1.5-4B-ChatモデルとT4 GPUを使用して、Container Service for Kubernetes (ACK) にModelScopeモデル、HuggingFaceモデル、およびローカルモデルを迅速にデプロイする方法を示します。

警告

このトピックは、モデル機能を体験するためのものです。 本番環境にモデルを配置する手順に従わないことをお勧めします。

モデルの概要

ModelScope

ModelScopeは、業界をリードする多数の事前トレーニング済みモデルを備えた、グリーンでオープンソースのAI開発およびモデルサービスプラットフォームです。 このプラットフォームは、開発者がモデル開発コストを削減するのに役立ちます。 ModelScopeは、高品質のオープンソースモデルを提供します。 これらのモードは、ModelScopeでテストするか、無料でダウンロードできます。 詳細については、「ModelScopeの概要」をご参照ください。

ハギングフェイス

HuggingFaceは、350,000を超えるモデル、75,000データセット、および150,000のアプリケーションデモを提供するプラットフォームです。 すべてのモデル、データセット、およびアプリケーションはオープンソースです。 HuggingFaceで他の開発者と機械学習プロジェクトを作成できます。 詳細については、「HuggingFaceドキュメント」をご参照ください。

前提条件

  • GPU高速化ノードを含むACK Proクラスターが作成されます。 クラスターのKubernetesバージョンが1.22以降です。 各GPU高速化ノードは、16 GB以上のGPUメモリを提供します。 詳細については、「ACK管理クラスターの作成」をご参照ください。

    バージョンが525のGPUドライバをインストールすることを推奨します。 ack.aliyun.com/nvidia-driver-version:525.105.17ラベルをGPUアクセラレーションノードに追加して、GPUドライバーのバージョンを525.105.17に指定できます。 詳細については、「ラベルの追加によるノードのNVIDIAドライバーバージョンの指定」をご参照ください。

  • Arenaクライアントの最新バージョンがインストールされています。 詳細については、「Arenaクライアントの設定」をご参照ください。

ModelScopeモデルのデプロイ

手順1: 推論サービスのデプロイ

  1. 次のコマンドを実行して、Arenaを使用してカスタムサービスをデプロイします。 サービスの名前はmodelscopeで、バージョンはv1です。

    アプリケーションが起動すると、ModelScopeからqwen/Qwen1.5-4B-Chatという名前のモデルがダウンロードされます。 他のモデルをダウンロードするには、MODEL_IDブートパラメーターを変更します。 DASHSCOPE_API_KEY環境変数を設定して、ModelScope SDKで使用されるトークンを設定できます。

    重要

    モデルはポッドにダウンロードされます。 ポッドをホストするGPU高速化ノードに、少なくとも30 GBの空きディスク領域があることを確認します。

    arena serve custom \
        --name=modelscope \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/modelscope:v1 \
        "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    -- name

    推論サービスの名前。

    -- version

    推論サービスのバージョン。

    -- gpus

    各推論サービスレプリカのGPUの数。

    -- レプリカ

    推論サービスレプリカの数。

    -- 安らかポート

    公開する推論サービスのポート。

    -- 準備-プローブ-アクション

    準備プローブの接続タイプ。 有効な値: HttpGet、Exec、gRPC、およびTCPSocket。

    -- readiness-probe-action-option

    準備プローブの接続方法。

    -- readiness-probe-option

    準備完了プローブの設定。

    -- イメージ

    推論サービスイメージのアドレス。

    期待される出力:

    service/modelscope-v1 created
    deployment.apps/modelscope-v1-custom-serving created
    INFO[0002] The Job modelscope has been submitted successfully
    INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status

    を確認できます。

    出力は、modelscope-v1モデルに関連するKubernetesリソースが作成されたことを示します。

  2. 次のコマンドを実行して、推論サービスの詳細を照会します。

    モデルのダウンロードには時間がかかります。 推論サービスの詳細を表示するには、サービスがデプロイされてから約10分待ちます。

    arena serve get modelscope

    期待される出力:

    Name:       modelscope
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        10m
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                           STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                           ------   ---  -----  --------  ---  ----
      modelscope-v1-custom-serving-5bb85d6555-2p6z9  Running  10m  1/1    0         1    cn-beijing.192.168.XX.XX

    出力は、modelscope推論サービスがデプロイされ、リクエストを受け入れる準備ができていることを示します。 モデルおよびサービス環境は、GPU高速化ノードにデプロイされています。

手順2: 推論サービスの検証

  1. 次のコマンドを実行して、推論サービスとローカル環境間のポート転送を設定します。

    重要

    kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingressの概要」をご参照ください。

    kubectl port-forward svc/modelscope-v1 8000:8000

    期待される出力:

    Forwarding from 127.0.0.1:8088 -> 8000
    Forwarding from [::1]:8088 -> 8000

    からの転送

  2. 次のコマンドを実行して、modelscope推論サービスにリクエストを送信します。

    curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json"  -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'

    期待される出力:

    {"model_name":"/root/.cache/modelscope/hub/qwen/Qwen1___5-4B-Chat","text_output":"What is AI? AI is technology that enables computers and machines to simulate human intelligence and problem-solving capabilities."}

    出力は、モデルがAIの定義を提供できることを示します。

(オプション) 手順3: 推論サービスのクリア

リソースが不要になった場合は、次のコマンドを実行して推論サービスを削除します。

arena serve del modelscope

HuggingFaceモデルのデプロイ

手順1: 推論サービスのデプロイ

  1. ポッドがHuggingFaceリポジトリにアクセスできることを確認してください。

  2. 次のコマンドを実行して、Arenaを使用してカスタムサービスをデプロイします。 サービスの名前はhuggingfaceで、バージョンはv1です。

    この例では、MODEL_SOURCE環境変数は、HuggingFaceという名前のモデルリポジトリを指定するように設定されています。 アプリケーションが起動すると、HuggingFaceからqwen/Qwen1.5-4B-Chatという名前のモデルがダウンロードされます。 他のHuggingFaceモデルをダウンロードするには、MODEL_IDブートパラメーターを変更します。 HUGGINGFACE_TOKEN環境変数を設定して、HUGGINGFACEへのアクセスに使用されるトークンを設定できます。

    重要

    モデルはポッドにダウンロードされます。 ポッドをホストするGPU高速化ノードに、少なくとも30 GBの空きディスク領域があることを確認します。

    arena serve custom \
        --name=huggingface \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/modelscope:v1 \
        "MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    -- name

    推論サービスの名前。

    -- version

    推論サービスのバージョン。

    -- gpus

    各推論サービスレプリカのGPUの数。

    -- レプリカ

    推論サービスレプリカの数。

    -- 安らかポート

    公開する推論サービスのポート。

    -- 準備-プローブ-アクション

    準備プローブの接続タイプ。 有効な値: HttpGet、Exec、gRPC、およびTCPSocket。

    -- readiness-probe-action-option

    準備プローブの接続方法。

    -- readiness-probe-option

    準備完了プローブの設定。

    -- イメージ

    推論サービスイメージのアドレス。

    期待される出力:

    service/huggingface-v1 created
    deployment.apps/huggingface-v1-custom-serving created
    INFO[0003] The Job huggingface has been submitted successfully 
    INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status 

    を確認できます。

    出力は、推論サービスがデプロイされていることを示します。

  3. 次のコマンドを実行して、推論サービスの詳細を照会します。

    モデルのダウンロードには時間がかかります。 推論サービスの詳細を表示するには、サービスがデプロイされてから約10分待ちます。

    arena serve get huggingface

    期待される出力:

    Name:       huggingface
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  0
    Age:        1h
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                           STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                           ------   ---  -----  --------  ---  ----
      huggingface-v1-custom-serving-dcf6cf6c8-2lqzr  Running  1h   1/1    0         1    cn-beijing.192.168.XX.XX

    出力は、ポッド (huggingface-v1-custom-serving-dcf6cf6c8-2lqzr) が推論サービスにデプロイされ、サービスを提供する準備ができていることを示します。

手順2: 推論サービスの検証

  1. 次のコマンドを実行して、推論サービスとローカル環境間のポート転送を設定します。

    重要

    kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingressの概要」をご参照ください。

    kubectl port-forward svc/huggingface-v1 8000:8000

    期待される出力:

    Forwarding from 127.0.0.1:8088 -> 8000
    Forwarding from [::1]:8088 -> 8000

    からの転送

  2. 次のコマンドを実行して、HuggingFace推論サービスにリクエストを送信します。

    curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json"  -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'

    期待される出力:

    {"model_name":"Qwen/Qwen1.5-4B-Chat","text_output":"What is AI? AI is a branch of computer science that seeks to create machines to simulate human intelligence."}

    出力は、モデルがAIの定義を提供できることを示します。

(オプション) 手順3: 推論サービスのクリア

リソースが不要になった場合は、次のコマンドを実行して推論サービスを削除します。

arena serve del huggingface

ローカルモデルのデプロイ

ステップ1: モデルファイルをダウンロード

このセクションでは、Qwen1.5-4B-Chatモデルを例として、Object Storage Service (OSS) からモデルをダウンロードしてアップロードする方法、およびACKクラスターに永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成する方法を示します。

  1. モデルファイルをダウンロードします。

    1. 次のコマンドを実行してGitをインストールします。

      # Run yum install git or apt install git. 
      yum install git
    2. 次のコマンドを実行して、Git Large File Support (LFS) プラグインをインストールします。

      # Run yum install git-lfs or apt install git-lfs. 
      yum install git-lfs
    3. 次のコマンドを実行して、ModelScopeのQwen1.5-4B-Chatリポジトリをローカル環境に複製します。

      GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
    4. 次のコマンドを実行してQwen1.5-4B-Chatディレクトリに移動し、LFSで管理されている大きなファイルをプルします。

      cd Qwen1.5-4B-Chat
      git lfs pull
  2. Qwen1.5-4B-ChatモデルファイルをOSSにアップロードします。

    1. OSSコンソールにログインし、作成したOSSバケットの名前を表示および記録します。

      OSSバケットの作成方法の詳細については、「バケットの作成」をご参照ください。

    2. ossutilをインストールして設定し、OSSリソースを管理します。 詳細については、「ossutilのインストール」をご参照ください。

    3. 次のコマンドを実行して、OSSにQwen1.5-4B-Chatという名前のディレクトリを作成します。

      ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
    4. 次のコマンドを実行して、モデルファイルをOSSにアップロードします。

      ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
  3. ターゲットクラスターでPVとPVCを設定します。 詳細については、「静的にプロビジョニングされたOSSボリュームのマウント」をご参照ください。

    • 次の表に、PVのパラメータを示します。

      項目

      説明

      PVタイプ

      OSS

      ボリューム名

      llm-モデル

      アクセス証明書

      OSSバケットへのアクセスに使用するAccessKey IDとAccessKey secretを指定します。

      バケットID

      作成したOSSバケットの名前を指定します。

      OSSパス

      /models/Qwen1.5-4B-Chatなど、モデルのパスを選択します。

    • 次の表に、PVCのパラメータを示します。

      項目

      説明

      PVCタイプ

      OSS

      ボリューム名

      llm-モデル

      割り当てモード

      [既存のボリューム] を選択します。

      既存のボリューム

      [既存のボリューム] ハイパーリンクをクリックし、作成したPVを選択します。

手順2: 推論サービスのデプロイ

  1. 次のコマンドを実行して、Arenaを使用してカスタムサービスをデプロイします。 サービスの名前はlocal-modelです。

    -- dataパラメーターは、llm-modelという名前の既存の永続ボリュームクレーム (PVC) を /model/Qwen1.5-4B-Chatディレクトリにマウントします。 アプリケーションの起動後、/model/Qwen1.5-4B-Chatディレクトリからモデルが読み込まれます。 別のローカルモデルを読み込むには、MODEL_IDパラメーターを変更します。

    arena serve custom \
        --name=local-model \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/modelscope:v1 \
        "MODEL_ID=/model/Qwen1.5-4B-Chat python3 server.py"

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    -- name

    推論サービスの名前。

    -- version

    推論サービスのバージョン。

    -- gpus

    各推論サービスレプリカのGPUの数。

    -- レプリカ

    推論サービスレプリカの数。

    -- 安らかポート

    公開する推論サービスのポート。

    -- 準備-プローブ-アクション

    準備プローブの接続タイプ。 有効な値: HttpGet、Exec、gRPC、およびTCPSocket。

    -- readiness-probe-action-option

    準備プローブの接続方法。

    -- readiness-probe-option

    準備完了プローブの設定。

    -- データ

    共有PVCをランタイム環境にマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側にあるPVCの名前を指定します。 arena data listコマンドを実行して、クラスター内の既存のPVCのリストを照会できます。 コロンの右側にあるランタイム環境を指定します。 トレーニングデータまたはモデルのローカルパスを指定することもできます。 これにより、スクリプトは指定されたPVのデータまたはモデルにアクセスできます。

    -- イメージ

    推論サービスイメージのアドレス。

    期待される出力:

    service/local-model-v1 created
    deployment.apps/local-model-v1-custom-serving created
    INFO[0001] The Job local-model has been submitted successfully
    INFO[0001] You can run `arena serve get local-model --type custom-serving -n default` to check the job status

    を確認できます。

    出力は、推論サービスがデプロイされていることを示します。

  2. 次のコマンドを実行して、推論サービスの詳細を照会します。

    モデルのダウンロードには時間がかかります。 推論サービスの詳細を表示するには、サービスがデプロイされてから約10分待ちます。

    arena serve get local-model

    期待される出力:

    Name:       local-model
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        1m
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                            STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                            ------   ---  -----  --------  ---  ----
      local-model-v1-custom-serving-8458fb6cf6-6mvzp  Running  1m   1/1    0         1    cn-beijing.192.168.XX.XX

    出力は、ポッド (local-model-v1-custom-serving-8458fb6cf6-6mvzp) が推論サービスにデプロイされ、サービスを提供する準備ができていることを示します。

手順3: 推論サービスの検証

  1. 次のコマンドを実行して、推論サービスとローカル環境間のポート転送を設定します。

    重要

    kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingressの概要」をご参照ください。

    kubectl port-forward svc/local-model-v1 8000:8000

    期待される出力:

    Forwarding from 127.0.0.1:8088 -> 8000
    Forwarding from [::1]:8088 -> 8000

    からの転送

  2. 次のコマンドを実行して、ローカルモデル推論サービスにリクエストを送信します。

    curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json"  -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'

    期待される出力:

    {"model_name":"/model/Qwen1.5-4B-Chat","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent."}

    出力は、モデルがAIの定義を提供できることを示します。

(オプション) ステップ4: 環境をクリアする

リソースが不要になった場合は、すぐに環境をクリアしてください。

  • 次のコマンドを実行して、推論サービスを削除します。

    arena serve del local-model
  • 次のコマンドを実行して、PVとPVCを削除します。

    kubectl delete pvc llm-model
    kubectl delete pv llm-model