<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=145304570664993&amp;ev=PageView&amp;noscript=1">
training sparse large language models on Graphcore IPU

Aug 31, 2021 \ Research, Natural Language Processing

骋谤补辫丑肠辞谤别の滨笔鲍でスパースな大规模言语モデルを学习

笔者

Frithjof Gressmann and Anastasia Dietrich

IPUでの大规模言语モデルの事前学习を例に、スパース学习を効率的に実施する方法が説明されています。

スパース性の可能性を探る

スパースなニューラルネットワークの研究はイノベーションの好循环をもたらします。アルゴリズムの改良により、ソフトウェアライブラリがスパースなパターンを効果的に表现できるようになりました。プログラマーはそのようなライブラリを使用して、利用可能なハードウェアを最大限に活用し、结果として计算の必要条件を减らすことができます。

また同时に、ハードウェアのイノベーションにより、より効率的で柔软なソフトウェアライブラリの导入が可能になり、研究者はアルゴリズムのイノベーションを探求できるようになりました。

最近では、このイノベーションサイクルがあらゆるレベルで刺激的な进歩をもたらしています。例えば「宝くじ仮説」(や、、)では、学习したモデルの重みの小さなサブセットが、学习した関数を高い精度で表现するのに十分であるというアルゴリズム上のインサイトが强调されています()。そしてこの考えに基づいて、「宝くじで不正をする」ための新しい学习方法が提唱されています。つまり、全结合の学习のための计算コストをかけずに、高精度のスパースなサブネットワークを见つけることができるのです(、umarおよびその他(2020年))。

これと并行して、主要な机械学习フレームワークのソフトウェアサポートをスパース计算向けに拡张する、注目に値する取り组みも行われています。OpenAIはをPyTorchに统合することをが、これはサポートの向上の一例です。

ハードウェアレベルでも大きなイノベーションが进んでいます。Graphcoreのインテリジェンス処理ユニット(IPU)のように、スパース计算をサポートするために特别に设计された新しいアクセラレータが、产业界や学术界のイノベーターに広く利用されるようになっているのです。

最近のAIモデルのサイズが爆発的に増加していることを考えると、このような动きはどれも时宜にかなったものです。现在広く使われているGPT3のような大规模なトランスフォーマーベースの言语モデルは、最先端のアーキテクチャでモデルサイズがますます大きくなっていることを示す好例です。このようにモデルを大きくすることで、一贯して精度を向上させることができますが、学习や推论にかかる计算量は非常に多くなります。このような状况において、スパースな手法の改良はを制限する大きな可能性を秘めており、モデルをより広く利用できるようにすると同时に、高い电力消费によるを軽减する効果も期待できます。

で当社が発表したケーススタディでは、IPUプロセッサ上でスケーラブルな言语モデルの事前学习を行うという具体的な例を用いて、スパース计算の可能性を探っています。具体的には、BERT言语モデルの强力なスパース事前学习ベースラインを実装し、浮动小数点演算(FLOP)ベースで比较した场合に全结合モデルよりも优れていることを実証しました。今回のケーススタディでは、ハードウェア、ソフトウェア、アルゴリズムのさまざまな侧面を探求するだけでなく、今回得られた知见がこの分野のさらなる研究のための実用的な出発点となることを期待しています。

ここでは、当社のワークショップへの寄稿で得られた重要な知见を绍介します。まず、IPUの概要と、スパース计算に适した机能を绍介します。次に、スパースアルゴリズムの実装に使用しているオープンソースのソフトウェアライブラリを绍介します。そして最后に、効率的な実行を可能にするアルゴリズムの特性を浮き彫りにする実験结果について説明します。

ハードウェア:IPUのアーキテクチャとスパース计算  

GraphcoreIPUは机械学习のワークロードのために特别に设计された、です。2世代のチップは、完全に独立した1472个のプロセッサコア(タイルと呼ばれる)を持ち、それぞれが6つのスレッドを持つことで、8832个の独立した同时命令を一度に実行できます(复数命令/复数データ方式(MIMD)と呼ばれます)。ここで注目すべきは、各タイルが独立したプロセッサ内メモリの块を持ち、カードごとに180TB/sでアクセスできることです。これはオフチップDRAM100倍以上のメモリアクセス帯域幅です。计算とメモリをIPUにコロケーションすることで、エネルギー効率が向上するだけでなく、きめ细かく柔软なアプローチを使って并列化しなければならないとても不规则な计算にも非常に适しています。

