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アクセラレーションインスタンスが存在するリージョンで次の操作を実行しました。
Container Registry Enterprise EditionインスタンスまたはPersonal Editionインスタンスを作成します。 Enterprise Editionインスタンスを作成することを推奨します。 詳細については、「Container Registry Enterprise Editionのインスタンスの作成」をご参照ください。
名前空間のイメージリポジトリを作成します。 詳細については、「手順2: 名前空間の作成」および「手順3: イメージリポジトリの作成」をご参照ください。
GPUアクセラレーションインスタンスが配置されているリージョンのOSSバケットにオーディオリソースとビデオリソースをアップロードしました。 バケット内のオブジェクトに対する読み取りおよび書き込み権限があること。 詳細については、「オブジェクトのアップロード」をご参照ください。 詳細は、「バケットACL」をご参照ください。
Function Computeコンソールを使用してGPUアプリケーションをデプロイする
イメージを展開します。
Container Registry Enterprise EditionインスタンスまたはContainer Registry Personal Editionインスタンスを作成します。
Enterprise Editionインスタンスを作成することを推奨します。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
名前空間とイメージリポジトリを作成します。
詳細については、「Container Registry Enterprise Editionインスタンスを使用してイメージを構築する」トピックの「手順2: 名前空間の作成」および手順3: イメージリポジトリの作成」をご参照ください。
Container Registryコンソールのプロンプトに従って、Dockerで操作を実行します。 次に、前述のサンプルapp.pyとDockerfileをインスタンスイメージリポジトリにプッシュします。 ファイルの詳細については、Serverless Devsを使用してGPUアプリケーションをデプロイする場合、/codeディレクトリのapp.pyおよびDockerfileをご参照ください。
GPU関数を作成します。 詳細については、「カスタムコンテナー関数の作成」をご参照ください。
関数の実行タイムアウト時間を変更します。
管理する関数の名前をクリックします。 詳細ページのナビゲーションバーで、[設定] タブをクリックします。 [環境情報] セクションで、[変更] をクリックします。
表示されるパネルで、実行タイムアウト期間パラメーターをクリックし、OK.
説明CPUトランスコード期間がデフォルト値の60秒を超えています。 そのため、[実行タイムアウト期間] パラメーターをより大きな値に設定することを推奨します。
プロビジョニングされたGPUインスタンスを設定します。 プロビジョニング済みインスタンスの設定方法の詳細については、「プロビジョニング済みインスタンスと自動スケーリングルールの設定」をご参照ください。
設定が完了したら、プロビジョニングされたGPUアクセラレーションインスタンスの準備ができているかどうかをルールリストで確認できます。 具体的には、Current Reserved Instancesパラメーターの値が指定されたプロビジョニング済みインスタンスの数であるかどうかを確認します。
cURLを使用して関数をテストします。
関数の詳細ページで、トリガータブでトリガー設定を表示し、トリガーエンドポイントを取得します。
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
このドメイン名は例として使用されます。 実際のドメイン名が優先されます。