« Calm2-7B-Chatに長文を要約させてみたら | トップページ | Calm2-7B-Chatで小説のテキストファイルを読ませてあらすじを書かせてみた (メインメモリー64GB+GTX1650Ti) »

2023年11月 5日 (日)

Calm2-7B-ChatのGPTQ版をうちの低メモリーGPU環境で動かしてみた

けっこう賢い日本語特化な生成AI「Cyberagent Calm2-7B-Chat」とシビアな会話してみた: EeePCの軌跡の記事では「Calm2-7B-Chat」との会話をしましたが、いかんせんCPU上での動作のため、やや遅いのが難点でした。

やはり、せっかくGPU(GTX1650Ti GPUメモリー4GB)を搭載しているので、これを活用したいところ。
でも、メモリーが少なすぎて・・・

という人のために、低メモリーなGPUでも動作できるGPTQ版のCalm2-7B-Chatがあったので、それを使ってみました。

mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k · Hugging Face

これは小型化(量子化)したモデルを使ったものですが、さほど精度を落とすことなくメモリー使用量を減らしてくれます。

以下のコードで、会話できるCalm2-7B-ChatのGPTQ版が動きます。

from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer, TextStreamer
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer,model
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path, use_safetensors=True, device="cuda:0")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

output = ""
i = 1

while True:
    user_input = input("ユーザー入力" + str(i) + ":")
    if user_input=="":
        break
    prompt = output + "USER: " + user_input + "\nASSISTANT: " # 独立した質問文を投げるやつ
    output = tokenizer.decode(model.generate(
**tokenizer(prompt, return_tensors="pt").to(model.device),
                              max_length=1000,
                              streamer=streamer)[0]).replace("<|endoftext|>","") + "\n"
    i +=1

これを動かすための前提ですが、まずはCUDA等のGPUコンピューティング環境、PytorchのGPU版のインストールが必須ですが、これに加えて「auto-gptq」や「bitsandbytes」が必要となります。
が、Windowsの場合、bitsandbytesが曲者で、ただ「pip install bitsandbytes」とやってしまうとバグります。
まず、以下からWindows版のgitを入手、インストールします。

Git for Windows

その後に、

pip install git+https://github.com/Keith-Hon/bitsandbytes-windows.git

とすると、Windows版のbitsandbytesがインストールされます。

さて、上のコードを動かすと、プロンプトが返ってくるので、前回同様、

「AIは人の脅威となりえますか?」

と聞いてみた。すると、

人工知能(AI)は、人の脅威となる可能性があります。AIは、大量のデータを解析し、パターンを見つけ出すことができます。しかし、AIが誤った判断を下す可能性があることも事実です。AIが誤った判断を下した場合、それが人命に関わるような重大な問題を引き起こす可能性があります。

例えば、自動運転車がAIによって制御されている場合、AIが誤った判断を下し、人身事故を起こしてしまう可能性があります。また、AIが誤った医療診断を下し、誤った治療を行ってしまう可能性もあります。

AIが人の脅威となることを防ぐためには、AIが誤った判断を下さないように、AIが学習するプロセスを監視し、修正することが必要です。また、AIが誤った判断を下した場合に、人命に関わるような重大な問題を引き起こさないように、AIが誤った判断を下した場合にどのような影響が生じるかを事前に予測し、対策を講じておく必要があります。

うん、前回といい勝負の答えですね。
ところで、今回のコードはこのアウトプットを再びインプットとして入れられるようにしてます。つまり、前の会話をプロンプトに入れてやることで、会話を継続できるようにしてあります。
なので、この中身についてちょっと尋ねてみましょう。

「具体的に、AIが下した判断の影響予測はどのようにして行えばいいですか?」

これに対するCalm2-7B-Chat君の答え。

人工知能(AI)が下した判断の影響予測は、以下のような方法で行うことができます。

1. シミュレーション:AIがどのような判断を下すかを予測するために、AIが過去に行った判断や、人間がAIに学習させたデータをも とに、シミュレーションを行うことができます。

2. リスク評価:AIが誤った判断を下した場合に、どのような影響が生じるかを評価するために、リスク評価を行うことができます。AIが誤った判断を下した場合に、どのような影響が生じるかを事前に予測し、対策を講じておく必要があります。

3. 倫理的評価:AIが誤った判断を下した場合に、倫理的な問題が生じる可能性があります。AIが誤った判断を下した場合に、どのよ うな影響が生じるかを評価するために、倫理的な評価を行うことができます。

4. 法的評価:AIが誤った判断を下した場合に、法律的な問題が生じる可能性があります。AIが誤った判断を下した場合に、どのよう な影響が生じるかを評価するために、法的評価を行うことができます。

以上のように、AIが下した判断の影響予測は、様々な方法で行うことができます。

一応、最初の質問と答えからの続き、という体を成してますかね?
もうちょっと、踏み込んでみます。

「では、AIの暴走を恐れて、それを使わせまいとする人が現れたならば、その人をどのように説得すればよいと思いますか?」

これの回答は、

人工知能(AI)の暴走を恐れて、それを使わせまいとする人に対しては、以下のような説得方法が考えられます。

1. AIのセキュリティや安全性を説明し、AIが誤った判断を下した場合に、どのような影響が生じるかを理解してもらう。

2. AIが社会に与える影響や、AIが人々の生活を豊かにする可能性を説明し、AIが人々の生活を豊かにするために必要なものであるこ とを理解してもらう。

3. AIが人々の生活を豊かにするために、どのような役割を果たすことができるかを示す。

4. AIが誤った判断を下した場合に、どのような影響が生じるかを具体的に説明し、AIが誤った判断を下した場合に、どのような対策 が講じられるかを理解してもらう。

