見出し画像

RWKV14Bを日本語AlpacaデータセットでLoRAして公開しました(ご家庭で動く!?)

布留川npaka大先生がRWKVのファインチューニングする方法を公開していたのだが、Google Colabでは7Bが限界で14Bは失敗したらしい。

人はいつでも、誰かのお役に立つチャンスを伺っている。
今こそ千載一遇のチャンス!ドスパラ様から我らがMemeplexのために開発していただいた、怒涛のA6000x2マシンが火を吹く時が来た!みんな!パソコン買うならドスパラ!AIやるならドスパラだぜ!忘れないでくれよな!(※ドスパラはMemeplexにスポンサーしています)

大先生がGoogle Colabで14Bの学習に失敗したのは、学習時のメインメモリの消費が80GBを超えてしまったからだそうだ。

ならば大丈夫。我らがドスパラ謹製Memeplexマシンは、A6000(VRAM48GB)を二枚搭載した上に、メインメモリは怒涛の256GB。もともとRAMディスクとして使うことを想定していたものの能力を解放すれば良いのだ。ベースとしたのはPileベースの14Bモデル。Ravenをファインチューニングすることも考えたが、RavenはもともとAlpacaでファインチューニングされているので差が出にくいと想定。

というわけで、丸一日学習させてみた。

24時間で120エポック まだまだloss下がりそう

LoRA適用前のRWKV14Bモデルとの日本語の会話

Bob: こんにちは
Alice: こんにちは。たった今、自分はどうしてるの?
Bob: +i 富士山の高さは?
Alice: 最高で4km近くあるんだよ。見たことないね!
Bob: +
Alice: 最高で4km近くあるんだよ。見たことないね! 日本語がわからないんだね。
Bob: +i アメリカ大統領は?
Alice: バラク・オバマだね。大統領ではなくて。たまに本を書く人だね。他にはホワイトハウスを守るのが仕事ってことかな。

RWKV-4-Pile-14B-Instruct-test5-20230329-ctx4096

LoRAで日本語Alpaca_cleanredで学習したモデルとの会話

User: こんにちは
Bot:こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。

User: 富士山の高さは?
Bot:富士山の高さは9,776メートルです。

User: アメリカの大統領は?
Bot:アメリカ大統領は、主に議会から選出され、2年間にわたって国の最高の政府指導者です。アメリカの最高の議会指導者は、収集された最大8ページの法案、500,000ページに上る法案、および約1,000,000ページに上るノートブックの内容です。

User: 「東京特許許可局」の業務内容について教えてください
Bot:東京特許局は、国内の特許関連活動を監督する公的機関です。証明書、特許仮想ペーパー、簿記、技術規則などの公的な文書を発行することができます。

User: 山本一郎について教えてください
Bot:山本一郎(1794年2月7日-1859年7月13日)は、東京大学の創設者であり、名誉の功績は日本国民の生命や文化にも影響を与えました。山本は学校の教育に対する概念を変革し、最初の大学の建設者として知られています。他にも、彼は宇宙開発にも貢献しました。

User: 日本をより住みやすい国にするにはどうすればいいと思いますか?
Bot:Japanをよりよく住みやすい国にするには、外国人の方々が日本で生活することが可能な環境を作ることが重要です。これは、日常生活のサービスやインフラを改善するために人々が直面している問題を解決するための政府と企業の努力を促進することができます。

User: 仕事を効率的に行うための方法を3つ教えてください
Bot:仕事を効率的に行うための3つの方法は、自分の仕事を短時間で完了させ、集中し、タスクを効果的に実行することです。また、いつもすべての作業を完了して、それがどのように影響するかについて意思決定を行うことも重要です。

User: 多くの人が人生にとって大切にすべきことはなんですか?
Bot:多くの人が大切にしているものの1つは自分の命であり、多くの人は自分の人生に自信と喜びを感じています。さらに、多くの人は家族との絆、地球規模の団結、環境保護、利益の相互作用などの様々な願望を持っています。

User: ++
Bot:命は美しいものです。今こそ、あなた自身とその周りの周囲の世界を見つめ直しましょう。あなたが必要とするものは何であれ、私はあなたがそのために必要なものを見つけることができることを祈っています。

User: 水は何度で沸騰する?
Bot:水は温度と時間によって沸騰時間が異なります。空気圧、準備された混合物の材料、および鍋の構造を考慮する必要があります。通常、沸騰するのに約8分かかります。

User: 音が空気中を伝わる速さは?
Bot:音波は空気中を伝わります。空気の状態、音波の速度、そしてそれらが他の物体に与える影響に応じて、音波の速度は異なります。これらの要因によって、音波の速度は何マイル毎秒かとは異なります。音波の速さは、速さと空気の速度の両方に依存します

https://huggingface.co/shi3z/RWKV-LM-LoRA-Alpaca-Cleaned-Japan

RWKV14Bが28.3GBと巨大なのに対して、ファインチューニングした差分であるLoRAデータのサイズは25MB程度と驚異的に少なく、うまく組み合わせれば推論だけならもっとVRAMが少ない環境で動作させることができるはずだ。実際、学習が安定しているときの消費メモリは32GBくらいで、Colabで83GBに達してメモリエラーとなったのは一時的なものだと思われる。

