東大・松尾研が公開した大規模言語モデル「Tanuki-8B」をMacBook(M2)で動かしてみた

[Supership](https://supership.jp/)の名畑です。[国立新美術館](https://www.nact.jp/)で開催されている[CLAMP展](https://www.clamp-ex.jp/)を見に行ったのですが、積み重ねてきた歴史を堪能させていただきました。その時代時代の作品に触れることによって自らの思い出も湧き上がってくる、素晴らしい展示でした。

## はじめに

人工知能に関して興味をお持ちであればどこかで必ず名前を目にするであろう[東京大学松尾・岩澤研究室（松尾研）](https://weblab.t.u-tokyo.ac.jp/)が大規模言語モデル「**Tanuki-8×8B**」を公開しました。

> - 経産省及びNEDOが進める日本国内の生成AI基盤モデル開発を推進する「GENIAC」プロジェクトにおいて、松尾・岩澤研究室が「Tanuki-8×8B」を開発・公開。
> - 本モデルは、フルスクラッチで開発されており、対話、作文能力を評価する指標「Japanese MT-Bench」において「GPT-3.5 Turbo」と同等以上の性能を達成。
> - Apache License 2.0のライセンスに基づき、研究および商業目的での自由な利用が可能。「Tanuki-8×8B」の軽量版である、「Tanuki-8B」をチャット形式で利用できるデモも公開。
> 
> 参考：[(東京大学松尾・岩澤研究室 GENIACプロジェクトにおいて、大規模言語モデル「Tanuki-8×8B」を開発・公開 | 東京大学松尾・岩澤研究室（松尾研）- Matsuo Lab](https://weblab.t.u-tokyo.ac.jp/2024-08-30/)

> 　東京大学の松尾・岩澤研究室は8月30日、フルスクラッチで開発した大規模言語モデル（LLM）の「Tanuki-8×8B」を公開した。経済産業省とNEDO（新エネルギー・産業技術総合開発機構）が推進する「GENIAC（Generative AI Accelerator Challenge）」プロジェクトで開発したもの。日本語で作文や対話する能力は、米OpenAIのLLM「GPT-3.5 Turbo」に匹敵する。海外のモデルに比べ、共感や思いやりのある返答ができるという。
> 
> 参考：[松尾研、フルスクラッチ開発のLLMを公開　得意なのは“共感”と“思いやり” - ITmedia AI＋](https://www.itmedia.co.jp/aiplus/articles/2408/30/news197.html)

今回は「**Tanuki-8×8B**」の軽量版である「**Tanuki-8B**」の対話調整版モデル「**Tanuki-8B-dpo-v1.0**」を手元のMacBook(M2)で動かしたので記事にします。

## Tanuki-8Bと8x8Bについて

- [Tanuki-8B-dpo-v1.0](https://huggingface.co/weblab-GENIAC/Tanuki-8B-dpo-v1.0)
	- Tanuki-8Bは、フルスクラッチで約1.3Tトークン事前学習を行った約8Bパラメータの大規模言語モデル
- [Tanuki-8x8B-dpo-v1.0](https://huggingface.co/weblab-GENIAC/Tanuki-8x8B-dpo-v1.0)
	- フルスクラッチで約1.7Tトークン事前学習を行った8x8Bパラメータ（総パラメータ約47B、アクティブパラメータ約13B）の大規模言語モデル

詳しくは以下をご覧ください。

- [大規模言語モデルTanuki-8B, 8x8Bの位置づけや開発指針など](https://zenn.dev/matsuolab/articles/377f7ae8b1169e)
- [Tanuki-8x8Bをダウンロードした後に推論させる方法について](https://zenn.dev/matsuolab/articles/a3b42ddbf5d121)

視覚言語モデルである[Tanuki-8B-vision](https://huggingface.co/weblab-GENIAC/Tanuki-8B-vision)と[Tanuki-8x8B-vision-exp](https://huggingface.co/weblab-GENIAC/Tanuki-8x8B-vision-exp)も公開されています。

## 私の環境

[MacBook Pro(Apple M2 Proチップ / メモリ16GB)](https://support.apple.com/kb/SP889?locale=ja_JP)です。
OSは[macOS 14 Sonoma](https://www.apple.com/jp/macos/sonoma/)です。

[torch](https://pytorch.org/)と[transformers](https://huggingface.co/docs/transformers/index)が必要なので入れておきます。

```shell-session
$ pip install torch transformers
```

私の環境でのバージョンは以下でした。

```shell-session
$ pip list | grep -e torch -e transformers 
torch                        2.4.0
transformers                 4.44.2

```

**torch**は**2.4.0**以上でないと以下のエラーが出るのでご注意ください。

> ValueError: Can't infer missing attention mask on `mps` device for torch<2.4. Please provide an `attention_mask` or upgrade to torch>=2.4

## 実行

[公式のサンプルコード](https://huggingface.co/weblab-GENIAC/Tanuki-8B-dpo-v1.0#%E4%BD%BF%E3%81%84%E6%96%B9)をそのまま実行するだけで動きました。

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

model = AutoModelForCausalLM.from_pretrained("weblab-GENIAC/Tanuki-8B-dpo-v1.0", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("weblab-GENIAC/Tanuki-8B-dpo-v1.0")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

messages = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "たぬきに純粋理性批判は理解できますか？"}
]

input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
                            max_new_tokens=1024,
                            temperature=0.5,
                            streamer=streamer)
```

システムに対して「**以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。**」という指示を出した上で、ユーザーから「**たぬきに純粋理性批判は理解できますか？**」という問いを投げかけています。

下記の注意があるのでシステムプロンプトはいじらない方が良さそうです。

> なお、本モデルはデフォルトのシステムプロンプトである「以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。」以外を学習していないため、このシステムプロンプトの使用を推奨します。タスクの詳細はユーザープロンプトに記述してください。

初回はモデルのダウンロードが15GB以上必要となります。

また、推論に時間がかかりますため、ご注意ください。**streamer**が指定されていることにより段階的に出力を確認できるため、完了までどれぐらい時間がかかりそうかは見ていれば判断がつくと思います。

結果は以下でした。

> 「たぬきに純粋理性批判を理解できるか」という質問は、非常に興味深い哲学的な問いです。まず、純粋理性批判（Immanuel Kant's Critique of Pure Reason）は、18世紀ドイツの哲学者カントによって書かれたもので、人間の認識能力と道徳的判断に関する深い洞察を提供しています。この批判哲学は、特に認識論と倫理学において重要な位置を占めています。
> 
> たぬきは動物であり、人間のように複雑な思考や抽象的な概念を理解する能力を持っているとは考えにくいです。動物行動学や認知科学の観点から見ても、たぬきが哲学的な議論や抽象的な概念を理解することは難しいでしょう。たぬきが純粋理性批判のような高度な哲学的著作を「理解する」という行為自体が、現実的には不可能に近いと考えられます。
> 
> ただし、仮にたぬきが何らかの形で人間の言葉や行動を通じて哲学的な議論に触れることができた場合、その理解の程度や深さは非常に限られるでしょう。たぬきが具体的な事例や視覚的な刺激を通じて基本的な概念を感じ取ることはあっても、カントの複雑な論理構造や抽象的な命題を完全に理解することは難しいでしょう。
> 
> 結論として、たぬきに純粋理性批判を理解させることはできないと考えられますが、もし何らかの形で人間との相互作用を通じて間接的にその影響を受けることができた場合、その理解は限定的であり、深遠なものとは言えないでしょう。

非常に面白い回答です。

そして、なんというか、機械的な文章ではなく、人間的な文章だと感じます。「**当該モデルは共感性や思いやりのある返答や､自然な言葉遣いでの作文が得意**」という特徴の通りですかね。ただの私の主観でしょうか。ぜひ皆様も触って判断いただきたいです。

## 実行 2

せっかくなのでもう少しシンプルな問いかけもしてみましょう。

上記コードを一箇所だけ変更します。

```python
 {"role": "user", "content": "日本の都道府県を5つ教えてください"}
```
 
 「**日本の都道府県を5つ教えてください**」という問いです。過去記事「[Googleによる生成AIモデル「Gemma 2」をMacBook(M2)で動かしてみた](https://qiita.com/nabata/items/428e8882651e8bc677f1)」でも用いたのと同じ問いです。
 
 結果は以下でした。

> 日本の都道府県の中から特に有名なものを5つ紹介します。まず、東京都は日本の首都であり、経済、文化、政治の中心地として非常に重要です。次に、大阪府は関西地方の中心都市で、特に大阪弁や食文化が有名です。愛知県は工業が盛んで、トヨタ自動車をはじめとする多くの企業が本社を構えています。北海道は広大な自然と豊かな海産物で知られ、札幌や函館などが観光名所です。最後に、福岡県は九州地方に位置し、博多ラーメンや屋台文化が観光客に人気です。これらの都道府県はそれぞれ独自の魅力と特徴を持っています。

内容に異論がある方もいるでしょうが、端的で的を射た読みやすい回答ではあるかとは思います。

## 最後に

軽量モデルであるものの、期待以上の回答が得られました。

日本国内からこれだけ高性能なモデルがリリースされるのは本当にありがたいことです。

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。