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

Function Compute:画像処理のベストプラクティス

最終更新日:Aug 29, 2024

Function Computeコンソール、SDK、またはServerless Devsを使用して、GPU高速化インスタンスのベストプラクティスを体験できます。 このトピックでは、Pythonを例として使用して、Function Computeコンソールのコードを使用して、rawイメージにエッジ検出を実装する方法を説明し

シナリオと利点

CPUを搭載したインスタンスと比較して、Function ComputeのGPU高速化インスタンスは開発者を許可します。

  • リアルタイムおよび準リアルタイムのアプリケーションシナリオ

    • グラフィックスと画像を数倍高速に処理し、プロダクションコンテンツをより効率的にユーザーにプッシュします。

  • コスト優先の画像処理シナリオ

    • ビジネス要件に基づいてGPU高速化インスタンスを保持します。 このように、Function ComputeのGPU高速化インスタンスは、自作GPUクラスターよりもはるかに高いコスト効率を提供します。

    • GPU仮想化テクノロジを使用して、1/2モードまたは排他モードでGPUリソースを使用します。 このようにして、GPU高速化インスタンスをきめ細かく構成できます。

  • 効率優先の画像処理シナリオ

    • ドライバーとCUDAのバージョン管理、マシンの運用管理、GPUの不良カード管理など、GPUクラスターのO&Mを実行することなく、コード開発とビジネス目標に焦点を当てます。

GPU高速化インスタンスの詳細については、「インスタンスタイプとインスタンスモード」をご参照ください。

チュートリアルの説明

次の表は、Function Computeでソースイメージ (左) でエッジ検出を実行して新しいイメージ (右) を生成する例を示しています。

ソースイメージ

新しいイメージ

image_processing_example

image_processing_result_example

前提条件

  • OpenCVはコンパイルされます。 OpenCVは、GPUアクセラレーションを使用する前にコンパイルする必要があります。 次のいずれかの方法を使用してOpenCVをコンパイルできます。

    • (推奨) Dockerを介してコンパイル済みOpenCVを使用します。 ダウンロードアドレス: opencv-cuda-dockerまたはcuda-opencv

    • OpenCVを手動でコンパイルします。 詳細については、「コンパイルガイド」をご参照ください。

  • 処理するオーディオおよびビデオリソースを、GPUアクセラレーションインスタンスが配置されているリージョンのObject Storage Service (OSS) バケットにアップロードします。 バケット内のオブジェクトに対する読み取りおよび書き込み権限があることを確認してください。 オーディオおよびビデオリソースをアップロードする方法の詳細については、「オブジェクトのアップロード」をご参照ください。 権限の詳細については、「バケットのACLの変更」をご参照ください。

Function Computeコンソールを使用してGPUアプリケーションをデプロイする

  1. イメージを展開します。

    1. Container Registry Enterprise EditionインスタンスまたはContainer Registry Personal Editionインスタンスを作成します。

      Enterprise Editionインスタンスを作成することを推奨します。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。

    2. 名前空間とイメージリポジトリを作成します。

      詳細については、「Container Registry Enterprise Editionインスタンスを使用してイメージを構築する」トピックの「手順2: 名前空間の作成」および手順3: イメージリポジトリの作成」をご参照ください。

    3. Container Registryコンソールのプロンプトに従って、Dockerで操作を実行します。 次に、前述のサンプルapp.pyDockerfileをインスタンスイメージリポジトリにプッシュします。 ファイルの詳細については、Serverless Devsを使用してGPUアプリケーションをデプロイする場合、/codeディレクトリのapp.pyおよびDockerfileをご参照ください。

      db-acr-docker

  2. GPU関数を作成します。 詳細については、「カスタムコンテナー関数の作成」をご参照ください。

  3. 関数の実行タイムアウト時間を変更します。

    1. 管理する関数の名前をクリックします。 詳細ページのナビゲーションバーで、[設定] タブをクリックします。 [環境情報] セクションで、[変更] をクリックします。

    2. 表示されるパネルで、実行タイムアウト期間パラメーターをクリックし、OKをクリックします。

    説明

    CPUトランスコード期間がデフォルト値の60秒を超えています。 そのため、[実行タイムアウト期間] パラメーターをより大きな値に設定することを推奨します。

  4. プロビジョニングされたGPUインスタンスを設定します。 プロビジョニング済みインスタンスの設定方法の詳細については、「プロビジョニング済みインスタンスと自動スケーリングルールの設定」をご参照ください。

    設定が完了したら、プロビジョニングされたGPUアクセラレーションインスタンスの準備ができているかどうかをルールリストで確認できます。 具体的には、Current Reserved Instancesパラメーターの値が指定されたプロビジョニング済みインスタンスの数であるかどうかを確認します。

  5. cURLを使用して関数をテストします。

    1. 関数の詳細ページで、トリガータブでトリガー設定を表示し、トリガーエンドポイントを取得します。

    2. CLIで次のコマンドを実行して、GPU関数を呼び出します。

      • オンライン機能のバージョンを表示する

        curl "https://tgpu-op-console-tgpu-op-console-ajezokddpx.cn-shenzhen.fcapp.run"
        {"function": "opencv_edge_canny"}
      • 画像のエッジ検出を実行する

        curl "https://tgpu-op-console-tgpu-op-console-ajezokddpx.cn-shenzhen.fcapp.run" -H "RUN-MODE: normal"
        {"result": "CUDA-capable device supported | process image ok!"}

実行結果

ブラウザで次のドメイン名にアクセスすることで、エッジ検出後に画像を表示できます。

https://cri-zfen7xhpsx******-registry.oss-cn-shenzhen.aliyuncs.com/cats2.png

このドメイン名は例として使用されます。 実際のドメイン名が優先されます。