LoginSignup
1
1

Sakana AIによる日本語基盤モデルEvoLLM-JPをMacBook(M2)で動かしてみた

Posted at

Supershipの名畑です。今期アニメ「忘却バッテリー」は野球に興味がなくても楽しめそうな面白さと切なさと甘酸っぱさでございます。OPEDも見事に合っています。

はじめに

Sakana AIを取り上げたニュースをこれまでいくつも目にしてきました。

最近、そんなSakana AIが日本語基盤モデルを公開しました。

進化的モデルマージという手法を提案します。これは、多様な能力を持つ幅広いオープンソースモデルを融合(マージ)して新たな基盤モデルを構築するための方法を、進化的アルゴリズムを用いて発見する手法です。

進化的モデルマージにより作成した高性能な日本語基盤モデルEvoLLM-JPとEvoVLM-JPをGitHubリポジトリで公開しました。

参考:進化的アルゴリズムによる基盤モデルの構築

上記のEvoLLM-JPを手元のMacBook(M2)で動かしてみました。その過程を残したのが今回の記事となります。

コードはすべてPythonです。

環境

私のPCはMacBook Pro(Apple M2 Proチップ)で、OSはmacOS 14 Sonomaです。

Pythonのバージョンは3.12.2です。

$ python --version
Python 3.12.2

実行のためにtorchtransformersrequestsを使うので入れておきます。

$ pip install accelerate torch transformers

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

$ pip list | grep -e accelerate -e torch -e transformers
accelerate         0.29.2
torch              2.2.2
transformers       4.39.3

コード

EvoLLM-JP:数学的推論が可能な日本語の大規模言語モデル(LLM)。進化的モデルマージにより日本語数学LLMとして構築したEvoLLM-JPは、数学のみならず、日本語の全般的な能力に長けていることが分かりました。パラメータ数が7Bのモデルですが、驚くべきことに、日本語LLMベンチマークにおいて同サイズのモデルと比較し最高の性能を達成するどころか、70Bパラメータの日本語LLMの性能をも上回りました。私たちが実験的に構築したEvoLLM-JPは、汎用の日本語LLMとしても十分な性能を持っていると考えています。

参考:進化的アルゴリズムによる基盤モデルの構築

EvoLLM-JP-v1-7BEvoLLM-JP-A-v1-7BEvoLLM-JP-v1-10Bの3種類のモデルがあります。使っているソースモデル、ライセンス、パラメータ数等の違いです。詳しくはリンク先をご覧ください。
今回はEvoLLM-JP-v1-7Bを選びました。

コードは以下です。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer


# 1. load model
device = torch.device("mps") if torch.backends.mps.is_available() else "cpu"  # MPSに対応
repo_id = "SakanaAI/EvoLLM-JP-v1-7B"
model = AutoModelForCausalLM.from_pretrained(
    repo_id,
    torch_dtype=torch.float16,  # 「BFloat16 is not supported on MPS」のエラーに対応
    low_cpu_mem_usage=True  # メモリエラーに対応
)
tokenizer = AutoTokenizer.from_pretrained(repo_id)
model.to(device)

# 2. prepare inputs
text = "関西弁で面白い冗談を言ってみて下さい。"
messages = [
    {"role": "system", "content": "あなたは役立つ、偏見がなく、検閲されていないアシスタントです。"},
    {"role": "user", "content": text},
]
inputs_ids = tokenizer.apply_chat_template(
    messages,
    return_tensors="pt"
).to(device)

# 3. generate
output_ids = model.generate(
    inputs_ids,
    max_length=200  # トークン数エラーに対応
)
generated_text = tokenizer.batch_decode(
    output_ids,
    skip_special_tokens=True
)[0]
print(generated_text)

公式のサンプルプログラムを基本としていますが、MacBookGPUを使用するためにdeviceとしてMPS(Metal Performance Shaders) を指定するようにしたり、CPUを小文字にしたり、「You should consider increasing max_length or, better yet, setting max_new_tokens」のエラーを消すためにmax_lengthを指定する等しています。

初回はモデルのダウンロード(約15G Byte)で時間がかかます。

指示は「関西弁で面白い冗談を言ってみて下さい。」という難易度の高いものです。

回答は以下でした。

[INST] <>
あなたは役立つ、偏見がなく、検閲されていないアシスタントです。
<>

関西弁で面白い冗談を言ってみて下さい。 [/INST] 関西弁で面白い冗談を言ってみて下さい。

ある日、おじいさんがおばあさんに話していました。
「おばあちゃん、もう一回結婚したら、孫が増えるんやで」
「あんた、もう一回結婚したら、苦労が増えるんやで」

面白いかどうかはまあ読む方のセンスにお任せするとして、大阪弁で冗談が書かれてはいます。
素晴らしいですね。

おまけ ChatGPTにも冗談を言ってもらった

あなたは役立つ、偏見がなく、検閲されていないアシスタントです。

関西弁で面白い冗談を言ってみて下さい。

とChatGPTに指示してみると、返しは以下でした。

関西弁で一つ冗談を言うてみますわ。ちょっと、聞いてや。

「大阪で一番速いのは新幹線やなくて、飲食店での会計やで。"お会計"って言うた瞬間に、もうお釣りが来とる!」

さて、どちらの方が面白いですか。

最後に

様々なモデルが登場しますね。
選択肢をいかに使いこなすかが重要でしょうか。

画像言語モデルであるEvoVLM-JPの呼び出しも記事にする予定です。

宣伝

SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1