Hot Chips 31においてAlibaba Groupは「Ouroboros」と呼ぶテキストからスピーチに変換する推論エンジンを発表した。

  • Ouroboros

    「Ouroboros」の講演タイトル (出典:この連載のOuroborosの部分のすべての図は、Hot Chips 31におけるAlibaba GroupのJiansong Zhang氏の発表資料のコピーである

Ouroborosは音声で応答する機能をエッジで実現することを目指すものであるが、この発表では実用化されているのかどうかは良く分からなかった。

  • Ouroboros

    Hot Chips 31でOuroborosを発表するAlibaba GroupのJiansong Zhang氏

テキストからスピーチに変換するには、Seq2SeqというGoogleが開発したディープラーニングシステムを使う。Seq2Seqは例えば英文の文字シーケンスを日本語の文字シーケンスに変換するというような機能を持つAIである。ここではテキストの文字シーケンスをMel Spectrogramというものに変換している。

そして、WaveNetというディープラーニングシステムでMel Spectrogramをスピーチに変換している。

  • Ouroboros

    テキストからスピーチに変換するには、まず、Googleが開発したSeq2Seqというディープラーニングシステムを使ってテキストをMel Spectroguramというものに変換する。これをWaveNetというディープラーニングシステムに入力して音声に変換する。WaveNetのトレーニングには、Googleの開発したTacotoron2が使われることが多い

次の図は1秒間の音声を出すのにどれだけの計算時間が必要かをデスクトップとサーバのCPUとデスクトップとサーバのGPUで比較したグラフである。青色で示したSeq2Seqの処理時間は短いのであるが、WaveNetのVocoderで音声に変換する緑色の部分に時間が掛っている。エッジで使うには、この部分の処理時間を短縮する必要がある。

  • Ouroboros

    テキストからスピーチ変換をサーバとデスクトップのCPUとGPUで実行した場合の処理時間。青色の部分がSeq2Seq、緑の部分がWaveNetのVocoderの処理時間。大部分がVocoderの処理時間であり、これを短縮する必要がある

Vocoderの処理は、次の図に示したように最下位の入力から隣接するものを纏めていく処理で、これが時系列的に続く。そして毎秒16K回のサンプルを行い、サンプルするごとにニューラルネットの推論計算を行う。結果として、毎秒百万レベルのシーケンシャルな計算を行うことになり、膨大な計算が必要になっている。

  • Ouroboros

    Vocoderの処理は、2分木のように入力を纏めていく。しかし、毎秒16Kサンプルを行い、サンプルするごとに推論計算を行うので、計算量が多い

それに対する解として発表者などが提案するのはハードウェアのループで、繰り返し処理を実行するというやり方である。このやり方では重みは変わらないので、ニューラルネットの再トレーニングは必要ない。

なお、図の右側に書かれている尾を咥えた蛇がOuroborosである。Ouroborosは始まりも終わりも無い完全なものを意味するそうである。ここではVocoderが円環構造になっていることから名づけられたのではないかと思われる。

  • Ouroboros

    繰り返し部分をハードウェアで実行するという問題解決を提案する。このやり方では、ニューラルネットの再トレーニングは必要ない。右側の図の尾を咥えた蛇(足があるが)がOuroborosである

次の図のように、Ouroborosは、マトリクスとベクタの積を計算するユニットと各種の関数を計算するユニットとデータバッファでループを作るという構造をとる。

  • Ouroboros

    ハードウェアによるアクセラレータはマトリクスとベクタの積を計算するユニットとSigmoidやTanh、ReLUなどのディープラーニング特有の関数を計算するユニットとデータバッファのループ構造を作る

Mel Spectrogramは通常、10msごとにアップデートされ再計算が必要になるが、小さなバッファを設けて、再計算が必要でないときはバッファの値を再利用して、計算を省く。

  • Ouroboros

    小さなバッファを設けて、以前の計算結果を記憶し、それを再利用することで計算を省く

そして、ハードウェアの構成としては、ReLU、Sigmoid、Tanh、要素ごとの積、要素ごとの和、SoftMaxとランダム選択のユニットをクロスバ経由で接続する。この構造は汎用的で、WaveNet以外にも使用できる。特にWaveRNNとLPCNetはWaveNetと同じオペレータを使っているので、相性が良い。

  • Ouroboros

    ハードウェアによるアクセラレータのブロック図。クロスバで演算器を選択できるので、汎用的に色々な計算に使える

次の表は、CPU、GPUとCPUと同様にFPGAでFP32で演算した場合、FPGAがINT16で演算した場合の性能等を示している。なお、WaveNet VocoderのトレーニングにはGoogle開発のTacotron2を使っている。

CPUでの実行時間は155.2、GPUでは49.4であるが、FPGAでFP32の場合は実行時間は0.97、INT16の場合は0.33と100倍以上高速になっている。そして、ASICを作りMACを2048個作って800MHzクロックで動作させた場合は0.05となる。また、MAC数を256個に減らしクロックも300MHzとしたASIC-sでは時間は0.47となる。

なお、ASICの性能値は実測ではなくシミュレーションで求めたものである。

  • Ouroboros

    CPU、GPU、FPGA、ASICでアクセラレータを作りWaveNetで作ったVocoderの性能比較。提案のハードウェアによるアクセラレータでは1秒以下になる

次の表は、WaveNetの構成のやり方で性能がどう変わるかを見たもので、ベーシックなWaveNetとTacotron 2を使ってトレーニングしたWaveNetを使った場合のそれぞれの場合で、ハードウェアとしてGPU、FPGA、ASICと小型のASIC-sでの性能を比較している。

そして、赤枠の部分は、GPUの場合を基準にして、それに対して何倍の性能かを示している。

Tacotron 2を使ってWaveNetをトレーニングした場合は、FPGAでは151倍のスピードアップ、ASICは1000倍,ASIC-sは100倍のスピードアップとなった。なお、倍率だけで言うとベーシックなWaveNetの方が大きいが、基準としたGPUの性能が低いので、FPGA、ASICの実性能ではTacotron 2を使った方が速い。

  • Ouroboros

    WaveNetのトレーニングにTacotron2を使うか、使わないか、そしてGPUで実行するか、FPGAかASIC、ASIC-sで実行するかで性能がどう変わるかを示す。ASICで実行すると、GPU+TensorFlowより1000倍以上速い

VocoderとしてLPCNetを使った場合、モデルが密か疎かで、CPUを基準にしてFPGA、ASICでの性能向上を比較している。密の場合は、FPGAはCPUの38倍、ASICは54倍の性能である。疎の場合は、FPGAはCPUの16倍、ASICは47倍の性能である。ただし、疎の方がCPUでの実行時間が短いので、FPGAとASICの倍率は小さいが、実行時間では疎の方が短くなっている。

  • Ouroboros

    VocoderとしてLPCNetを使った場合の性能比較。LPCNetが密の場合に比べて疎の方が性能が高い。疎のLPCNetの場合、FPGAを使うと16倍、ASICを使うと47倍の性能が得られた

まとめであるが、テキストからスピーチに変換するという処理を取り上げてそれに特化したドメインスペシフィックな処理について検討を行った。その結果、現状のフレームワークを使ってCPUやGPUで実行するというやり方は効率が悪いということが分かった。我々は繰り返しのアルゴリズムの部分の実行にはオンチップのループ用のハードウェアを付加することを提案する。この機構はアクセラレータであり、ニューラルネットの重み自体は変わらないので、モデルを再トレーニングする必要がなく、汎用性が高い。

  • Ouroboros

    テキストからスピーチへの変換はドメインスペシフィックな処理の1つの例。現状のフレームワークでCPUやGPUで処理するのは効率が悪い。発表者らは、ループ部分の実行には専用のハードウェアを追加することを提案している

この論文は、設計スペースを探索したような論文である。しかし、性能を上げ、ドメインスペシフィックな計算のためにハードウェアのアクセラレータを付けるのは、ごく普通の考えである。性能向上案も普通に考えられるようなもので、ちょっと物足りない発表である。

(次回は9月25日に掲載します)