インターネット上でのディープラーニング:言語モデルの共同トレーニング

インターネット上でのディープラーニングの共同トレーニング

Quentin LhoestさんとSylvain Lesageさんの追加の助けを得ています。

現代の言語モデルは、事前学習に多くの計算リソースを必要とするため、数十から数百のGPUやTPUへのアクセスなしでは入手することが不可能です。理論的には、複数の個人のリソースを組み合わせることが可能かもしれませんが、実際には、インターネット上の接続速度は高性能GPUスーパーコンピュータよりも遅いため、このような分散トレーニング手法は以前は限定的な成功しか収めていませんでした。

このブログ記事では、参加者のネットワークとハードウェアの制約に適応することができる新しい協力的な分散トレーニング方法であるDeDLOCについて説明します。私たちは、40人のボランティアを使ってベンガル語の言語モデルであるsahajBERTの事前学習を行うことで、実世界のシナリオでの成功を示します。ベンガル語の下流タスクでは、このモデルは数百の高級アクセラレータを使用したより大きなモデルとほぼ同等のクオリティを実現しています。

オープンコラボレーションにおける分散深層学習

なぜやるべきなのか?

現在、多くの高品質なNLPシステムは大規模な事前学習済みトランスフォーマーに基づいています。一般的に、その品質はサイズとともに向上します。パラメータ数をスケールアップし、未ラベルのテキストデータの豊富さを活用することで、自然言語理解や生成において類を見ない結果を実現することができます。

残念ながら、これらの事前学習済みモデルを使用するのは、便利なだけではありません。大規模なデータセットでのトランスフォーマーのトレーニングに必要なハードウェアリソースは、一般の個人やほとんどの商業または研究機関には手の届かないものです。例えば、BERTのトレーニングには約7000ドルかかると推定され、GPT-3のような最大のモデルでは、この数は1200万ドルにもなります!このリソースの制約は明らかで避けられないもののように思えますが、広範な機械学習コミュニティにおいて事前学習済みモデル以外の代替手段は本当に存在しないのでしょうか?

ただし、この状況を打破する方法があるかもしれません。解決策を見つけるために、周りを見渡すだけで十分かもしれません。求めている計算リソースは既に存在している可能性があるかもしれません。たとえば、多くの人々は自宅にゲームやワークステーションのGPUを搭載したパワフルなコンピュータを持っています。おそらく、私たちがFolding@home、Rosetta@home、Leela Chess Zero、または異なるBOINCプロジェクトのように、ボランティアコンピューティングを活用することで、彼らのパワーを結集しようとしていることはお分かりいただけるかもしれませんが、このアプローチはさらに一般的です。たとえば、いくつかの研究所は、自身の小規模なクラスタを結集して利用することができますし、低コストのクラウドインスタンスを使用して実験に参加したい研究者もいるかもしれません。

疑い深い考え方をすると、ここで重要な要素が欠けているのではないかと思うかもしれません。分散深層学習においてデータ転送はしばしばボトルネックとなります。複数のワーカーから勾配を集約する必要があるためです。実際、インターネット上での分散トレーニングへの単純なアプローチは必ず失敗します。ほとんどの参加者はギガビットの接続を持っておらず、いつでもネットワークから切断される可能性があるためです。では、家庭用のデータプランで何かをトレーニングする方法はどうすればいいのでしょうか? 🙂

この問題の解決策として、私たちは新しいトレーニングアルゴリズム、Distributed Deep Learning in Open Collaborations(またはDeDLOC)を提案しています。このアルゴリズムの詳細については、最近公開されたプレプリントで詳しく説明しています。では、このアルゴリズムの中核となるアイデアについて見てみましょう!

ボランティアと一緒にトレーニングする

最も頻繁に使用される形態の分散トレーニングにおいては、複数のGPUを使用したトレーニングは非常に簡単です。ディープラーニングを行う場合、通常はトレーニングデータのバッチ内の多くの例について損失関数の勾配を平均化します。データ並列の分散DLの場合、データを複数のワーカーに分割し、個別に勾配を計算し、ローカルのバッチが処理された後にそれらを平均化します。すべてのワーカーで平均勾配が計算されたら、モデルの重みをオプティマイザで調整し、モデルのトレーニングを続けます。以下に、実行されるさまざまなタスクのイラストを示します。

