CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回に続いて、2021年に公開された論文「Warehouse-Scale Video Acceleration: Co-design and Deployment in the Wild」を元にして、Googleのデータセンターに導入されている、動画のトランスコーディング処理に特化した独自設計のハードウェアを紹介します。今回は、VCU(Video Coding Unit)と呼ばれるアクセラレーターとそれを利用するためのクラスターシステムの構成を紹介します。
前回説明したように、トランスコーディングの処理においては、1つの動画ファイルに対してデコードとエンコードの処理を行い、複数のフォーマットの動画ファイルを生成します。VCUは、デコード、および、エンコードに必要な計算処理を専用のハードウェア(ASIC:カスタム集積回路)で実装した上で、上位のソフトウェア、および、ファームウェアと連携して、トランスコーディング全体の処理を行います。図1は、実際のVCUの写真です。
図1 VCUの実物写真(論文より抜粋)
図1(b)にあるように、汎用的なPCI Expressカードの上に2個のVCUが搭載されており、図1(a)のように、1つのVCUには、複数のデコーダーコア、および、エンコーダーコアが搭載されています。次の図2は、VCUの内部構造を示したブロック図になります。
図2 VCUのブロック図(論文より抜粋)
図2(b)にあるように、1つのVCUには、3つのデコーダーコアと10個のエンコーダーコアが搭載されており、複数のデコード処理とエンコード処理を並列に実行することができます。エンコードの際は、動画データの解析処理などにおいてメモリー上の動画データに高速にアクセスする必要がありますので、VCUと直結したメモリーバスを介して、専用のDDRメモリーを読み書きします。また、図2(c)は、エンコーダーコアの内部に実装された機能を示すものですが、H.264、および、VP9のアルゴリズムを用いたエンコード処理に必要な機能がまとめて搭載されています。
それでは、このVCUを搭載したサーバーはどのように配置されているのでしょうか? 図3がその概要になります。
図3 VCUを搭載したサーバークラスター(論文より抜粋)
VCUを利用するサーバー(図3の「Machine」)は、2つのアクセラレータートレイに接続されており、それぞれのアクセラレータートレイには、図1(b)のPCIカードが5枚搭載されています。1枚のPCIカードには2つのVCUが搭載されていますので、1台のサーバーに対して、20個のVCUが接続されることになります。そして、1つのクラスターには、VCUを接続したサーバーと、接続しないサーバーが混在しています。トランスコーディングに必要な処理は、上位のソフトウェアによって複数のタスクに分割された上で、複数のサーバーによる分散処理が行われます。タスクの中には、VUCを必要とするものと、必要としないものがありますので、タスクの種類によって、割り当てられるサーバーが変化します。ハードウェア障害などでタスクの実行に失敗した場合、該当のタスクは、再度、他のサーバーに割り当てられます。
また、VCUを必要とするタスクを割り当てられたサーバーは、VCUのファームウェアが提供するAPIを通じて、VCUに処理を依頼します。このAPIは、VCUに搭載されたメモリーに対するデータの読み書き、および、VCU上のコア(エンコーダーコア、および、デコーダーコア)に対する処理の依頼というシンプルな構成になっており、実際に処理を行うコアの割り当ては、ファームウェアによって決定されます。ファームウェア上のスケジューラーは、VCUに搭載された複数のコアをできるだけ効率的に使用するように、処理を割り当てていきます。
前述のように、1台のサーバーに対して20個のVCUが接続されているため、1つのVCUが故障するごとにサーバーを停止して、VCUの交換作業を行うのは効率的ではありません。サーバーに接続された個々のVCUは、それぞれが独立に使用を停止できるようになっており、一定数以上のエラーが発生すると、モニタリングシステムの指示により、該当のVCUの使用が自動的に停止されます。その後、定期メンテナンスのタイミングで、停止したVCUの交換作業を行います。ただし、VCUに問題が発生した後、モニタリングシステムによるVCUの停止が発生するまでには、多少の時間がかかります。そこで、ファームウェアの機能により、先行してタスクの受付を停止する、次のような仕組みも用意されています。
まず、1つのVCUには複数のコアが搭載されており、複数のタスクが並列に処理されています。特定のコアでエラーが発生すると、VCUのファームウェアは、安全のためにすべてのコアで実行中のタスクを停止して、アプリケーションに対してエラーを返します。(前述のように、処理に失敗したタスクは他のサーバーで再実行されるので、トランスコーディングの処理自体が停止するわけではありません。)さらにその後、VCUのハードウェアリセットを行い、機能チェック用の複数のタスクを実行します。すべての機能チェックに成功した場合、先に発生したエラーは一時的なものと判断して、VCUのファームウェアは、タスクの受付を再開します。機能チェックに失敗した場合は、その時点で、新規のタスクの受付が停止されます。
今回は、2021年に公開された論文「Warehouse-Scale Video Acceleration: Co-design and Deployment in the Wild」を元にして、動画配信サービスで必要となるトランスコーディングの処理を行う専用のハードウェア、VCUのアーキテクチャーを紹介しました。次回は、VCUの性能を示すベンチマークの結果を紹介したいと思います。
Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes