更新日:2023年7月23日
概要
昨日5月16日に記事で紹介したCyberAgentさんのLLM
予定通り本日5月17日huggingfaceで公開されましたね!!
7/23追記:
Metaがオープンソースとして7月18日に公開した大規模言語モデル(LLM)【Llama-2】をWindowsのCPUだけで動かす手順を簡単にまとめました。
さっそく動かしてみました!
Modelは6つ用意されていて
一番大きい「open-clam-7b」はVRAM15GBほど必要なようです。
なんたって68億パラメータですからね。
私の環境では無理なので、その下の「open-clam-3b」を動かします
こちらならVRAM8GBあればOK。
環境
実行環境:Windows11,GPU(RTX3060 12GB)
私は仮想環境で試しました。
py -3.10 -m venv ./venv
.\venv\Scripts\activate
もちろん仮想環境じゃなくても問題はありません。
手順
1.ライブラリのインストール
pip install transformers accelerate
2.動作確認「open-calm-small」
「open-calm-small」381MB
とりあえず一番小さいモデルで動くかどうか試す。
RuntimeError: "LayerNormKernelImpl" not implemented for 'Half'
TypeError: dispatch_model() got an unexpected keyword argument 'offload_index'
そのままだと上記のようなエラーが出るかもしれません。
とりあえずは下記で解決するかと思います。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
#model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float16)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small")
model = model.to(device)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")
inputs = tokenizer("日本のエンジニアは世界でどう評価されているか", return_tensors="pt").to(device)
with torch.no_grad():
tokens = model.generate(
**inputs,
max_new_tokens=64,
do_sample=True,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id,
)
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
【結果】
inputs:日本のエンジニアは世界でどう評価されているか
output:日本だけでなく、世界全体も注目する「AI(人工知能)」の世界的な普及はどのように進んでいくのか。そのヒントを探る。IoT技術の高度化・産業競争力の強化に向けた技術動向を解説AI技術を活用すれば、現場の作業量・工数を大幅に削減できるAIエンジニアに求められるスキル
まあ、動作確認用なのでこんなもんでしょう
3.本命「open-clam-3b」
さて、本題の「open-clam-3b」の実力はどうか、、わくわく
Downloading pytorch_model.binで5.7GBのモデルをダウンロードするので3分30秒ほどかかりました。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
#model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-3b", device_map="auto", torch_dtype=torch.float16)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-3b")
model = model.to(device)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-3b")
inputs = tokenizer("最近人気のある技術書はどんなのですか", return_tensors="pt").to(device)
with torch.no_grad():
tokens = model.generate(
**inputs,
max_new_tokens=64,
do_sample=True,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id,
)
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
CPUだとレスポンスに30秒ほどかかりました。
GPUだと45秒??挙動がどうもおかしいので私の環境の問題かもしれません。
さて、結果はどうかな~~~
【結果】
inputs:日本のエンジニアは世界でどう評価されているか
output:2018年10月から2019年9月までの1年間で、私は3つのプログラミング言語を学習する事にしました。Python(パイソン)とPHP(ピーエイ チピー)とJavaScript(ジャバスクリプト)です。私はこれまで、様々なプログラミング言語を独学で習得してきました。
たとえばといったものです。
え。。。なんだって?
【結果】
inputs:最近人気のある技術書はどんなのですか
output:
「どんな技術書を読んでいるのですか?」という質問を頂くことがあります。
「どんな技術書を読んでいるのですか?」という質問を頂くことがあります。
「どんな技術書を読んでいるのですか?」という質問を頂くことがあります。
「どんな技術書を読んでいるのですか?」という
え、、こわい
【もう一回】
inputs:最近人気のある技術書はどんなのですか
output:私は、3DCADやVR、AR、自動運転技術や人工知能など、最先端技術の技術書を読みたいのですが、どれを読めばよいのかわかりません 。
また、おすすめの書籍があれば、教えてほしいです。例えば、下記のような技術AILは、どのように読めばよいのでしょうか?・人工知能
「私は」ときましたか!?
プロンプト指示なしのプレーンですが、何かデフォルトで設定されているんですかね。
【もう一回】
inputs:最近人気のある技術書はどんなのですか
output:書籍版の技術書だと、技術の進化についていくのに時間がかかりそうですし、何より、お 金がかかります。「技術書典6」で技術書典7で出す予定の本と、今後出す予定の本について。技術書典6で出した技術書と、今後出す予定の技術書について
うーん、当然ですがこのまま使用というのは厳しいですね。
基盤モデルですので、「一緒にお勉強していきましょう」というところですかね。
しかしうまく使いこなせていければ楽しいですね~
とにかく公開してくれたCyberAgent様に感謝です!!
====================================
【おすすめ書籍】
鋭い洞察と深みのある言葉がささります。
読み物としてお勧め。なので電子版でもいいです。
====================================
以上、CyberAgentのLLMをローカル(Windows)で動かしてみた でした
ではまた