多くの場合、同期の量を減らし、学習プロセスを安定化させるために、ローカルのバッチを平均化する前にNバッチの勾配を蓄積することができます。これは実際のバッチサイズをN倍にすることと同等です。このアプローチは、最先端の言語モデルのほとんどが大規模なバッチを使用しているという観察と組み合わせることで、次のようなシンプルなアイデアに至りました。各オプティマイザステップの前に、すべてのボランティアのデバイスをまたいで非常に大規模なバッチを蓄積しましょう!この方法は、通常の分散トレーニングと完全に等価であり、簡単にスケーラビリティを実現するだけでなく、組み込みの耐障害性も持っています。以下に、それを説明する例を示します。

共同の実験中に遭遇する可能性のあるいくつかの故障ケースを考えてみましょう。今のところ、最も頻繁なシナリオは、1人または複数の参加者がトレーニング手続きから切断されることです。彼らは不安定な接続を持っているか、単に自分のGPUを他の用途に使用したいだけかもしれません。この場合、トレーニングにはわずかな遅れが生じますが、これらの参加者の貢献は現在蓄積されているバッチサイズから差し引かれます。しかし、他の参加者が彼らの勾配でそれを補ってくれるでしょう。また、さらに多くの参加者が加わる場合、目標のバッチサイズは単純により速く達成され、トレーニング手続きは自然にスピードアップします。これを以下のビデオでデモンストレーションしています。

適応平均

全体のトレーニング手順について議論しましたが、まだ1つ質問が残っています。実際に参加者の勾配をどのように集約するのでしょうか?ほとんどの家庭用コンピュータは簡単に受信接続を受け入れることができず、ダウンロード速度も制約の要因になるかもしれません。

実験ではボランティアのハードウェアに頼っているため、中央サーバーは実際には実現可能な選択肢ではありません。何十のクライアントと何億ものパラメータにスケールすると rapid に過負荷になるからです。現在のデータ並列トレーニングでは、通常この戦略は使用されません。代わりに、効率的な全対全通信プリミティブである All-Reduce に依存しています。アルゴリズムの最適化により、各ノードはすべてのピアにローカル勾配全体を送信せずにグローバル平均を計算できます。

All-Reduceは非中央集権化されているため、良い選択肢のように思えますが、ハードウェアとネットワークのセットアップの多様性を考慮する必要があります。たとえば、ボランティアの中にはネットワークが遅いが強力なGPUを搭載したコンピュータから参加する人もいれば、他の一部のピアとの接続性が良い人もいます。また、受信接続がファイアウォールでブロックされている人もいます。

実際には、パフォーマンスに関する情報を活用して、最適なデータ転送戦略を実際に作成することができます!大まかに言うと、各ピアのインターネット速度に応じて、勾配ベクトル全体を部分に分割します。最も高速な接続を持つピアは最も大きな部分を集約します。また、受信接続を受け入れない一部のノードはデータを集約のために送信するだけで、平均を計算しません。条件に応じて、この適応アルゴリズムはよく知られた分散DLアルゴリズムを回復させ、以下で示すようにハイブリッド戦略でそれらを改善することができます。

sahajBERT

いつものように、設計の良いアルゴリズムフレームワークが実際のトレーニング実行で意図どおりに機能することを意味するわけではありません。実際のトレーニング実行では、いくつかの仮定が成り立たない場合があります。この技術の競争力のあるパフォーマンスを検証し、その可能性を示すために、私たちはベンガル語のマスク言語モデルを事前学習するための特別なコラボレーションイベントを開催しました。世界で5番目に話されている母国語ですが、オープンに利用できるマスク言語モデルは非常に少ないため、コミュニティを強力に支えるツールの重要性が強調されています。

この実験は、Neuroparkコミュニティの実際のボランティアを使い、公開されているデータセット(OSCARとWikipedia)を使用して行いました。他のグループのインスピレーションとなる完全に再現可能な例を持つことを目指しました。以下では、私たちのトレーニング実行の詳細なセットアップを説明し、その結果を示します。