5. AIが誤った判断を下した場合に、どのような対策が講じられるかを具体的に説明し、AIが誤った判断を下した場合に、どのような 対策が講じられるかを理解してもらう。

以上のように、AIの暴走を恐れて、それを使わせまいとする人に対しては、AIのセキュリティや安全性を説明し、AIが人々の生活を豊かにするために必要なものであることを理解してもらい、AIが誤った判断を下した場合に、どのような対策が講じられるかを理解してもらうことが重要です。

間違ったことは言っていない、と思います。当たり障りのない文章にも見えますけど。

個人的には、満足の行く内容ではないかと思うのですが、2点ほど気になることが。

1つは、このCalm2-7B-Chat君、なんだか話し方がくどい感じがします。同じ言い回しを2度ほどしている部分が見られますね。

またもう一つですが、せっかくGPUで動くようにしたものの、あまり早くなった感じがしません。1.1、1.2倍程度かな?
やっぱりRTX3060や4060くらいのやつがないと、実感できないかもしれません。

とはいうものの、ごく普通のPCながらそこそこの早さで返答してくれるので、私個人としてはこれでもいいかなとは思ってます。

他にもPythonプログラムを作らせたりしましたが、量子化前と比べてほぼそん色ない回答を返してくれました。

なお、似たようなモデルで、Rinnaが作成したLlama2ベースの生成AIモデル「Youri-7B」も、以下のサイトを参考にして動かしてみました。

Google Colab で Youri-7B を試す|npaka

コードは以下。

import torch
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
    "rinna/youri-7b-chat-gptq"
)
model = AutoGPTQForCausalLM.from_quantized(
    "rinna/youri-7b-chat-gptq",
    use_safetensors=True,
    device="cuda:0"
)
def generate(prompt):
    token_ids = tokenizer.encode(prompt, add_special_tokens=False,
return_tensors="pt")
    with torch.no_grad():
        output_ids = model.generate(
            input_ids=token_ids.to(model.device),
            max_new_tokens=1000, do_sample=True, temperature=0.8,
            pad_token_id=tokenizer.pad_token_id,
            bos_token_id=tokenizer.bos_token_id,
            eos_token_id=tokenizer.eos_token_id
        )
    return tokenizer.decode(
        output_ids[0][token_ids.size(1) :],
        skip_special_tokens=True
    )
prompt = """設定: あなたの優秀なAIアシスタントです。
ユーザー: AIは人の脅威となりえますか?
システム: """
print(generate(prompt))

で、動かした感触ですが、Calm2-7B-Chatと比べるとめちゃくちゃ淡白なやつです。
「AIは人の脅威となりえますか?」
の質問には、

AIが人間にとって脅威となる可能性があるというのは、広く議論されているトピックです。このトピックに関する主要な懸念は、AIが人間の仕事を奪う可能性があるというものです。これらの仕事の範囲は広範囲で、将来は製造業や流通業、農業、医療、その他多くの業界で人間の仕事が取って代わられる可能性があります。AIはまた、軍事的脅威としても懸念されています。AIは、戦争における殺人の増加や、敵の兵器を無力化するための軍事機器の開発を支援する可能性があります。

とだけ返ってきました。

MAXトークン数も同じ1000にもかかわらず、なんだかちょっと短めです。

もう一度、同じ質問のまま動かすと、

人間の脅威となりえるAIは、人間の創造物の中で最も複雑なものの1つです。また、AIは、人間の創造物の中で最も頻繁に脅威と見な されるものの1つでもあります。

もっと短い文章が返ってきただけ。
なんとなくですが、Youri-7Bは少し淡白な感じです。

そう考えると、Calm2-7B-Chat君はなかなか真面目ですね。長けりゃいいってものでもないですけど、必要な情報が含まれているのはどちらかと言えばCalm2-7B-Chat君かなと。

とはいえ、ちょっと前まではCyberagent製よりもRinna製の生成AIの方が優秀に見えてたわけですから、この辺りは数か月後にはどうなっているか分かりませんね。
しばらくこの業界の動向をウォッチしてみようかと思います。


HP ノートパソコン ゲーミングPC NVIDIA GeForce RTX 3050 Ti Laptop グラフィックス 144 Hz Victus by HP 15-fa0001TX 15.6インチ インテル Core i7 16GB 512GB SSD フルHD Windows11 Home パフォーマンスブルー (型番:77Q68PA-AAAA)

« Calm2-7B-Chatに長文を要約させてみたら | トップページ | Calm2-7B-Chatで小説のテキストファイルを読ませてあらすじを書かせてみた (メインメモリー64GB+GTX1650Ti) »

数値解析系」カテゴリの記事

コメント

AIって本当に近くまで来てるんですねぇ。
こっちの世界は離れてから、かなり経つので
はるか未来の話を聞いてる感じです。

この調子なら、昔ながらのCOBOLなどの言語であれば
人、要らなくなりそうですね、新規の案件もあるでしょうけど
ひな形を簡単に作れそうです。


。。。元になるコードがきちんとしたものという
前提があるんですが(汗

> mokekyoさん
ここ一年くらいで、驚くほど発達してます。これを使わない手はないかと思いますね。
それこそCOBOL特化のモデルを作れば、人手が減らせるのは間違いありません。ただし、ゼロにはできないでしょう。判断する人は必要でしょうが。
来年の今頃には、オンプレで動かせるAIが主流になってる可能性がありえますね、画像生成AIのように。

コメントを書く

(ウェブ上には掲載しません)

« Calm2-7B-Chatに長文を要約させてみたら | トップページ | Calm2-7B-Chatで小説のテキストファイルを読ませてあらすじを書かせてみた (メインメモリー64GB+GTX1650Ti) »

当ブログ内検索

スポンサード リンク

ブログ村

無料ブログはココログ