見出し画像

東工大LLM「Swallow」を使ってGoogle Colabで遊んでみよう #SwallowLLM

昨日公開された東工大と産総研による、英語の言語理解や対話で高い能力を持つ商用可能な大規模言語モデル(LLM)「Swallow」で、サンプルコードを作って遊んでみましょう。

しらいはかせCEOによる Google Colab Proで動作するコードがこちらです。

https://github.com/aicuai/GenAI-Steam/blob/main/20231220_SwallowLLM.ipynb

Step.1

こちらのURLから GitHubのリポジトリに行き、
「Open in Colab」のボタンを押します。

事前に Google Colab Pro のアカウントを作っておいてください

「ランタイム」→「すべてのセルを実行」で実行しても問題ありませんが、けっこう待ち時間がありますので、一度この記事を読んで、パラメータを変更してから実行したほうがいいかもしれません。その際は Ctrl+S で別名で Colabノートブックをご自身の Google Drive に保存しておくことをおすすめします(このままの状態だと GitHub からのcloneをそのまま使っている状態なので変更しても保存ができません)。

何も考えないでいきなり実行してもだいじょうぶなコードになってます!

うまく実行ができない時は…

トラブルを防ぐよう、できるだけシンプルなコードにしてあるので、おそらく失敗する理由の多くはVRAM(GPUのメモリ)が足りないことに起因します。 Google Colab Pro (月額¥1,179)を使ってGPUが利用できるインスタンスを作ります。具体的には「A100 GPU」もしくは「V100 GPU」以上を選びましょう。「A100」を選んでしばらく待てば、運が良ければ割り当てられます(利用できない時は「V100」になります)。

自分が使用している環境は右上の▼より「ランタイムのタイプを変更」で確認できます。

「V100 GPU」を使用している状態
デフォルトだと「T4 GPU」(16GB)が選択されていると思います。

Step.2 モデルのローディング

ここではトークナイザーとモデルを指定して HuggingFaceからダウンロードしてVRAMに読み込むコードが書かれています。
13bモデルのダウンロードとローディングには10分程かかります。ロードした段階でVRAMを13.8GB/16GBほど消費します。
一番最初は最も軽い「tokyotech-llm/Swallow-7b-instruct-hf」を選択してからスタートしたほうがいいかもしれません。

Step.3 プロンプトと設定

さていよいよ実行です。
input_exampleの行にあるテキストを書き換えてから実行しましょう。

「東京工業大学の横浜にあるキャンパスの食堂について説明してください」

7分ほどで推論結果が表示されました。
(2回目からは十秒程度で応答します)

「吾輩は猫である。名前は」→「名前はまだありません」

「吾輩は猫である。名前は」→「名前はまだありません」

「トンネルをぬけると、そこは…」→「雪国だった」

「トンネルをぬけると、そこは…」→「雪国だった」

「行く川の流れはたえずして、」

これは2分かかりました。

ちょっと端折っているけど正解ではありますね

以下の文脈を読み進めると、「行かず」の意味が理解できます。この歌は、「人の世とは儚いものだ」という意味が込められています。

「般若心経における人々が行うべき最も大事な行動とは?」

24秒。「お釈迦様の教えに従うこと」。正解ではないでしょうか。

般若心経における「空」とは何ですか?なんと読みますか?

生成には5分ほどかかりましたが、回答としてはほぼ完璧でした。

般若心経における「空」とは何ですか?なんと読みますか?

応答:空は「くう」と読みます。空は仏教の究極の真理であり、何も存在せず、すべてのものが存在しているということです。般若心経では、この世界は、実体とは関係なく、私たちの頭の中でのみ存在するとされています。般若心経では、私たちが認識することしか存在せず、世界は私たちの思考と心によってのみ存在するとされています。

Swallow 13B-instruct-hf による推論結果

同じ質問を英語でしてみます。

何語で返ってくるのかな…?と思ったら英語でした。

Could you explain definition and more deeper information on the following topics.

以下のトピックに関する詳細情報を提供してください。

生成には6分かかりました

応答:般若心経における「空」とは、物事の本質が空(そら)であり、実体がなく変化し続けるものであるという認識です。「空」という言葉は通常、漢音で「くう」と読み、サンスクリットでは「シューニャ」と読むことができます。般若心経には「空」に関する説明や教えが盛り込まれており、この世界の物事は全て本質的に実体がなく、変化し続けるものであると理解することで、悟りに至ること

Swallow 13B-instruct-hf による推論結果

シューニャ(śūnya)はWikipediaの内容と一致しました。勉強になるなあ。

「初音ミク」について語らせる

トークン (max_new_tokens) を 128から1024にして、入力を「What is Hatsune Miku? Explain it in English.」(初音ミクとは何なのか?英語で説明してください)としてみました。

生成には3分かかりました

Hatsune Miku is a virtual singer created by Crypton Future Media, Inc. in 2007, and one of the earliest virtual singers. Her popularity has spread around the world. Her fans refer to themselves as "hatsuneists" and have a subculture, called Vocaloid.

Deeplで翻訳すると「初音ミクは2007年にクリプトン・フューチャー・メディア社によって作られたバーチャル・シンガーで、最も早く誕生したバーチャル・シンガーの一人である。彼女の人気は世界中に広がっている。彼女のファンは自らを『初音主義者(hatsuneists)』と呼び、ボーカロイドと呼ばれるサブカルチャーを持っている。」

完璧では…。「Hatsuneists」という単語があるのかどうかは謎だけど翻訳はされている、Googleで探してみたけどこのアカウント以外は見つからない
https://www.tiktok.com/@hatsuneist
ハルシネーションしているのかどうか微妙、というかこれは活用形として認識されているのかな。

そんなわけで

生成( model.generate() )が場合によって重いのか、生成時間にばらつきがあるのが気になりますが、13Bによって生成される結果は「かなり良いのでは」という印象です。古典文学や純文学、仏教の現代語訳ができるのも興味深いです。

モデルを変えて再実行する際は「ランタイム」→「ランタイムを接続解除して削除」がオススメです。

いろいろ残っている状態でハマるよりはやり直しましょう


なんとかギリギリ16GB以下を保ってくれる GPU RAM

以上、東工大LLM「Swallow」を使ってGoogle Colabで遊んでみましたが、「これはなかなか良いものだ」という感想です。
速度が遅いのが気になりますが、チャットボット用の量子化や変換モデルでのテストやシステム開発にも使ってみたいものです(案件くださぁい!)。
ワークショップやハッカソン、アイディアソンなどにも使えそうですね。

また今回使用したサンプルコードについても何か改善点があれば X(Twitter)@AICUai までお伝え下さい!

https://github.com/aicuai/GenAI-Steam/blob/main/20231220_SwallowLLM.ipynb


この記事が気に入ったらサポートをしてみませんか?