アーキテクチャ

実験では、ALBERT(A Lite BERT)という言語表現のモデルを選びました。このモデルは、マスク言語モデリング(MLM)と文の順序予測(SOP)を目的として事前学習されます。重み共有により、非常にパラメータ効率が良くなります。例えば、ALBERT-largeは約18Mの学習可能なパラメータを持ち、GLUEベンチマークでは約108Mの重みを持つBERT-baseとほぼ同等のパフォーマンスを発揮します。このため、ピア間で交換するデータが少なくて済むため、トレーニングイテレーションを大幅に高速化することができます。

トークナイザー

モデルの最初の部分はトークナイザーと呼ばれ、生のテキストを語彙インデックスに変換する役割を担っています。ベンガル語のモデルをトレーニングしているため、英語とはあまり似ていないため、言語固有の前処理をトークナイザーの一部として実装する必要があります。これは次の手順のシーケンスと見なすことができます:

  1. 正規化:生のテキストデータ上のすべての前処理操作を含みます。これは、特定の詳細を削除することによってテキストの意味を変えることも変えないこともあります。例えば、標準的なALBERT正規化ではアクセントを削除しますが、ベンガル語では母音に関する情報が含まれているため、アクセントを保持する必要があります。その結果、以下の操作を使用します:NMT正規化、NFKC正規化、複数のスペースの削除、ベンガル語のUnicode文字の均質化、および大文字化。
  2. プリトークン化:入力を分割するための特定のトークン境界を強制するためのルールを説明します。元の作業と同様に、トークンから空白を取り除くことにしました。したがって、単語ごとに区別し、複数の単一スペーストークンを持たないようにするために、単語の開始に対応する各トークンは特別な文字「_」(U+2581)で始まります。さらに、句読点と数字を他の文字から分離して、語彙を縮小しました。
  3. トークナイザーモデリング:このレベルでは、テキストを語彙の要素のシーケンスにマッピングします。これにはByte-Pair Encoding(BPE)やUnigramなどのいくつかのアルゴリズムがあり、ほとんどの場合、テキストコーパスから語彙を構築する必要があります。ALBERTのセットアップに従い、私たちはUnigram Language Modelアプローチを使用し、OSCARデータセットのベンガル語の重複を削除した部分で32kトークンの語彙をトレーニングしました。
  4. ポスト処理:トークナイズ後に、シーケンスを特別なトークンで開始する([CLS]トークン)か、2つのセグメントを特別なトークンで区切る([SEP]トークン)など、アーキテクチャで必要ないくつかの特別なトークンを追加したい場合があります。元のALBERTと同じポスト処理を保持しています。具体的には、各例の先頭に[CLS]トークンを追加し、2つのセグメントを特別なトークンで区切り、末尾に[SEP]トークンを追加します。

以下のコードを実行することで、当社のトークナイザを再利用することができます。

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("neuropark/sahajBERT")

データセット

最後にカバーする必要があるのは、トレーニングデータセットです。おそらくご存知のように、BERTやALBERTなどの事前学習モデルの大きな強みは、注釈付きのデータセットではなく、ただたくさんのテキストが必要であることです。sahajBERTをトレーニングするために、私たちは2021年3月20日のベンガル語のWikipediaダンプとOSCARのベンガル語のサブセット(600MB + 6GBのテキスト)を使用しました。これらの2つのデータセットはHF Hubから簡単にダウンロードできます。

ただし、データセット全体をロードするには時間とストレージが必要です。これらのリソースを最大限に活用するために、私たちはデータセットのストリーミングを実装しています。これにより、参加者がネットワークに参加した直後にモデルのトレーニングを行うことができます。具体的には、データセットの例はダウンロードされ、トレーニングに並列して変換されます。また、データセットをシャッフルすることもできますので、参加者が同時に同じ例を処理する可能性はほとんどありません。データセットは事前にダウンロードや前処理されないため、プレーンテキストからトレーニング例に変換するために必要な変換は、リアルタイムで行われます(以下の図に示す)。

データセットストリーミングモードは、バージョンv1.9以降の🤗データセットライブラリで利用可能ですので、次のようにすぐに使用することができます。

