Serverless Devsを使用すると、AIモデルに基づいてオンデマンドおよび自動拡張推論を実装するインフラストラクチャを管理することなく、AI推論アプリケーションをFunction Computeコンソールにデプロイできます。 これにより、コストを削減し、反復処理を高速化できます。
背景
このトピックでは、次の画像でシステムが動物を正しく認識できるかどうかを確認する例を示します。 コードの詳細については、「Dog-Cat Classifier」をご参照ください。
前提条件
Function Computeの有効化 Function Computeリソースは従量課金で購入することを推奨します。 詳細については、「関数をすばやく作成する」および「従量課金」をご参照ください。
Apsara File Storage NAS (NAS) を有効化します。 NAS課金の詳細については、「ファイルストレージNASを使い始める」および「汎用NASファイルシステムの課金」をご参照ください。
手順
次のコマンドを実行して、プロジェクトを複製します。
git clone https://github.com/awesome-fc/cat-dog-classify.git依存関係をインストールします。
次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd cat-dog-classify次のコマンドを実行して依存関係をインストールします。
sudo s build --use-dockerサンプルコマンド出力:
[2021-12-09 07:26:39] [INFO] [S-CLI] - Start ... [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build artifact start... [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Use docker for building. [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build function using image: registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20 [2021-12-09 07:26:40] [INFO] [FC-BUILD] - begin pulling image registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20, you can also use docker pull registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20 to pull image by yourself. build-1.9.20: Pulling from aliyunfc/runtime-python3.6 f49cf87b52c1: Already exists ...... 01ce50b4eb85: Already exists 02b807385deb: Pull complete ...... 9b9fdb8de506: Pull complete Digest: sha256:a9a6dab2d6319df741ee135d9749a90b2bb834fd11ee265d1fb106053890**** Status: Downloaded newer image for registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20 builder begin to build [2021-12-09 07:27:57] [INFO] [FC-BUILD] - Build artifact successfully. Tips for next step ====================== * Invoke Event Function: s local invoke * Invoke Http Function: s local start * Deploy Resources: s deploy End of method: build
依存関係をインストールするコマンドを実行すると、Serverless Devsは関連する依存関係を自動的にインストールし、サードパーティのライブラリを. s/build/artifacts/cat-dog/classify/.s/pythonディレクトリに移動します。
依存関係をNASにアップロードします。
依存関係をインストールすると、Function Computeによって参照されるコードパッケージは解凍されますが、合計サイズが上限に達する場合があります。 合計サイズを制限内に制御するには、サイズの大きい依存関係とモデルをNASに保存します。
次のコマンドを実行して、NASファイルシステムを初期化します。
sudo s nas initサンプルコマンド出力:
[2021-12-09 07:29:58] [INFO] [S-CLI] - Start ... [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using access alias: default [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeyID: yourAccessKeyID [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeySecret: yourAccessKeySecret ...... [2021-12-09 07:30:01] [INFO] [FC-DEPLOY] - Generated vpcConfig: securityGroupId: sg-wz90u1syk2h1f14b**** vSwitchId: vsw-wz9qnuult4q5g4f7n**** vpcId: vpc-wz9x9bzs0wtvjgt6n**** ...... [2021-12-09 07:30:15] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists Make service _FC_NAS_cat-dog success. Make function _FC_NAS_cat-dog/nas_dir_checker success. Make trigger _FC_NAS_cat-dog/nas_dir_checker/httpTrigger success. [2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Service _FC_NAS_cat-dog exists [2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Function nas_dir_checker exists [2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists There is auto config in the service: _FC_NAS_cat-dog [2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Generated nasConfig: groupId: 10003 mountPoints: - fcDir: /mnt/auto nasDir: /cat-dog serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com userId: 10003 cat-dog: userId: 10003 groupId: 10003 mountPoints: - serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com nasDir: /cat-dog fcDir: /mnt/auto次のコマンドを実行して、サービスをデプロイします。
sudo s deploy service次のコマンドを実行して、依存関係をNASにアップロードします。
sudo s nas upload -r .s/build/artifacts/cat-dog/classify/.s/python/ /mnt/auto/pythonサンプルコマンド出力:
[2021-12-09 07:33:14] [INFO] [S-CLI] - Start ... Packing ... Package complete. Upload done Tips for next step ====================== * Invoke remote function: s invoke End of method: nas次のコマンドを実行して、モデルをNASにアップロードします。
sudo s nas upload -r src/model/ /mnt/auto/modelサンプルコマンド出力:
[2021-12-09 07:52:26] [INFO] [S-CLI] - Start ... Packing ... Package complete. Upload done Tips for next step ====================== * Invoke remote function: s invoke End of method: nas次のコマンドを実行して、NASディレクトリを表示します。
sudo s nas command ls /mnt/auto/サンプルコマンド出力:
[2021-12-09 07:53:01] [INFO] [S-CLI] - Start ... model python Tips for next step ====================== * Invoke remote function: s invoke End of method: nas
次のコマンドを実行して、プロジェクトをデプロイします。
sudo s deployサンプルコマンド出力:
[2021-12-09 07:56:15] [INFO] [S-CLI] - Start ... [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using access alias: default [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeyID: yourAccessKeyID [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeySecret: yourAccessKeySecret ...... [2021-12-09 07:56:19] [INFO] [FC-DEPLOY] - Generated logConfig: enableInstanceMetrics: true enableRequestMetrics: true logBeginRule: ~ logstore: fc-service-cat-dog-logstore project: 188077086902****-cn-shenzhen-logproject ...... There is auto config in the service: cat-dog Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain cat-dog: region: cn-shenzhen service: name: cat-dog function: name: classify runtime: python3 handler: predict.handler memorySize: 1024 timeout: 120 url: system_url: https://188077086902****.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/cat-dog/classify/ custom_domain: - domain: http://classify.cat-dog.188077086902****.cn-shenzhen.fc.devsapp.net triggers: - type: http name: httpTriggerプロジェクトのデプロイ後、Function Computeはプロジェクトの一時ドメイン名を生成します。 コマンド出力でドメイン名を確認できます。 次に、ドメイン名を使用して、展開した関数にアクセスできます。 ドメイン名は、
http://classify.ca t-dog.<account_id>.<region_id>.fc.devsapp.net形式です。ビジネス要件に基づいてドメイン名の変数を置き換え、ブラウザを使用してドメイン名にアクセスします。 画像がアップロードされると、次の出力が返されます。
説明一時ドメイン名は、デモンストレーションと開発の目的でのみ使用されます。 それは限られた期間有効です。 Alibaba Cloudからインターネットコンテンツプロバイダ (ICP) の申請を取得したドメイン名を使用する必要があります。 詳細については、「カスタムドメイン名の設定」をご参照ください。
プロビジョニング済みインスタンスを使用してコールドスタートの不具合を解消
Function Computeは、同時リクエスト数に基づいて実行環境を自動的にスケールアウトします。 Cat-dog Image Classifierの例は、ディープラーニングの典型的なケースです。 依存関係とモデルの読み込みには時間がかかります。 画像内の動物を認識するために使用される関数は、1 GBのメモリを持ち、同時アクセス要求を処理するために10秒を必要とします。 ただし、特定のシナリオでは、20秒以上を必要とする場合があります。
このようなイベントが表示された場合、関数が呼び出されたときのコールドスタート期間は10秒を超えます。 コールドスタートの不具合を防ぐために、プロビジョニング済みインスタンスを使用するかどうかを設定できます。 プロジェクトディレクトリで次のコマンドを実行すると、コールドスタートの不具合を解消できます。
sudo s provision put --target 10 --qualifier LATEST効率的なビジネスの実行と開発のために、負荷の高いサーバーの堅牢性を理解したい場合は、Serverless Devs on関数が提供するストレステストコマンドを実行します。 詳細については、「Serverless Devsコマンド」をご参照ください。
次のコマンドを実行して、プロビジョニングされたインスタンスの詳細を取得します。
sudo s provision get --qualifier LATESTストレステストを完了し、プロビジョニング済みインスタンスを使用しなくなったら、次のコマンドを実行して、プロビジョニング済みインスタンスをリリースします。
sudo s provision put --target 0 --qualifier LATEST
関連ドキュメント
Serverless Devsを使用して、関数のビルドや依存関係のインストールなどの操作を実行する場合は、「ビルドコマンド」をご参照ください。
Serverless Devsを使用して、プロビジョニングされた構成の表示や更新などの操作を実行する場合は、「Provision commands (s provision) 」をご参照ください。