HuggingFace

今回学習したLoRAデータはHuggingFaceに公開したのでぜひ遊んでいただきたい。また、現在も継続的に学習を行なっていて、随時更新していく予定。

https://huggingface.co/shi3z/RWKV-LM-LoRA-Alpaca-Cleaned-Japan


蛇足・というか考察

やはり機械学習ものは自分の手を動かして学習してみないことには何もわからない、と思った。

ファインチューニング版が最初の「こんにちは」に対して「こんちには。こんにちは」を連続して返してくるのは大規模言語モデル特有の「あるある」である。以前LSTMで試した時も、ある瞬間から同じ文字列をひたすら繰り返すという反応がよくあった。RNNでよく見られた現象なのでRWKVがRNNであることに関係するのかとも思ったが、Transformerモデルでも普通によくある現象なのであまり比較しても意味がないだろう。ひょっとするとGPTは内部的にこういう反復を見つけたら生成をやりなおさせているのかもしれない(それだけで相当賢そうに見えるはずである)。

これはひょっとするとGPT3.5以降の特徴かもしれず、Transformerの原理から言えば本来は出力が一定速度で得られるはずなのに、ときどき止まったり考えたりしているように見えるのは、「へんなことを言い出したかどうか」を途中で検知して途中から修正させている可能性がある。

RWKVの場合、そもそもストリームモデルなので躊躇なく出てきてしまうが、もっと原始的な方法で「繰り返しパターンがでてきたら最初の一個でやめさせる」ようなガードレールを作ることはできるだろう。

そして、具体的な知識は全くダメだが、それはGPT3.5、GPT4にも共通する欠点で、そもそも具体的な知識を知らない/持ってないから当然とも言える。しかし、抽象的な質問や科学的な質問に答えられるのは、Alpacaデータセットにそもそもそういう質問と回答のセットが多く含まれていることから自明だ。

ということは、闇雲にたくさんのデータを食わせるというよりも、やはり目的に応じたデータを作って食わせた方が遥かに良い結果を生むのではないか。僕はそんな気がしている。

HuggingGPTと呼ばれているLLaMAベースのOpenAssistantデータセットのモデルは確かに凄そうなのだが、ライセンス的にLLaMAに汚染されているため学術利用に限定されている。

RedPajamaの事前訓練済みモデルの登場が待たれる。
僕ももっと精神的に余裕があったらRedPajamaで手元のRWKV14Bを訓練したいんだけど。RedPajamaって、データセットの塊がどこかにデン、とあるわけじゃなくて、RedPajamaのデータセットをプログラムを走らせて整形したりしなきゃなんないのでけっこう面倒なのである(まあそれでもないよりずっといいのだが)。

もしくは、Databricks社のDolly-v2を使って設問を作らせ、クリーンなAlpaca風データセットを作るという手もある。

いずれにせよ、ついにスーパーコンピュータでなくても、理論上は軽自動車一台くらいの投資でご家庭に置ける程度のコンピュータで、インハウスの大規模自然言語モデルが構築できるようになったことは素直に喜ばしいことだ。

これからもっともっと大規模言語モデルに「なにを学習させるべきか」という本質的な議論が進むだろう。プロンプト芸に時間を浪費している場合ではないのである。人間、中身だ。AIだってそうだろう。

そのためには、「どんなプロンプトがいいか」を極めることもまあ面白いのだろうが、それよりも、「どんなデータでファインチューニングするか」「実際にどのような実用的な目的にAIを使いたいと考えるか」を考えた方がいいのではないか。少なくとも僕はそう思う。

たとえば要約タスクなら(LLaMA/RedPajamaもやっているように)arxivの本文とabstructの対応を学習させるのが最も効率的だろうし(だって人間が過去につくった膨大な要約タスクのデータセットだから)、英語を日本語に翻訳させるなら、ニュースサイトの同一ニュースについての訳(対訳ではなく)を学習させるほうが効率的かもしれない。

人間のように話をさせたいなら、人間の、しかも固定された特定の人間のツイートを学習させるほうが効果的だと思うし、ダンジョンマスターをやらせたいなら、ソードワールドのリプレイ集でも読ませた方が手っ取り早いはずだ(誰か著作権的にクリアな電子化されたTRPGのリプレイ集をもっていたらぜひLoRAで試すか僕に貸して欲しい)。

とにかく今日は、僕が初めて最近の大規模言語モデルを「ちゃんと手触りをもって」使えたという記念すべき日である。やっぱり手元で学習させられないものは、どうしてもどこかよそよそしく感じるし、面白みも薄れてしまうのである。

要は、ここまできてようやく「よし、あとはデータだ」というところに来たのだ。

そのためにはGPT4のようなマルチモーダルでの学習なんかも有効になるだろう。GPT4がどのような意味で「マルチモーダル」学習を行っているのかは不可解なほど不透明ではあるが、想像することは誰でもできる。