from datasets import load_dataset

oscar_dataset = load_dataset("oscar", name="unshuffled_deduplicated_bn", streaming=True)

共同イベント

sahajBERTの共同トレーニングイベントは、5月12日から5月21日まで開催されました。このイベントには40人の参加者が集まり、そのうち30人はベンガル語を話すボランティアであり、10人は著者のいずれかの組織のボランティアでした。これら40人のボランティアは、イベントに関するすべての情報を受け取り、議論に参加するためにNeuropark Discordチャンネルに参加しました。実験に参加するために、ボランティアには以下のことが求められました:

  1. ユーザー名をモデレーターに送信してホワイトリストに登録すること。
  2. 提供されたノートブックをローカルで開くか、Google ColaboratoryまたはKaggleで開くこと。
  3. コードセルを実行し、Hugging Faceの資格情報を要求された場合に入力すること。
  4. 共有ダッシュボード上でトレーニングロスが減少するのを見ること。

セキュリティ上の理由から、私たちは承認システムを設定し、Neuroparkコミュニティのメンバーだけがモデルのトレーニングを行えるようにしました。技術的な詳細を省きますが、私たちの承認プロトコルにより、各参加者がホワイトリストに登録されていることを保証し、各参加者の個別の貢献を認識することができます。

下の図では、各ボランティアの活動が示されています。実験中、ボランティアは600回以上の異なるセッションにログインしました。参加者は定期的に複数の実行を並列して起動し、多くの場合、実行を時間にわたって分散させました。各参加者の実行時間は平均で4時間であり、最大時間は21時間でした。参加者の貢献についての詳細な統計情報については、論文をご覧ください。

参加者から提供されたリソースに加えて、私たちは16の割り込みが頻繁に発生する安価な単一GPU T4クラウドインスタンスも利用し、実行の安定性を確保しました。実験の累積実行時間は234日であり、以下の図では、各参加者が貢献した損失曲線の一部が表示されています。

最終的なモデルはModel Hubにアップロードされており、以下のリンクからダウンロードして試すことができます:https://hf.co/neuropark/sahajBERT

評価

sahajBERTの性能を評価するために、ベンガル語の2つの下流タスクで微調整しました:

  • WikiANNのベンガル語の分割における固有表現認識(NER)。このタスクの目標は、入力テキストの各トークンを次のカテゴリのいずれかに分類することです:人物、組織、場所、またはそれらのいずれでもない。
  • IndicGLUEのSoham記事データセットにおけるニュースカテゴリ分類(NCC)。このタスクの目標は、入力テキストが所属するカテゴリを予測することです。

私たちは、トレーニング中にNERタスクで評価し、すべてがうまくいっているかを確認しました。以下のプロットで確認できるように、それは実際にうまくいっていました!

トレーニングの最後では、sahajBERTを他の3つの事前学習言語モデル(XLM-R Large、IndicBert、bnRoBERTa)と比較しました。以下の表で、私たちのモデルはHF Hubで利用可能な最高のベンガル語言語モデルと同等の結果を示していることがわかります。ただし、私たちのモデルは約1800万の学習パラメータしか持っておらず、例えば強力な多言語ベースラインであるXLM-Rは約5億5900万のパラメータを持ち、数百のV100 GPUでトレーニングされました。

これらのモデルはハブでも利用できます。モデルカードのHosted Inference APIウィジェットを使って直接テストしたり、Pythonコードで直接読み込んだりして試すことができます。

sahajBERT-NER

モデルカード: https://hf.co/neuropark/sahajBERT-NER

from transformers import (
    AlbertForTokenClassification,
    TokenClassificationPipeline,
    PreTrainedTokenizerFast,
)

# トークナイザーの初期化
tokenizer = PreTrainedTokenizerFast.from_pretrained("neuropark/sahajBERT-NER")

# モデルの初期化
model = AlbertForTokenClassification.from_pretrained("neuropark/sahajBERT-NER")

# パイプラインの初期化
pipeline = TokenClassificationPipeline(tokenizer=tokenizer, model=model)

