
ハードウェアとアルゴリズムの開発チームの活動から、ドワンゴ独自の専用ハードウェアが生まれようとしている。ソフトウェアエンジニアがハードウェアを設計することも可能な時代になってきたことが背景にはある。ハードウェアの知識を持ったソフトウェアエンジニアの価値は高まるだろう。

- ──開発を進めている専用ハードウェアや、独自アルゴリズムを組み込んだコーデックについて、どのような特徴があるのか教えてください。
- 清水 ではまず既存のコーデックと、うちで開発しているコーデックはどう違うのかっていうところから説明お願いします。
- 小嶋 コーデックというと、みなさんH.264とかH.265とかMPEG2といった名前は知っていると思いますが、それらはデコード(圧縮した動画の伸張)の規格で、そこでは差は出ません。画質で差が出るのはエンコード(圧縮)のアルゴリズムです。同じ規格のコーデックでも各社ごとに特徴があって、例えば家電メーカーS社とP社で絵が違います。家電業界では大画面の機器向けに高解像度の動画を高画質化する方向を追い続けていますが、ドワンゴではネットワークでの動画配信がメインです。そこでコーデックの設計でも考え方が変わってきます。
- ──つまり容量を小さくする、ということですよね。
- 小嶋 そのため、すでに存在するコーデックを持ってきてそれでよし、というわけにはいきません。エンコードの速さ、計算リソースの両方を考える必要があります。計算リソースを投入すればいろいろなことができるけど、リアルタイム性がなくなってしまう場合もあります。
- ──専用のハードウェアが必要になる理由は?
- 小嶋 コーデックは、実は今の汎用CPUで使われているノイマン型アーキテクチャのコンピュータには向かない部分があります。メモリからCPU内部のレジスタにデータを転送してから処理する作りなので、メモリバスがボトルネックになりやすい。動画圧縮はデータの全部を処理しなければいけないので、データの中で利用頻度の多い一部だけをキャッシュメモリに入れて高速化するテクニックも効かない。
- ──ドワンゴのデータセンターの消費電力ベースで見た負荷の半分がエンコーディングだという話を聞きました。
- 小嶋 計算リソース全体に占めるエンコード処理の割合は非常に大きいんです。だから、効率が良いやり方に変えていったほうがいい。
- 最近はIntelプロセッサのクロック周波数が上がっていないので、ピーク性能が頭打ちになってます。そこでソフトウェアコーデックの分野では並列化への取り組みが進んでいます。一方、専用ハードウェアによるコーデックでは、より細かな並列化をする方向に向かっています。
- ──そうなると、ソフトウェアコーデックを書いている人はいらなくなるのか、という疑問が出てくるわけですが、そこはどうですか?
- 小嶋 柔軟性の段階が違うので、ハードウェアにもソフトウェアにもそれぞれの役割があります。メタルで結線済みのハードウェアは特定の処理しかできません。FPGA(field-programmable gate array)であれば後から回路を手直しできますが、ソフトウェアの場合ほど小刻みに直せるわけではありません。ソフトウェアはより多様なニーズに対応できます。多種多様なコーデックに対応しないといけない場合はソフトウェア処理が向いています。
- 谷内 例えば、エンコーダでは遅延と画質の間に関係があります。低遅延を狙うと画質が落ちてしまいますが、「ニコニコ生放送」のようにリアルタイムな双方向コミュニケーションを狙う場合は低遅延が大事です。そこでパラメータを変えて試行錯誤をしたいのですが、ハードウェアだとそこの柔軟性がない。こういった形でソフトウェアコーデックの需要は常にあります。
- 小嶋 草野さんに開発してもらっているアルゴリズムは、ソフトウェアコーデックのためのアルゴリズムもあるし、ハードウェアのためのアルゴリズム開発をお願いする場合もあります。
- ただし、ハードウェアには特性があるので、ソフトウェアだけで処理する場合とは考え方を変えないといけません。高画質化のアルゴリズムをソフト屋さんが考えると動画1フレーム分の遅延を前提に考えてしまう場合が多いのですが、現実には1フレーム分を格納するフレームバッファ単位ではなく、もっと細かくラインバッファまで分解して考えないといけません。

