はじめに
Alveo MA35D(以下、MA35D) は2023年4月に AMD から発表された、大量のストリームをトランスコード(デコード/エンコード)するのに最適な MA(Media Acceleration) カードです。対応するコーデックは AV1, H.264, H.265(HEVC) です。これらに加えて、VP9 がデコードにのみ対応しています。
ストリーミングのために専用に設計された ASIC を使用しているので、スループット、レイテンシ、画質、消費電力すべての面で高いパフォーマンスを得られます。
フロントエンドに FFmpeg, GStreamer を使うこともできますし、C API 経由で任意のアプリからMA35D を呼び出すこともできます。
また、FFmpeg に MA35D 用のプラグインが追加されたソースコード(執筆時点では、5.1.2 からのフォーク)が公開されているので、GPL ライブラリなどを含む任意の構成でビルドしなおすことが出来ます。
MA35D のパフォーマンスは下記のカタログスペックから確認することができますが、今回は実際にFFmpegをフロントエンドとして使用してスループット、レイテンシ、画質の3つの観点でパフォーマンスの計測を行いました。
スループット
MA35D のスループットを評価するため、GPU との比較を行ってみます。 比較対象の GPU としては AWS の g4dn.xlarge に搭載されている NVIDIA T4 を使用しました。こちらも MA35D と同様に、FFmpeg のプラグイン (NVENC) でトランスコード処理をアクセラレートすることが出来ます。
GPU と MA35D のどちらも、PCIe 接続されてホストからトランスコードをオフロードされます。 PCIe カードとしてどれほどのスループット性能があるのかを計測した結果が Fig. 1 です1。
各ストリームは 2K(1920x1080) のビデオです。H.264 の 2K ビデオをデコードしたうえで、ストリーム本数のエンコードを行っています。
グラフの見方は次の通りです。
- 横軸が1枚のPCIe カードで処理したストリーム数、縦軸が合計フレームレート(FPS)
- 実線が MA35D、点線が GPU
- 同じエンコード形式は同色
GPUがストリーム数を増やしてもスループットが上昇しないのに対して、MA35D はH.264, H.265(HEVC) が 32 本、AV1 は 64 本までスケールしていることがわかります。 さらに、GPU のホストはトランスコード時に CPU 使用率が17-35%を推移していたのに対し、 MA35D は 1% を維持していました。GPU のエンコードに対して、MA35D はオフロードの効果も大きいことが分かりました。
次に、Fig. 1 のスループットを、ストリーム数で割ったものが Fig. 2 になります。
30FPSで運用するケースを想定すると、Fig. 2 灰色部分はリアルタイムでの運用が出来ないことを表します。
ストリーム数が増えると、GPU はリアルタイム性能を下回ってしまう一方で、MA35D は30 FPS 以上(33.6 FPS)を維持しています。
カタログスペックの通り、AV1 は 2K 30FPS x 64本
、H.265(HEVC), H.264 は 2K 30FPS x 32本
のリアルタイムエンコード可能なことが確認できました。
レイテンシ
双方向コミュニケーションや、ライブストリーミングのアプリケーションでは、低レイテンシが求められます。今回は MA35D で実行できるものの中で、一番レイテンシが低くなる設定で計測を行いました2。
AV1, H.265(HEVC), H.264 それぞれのコーデックに対して、ファイルベースの”フレームレート指定なし”のエンコードと、“フレームレート指定あり”のエンコードを行いました。
“フレームレート指定なし”では H.265(HEVC) のエンコードで一番レイテンシが低くなるのに対し、“フレームレート指定あり”では3つのコーデック遅延はほぼ同じになるという違いが見られました。
今回は入力映像を 60 fps として設定しました。“フレームレート指定あり”では FFmpeg が 60 fps のエンコードをエミュレート(フレームレート調整)した結果、遅延時間が 1[sec] / 60[fps] = 16.6...[ms]
と近い値に揃ったと推測できます。
参考までに、実際に実行したコマンドと、計測データの読み出し方法を以下に示します。
# エンコード実行(フレームレート指定なし)
# "フレームレート指定あり" の場合は -re を付ける(-framerate 60 をエミュレートする)
ffmpeg -y -hwaccel ama -hwaccel_device /dev/ama_transcoder0 -s 1920x1080 -framerate 60 -pix_fmt yuv420p -i /dev/shm/rawdata/2k.yuv -vf hwupload -c:v h264_ama -b:v 2000k -lookahead_depth 0 -f rawvideo /dev/shm/output.h264
# レイテンシ読み出し
python3 /opt/amd/ama/ma35/ama-sdk/utils/Parse_Logs/parse_logs.py /tmp/log.txt
ここで、parse_logs.py
は下記スクリプトを使用しました。
画質
VMAF(Video Multimethod Assessment Fusion) は Netflix によって開発されたビデオ画質の主観評価手法です。人の手による画質評価を教師データとして学習させたAIモデル3が使われており、画像を入力すると推論結果として主観評価の結果を得ることが出来ます4.
VMAFの値は高いほど画質が良く、逆に低いほど画質が悪いことを示します5。
VMAF Score | Category |
---|---|
100 | excellent |
80 | good |
60 | fair |
40 | poor |
20 | bad |
比較対象には各コーデックで広く使われているソフトウェアエンコーダを用いました。
Codec | MA35D | SW Enc |
---|---|---|
H.264 | h264_ama | x264 medium |
H.265(HEVC) | hevc_ama | x265 medium |
AV1 | av1_ama | SVT-AV1 |
エンコードのパラメータは以下の通りです。
パラメータ | 値 |
---|---|
ピクチャタイプ | IBBP |
ピクチャサイズ | 2K(1920x1080) |
フレームレート | 30 [fps] |
GOP Length | 15 |
エンコーダに入力した映像(IBEX素材 桜並木)のサンプルをFig. 4に示します。
各コーデックの画質を計測した結果を VQ-Bitrate 特性
として Fig. 5 に示します1。
グラフの見方は次の通りです。
- 横軸がビットレート、縦軸が画質(VMAF)
- 実線が MA35D、点線がソフトウェアエンコーダ
- 同じエンコード形式は同色
AV1, H.265(HEVC), H.264 それぞれで、ソフトウェアエンコーダよりも MA35D エンコーダの方が全てのビットレートで画質が良いことが確認できました。言い方を変えると、「同じ画質では MA35D エンコーダの方が圧縮率が高くなる」と言えそうです。
圧縮率はストレージやネットワーク帯域の節約に直接関わる要素なので、コストメリットに寄与します。
まとめ
今回はリアルタイムかつ大容量ストリーミング向けメディアアクセラレータである MA35D を実際に FFmpeg をフロントエンドに動かし、性能を計測しました。
アイベックステクノロジーは MA35D の正規販売代理店であり、購入から製品の導入や運用のサポートまで担当いたします。詳しくはお問い合わせください。
Footnotes
-
レイテンシログの読み出しを行うと複数のレイヤのレイテンシが取得できますが、今回はアプリケーションレイヤを対象としました。具体的には FFmpeg が MA35D にフレームを送信(C API:
xma_enc_session_send_frame
)してから、エンコードされたデータを受け取る(C API:xma_enc_session_recv_data
)までと推測しています。 ↩ -
正確には、VIF, DLM, Motion などの様々な手法による評価値 を SVR(Support Vector Machine Regression) に入力して主観評価を得る機械学習モデルが使用されています。Toward A Practical Perceptual Video Quality Metric の 「Our Method: Video Multimethod Assessment Fusion (VMAF)」を参照。 ↩
-
VMAF は現在(v3.0.0)のところ、クロマ(色情報)も含めた評価には対応しておらず、輝度情報のみを用いています。これを利用して、クロマ情報を大きく削り、浮いたビットを輝度情報に使うことで VMAF 値の向上が見込めます。MA35D にも VMAF 向けにパラメータがチューニングされたエンコードプリセット(
-tune_metrics 4
)が用意されていますが、今回の評価では公平を保つために、あえてデフォルトのプリセットを使用しています。 ↩ -
VMAF: The Journey Continues の 「Interpreting VMAF Scores」 を参照。 ↩