IPUは大规模な并列処理に特化して设计されているので、スパースなワークロードに特に适しています。 ネットワークトポロジーをアルゴリズムでスパース化すると、粒度の细かいとても不规则な计算グラフになることが多いため、最小の计算构造であっても効率的に并列化できるIPUの能力はメリットです。

スパース构造の粒度が高い场合でも、IPUのアーキテクチャはスパースな学习と推论の计算効率を维持できます。サイズ16の积和演算ユニットにより、1x14x48?816?16といったとても小さなブロックサイズでも、IPUは良好なスレッド使用率とパフォーマンスを达成できます。さらにIPUは、一般的な昔ながらのスパース计算を高速化するために设计された数多くの命令をサポートしているので、スループットの向上にも贡献します。

ソフトウェア:PoplarおよびPopsparseソフトウェアライブラリ 

ハードウェアとアーキテクチャの特徴はすべて、スパース计算のための柔软な低レベルC++ライブラリであるPopsparseで利用可能な、最适化されたカーネルを介してターゲットにすることができます。Popsparseは、Graphcoreがオープンソースで提供しているソフトウェアライブラリ(PopLibsとして知られている)の1つで、Graphcoreのグラフ构筑およびコンパイルAPIであるPoplarの上に构筑されており、IPU上で动作するあらゆるものを支えています。

スパース性カーネルは、PopART APIを介して直接ターゲットにすることも、この取り组みで使用されているTensorFlowKerasのレイヤーを介して既存のTensorFlowモデルに简単に统合することもできます。FP16FP32の両方でブロックサイズ1x14x48x816x16のスパース性をサポートしています。Graphcoreはオープンソースの実装とチュートリアルをの公开サンプルで提供しています。

Poplarソフトウェアスタックは、アルゴリズムのスパース性パターンが固定されているか、または时间とともに変化するかに応じて、との両方をサポートしています。静的スパースを使用することでコンパイル時の最適化が進んで、実行効率が向上するので、すでに学習済みのモデルを含む推論ワークロードにとても適しています。しかし、多くの学習アルゴリズムでは、学習の過程でアルゴリズムのスパース性パターンがゆっくりと進化していきます。このような場合は动的スパース性を用いることで、より高い柔軟性が生まれます。

动的スパース性の技術の実装を容易にするために、IPUにストリーミングする前にホスト上でスパースパターンを简単に操作できる、さまざまなユーティリティが用意されています。ユーザーは、自分の実装に最适なスパースフォーマットを选択し、それをIPU内部のCSRベースのスパースフォーマットに変换できます。これによって、既存のコードにスパース性を组み込んで、パターン操作をPythonで表すことが容易になります。  

また、RNNアーキテクチャからGPT2までのスパースモデルのフルモデル実装や、やなどの静的スパース性および动的スパース性の最適化技術もオープンソースで公開されています。     

アルゴリズム:动的スパース性を利用した宝くじの不正操作 

IPUPoplarソフトウェアライブラリには、スパース学习のための最先端のアルゴリズムを実装するために必要なすべてが揃っています。しかしBERTのような既存の全结合モデルの场合、最适なアルゴリズムのアプローチが何であるかはすぐにはわかりません。

従来、学习したモデルの推论を高速化するために、シンプルかつ惊くほど効果的な方法としてプルーニング技术が用いられてきました。通常、学习中に同様の计算上の利点を得ることはより困难になります。一般的な手法としては、スパースなトポロジーで学习を开始し、时间の経过とともに接続パターンを进化させていく方法があります(、)。このアプローチでは、现在のサブネットワークをプルーニングしたり再成长させたりすることで、スパース接続性を定期的に修正します。つまりこれは、计算コストの削减というメリットを残しながら、元の过剰パラメータモデルの利用可能な自由度を効果的に探索できるということです。

当然のことながら、このような手法の有効性は特定のプルーニングやリアロケーションの基準に大きく依存します。选択肢は、単纯な大きさベースのプルーニングやランダムなリアロケーションから、まで多岐にわたります。

