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

Function Compute:オーディオおよびビデオ処理のベストプラクティス

最終更新日:Aug 29, 2024

GPU高速化インスタンスのベストプラクティスは、Function Computeコンソールで体験できます。 このトピックでは、コードを使用してビデオをトランスコードする方法について説明します。mp4へ。Function Computeコンソールのflvします。 このトピックでは、Pythonを例として使用します。

シナリオと利点

ソーシャルライブストリーミング、オンライン教室、遠隔医療などの高度にインタラクティブなアプリケーションシナリオの出現により、リアルタイムおよび準リアルタイムのインターネットトラフィックがトレンドになりつつあります。 ほとんどの場合、ビデオプラットフォームは、ソースビデオコンテンツをトランスコードして、ビットレート、解像度、チャネルパッチ、および再生プラットフォームなどの要因に基づいて1:N方式で複数の配信ビデオフォーマットを出力し、異なる再生プラットフォーム上の視聴者に異なるネットワーク品質を提供する必要があります。 ビデオのトランスコーディングは、ビデオの制作と配信の重要なステップです。 理想的なビデオコード変換ソリューションは、コスト (RMB /ストリーム) と電力効率 (ワット /ストリーム) の点で費用対効果が高い必要があります。

このセクションでは、Function ComputeにGPUアクセラレーションがないインスタンスと比較した、GPUアクセラレーションインスタンスの利点について説明します。

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

    GPU高速化されたインスタンスは、ビデオを数倍高速にトランスコードし、プロダクションコンテンツをより効率的にユーザーにプッシュできます。

  • コスト優先GPUアプリケーションシナリオ

    GPU高速化インスタンスは、ビジネス要件に基づいて柔軟にプロビジョニングでき、自己購入の仮想マシン (VM) よりも費用対効果が高くなります。

  • 効率優先GPUアプリケーションシナリオ

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

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

性能比較

Function ComputeのGPU高速化インスタンスは、Turingアーキテクチャに基づいており、次のエンコードおよびデコード形式をサポートしています。

  • エンコード形式

    H.264 (AVCHD) YUV 4:2:0

    H.264 (AVCHD) YUV 4:4:4

    H.264 (AVCHD) ロスレス

    H.265 (HEVC) 4K YUV 4:2:0

    H.265 (HEVC) 4K YUV 4:4:4

    H.265 (HEVC) 4Kロスレス

    H.265 (HEVC) 8k

    HEVC10-bitsupport

    HEVCBフレームサポート

  • デコード形式

    MPEG-1

    MPEG-2

    VC-1

    VP8

    VP9

    H.264 (AVCHD)

    H.265 (HEVC) 4:2:0

    * H.265 (HEVC) 4:4:4

    8ビット

    10ビット

    12ビット

    8ビット

    10ビット

    12ビット

    8ビット

    10ビット

    12ビット

次の表に、ソースビデオに関する情報を示します。

項目

データ

オーディオの長さ。

2分5秒

ビットレート

4085 Kb/s

ビデオストリーム情報

