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

Function Compute:Function ComputeとTensorFlowに基づくサーバーレスAI推論

最終更新日:Apr 25, 2025

Serverless Devsを使用すると、AIモデルに基づいてオンデマンドおよび自動拡張推論を実装するインフラストラクチャを管理することなく、AI推論アプリケーションをFunction Computeコンソールにデプロイできます。 これにより、コストを削減し、反復処理を高速化できます。

背景

このトピックでは、次の画像でシステムが動物を正しく認識できるかどうかを確認する例を示します。 コードの詳細については、「Dog-Cat Classifier」をご参照ください。dog and cat

前提条件

手順

  1. 次のコマンドを実行して、プロジェクトを複製します。

    git clone https://github.com/awesome-fc/cat-dog-classify.git
  2. 依存関係をインストールします。

    1. 次のコマンドを実行して、プロジェクトディレクトリに移動します。

      cd cat-dog-classify
    2. 次のコマンドを実行して依存関係をインストールします。

      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ディレクトリに移動します。

  3. 依存関係をNASにアップロードします。

    依存関係をインストールすると、Function Computeによって参照されるコードパッケージは解凍されますが、合計サイズが上限に達する場合があります。 合計サイズを制限内に制御するには、サイズの大きい依存関係とモデルをNASに保存します。

    1. 次のコマンドを実行して、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
    2. 次のコマンドを実行して、サービスをデプロイします。

      sudo s deploy service
    3. 次のコマンドを実行して、依存関係を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
    4. 次のコマンドを実行して、モデルを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
    5. 次のコマンドを実行して、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
  4. 次のコマンドを実行して、プロジェクトをデプロイします。

    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形式です。

    ビジネス要件に基づいてドメイン名の変数を置き換え、ブラウザを使用してドメイン名にアクセスします。 画像がアップロードされると、次の出力が返されます。cat-dogserverless devs

    説明

    一時ドメイン名は、デモンストレーションと開発の目的でのみ使用されます。 それは限られた期間有効です。 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) 」をご参照ください。