Figure 1 Dynamic Sparsity

図1:左パネル:動的スパース学習におけるパラメータ空間の探索を表した図。学習されたネットワークパラメータの非ゼロサブセットは、パラメータのプルーニングとリアロケーションを用いて進化します。 右パネル:動的スパース学習におけるプルーニング比率のコサイン減衰と、探索済みパラメータと学習済みパラメータの比率の進化

 

 

ここではブロックサイズを1x14x48x816x16と変化させながら、大きさベースのプルーニングとランダムな再成長を用いて、シンプルであるが十分に調整された动的スパース性のベースラインを実装することにしました。具体的には、BERT言语モデリングタスク()をベースに、完全に连结されたエンコーダの重み(埋め込みの重みを除く)をスパース性比率0.9でスパース化し、これらのレイヤーの重みの10%だけが残るようにします。スパース性のパターンは定期的に更新します(フェーズIの事前学习では160回)。その际、大きさベースのプルーニングと、一定割合の重みのランダムな再成长を行います(プルーニング比率は0.5で、时间の経过とともにコサイン减衰する。図1を参照)。

その后、最适なタスクパフォーマンスを得るために学习率を调整します。このアプローチを用いて、BERT Baseまでさまざまなサイズのモデルをスパース化します。図2に示すのは、フェーズIの后に达成された、マスクされた言语モデルの损失で、これはマスクされたトークンのランダムなサブセットを予测する际の検証パフォーマンスに相当します。FLOPバジェットで比较すると、すべてのモデルサイズにおいて动的スパース学习したモデルが全结合モデルよりも优れています。

Figure 2 Dynamic Sparsity

図2: BERTファミリーのパレート曲線。FLOPsの関数として、動的スパース(オレンジ色の点線)と静的スパース(青色の実線)および全結合ベースライン(黒色の破線)を比較。結果はすべて、スパース性比率0.9、160回のパターン更新、0.5の最適なプルーニングを行った事前学習のフェーズIで得られたものです。

 

 

このことから、动的スパース学习のアプローチは、大规模な事前学习の计算负荷を軽减するための有効な手法であることがわかります。兴味深いことに、动的スパース学习のアプローチは16x16までの大きなブロックサイズでもFLOP効率を维持しています(表1)。より大きなブロックサイズを使用することで、実行をより効率的にするために活用できる最适化の余地が増えます。 

Table 1 Dynamic Sparsity

表1:さまざまなブロックサイズ「叠」に対するスパース性蝉=0.9の叠贰搁罢-叠补蝉别の动的学习のタスクパフォーマンスを、同数の贵尝翱笔蝉を有する全结合の叠贰搁罢-厂尘补濒濒、および同数の贵尝翱笔蝉を有するベースライン値の线形补间(「惭补迟肠丑别诲」)と比较

 

 

今后は、构造化スパース性のパフォーマンスを向上させ、大规模な言语モデルを効率的に学习するための最适なトレードオフを明らかにしていく予定です。

スパース学习の効率を上げるための新しい方向性

この研究では斩新な滨笔鲍ハードウェアを使って、大规模な言语モデルを动的に常时スパース学习するためのシンプルなベースラインを确立しました。これらのモデルについて私たちは、所定の浮动小数点演算(贵尝翱笔)バジェットで比较した场合、スパース学习は同等の全结合の学习よりも効率的であることを示しました。

さらに、より大きなブロックを使用することで、全結合の学習に対するFLOPの優位性を部分的に維持できます。これに関連して、ブロックスパース性との互換性を確保するために、構造化されていない学習方法には最小限の変更しか加えていませんが、この点は注目に値します。 これは、さらなる最適化とアルゴリズムのイノベーションにより、今回私たちが達成したブロックスパースの精度を向上させ、スパース学習をさらに効率的に行うことができることを意味しています。

私たちはこの研究について、新しいハードウェアとソフトウェアによってスパースなネットワークのアプローチの次のイノベーションサイクルがいかに后押しされ、可能になるかを示すものだと信じています。

スパース性のプロジェクトで骋谤补辫丑肠辞谤别の滨笔鲍との共同研究にご兴味のある方は、Graphcore Academic Programme(Graphcoreアカデミックプログラム)にご応募ください。

その他の投稿