はじめに
CYBIRD Advent Calendar 2023 1日目担当の @garyumaru です。
サイバードでは、技術統括部所属のエンジニアとして、イケメンシリーズの開発・運用など、Unityタイトルに限らず、iOS/Androidのネイティブアプリも含めた、さまざまな案件の技術サポートをしている 通りすがりのゲームデザイナー です。
旬のAI、はじめました〜♪
これは BlinkDL 氏が開発した言語モデル RWKV Language Model をベースにしたチャットAI(CharRWKV)を利用するための環境構築のためのドキュメントです。
ChatRWKV は ChatGPT に似ていますが、RWKV (100% RNN) 言語モデルとオープンソースを利用したものです。
https://github.com/BlinkDL/ChatRWKV
これを使って、ローカルPCで、AIと会話できる環境を構築します。
ローカルでの環境構築をする前に
PCのスペック
動作検証環境その1:
DOSPARA GALLERIA GCR1660TGF-QC-G
CPU: Intel(R) Core(TM) i7-9750H 2.60GHz
GPU: Intel UHD Graphics 630 / NVIDIA GeForce GTX1660
RAM: 16GB
OS: Windows 11 Pro 23H2
動作検証環境その2:
MOUSE COMPUTER G-TUNE NG-N-i5730SA1
CPU: Intel(R) Core(TM) i7-7700HQ 2.80GHz
GPU: NVIDIA GeForce GTX1070
RAM: 16GB
OS: Windows 10 Pro 22H2
これらのような最新ではないスペックのPCでも動かすことができました。
あとで説明する .wslconfig
の設定が勝利の鍵です。
本格的にAIについて取り組むなら、NVIDIA GeForce RTX 20x0/30x0/40x0 シリーズなどCUDAに対応したGPUを搭載したPCを利用した方が良いんじゃないかな?と個人的には思います。
また、RAMのサイズやHDD/SSDの空き容量が十分確保できているPCにて、環境構築をするとトラブルが減ります。
実際に私が環境構築をする際には、Cドライブの空き容量不足が原因で、WSLやPython、ChatRWKVのために必要なライブラリのインストール中にフリーズしたり、エラーが発生するケースが多発したので、ご注意ください。
環境構築
PCのビデオカードに合わせてGPUドライバーを最新のものに更新する
NVIDIA GPU ドライバー←ここからPCに搭載されているGPUにあったものをダウンロードしてインストールしてください
WSL2(Windows Subsystem for Linux 2)のインストール
WSLを新規にインストールする場合
-
Power Shellを「管理者として実行する」を選んで開く
-
Power Shellで次のコマンドを入力する
wsl --install
-
コマンドが完了したら、コンピュータを再起動する
-
再起動後、Ubuntuのインストールが自動的に始まる
- ユーザ名とパスワードを設定する -
Ubuntuのシェルが起動したらWSL2のインストールが完了となる
既存のWSLをアップデートする場合
-
Power Shellを「管理者として実行する」を選んで開く
-
Power Shellで次のコマンドを入力する
wsl --update
-
WSLを再起動する
wsl --shutdown
WSLのバージョンを確認する
WSLが正しくインストールできていればバージョンを確認できます。
-
WSLのバージョン情報を表示する
wsl --version
WSL2のメモリ設定
-
.wslconfig
.wslconfig
を編集してメモリの割り当てを変更します。
c:¥Users¥{自分のルートディレクトリ}
に.wslconfig
ファイルが存在しない場合は作成します。
c:¥Users¥{自分のルートディレクトリ}
の.wslconfig
ファイルを編集して、下記の記述を追加します。例:
c:¥Users¥garyumaru¥.wslconfig
[wsl2] memory=16GB swap=128GB
swapの容量指定のためには、Cドライブに同じだけの空き容量が必要になるので適切なサイズを指定してください。
-
PCを再起動する。
-
Power Shellを「管理者として実行する」を選んで開く
-
Power Shellでwsl2を起動する
-
freeコマンドを実行する。
- 下記のコマンドを実行してmemoryやswapへのメモリの割り当てが期待通りに増加していれば完了です。
free -m
WSL2の起動
-
Power Shellを「管理者として実行する」を選んで開く
-
Power Shellで次のコマンドを入力する
wsl
Python(pyenv+venv)環境のインストール
pyenv : Pythonのインストールとバージョン管理するためのツール
venv : Pythonが動作する仮想環境を作成・管理するためのツール
-
Ubuntuのターミナルで次のコマンドを実行する
sudo apt update sudo apt upgrade -y
-
次のコマンドを実行する
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
-
pyenvのインストール
curl https://pyenv.run | bash
-
インストール後に表示されるメッセージに従って、~/.bash_profile(~/.profile)や~/.bashrcに追記する
表示されるメッセージは次の通り# Load pyenv automatically by appending # the following to # ~/.bash_profile if it exists, otherwise ~/.profile (for login shells) # and ~/.bashrc (for interactive shells) : export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" # Restart your shell for the changes to take effect. # Load pyenv-virtualenv automatically by adding # the following to ~/.bashrc: eval "$(pyenv virtualenv-init -)"
-
pyenvでバージョン指定してPythonをインストールする
pyenv install 3.11.5
-
pyenvで利用可能なpythonのバージョンを確認する
pyenv versions
実行すると下記のように表示される
* system(set by /home/garyumaru/.pyenv/version) 3.11.5
-
pyenvで利用するPythonのバージョンを変更する
pyenv global 3.11.5
-
pyenvで利用するPythonのバージョンが変更されたことを確認する
pyenv versions
実行すると下記のように表示される
system(set by /home/garyumaru/.pyenv/version) * 3.11.5
-
venvのインストール
※pythonのバージョンが3.3以上であればインストール不要で利用できる -
venvを使って仮想環境を構築する
python -m venv {仮想環境名}
例:py_workspace
フォルダを作成し、その中にtest1
という名前のプロジェクト(仮想環境)を構築するcd ~/ mkdir py_workspace cd py_workspace python -m venv test1
-
仮想環境をアクティブにする
source {仮想環境名}/bin/activate
source test1/bin/activate
-
仮想環境を終了する
deactivate
deactivate
ChatRWKVのインストール
-
仮想環境を構築する
作業フォルダ:py_workspace
仮想環境名:rwkv_test1
cd ~/ wsl mkdir py_workspace cd py_workspace python -m venv rwkv_test1 source rwkv_test1/bin/activate
-
ChatRWKVをCloneする
git clone https://github.com/BlinkDL/ChatRWKV
-
環境設定
cd ChatRWKV pip install -r requirements.txt pip install transformers pip install ninja pip install torch torchvision
pip install
を実行したときに、下記のnoticeが表示される場合は、pip install --upgrade pip
を実行して、pipをアップグレードできます。[notice] A new release of pip is available: 23.2.1 -> 23.3.1 [notice] To update, run: pip install --upgrade pip
-
モデルをダウンロードする
https://huggingface.co/BlinkDL
今回、検証で使用するPCはメモリも少なくGPUの性能もイマイチなので小さいサイズのモデル(3B)にしました。-
3B: https://huggingface.co/BlinkDL/rwkv-4-pile-3b/blob/main/RWKV-4b-Pile-3B-20230228-7963.pth
※ただし3Bのモデルでは、動作しても期待した会話ができない場合があるので、動作検証でなく本格的に使いたい場合は7B以上のモデルを選んで、ダウンロードしましょう。(補足:3Bのモデルがダメなのではなくて、ダウンロードしたものがよくなかったようです) -
7B: https://huggingface.co/BlinkDL/rwkv-4-world/blob/main/RWKV-4-World-JPNtuned-7B-v1-20230718-ctx4096.pth
※会話が正しくできないのは日本語のチューニングがされていないものだったからのようなので、JPNtuned
など、それらしいファイル名のものを利用すると良いでしょう。 -
1B5: https://huggingface.co/BlinkDL/rwkv-5-world/blob/main/RWKV-5-World-1B5-v2-20231025-ctx4096.pth
※その後、v5の1B5のモデルがリリースされていて、こちらであれば、サイズも小さいし、日本語でも会話ができていました。
-
-
ダウンロードしたモデルをChatRWKV/v2フォルダの下に格納する
-
chat.pyファイルを編集する
- chat_langを日本語に設定する
を
CHAT_LANG = 'English' # English // Chinese // more to come
Japanese
に変更するCHAT_LANG = 'Japanese' # English // Chinese // more to come
- モデルを指定する
args.MODEL_NAME = 'RWKV-5-World-1B5-v2-20231025-ctx4096.pth'
- CPUモードを指定する(※CUDAが利用できないPCの場合)
#args.strategy = 'cpu fp32' args.strategy = 'cuda fp16'
cpu fp32
を有効にするargs.strategy = 'cpu fp32' # args.strategy = 'cuda fp16'
- chat_langを日本語に設定する
-
ChatRWKV/v2
ディレクトリで、次のコマンドを実行するpython chat.py
-
必要なものが全てインストールされた状態なら
python chat.py
コマンドを実行することでChatRWKVが起動します。
まとめ
お疲れ様でした。ついにローカルPCでChatRWKVが動きました!
Bobになって、Aliceとの会話を楽しみましょう。
ここから先の展開としては、言語モデルのトレーニングやAIとの会話をhttp通信で応答させるなど、夢が広がりますね。それらについては、また別の機会に...
ぜひ、皆さんも挑戦してみてください。
最後に
CYBIRD Advent Calendar 2023、 明日は@koronekoさんが担当です。
どんな内容なのか楽しみですね。
おまけ:GPU(CUDA)を有効にする!?
実はchat.py内で args.strategy = 'cuda fp16'
になっていても初期の状態ではGPUは有効になっていないようです。
追加で下記のような設定が必要になります。
-
chat.pyの内のオプションを1に設定する
os.environ["RWKV_CUDA_ON"] = '1'
この設定で
python chat.py
を実行すると、次のようなエラーが出るようになります。raise OSError('CUDA_HOME environment variable is not set. ' OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
-
CUDA Toolkitをインストールする
https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network
※最新の12.xをインストールするとPyTorchが対応していないみたいなので、11.8にするwget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda-11-8
-
PCを再起動して、wslを起動し、ChatRWKVを動かす仮想環境を立ち上げます。
cd ~ cd py_workspace source rwkv_test1/bin/activate cd ChatRWKV/v2
-
python chat.py
コマンドを実行する -
これでGPU(cuda)が有効になったChatRWKVが起動できます。
おまけ:その2
swapのメモリを指定したいけど、Cドライブの空き容量が少ない場合、Dドライブなどにディレクトリを作成して、swapfileを指定します。ただしディレクトリはあらかじめ作成しておく必要があります。
-
例: .wslconfig
[wsl2] memory=16GB swap=64GB swapfile=D:\\temp\\wsl-swap.vhdx