raw_text = "এই ইউনিয়নে ৩ টি মৌজা ও ১০ টি গ্রাম আছে ।" # 変更してください
output = pipeline(raw_text)

sahajBERT-NCC

モデルカード: https://hf.co/neuropark/sahajBERT-NER

from transformers import (
    AlbertForSequenceClassification,
    TextClassificationPipeline,
    PreTrainedTokenizerFast,
)

# トークナイザーの初期化
tokenizer = PreTrainedTokenizerFast.from_pretrained("neuropark/sahajBERT-NCC")

# モデルの初期化
model = AlbertForSequenceClassification.from_pretrained("neuropark/sahajBERT-NCC")

# パイプラインの初期化
pipeline = TextClassificationPipeline(tokenizer=tokenizer, model=model)

raw_text = "এই ইউনিয়নে ৩ টি মৌজা ও ১০ টি গ্রাম আছে ।" # 変更してください
output = pipeline(raw_text)

結論

このブログポストでは、sahajBERTを実世界の問題に適用した最初の本当に成功した例として、ニューラルネットワークの共同事前学習を可能にする方法について説明しました。

このことが、より広範な機械学習コミュニティにとってどういう意味を持つのでしょうか?まず、大規模な分散事前学習を友人と一緒に実行することが可能になりました。以前は実現が難しかったクールな新しいモデルがたくさん出てくることを期待しています。また、私たちの結果は多言語NLPにとって重要かもしれません。なぜなら、どの言語のコミュニティも、一つの場所に集中した大量の計算リソースの必要性なしに自分たちのモデルをトレーニングできるようになったからです。

謝辞

DeDLOC論文とsahajBERTトレーニング実験は、Michael Diskin、Alexey Bukhtiyarov、Max Ryabinin、Lucile Saulnier、Quentin Lhoest、Anton Sinitsin、Dmitry Popov、Dmitry Pyrkin、Maxim Kashirin、Alexander Borzunov、Albert Villanova del Moral、Denis Mazur、Ilia Kobelev、Yacine Jernite、Thomas Wolf、Gennady Pekhimenkoによって作成されました。このプロジェクトは、Hugging Face、Yandex Research、HSE University、MIPT、University of Toronto、Vector Instituteの共同研究の結果です。

さらに、トレーニングインフラストラクチャの構築におけるStas Bekman、Dmitry Abulkhanov、Roman Zhytar、Alexander Ploshkin、Vsevolod Plokhotnyuk、Roman Kailへの貴重な助けに感謝します。また、ダウンストリーム評価への協力や、共同実験の組織とトレーニングの進行状況の定期的な更新を参加者に提供してくれたAbhishek Thakur、Tanmoy Sarkar、Omar Sansevieroにも感謝します。

以下に、共同実験のすべての参加者をご覧いただけます:

参考文献

「Distributed Deep Learning in Open Collaborations」、ArXiv

DeDLOCリポジトリのsahajBERT実験のコード。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

AIが開発者の生活を簡単にする10の方法

AIは、テストやバグ修正などの繰り返しのタスクを自動化し、開発者がより創造的で戦略的な作業に集中することができるように...

データサイエンス

「木々の中の森を見る:データ保存は鋭い目から始まる」

「成功したデータ保存戦略の開始は、細心の観察と詳細への確固たる焦点にかかっています」

AI研究

「DevOps 2023年の状況報告書:主要な調査結果と洞察」

年次調査の結果が発表されました画期的な発見がありますこのレポートは、AIとドキュメンテーションが生産性と仕事の満足度に...

機械学習

この人工知能論文は、画像認識における差分プライバシーの高度な手法を提案し、より高い精度をもたらします

機械学習は、近年のパフォーマンスにより、さまざまな領域で大幅に増加しました。現代のコンピュータの計算能力とグラフィッ...

人工知能

2023年のトップ10 AI QRコードジェネレーター

QRコードは、特に支払いの便利さから広く人気があります。金融の応用にとどまらず、QRコードはさまざまなデータタイプを包括...

人工知能

「信じられないほどの新しい中間補間機能(領域の変化)」

「この機能により、グラフィックデザインの経験がないがグラフィックを作成したいという人にとって、Midjourneyは100倍も価値...