東工大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」のボタンを押します。
「ランタイム」→「すべてのセルを実行」で実行しても問題ありませんが、けっこう待ち時間がありますので、一度この記事を読んで、パラメータを変更してから実行したほうがいいかもしれません。その際は Ctrl+S で別名で Colabノートブックをご自身の Google Drive に保存しておくことをおすすめします(このままの状態だと GitHub からのcloneをそのまま使っている状態なので変更しても保存ができません)。
うまく実行ができない時は…
トラブルを防ぐよう、できるだけシンプルなコードにしてあるので、おそらく失敗する理由の多くはVRAM(GPUのメモリ)が足りないことに起因します。 Google Colab Pro (月額¥1,179)を使ってGPUが利用できるインスタンスを作ります。具体的には「A100 GPU」もしくは「V100 GPU」以上を選びましょう。「A100」を選んでしばらく待てば、運が良ければ割り当てられます(利用できない時は「V100」になります)。
自分が使用している環境は右上の▼より「ランタイムのタイプを変更」で確認できます。
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分ほどかかりましたが、回答としてはほぼ完璧でした。
同じ質問を英語でしてみます。
何語で返ってくるのかな…?と思ったら英語でした。
シューニャ(śūnya)はWikipediaの内容と一致しました。勉強になるなあ。
「初音ミク」について語らせる
トークン (max_new_tokens) を 128から1024にして、入力を「What is Hatsune Miku? Explain it in English.」(初音ミクとは何なのか?英語で説明してください)としてみました。
Deeplで翻訳すると「初音ミクは2007年にクリプトン・フューチャー・メディア社によって作られたバーチャル・シンガーで、最も早く誕生したバーチャル・シンガーの一人である。彼女の人気は世界中に広がっている。彼女のファンは自らを『初音主義者(hatsuneists)』と呼び、ボーカロイドと呼ばれるサブカルチャーを持っている。」
完璧では…。「Hatsuneists」という単語があるのかどうかは謎だけど翻訳はされている、Googleで探してみたけどこのアカウント以外は見つからない
https://www.tiktok.com/@hatsuneist
ハルシネーションしているのかどうか微妙、というかこれは活用形として認識されているのかな。
そんなわけで
生成( model.generate() )が場合によって重いのか、生成時間にばらつきがあるのが気になりますが、13Bによって生成される結果は「かなり良いのでは」という印象です。古典文学や純文学、仏教の現代語訳ができるのも興味深いです。
モデルを変えて再実行する際は「ランタイム」→「ランタイムを接続解除して削除」がオススメです。
以上、東工大LLM「Swallow」を使ってGoogle Colabで遊んでみましたが、「これはなかなか良いものだ」という感想です。
速度が遅いのが気になりますが、チャットボット用の量子化や変換モデルでのテストやシステム開発にも使ってみたいものです(案件くださぁい!)。
ワークショップやハッカソン、アイディアソンなどにも使えそうですね。
また今回使用したサンプルコードについても何か改善点があれば X(Twitter)@AICUai までお伝え下さい!
https://github.com/aicuai/GenAI-Steam/blob/main/20231220_SwallowLLM.ipynb