猫心魚心

SUPフィッシングはじめました!原2に乗ったり、アクアリウムを楽しむシステム屋さんの記録(このブログのリンクにはアフィリエイトが含まれています)

CPUのみでrinna Youri7B-Chatを動かす【ローカルAI構築】

      2024/02/08

自分専用ので自分好みの答えを返してくれる、自分だけのAIが欲しい!
という邪な理由で、自分のPC上にChatGPTみたいな会話AIを構築していきます。
(この記事を書いている2024年1月時点では、AIとテキスト入力でチャットをし、回答結果は自分の好きな声で返してくれるところまで実装しています。直近の機能追加で、アレクサやSiriのように口頭で会話できるようにしたいと考えているところです)

LLMモデルの選定

LLMとは、簡単に言うと「言葉を使った会話ができるすごい奴」です。
ChatGPTが有名ですが、実は研究や企業での開発のベースとするために、フリーで(オープンソースで)提供されているLLMがたくさん存在します。

もちろん、動かすことができれば個人で利用することもOKです。動かすことができれば、ですが。(注意:LLMのライセンスは要確認です!)

LLMはそれぞれ得意な分野や特徴(どんな学習をしているか?どのくらい学習をしているか?など)がありますので、自分の目的から選ぶ必要があります。
僕の目的としては友達感覚で話せるチャットAIにしようと思うので、「日本語での会話が得意」「チャット形式が得意」という特徴があるものが良いです。

色々と調べましたが、導入のやりやすさや、過去事例・導入事例の数から「rinna」を使うことにしました。
rinnaの詳しいことは公式ページに委ねるとして、ちょうど構築時点(2023年11月当時)にリリースしたての新モデル「rinna Youri7B」がありましたので、これをベースに環境構築をしようと思います。

このモデルには学習系統別にいくつかモデルが用意されていて、今回はチャット形式での会話パターンを学習している「rinna Youri7B-chat」を使います。

GPUの無いノートPCでAIを動かしたい

いわゆる「ゲーミングPC」でもない限り、普通ノートPCには強力なGPUはついていません。精々内蔵のよわよわGPUです。僕のもそうです。

しかし、何とかして自分だけのチャットAIが欲しいので何とかしましょう。

結論を言ってしまえば「CTranslate2」というライブラリを使って8bit量子化をします。
何を言っているかわからないかもですが、大丈夫、僕もよくわかっていません。
ざっくり言えば、もともとのLLMはデータが大きすぎて非力マシンでは扱いづらいので、あんまり影響がないところを省略することでモデルのサイズを小さくし、効率的に動かせるようにしてくれるものらしいです。(全然正確では無いので、そこはご勘弁を)
一応デメリットというか反動もあり、若干ですが生成結果の精度が下がるそうです。
個人的には8bit量子化では、そこまで外した結果は生成されなかったように感じます。

長くなってしまったので、いったんCTranslate2でrinna Youri7B-Chatモデルを8bit量子化をするためのコマンドを紹介して今回は終了とします。

# パッケージのインストール
pip install ctranslate2
pip install sentencepiece transformers accelerate

# 8bit量子化
ct2-transformers-converter --model rinna/youri-7b-chat --low_cpu_mem_usage --output_dir ./youri-7b-chat-ct2 --quantization int8
# Float16化
ct2-transformers-converter --model rinna/youri-7b-chat --low_cpu_mem_usage --output_dir ./youri-7b-chat-ct2-f16 --quantization float16
# 8bit-Float16化
ct2-transformers-converter --model rinna/youri-7b-chat --low_cpu_mem_usage --output_dir ./youri-7b-chat-ct2-8f16 --quantization int8_float16

自作しながら学ぶ「当てる」競艇AI予想ソフト開発超入門

 - AI