AIワンダーランド

AIエンジニアの個人開発ブログ

CyberAgentのLLMをローカル(Windows)で動かしてみた

更新日:2023年7月23日

概要

昨日5月16日に記事で紹介したCyberAgentさんのLLM

予定通り本日5月17日huggingfaceで公開されましたね!!

 

7/23追記:

Metaがオープンソースとして7月18日に公開した大規模言語モデル(LLM)【Llama-2】をWindowsのCPUだけで動かす手順を簡単にまとめました。

ai-wonderland.com

 

 

ai-wonderland.com

 

さっそく動かしてみました!

huggingface.co

 

 

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)で動かしてみた でした

ではまた