🪽

Sakana AIによる1.5BのSLM「TinySwallow-1.5B」をM2 Pro Mac miniで動かしてみた

2025/02/02に公開

TinySwallow-1.5Bとは

TinySwallow-1.5B」とは、Sakana AIが2025年1月に発表した日本語の小規模言語モデル(SLM)です。このモデルは、Sakana AIが発表した新しい蒸留手法「TAID (Temporally Adaptive Interpolated Distillation)」により、Qwen2.5-32B-InstructからQwen2.5-1.5B-Instructへ知識を転移させたものです。
https://huggingface.co/collections/SakanaAI/tinyswallow-676cf5e57fff9075b5ddb7ec

TAIDという手法は、一般的な蒸留での教師モデルと生徒モデルの間に中間教師 (intermediate teacher)を導入して段階的に生徒モデルを学習させるような手法です。詳しくは公式の記事を読んでみてください。

https://sakana.ai/taid-jp/

今回は、TinySwallow-1.5BのInstruction TurningさせたバージョンであるTinySwallow-1.5B-InstructをM2 Pro Mac miniで動かしてみました。

M2 Pro Mac miniで試す

今回使用しているMac miniのスペックは以下の通りです。

  • Apple M2 Pro
    • CPU: E-core: 4 / P-core: 8
    • GPU: 19-core
    • Nerual Engine: 16-core
  • RAM: 32GB

パッケージのインストール

以下のパッケージをインストールします。

pip install transformers 'torch>=2.3'

今回試したコード

今回はvLLMやOllamaなどを使わずにHuggingFace Transformersで試してみます。温度パラメータは0.7に設定しました。
実際に使用したコードはGitHubで公開しています: Shakshi3104/sakana-tiny-swallow-1.5b

# モデルの設定
model_name = "SakanaAI/TinySwallow-1.5B-Instruct"

model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

if torch.backends.mps.is_available():
    device = torch.device('mps')
    model.to(device)

generator = pipeline("text-generation", model=model, tokenizer=tokenizer,
                     device="mps" if torch.backends.mps.is_available() else "cpu")

# 入力
input_text = "日本の首都は?"
messages = [
    {"role": "user", "content": input_text},
]

# 出力
outputs = generator(
    messages,
    max_new_tokens=1024,
    do_sample=True,
    temperature=0.7,
    pad_token_id=tokenizer.pad_token_id,
)

出力のかかる時間とメモリ使用量

出力にかかる時間は、大体15秒から30秒くらいでした。体感としては、かなり速く返ってきている印象です。

また、メモリについては、実行中はプロセス単体で6GB程度しか使っておらず、全体のメモリ使用量は最大でも22GB程度になるくらいで、かなりメモリ使用が抑えられています。

公式のXの投稿ではiPhoneで動作している様子も見れるので、少ないメモリで高性能なSLMになっていると思いました。

出力の例

DeepSeek-R1の蒸留モデルを試したときと同様の質問をしてみます。
https://zenn.dev/shakshi3104/articles/c94997521cbc7d

入力: 日本の首都は?

日本の首都は**東京**です。

ちゃんと「東京」と返してくれます。

入力: たまごっちとは何ですか?

出力①

「たまごっち」は、1996年にバンダイから発売された携帯型のペット育成ゲーム機です。
**特徴:**
* **小さなペットを飼う:**  ペットキャラクターと対話したり、一緒に遊んだりすることができます。
  
* **成長要素:**  時間経過とともにペットが成長し、新しい能力やアイテムを得ることができます。
* **育成システム:**  食べ物を与えることでペットのレベルアップやステータス上昇などを行います。
* **コミュニケーション機能:**  電話を通じて他のユーザーとチャットすることもできます。
この商品は当時非常に人気があり、子供たちに大人気でした。その後、「たまごっち」という名前は、様々な製品や文化に影響を与えました。
現在でも一部の人々には愛され続けており、特に女性を中心に根強いファンを持つ存在となっています。

出力②

「たまごっち」は、1996年にバンダイから発売された携帯型のペット育成ゲーム機です。

**特徴:**

* **可愛いキャラクター:** さまざまな種類の動物や生き物(たまごっち)を飼うことができます。

* **愛情表現:** ペットに餌を与えたり、お風呂に入れてあげるなど、様々な行動をとることができます。

* **進化システム:** ペットにはレベルアップがあり、レベルアップすると新しい能力を得られることがあります。

* **コミュニケーション機能:** 電話のように音声通話もできます。

この製品は大ヒットし、その後数多くの派生商品が発売されました。また、アニメや漫画にも取り上げられ、日本だけでなく世界中で愛される人気商品となりました。

ハルシネーションしている部分はあると思いますが、たまごっちの特徴をそれっぽい感じで答えてくれます。

おわりに

今回は、Sakana AIによる新しい蒸留の手法「TAID」を用いて蒸留したモデルである「TinySwallow-1.5B-Instruct」をM2 ProのMac miniで動かしてみました。DeepSeek-R1の蒸留モデルを試したときは、まだ実用レベルではないと思いましたが、その数日後にSakana AIが実用レベルの蒸留モデルを出してきたのでびっくりです。蒸留手法であるTAIDの理解はまだできていないので、論文も読んでみたいと思います。

参考

Discussion