Macのローカル環境でOpenCALMを動かしてみました

2023年5月17日にサイバーエージェントが日本語の大規模言語モデルを発表しました。太っ腹なことに、誰でも使えるとのことなので(ありがとうございます)、早速使ってみました。

ローカル環境で動かすことができる(エッジAI)

Open AIのChatGPT3やGPT4は、本格的に使おうと思ったら料金を気にしなくてはいけません。しかし、これが手軽にローカル環境で料金を気にせずに使うことができるというのは、大きな魅力です。

また、料金だけではなく、データを吸い取られることもありませんので、セキュリティ的にも安心ができます。

最近は、オープンソース化も活発なので、Stable Diffusionのように無料で使える方法がたくさん生まれることが期待できます。

GPUがなくてもできる

本格的な深層学習には、NVIDIAのGPUが必須となりますが、高価なことと、電力を食うことがネックになります。

Google Colabを使う方法もありますが、こちらも料金がかかること、セキュリティの問題があり、できれば完全ローカルで通したいところ。

Apple Siliconを搭載したMacは、NVIDIAのGPUには劣りますが、それでも高性能であり、しかも電力使用量がとても少なく済むので、手軽に機械学習をするのであれば、コストパフォーマンス的にはとても良い選択肢だと思います。

ちなみに、今回の環境は、

  • MacBook Pro 14インチ M1 Pro
  • メモリ16GB、SSD512GB

です。

目次

ローカル環境の構築

まずは、ローカル環境の構築が必要になります。詳細は以下をご覧ください(ライブラリのインストール方法も同じです)。

ライブラリのインストール

必要なライブラリは以下です。

  • Pytorch
  • transformers
  • accelerate

サイバーエージェント社のHugging Faceから必要なファイルをダウンロード

サイバーエージェント社がアップしている、Hugging Faceのページから必要なファイルをダウンロードし、任意のフォルダに入れます。

モデルは、

  • small
  • medium
  • large
  • 1b
  • 3b
  • 7b

の6個がありますが、まずは一番小さいsmallで試してみます。

Jupyter Notebookで動かす

ターミナル上で、ファイルのあるフォルダに移動したのちに、Jupyter Notebookを起動します。

サイバーエージェント社のHugging Faceにサンプルコードがありますので、それを入力してみます。

ただし、一点だけ注意があります。

4行目の最後、float16をfloat32に修正しないと動きません。

model = AutoModelForCausalLM.from_pretrained(“cyberagent/open-calm-small”, device_map=”auto”, torch_dtype=torch.float16)

model = AutoModelForCausalLM.from_pretrained(“cyberagent/open-calm-small”, device_map=”auto”, torch_dtype=torch.float32)

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float32)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")

inputs = tokenizer("AIによって私達の暮らしは、", return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=64,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.05,
        pad_token_id=tokenizer.pad_token_id,
    )

output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)

max_new_tokens=64では、

AIによって私達の暮らしは、生活者の意識や価値観に影響を受けています。
そして、その生活者の行動に寄り添い、生活者と一緒に考え、行動し、解決していくのが私たちの役割です。
「今、何ができるのか」「何のために」「どうすれば」
という疑問に対して、私たちは「今何をすべきなのか」「何のために」という答え

という回答になりました。64トークンなので、途中で終わっています。10秒もかからず出力されました。

max_new_tokens=128では、

AIによって私達の暮らしは、本当に便利なものになったのでしょうか?
「AI」というワードが定着してしまえば、もはや私たちの生活に欠かせないものになっています。その一つが「AI」です。
例えば、車の自動運転など、人間が行う仕事はAIによって代替されます。
しかし、AIは人間に代わって、より賢く働きかけることができます。
AIは人間よりもはるかに優れた能力を持っています。
それは、人間が考えたことよりも早く行動し、判断力を駆使して、必要な情報だけを瞬時に判断することです。
つまり、人間の方が高度な判断力を持っているということです。
もちろん、AIも人間と同じように、人間の知能以上の能力を発揮することができるのです。
例えば、車の運転

一番小さなモデルでも、とても自然な感じがします。

ちなみに、「公認会計士とは、」と書かせてみたら、

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float32)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")

inputs = tokenizer("公認会計士は、", return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=128,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.05,
        pad_token_id=tokenizer.pad_token_id,
    )

output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
公認会計士は、国家資格であり、薬剤師の資格を持つ者(認定薬剤師)が、薬局の薬剤師です。
登録販売者は、お薬手帳の使い方や服用上の注意点、薬剤師転職サイトにはたくさんの求人案件があります。
医療業界は人材不足が続いており、薬剤師免許を有する者又は、薬剤師求人募集の転職情報を探すならこちらから。
薬剤師の転職支援サービスを利用するメリットは、病院や薬局で調剤薬局とドラッグストアが、転職活動をする際には年収を平均していくらくらいあれば良いのでしょうか。
薬剤師の転職活動は、転職するにあたって知っておきたいことは、薬剤師の転職に関する情報が満載です。
調剤併設・OTCのみ

なぜ薬局の方に話を持っていく?

largeモデルで同じ質問をしてみました。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-large", device_map="auto", torch_dtype=torch.float32)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-large")

inputs = tokenizer("公認会計士は、", return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=256,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.05,
        pad_token_id=tokenizer.pad_token_id,
    )

output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)

20秒ほどかかりましたが、かなりまともになりました。

公認会計士は、国家資格を取得した人だけが持つことができる独占的な業務独占資格です。
税理士や公認会計士は、税務・会計に関する専門家であり、企業や個人の決算書などを作成したり、税金や経営について相談する仕事を行うプロフェッショナルです。
しかし、税務申告書の作成だけでなく、企業の経営状況の分析や経営計画の策定、資金繰り管理、組織再編や事業承継対策、企業価値の向上策の提案など、幅広い業務に携わることができます。
さらに、公認会計士の資格を取得すれば、監査法人や会計事務所、税理士事務所、コンサルティング会社などに就職することで、より専門性の高い業務に携わることも可能です。
弁護士は、法律の専門家として紛争の解決や、訴訟の代理などを行う仕事です。
弁護士になるためには、法科大学院で法律の基礎を学び、司法試験を合格する必要があります。
司法試験に合格すると、弁護士として登録することができます。
弁護士は、国家資格者の中でも最も需要の高い職業の一つで、法律事務所や企業法務部に勤務したり、独立開業して依頼者とのトラブルを解決したりするなど、さまざまな形で活躍しています。
また、弁護士の資格を得るためには、法科大学院卒業後に司法試験を受験する必要があります。
司法書士は、不動産や会社の登記手続きなどを行い、国民の権利を守るために必要な法的手続きを行う仕事です。
司法書士になるためには、司法書士会が行う司法書士試験に合格し、実務研修を受講したうえで、司法書士の国家
目次