- ──ドワンゴのサービス専用のハードウェアをボードに起こしてラックに入れて、データセンターに配置する可能性があるのでしょうか。
- 小嶋 そうなると思います。ある程度の数量が出るなら、専用ハードウェアのボードを発注して作ってもらうことは可能です。ドワンゴのデータセンターの規模があれば、専用ボードを作る可能性は十分にあると考えています。
- ──それはワクワクする話ですね。
- 小嶋 そうですね。考えてモノを作るのは楽しいですし、そういうのは好きです。変な言い方ですけど、前例がない物事を考えられる人は少ないらしくて。僕の経歴はそういう分野ばっかりでした。新しいモノを考えて、市場を作れる仕事は、面白いと思います。
- 例えばFPGAに注目が集まっているように、ハードウェア設計の敷居は以前よりも格段に下がっています。規模が大きな回路もある程度自由に作れるようになりました。
- 最近はC言語などでハードウェアを記述して大規模集積回路を設計する高位合成も使えますので、ソフトウェアエンジニアがハードウェアを設計することも十分に視野に入ってきます。
- 草野 でも、素直にCで書いても性能が出ないんですよね。ハードウェアを知らないと。
- 小嶋 ハードウェアを知ってソフトウェアを書くのと、純粋にソフトウェアを書くのとは違います。ただ、他の分野のソフトウェアでもカリカリにチューニングを施していくと下位レイヤーを意識するようになってきますから、そのあたりの事情は実は一緒です。
- 谷内 ソフトウェアコーデックでも、アセンブラで(1命令で複数データへの処理を実行する)SIMD命令を使ったりしています。ハードウェアに合わせてチューニングするのは、この分野では当たり前になっています。
- 小嶋 さらに重要なのはアルゴリズムです。ハードウェアに合わせたチューニングで得られるのはせいぜい一桁の性能向上ですが、良いアルゴリズムを使えば100倍といったオーダーで高速化するので。
- 清水 なので、アルゴリズムが書ける人はもっと必要です。

- ──ハードウェアへの取り組みが、ドワンゴの他のソフトウェアエンジニアへの刺激になっているということはありますか。
- 谷内 考え方が変わってきています。サービスの規模が大きくなるに従って、インフラがどう動いているかを意識しないと、モノが作れなくなっています。プロセッサコアが何個あるからそれに対応してインスタンスを分けよう、といった設計が必要になってくる。そういう観点で、ソフトウェアエンジニアがハードウェアの話から刺激を受けることは大事です。
- 社内の勉強会でも、唐突に高位合成の話が出てきたり、技術的な交流が起こっています。C言語の話は、Webエンジニアから見ると下の下のレイヤーですから新鮮です。
- 小嶋 C言語は(ハードウェア設計の世界では)超高級言語ですよ(笑)。僕らのメンバーも、「ハードを開発するよ」といったら、自主的にHDL(ハードウェア記述言語)とかの勉強を始めちゃって。FPGAの開発キットも、一番安い奴だと3万円ぐらいで入手できますし。ソフトウェアエンジニアの人でも、できる人はすぐにやっちゃう。
- あと、私たちのハードウェアエンジニアはバックグラウンドが全員違うんです。CPUを作っていた人、高速メモリインタフェースの人、コーデックの人など、全員違う経験を持ったエンジニアが集まっています。そこで異なる技術の交流が起こっています。
- 谷内 他の会社から見ると、動きが速いと思います。社内LT(ライトニングトーク)で「こんなものを作った」という話題をみんな持ち寄ってきます。
- 小嶋 今ちょっと見てみると……(社内チャットツール)SlackのFPGAの部屋には結構大勢参加してますね。
- 清水 Golangの部屋やErlangの部屋と同じぐらいで、Javaの部屋よりずっと多いですね。
- ──エンコーダ以外の分野でも専用ハードウェアを作る可能性はありますか?
- 清水 当然、ありえます。エンコーダのハードウェア開発が終わったら、じゃあそのために採用した人材は不要になって切り捨てるのか、というともちろんそんなわけはなく、コーデックアルゴリズムの改善や新しい規格への対応などはずっと続いていきますし、さらに他の分野の専用ハードウェア化ももちろん考えられます。例えば機械学習周りとか。
- ──多層ニューラルネットワークも、ノイマン型アーキテクチャとの相性は良くなさそうですね。
- 清水 (多層ニューラルネットワークを使う)ディープラーニングのような機械学習の方面でも、ハードウェアやアルゴリズムの専門家の出番はあると思います。
- 私たちの会社は、安定を求めている人には向かないと思いますが、失敗しても責めるというより、チャレンジしたことを評価します。

「ギークアカデミー」バックナンバーはこちら
今回のギークが活躍する現場は「株式会社ドワンゴ」
エンジニア求人一覧は以下よりご確認いただけます。
エンジニア求人を見る
ご登録後、すぐにご紹介できる求人がない場合は、インテリジェンス DODAカスタマーセンターよりその旨をご連絡の上、求人発生時まで求人紹介・カウンセリングをお待ちいただいております。あらかじめご了承ください。