h264 (High), yuv420p (progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc

オーディオおよびビデオ情報

aac (LC) 、44100Hz、ステレオ、fltp

次の表に、GPUアクセラレーションを使用するテストマシンとGPUアクセラレーションを使用しないマシンに関する情報を示します。

項目

GPUアクセラレーションのないインスタンス

GPU高速化インスタンス

CPU

CPU Xeon®プラチナ8163 4C

CPU Xeon®プラチナ8163 4C

RAM

16 GB

16 GB

GPU

非該当

T4

FFmpeg

git-2020-08-12-1201687

git-2020-08-12-1201687

ビデオトランスコード (1:1)

パフォーマンステスト: 1つの入力ストリームと1つの出力ストリーム

解像度

GPUアクセラレーションなしのトランスコード期間

GPUアクセラレーションによるトランスコード期間

H264: 1920x1080 (1080p) (フルHD)

3分19.331秒

9.399秒

H264: 1280x720 (720p) (ハーフHD)

2分3.708秒

5.791秒

H264: 640x480 (480p)

1分1.018秒

5.753秒

H264: 480x360 (360p)

44.376秒

5.749秒

ビデオトランスコーディング (1: N)

パフォーマンステスト: 1つの入力ストリームと3つの出力ストリーム

解像度

GPUアクセラレーションなしのトランスコード期間

GPUアクセラレーションによるトランスコード期間

H264: 1920x1080 (1080p) (フルHD)

5分58.696秒

45.268秒

H264: 1280x720 (720p) (ハーフHD)

H264: 640x480 (480p)

コード変換コマンド

  • GPU高速化なしのトランスコードのコマンド

    • シングルストリームのトランスコード (1:1)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -i input.mp4 -c:v h264 -vf scale=1920:1080 -b:v 5M output.mp4
    • 複数ストリームのトランスコーディング (1:N)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \
      -y -i input.mp4 \
      -c:a copy -c:v h264 -vf scale=1920:1080 -b:v 5M output_1080.mp4 \
      -c:a copy -c:v h264 -vf scale=1280:720 -b:v 5M output_720.mp4 \
      -c:a copy -c:v h264 -vf scale=640:480 -b:v 5M output_480.mp4

    表 1. Parameters

    パラメーター

    説明

    -c: コピー

    オーディオストリームは録音せずにコピーできます。

    -c:v h264

    出力ストリーム用のソフトウェアH.264エンコーダを選択します。

    -b:v 5M

    出力ビットレートを5メガバイト/秒に設定します。

  • GPUアクセラレーションによるトランスコードのコマンド

    • シングルストリームのトランスコード (1:1)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v h264_nvenc -vf scale_cuda=1920:1080:1:4 -b:v 5M output.mp4
    • 複数ストリームのトランスコーディング (1:N)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \
      -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=1920:1080 -b:v 5M output_1080.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=1280:720 -b:v 5M output_720.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=640:480 -b:v 5M output_480.mp4

    表 2. Parameters

    パラメーター

    説明

    -hwaccel cuda

    適切なハードウェアアクセラレータを選択します。

    -hwaccel_output_format cuda

    デコードされたフレームをGPUメモリに保存します。

    -c:v h264_nvenc

    NVIDIAハードウェアを使用してH.264エンコーダを高速化します。

準備

  • ビジネスを期待どおりに実行できるようにするには、DingTalkグループ11721331に参加して、GPUアクセラレーションインスタンスを使用するためのアクセス許可を要求し、次の情報を提供します。

    • 組織名 (会社の名前など) 。

    • Alibaba CloudアカウントのID。

    • GPUアクセラレーションインスタンスを使用するリージョン (中国 (深セン) など) 。

    • 携帯電話番号、メールアドレス、DingTalkアカウントなどの連絡先情報。

    • 画像のサイズ。

  • GPUアクセラレーションインスタンスが存在するリージョンで次の操作を実行しました。

  • GPUアクセラレーションインスタンスが配置されているリージョンの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 -v "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run"
        {"function": "trans_gpu"}
      • トランスコードにCPUを使用する

        curl "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: cpu'
        {"result": "ok", "upload_time": 8.75510573387146, "download_time": 4.910430669784546, "trans_time": 105.37688875198364}
      • GPUを使用したトランスコード

        curl "https://tgpu-ff-console-tgpu-ff-console-ajezotchpx.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: gpu'
        {"result": "ok", "upload_time": 8.313958644866943, "download_time": 5.096682548522949, "trans_time": 8.72346019744873}

実行結果の表示

ブラウザで次のドメイン名にアクセスすると、トランスコード後にビデオを表示できます。

https://cri-zbtsehbrr8******-registry.oss-cn-shenzhen.aliyuncs.com/output.flv

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