🤖

Macのローカル環境にOpenCALM-3Bの環境を構築する

2023/05/17に公開

はじめに

この記事はCA社が公開したLLMのOpenCALM-3BをMacのローカル環境で実行する手順を纏めたドキュメントです。

CA社は重いモデルからかなり軽めのモデルまで提供してくれており、スペックが低いMacでもとりあえず触ってみることはできそうです。(私はM1-Pro 32GBですが、128トークン×3Bモデルで1分でした)

CALMとは

サイバーエージェント社が提供したLLMです。商用利用可能なライセンスで提供されていて、日本語前提で学習されているのが特徴です。
https://www.cyberagent.co.jp/news/detail/id=28817

導入方法

環境構築方法

python3.10の仮想環境を前提とします。

仮想の環境構築方法がわからない方は以下の記事を参考にしてみてください。
https://zenn.dev/michy/articles/102a0558096199

必要なライブラリのインストール

以下のライブラリをインストールします。

  • pytorch
  • transformers
  • accelerate
  • jupyter notebook

仮想環境を起動している状態で以下のコマンドを入力してください。

pip install torch transformers accelerate jupyter notebook

jupyter notebookの起動

仮想環境で以下を実行してください。

jupyter notebook

LLMを動かす

モデルを準備する

jupyter notebook内の環境で以下を実行してください。
※Mac環境の場合、CA社が提供しているコードそのままでは動きません。

PCスペックが低い場合はcyberagent/open-calm-3bの部分をcyberagent/open-calm-1bとすると一つ下のモデルで試せます。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
	"cyberagent/open-calm-3b", 
	device_map="auto", 
	torch_dtype=torch.float32 #デフォルト値から変更
	)
tokenizer = AutoTokenizer.from_pretrained(
	"cyberagent/open-calm-3b"
	)

実行する

以下のコードを実行してください。
chatGPTのようにpromptに対する応答が返ってくるのではなく、promptに続く文字が生成されます。
QAを試すなら"質問:{質問文}\n回答:"と書くと期待した結果に近づきます。

# インプット部分
prompt = "AIによって私達の暮らしは、"
max_token_size = 128

# 実行部分
inputs = tokenizer(prompt,return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=max_token_size,
        do_sample=True,
        temperature=0.7,
        pad_token_id=tokenizer.pad_token_id,
    )
    
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)

パラメータの補足

変数名 解説
Prompt インプットするプロンプト。LLMはこのプロンプトに続く文字を生成してくれる。
Max_token_size LLMの応答の最大サイズ。短いと途中で回答が切れる。

実行結果

ベースモデルなのでお試し程度ですが「"AIによって私達の暮らしは、"」をプロンプトとすると以下の結果になりました。
文章としてかなり成立しており、ベースモデルとしては十分な性能が出てますね。

利用が現実的な日本語モデルが遂に出てきた感があります。

トークンサイズ64:実行時間27秒

途中で切れちゃってますが文書としてはある程度成り立っている。

AIによって私達の暮らしは、より便利で快適になってきています。同時に、AIは私達の暮らしや仕事に様々な変化を起こしています。
AIが人知を超える時、今よりも便利な世界になるだけではなく、私たちの暮らしや仕事、人間関係などが劇的に変化します。
AIと人間の関係が変わっていく時代に私達はどう生きればいいのか。
AIと人間の関係

トークンサイズ128:実行時間57秒

同じく途中で切れる。また、「人の仕事が奪われる」といった懸念に続く記載が医療の話に変わっており、長文だとあらが出る。

AIによって私達の暮らしは、より快適で便利になっていっています。
しかし、AIには「人の仕事が奪われる」といった懸念もあり、AIとどう関わっていくかということが、社会の課題として挙がってきています。
特に、医療の分野では、AIが診断や治療の補助などのサポートを担うことで、医療従事者の負担が減ることが期待されています。
AIには、人の判断や行動のデータがないので、医者の診断や治療の支援は、AIが行うことはできないのです。
しかし、医師がAIに診断を下す「AI診断」は、実用化が始まっています。
アメリカでは、AI診断で、がんの早期発見などを目指すプロジェクトも進められています。
AIによる診断は、

トークンサイズ512:実行時間3分38秒

同じ話を繰り返している?

AIによって私達の暮らしは、今まで以上に便利になるのでしょうか?それとも、全く利便性がなく、私たちの生活は、さらに貧しくなるのでしょうか?
AIが人間の仕事を奪っていく、それに対する不安や恐怖は、今に始まった事ではないでしょう。
しかし、これからAIが私達の生活にどのようにかかわっていくのか、それによって、私達の生活がどう変わっていくのか、それを考えた事はあるでしょうか?
例えば、私が今、AIに仕事を任せる事に不安を覚えているのは、AIが人間の代わりになる事が、今後、どんどん増えていくからです。
そうなると、これまで人間が担ってきた、私達の生活の中で、多くの場所や作業、仕事などが、AIによって置き換えられていく事になってしまいます。
もしかしたら、そのようなことが、これから起こるのかもしれません。
そうなると、私達の生活や働き方は、大きく変わっていくことになります。
例えば、AIによって置き換えられる仕事の中には、AIにしか出来ない仕事もありますが、AIでは出来ない仕事もあります。
人間には、AIには出来ない仕事があります。
人間でなければ出来ない仕事というのは、AIには出来ない仕事になります。
しかし、AIに仕事を奪われたら、この全ての仕事がAIに取って代わられてしまう事になるかもしれません。
そうなった時に、人間は、一体、どのような仕事につく事になるのでしょうか?
例えば、AIによって置き換えられる仕事の中には、AIにしか出来ないような、高度な技術が必要な仕事もあります。
しかし、AIに仕事を奪われたら、高度な技術が必要な仕事は、AIには出来ない仕事になってしまいます。
そうなると、私達には、高度な技術が必要な仕事につく事は出来なくなってしまいます。
そんな事は、あってはならない事なのですが、もしそうなったとしたら、私達は、一体、どのような仕事につく事になるのでしょうか?
AIには、とても高度な技術が必要です。
しかし、AIに仕事を奪われたら、AIに出来るような、仕事にしか就く事が出来なくなります。
そうなった時、私達の仕事は、一体、どのようなものになるでしょうか?
AIに仕事を奪われないような仕事が、人間には必要だと思います。
では、AIに仕事を奪われないような仕事って、一体、どのような仕事になるのでしょうか?
AIに仕事を奪われないような仕事、それは、AIでは出来ない仕事、つまり、高度な技術が必要な仕事、人間でなければ出来ない仕事になります。
AIに仕事を奪われないような仕事とは、いったい、どのような仕事になるのでしょうか?
AIに仕事を奪われないような仕事、それは、AIには出来ないような、高度な技術が必要な仕事になります。
技術が必要な仕事、あるいは、人間でなければ出来ないような仕事、AIには出来ないような仕事になります。
AIに仕事を奪われないような仕事、それは、AIには出来ないような、高度な技術が必要な仕事、あるいは、人間でなければ出来ないような

まとめ

今回はCALMの使い方をまとめました。
ベースモデルなのでまずは触れてみるくらいの位置づけのモデルだとは思いますが、ファインチューニングによる発展も感じさせるすごいモデルだと思います。

Macのスペック持て余している方は是非今回の手順で使ってみてください!

私のTwitterではStebleDiffusionに限らず、AIを活用した業務改善情報の発信をしておりますのでご興味のある方は是非フォローをお願いします。
https://twitter.com/Linus_lab

Discussion