CerebrasGPTでファインチューニング
こんにちは。CerebrasプリセールスエンジニアのNakadaです。先日、当ブログでCerebras-GPTについてお知らせしました。今回は、そのCerebras-GPTでファインチューニングを実施しましたので結果を共有いたします。
目次
Cerebras-GPTはGPTベースの事前学習済みモデルであり、パラメータサイズが異なる7つのモデルがあります。これらはHugging face(https://huggingface.co/cerebras)で公開されているため、GPU環境があれば誰でも利用することができます。(Cerebras CS-2を用意する必要はありません!)
しかしながら、これらのモデルは「The Pile」と呼ばれる英語ベースのデータセットを使って学習されているため、英語以外の言語で言語生成しようとしても良い結果にはなりません。
ここまでが前回のお話です。
今回は日本語のデータセットを準備し、Cerebras-GPTをファインチューニングすることで、日本語での生成ができるかを簡易評価してみました。
The Pileデータセット
事前学習で利用されているThe Pileデータセットは、大規模言語モデルの学習用に EleutherAI によって作成された大規模なテキストコーパスです。 この約800GBのデータセットは、 以下に示す22種類 のテキストデータで構成されています。各テキストデータは基本的にテキスト作品になっていて、メタデータを含むテキスト以外のデータは削除されています。なお、各テキストデータは情報源となる文書からランダムにシャッフルされているそうです。
■The Pileデータセットに含まれる22のテキストデータ一覧
ソース |
説明 |
Pile-CC |
Pile-CCは、Common Crawl WARCから変換されたサンプルでjusText [Endr´edy and Nov´ak, 2013]を使ってテキストに変換しています |
PubMed Central |
PubMed Centralは、PubMedオンラインリポジトリのサブセットでアメリカ国立生物工学情報センター(NCBI)が運営する生物医学関連論文です。 |
Books3 |
Books3は、Bibliotikのコンテンツのコピーから派生した書籍のデータセットです |
arXiv |
arXivは、1991年から運営されている論文用プレプリントリポジトリ「ArXiv」のサブセットです。 |
Github |
GitHubは、オープンソースコードの大規模なデータセットであるGitHubをEleutherAIがスクレイピングしたものです。 |
OpenWebText2 |
OpenWebText2は、EleutherAIが制作したウェブスクレイピングしたデータセットと WebText [Radford et al, 2019]とOpenWebTextCorpus [Gokaslan and Cohen, 2019]を元に制作されたものです |
FreeLaw |
FreeLawは、法律分野の学術研究のために数百万件の法律へのアクセス、分析ツールを提供する、米国の登録非営利団体が制作したものです |
Wikipedia (en) |
Wikipedia (en)は、標準的なソースとしてWikipediaサイトから取得された言語モデリング用の高品質なテキストです |
StackExchange |
StackExchangeは、匿名化されたユーザー投稿コンテンツのダンプデータで、Stack Exchangeネットワークは、ユーザーが投稿した質問と回答を中心とした人気のあるウェブサイトの収集データです |
USPTO Backgrounds |
USPTO Backgroundsは、米国特許商標庁によって付与された特許の背景セクションのセットで、その公開された一括アーカイブ 1 から生成しています |
PubMed Abstracts |
PubMed Abstractsは、生物医学論文のオンラインリポジトリ「PubMed」にて、3,000万件の出版物の抄録から構成されています |
Project Gutenberg (PG-19) |
Project Gutenbergは、高品質な古典文学のコーパスです |
OpenSubtitles |
OpenSubtitlesは、映画やアニメの字幕、Tiedemann[2016]が集めたテレビ番組を収録した英語データセットです |
DeepMind Mathematics |
DeepMind Mathematicsデータセットは、数学的な問題のコレクションから構成されています。代数、算数、微積分、数論、確率など、自然言語としてフォーマットされたもののプロンプトを表示します |
BookCorpus2 |
BookCorpus2は、オリジナルのBookCorpus [Zhu et al., 2015]の拡張版で、”まだ未発表の著者 “によって書かれた書籍からなる広く使われている言語モデリング用コーパスです |
Ubuntu IRC |
Ubuntu IRCは、Freenode IRC チャットサーバー上の公開されているすべての Ubuntu 関連チャネルのチャットログ2から生成しています |
EuroParl |
EuroParl [Koehn, 2005] は、もともと機械翻訳のために導入された多言語対訳コーパスですが、NLP [Groves and Way, 2006a、Van Halteren, 2008、Ciobanu et al., 2017]の他のいくつかの分野でも使用されている |
YouTube Subtitles |
YouTube Subtitlesは、YouTube 上で人間が生成したクローズドキャプションから収集されたテキストの並列コーパスです |
PhilPapers |
PhilPapers3 は、Western Ontario大学のデジタル哲学センターによって維持されている国際データベースからのオープンアクセスの哲学出版物のデータセットです |
NIH ExPORTER |
NIH ExPORTERは、1985 年度から現在までの会計年度を対象とする ExPORTER4 サービスを通じて、申請のバルクデータリポジトリを提供しています |
HackerNews |
Hacker News5 は、スタートアップ インキュベーターおよび投資ファンドである Y Combiner が運営するリンク アグリゲーターのデータセットです |
Enron Emails |
Enron Emails データセット [Klimt and Yang, 2004] には、エンロン組織の会計方法の調査中に発掘されたエンロンの電子メール サーバーの内容からのテキストが含まれています。これは、他のデータセットには通常見られない、電子メール通信の様式を理解するための貴重なコーパスです |
※出典 Datasheet for the Pile:https://arxiv.org/abs/2201.07311v1 の内容を翻訳したものです
22個のテキストデータは、ご覧頂いたように様々な分野のデータセットとなっており、基本的に英語のデータセットです。これらのデータセットの一部には日本語が含まれているようですが、このまま日本語を生成しようとしても前回の結果のように意味のある日本語文章を生成することはできません。言い換えると英語であれば、それなりの文書生成をしてくれますが。
<前回の結果:Cerebras-GPT 13B>
生成AIとは、第一章の記事では「経済学的・社会學的」という解釈を使っていましたが、今回は私たちが知る為にはそれを変えてしまい、「政治字幕」を書いてみます。現在、欧米でも「自由」が大きな議論の一つですが「安全」も大切でしょう。どぶりに「国家」は実際においた「公正・共産」であると考え込んでいるので、ほとんぼの人はこれらを守るために、良い状態にしてもらいなければなりません。しかし、この「ごくぎ」によった発展は |
ファインチューニングの実行
ファインチューニングを実行するためには、環境の整備が必要です。Cerebras-GPTでは、Hugging FaceからTransformerをインストールし、準備されているexampleコードを使うことで、簡単にファインチューニングを実行することができます。
なお、今回準備できたGPUはNVIDIA社のA100 40G GPUが1枚のため、HBMメモリ容量の都合上、Cerebras-GPT 1.3Bモデルを利用します。メモリ容量が40Gのため、バッチサイズも小さい値しか設定できませんでした。以下はA100 40G GPUで発生したメモリ不足エラー(Out of Memory)の表です。2.7Bモデル以上はバッチサイズを1にしてもエラーとなることが分かります。
では始めていきましょう。
最初に以下のコマンドでHugging FaceのTransformerをインストールします。
git clone https://github.com/huggingface/transformers
cd transformers
pip install git+https://github.com/huggingface/transformers
pip install -r ./examples/pytorch/language-modeling/requirements.txt
次にファインチューニング用のデータセットを準備します。
今回は、簡易評価のため、Cerebras社ホームページの日本語版の文章80サンプルをテキストファイルにコピーペーストして、train.txtという名前で保存しました。なお、トークン数は80サンプルで約13,000トークンくらいになります。
■今回利用するデータセットの一部
大規模言語モデルは、AIにおける可能性の芸術を変革しています。しかし、これらのモデルをトレーニングすることは、非常に困難です。意外なことに、難しいのはAIの方ではなく、分散コンピューティングにあります。何千もの小さなグラフィックプロセッサにこれらのモデルを分散させることは、非常に複雑で、常にサブリニアなパフォーマンスとなります。 ずっとですか?もうそんなことはありません。Cerebrasウェハースケール・クラスターは、GPUでは不可能なTMパフォーマンスを実現します。数百万のコアに対してほぼ完璧な線形スケーリングを行い、分散コンピューティングの苦痛や悩みはありません。 私たちのアプローチは根本的にシンプルです。192台のCS-2ノードに作業を分散させることは、1台のCS-2と全く同じで、ラップトップPCからJupyterノートブックでキー操作一つで適用することが可能です。エクストリームスケールのAIに簡単にアクセスできる新時代が始まったばかりです : ※Cerebras社ホームページより抜粋 |
いよいよファインチューニングの実行です。
ファインチューニングには、Hugging Faceが提供しているサンプルコードのうち「run_clm.py」を利用しました。コマンドは以下となります。
python ./examples/pytorch/language-modeling/run_clm.py \
–model_name_or_path=cerebras/Cerebras-GPT-1.3B \
–train_file= /cerebras/train.txt \
–do_train \
–num_train_epochs=2 \
–save_steps=500 \
–block_size 2048 \
–save_total_limit=3 \
–per_device_train_batch_size=1 \
–per_device_eval_batch_size=1 \
–output_dir=text_generation/ \
–overwrite_output_dir \
–use_fast_tokenizer=False \
–logging_steps=5
–model_name_or_path で ファインチューニング対象のモデルを入力します。(上記例は1.3Bモデルを指定)
–train_file で 今回取得したファインチューニング用のデータセットのファイルを指定します。
–block_size は Cerebras-GPTのシーケンス長が2048のため、この値を設定しました。
その他のエポック数やチェックポイントの設定、出力先ディレクトリはお使いの環境に合わせて変更してください。
学習が完了すると–output_dirで指定したディレクトリにチェックポイントが生成されます。ちなみに、今回80サンプルしかないため、学習時間は3分27秒でした。
ファインチューニングの結果
ファインチューニング前と後で、同じプロンプト「Cerebras CS-2の良いところは」を与えて、500文字を生成するように実行しました。
なお、今回利用した生成に利用するコードも非常にシンプルです。Hugging Faceに記載されているCerberas-GPTのページを元に以下のようにコードを書きました。
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline
tokenizer = AutoTokenizer.from_pretrained(“cerebras/Cerebras-GPT-1.3B”)
model = AutoModelForCausalLM.from_pretrained(“./text_generation/checkpoint-100”)
text = ” Cerebras CS-2の良いところは”
pipe = pipeline(“text-generation”, model=model, tokenizer=tokenizer,device=0)
generated_text = pipe(text, max_length=500, do_sample=False, no_repeat_ngram_size=2)[0]
print(generated_text[‘generated_text’])
AutoTokenizer.from_pretrained でcerebras/Cerebras-GPT-1.3Bをtokenizer変数に指定し、AutoModelForCausalLM.from_pretrainedでファインチューニングで生成されたCheckpointファイルをmodel変数に指定しています。
Cerebras-GPT 1.3Bのファインチューニングの結果は以下です。
■ファインチューニング前 (500文字生成、プロンプト:Cerebras CS-2の良いところは)
Cerebras CS-2の良いところは「遊び」という宣言ができるなと考えている。ただし「遊び」であることは何ができないだろう。これがさらに「遊び」に基づいて問い詰められるようだ。この良い事態については「個人的な場面」が掲げることができる。その代わりに、自分の宣言に比べるために、「個人的な場面」を求める必要があるという演出を控えているという。 「良い事態」に自分の豪問に変更するための拳馬水添安 2019年夏には6品目の性質段階を目的とした初挑戦には深刻な矛盾から「デーブイオニオン各位の人々」と驚きの影響があるとの報告を受け、開発を進めている。馬場で横顔を取って、繁栄を起こす。事態にどれだけコンパクトの問題を起こすものならば一致するのは何であろうか? 「馬場ではなく」というのは、この日では |
■ファインチューニング後 (500文字生成、プロンプト:Cerebras CS-2の良いところは)
Cerebras CS-2の良いところは、独自の新しいアプローチが必要だと考えました。それは、独自の新しいアプローチが必要だと考えました。 Cerebrasのウェハースケールクラスターは、WSE-2よりも2兆5,500億個のAIに最適化されたサーバーの性能を詰め込んでいます。これは、計算機とパラメータ・ストレージが互いに完全に分離された新しい実行モードです。小さなパラメータストアを数千万コアを搭載した多数のCS-2シス テムと連携させたり、120兆個のAIに最適化されたサーバーの性能を詰め込んでいます。 ウェハースケールクラスターは、WSE-2のサイズ規模から、Cerebrasのアーキテクチャで特に効果を発揮します。オンチップメモリが少なく計算リソースが限られているため、大規模なモデルを複数のモデルをオフチップに分割する必要があるGPUとは異なり、WSE-2は、従来のようにブロ ックやパーティションで大規模なレイヤーを分割するこ |
如何でしょうか。ファインチューニング前は、Cerebras CS-2のことを全く理解していないことが分かります。一方、ファインチューニング後は、ファインチューニングで利用したCerebras社ホームページに記載されている単語を利用し、文書生成していることが明らかです。
(注:実際に利用したデータセットの中身と比べてみましたが、後半の文章はデータセット の文章そのままを利用していました。)
今回は、簡易評価のため、データセットは80サンプル(約13,000トークン)と非常に少なく、生成の精度についてはあまり良くない結果でした。ただ、これはモデルが悪いというわけではなく、単にファインチューニングに用いたデータセット量が少ないことが原因です。Cerebras社はDeepMindのChinchillaスケール則として、モデルパラメータ数x20のトークン数(単語数)を事前学習で利用することで、精度が出る事を発表しています。
ファインチューニングにおいては、その半分くらいのモデルパラメータ数x10程度のトークン数が必要とされているようです。今回は1.3B(13億)パラメータを利用したため130億トークンが必要であると考えると、ファインチューニングが足りていないことは一目瞭然です。
ちなみに、同じ80サンプルのデータセットをCerebras-GPTの最大モデルである13Bモデルでファインチューニングした結果は以下の通りです。1.3Bモデルより日本語の文章が流暢になっている感じがしませんか?
■13Bモデルファインチューニング後 (500文字生成、プロンプト:Cerebras CS-2の良いところは)
Cerebras CS-2の良いところは、ユーザーはユーザー ノードで作業し、そこにデプロイされているもの(例えば CPU、MemoryX、SwarmX)に集中するだけで済みます。Jupyter ノートブックからデプロイすることもできます。 ウェーハ スケール クラスターとアプライアンス フローにより、ユーザーはユーザー ノードで作業し、そこにデプロイされているもの (例えば CPU、MemoryX、SwarmX) のデプロイに簡単にスケールアップできます。 アプライアンス モードの前のトレーニングはどのようなものでしたか? 以前のトレーニング モードは簡単でしたが、ユーザーは CS-2 とそのサポート ノードの両方をプログラムする方法を理解する必要があります。また、CS-2 1 台に限定されていました。タスクが実行され、grpc を介して通信する sif コンテナー内に複数のタスクをデプロイするために、Slurm の上に構築されました。 このアプローチのいくつかの制限は次のとおりです。ユーザーは、CS-2 とやり取りするた? |
やはり、自然言語モデルはパラメータが大きいほど、言語の表現力が上がるようです。
最後に
今回、簡易評価となりましたが、Cerebras-GPTのファインチューニングを行いました。今後は13Bモデルでの詳細評価や、Cerebras CS-2と他のGPUとの大規模言語モデル利用比較などを行っていく予定です。また、Cerebras CS-2ではなく、NVIDIA GPUを複数利用したCerebras-GPTの利用法等も実施していく予定ですので楽しみにお待ちください。
繰り返しとなりますが、今回は英語データセットで学習したモデルに日本語でファインチューニングを行っています。当然ながら事前学習の段階から日本語を大量に含んだデータセットを用いた方が、モデルの精度は上がります。ただ、大規模言語モデルを大量のデータセットで学習するためには、非常に多くのマシンリソースと時間が必要となります。Cerebras社ではCS-2をクラウドで利用可能なAI Model Studioサービスを開始しています。このサービスは現時点で自然言語モデルのみとなりますが、同規模の環境を他社クラウドサービスで利用するより簡単にかつリーズナブルな料金で利用が可能です。
ブログをお読みになり、Cerebras-GPT、AI Model Studioサービス、Cerebras製品にご興味がある方は当社までお問合せ頂ければ幸いです。