はじめに
これまで、各種の生成 AI は WSL2 Ubuntu 23.10 の上で環境を構築し使用してきました。常々、「ちゃんと構築するなら 22.04 LTSだよなぁ」と考えていました。
まとまった時間が取れましたので、WSL2 Ubuntu 22.04 LTS の上で各種の生成 AI の環境を作り直す事にしました。ゼロから環境構築する際の参考になれば幸いです。
以下の記事で CUDA 11.7 のアンインストールと CUDA 11.8 & 12.1 のインストールの方法、NVIDIA cuDNN8 をインストールする方法について説明しました。
今回は、上記の環境をベースに、Text generation web UI snapshot-2023-12-31 を使用する環境の構築について説明します。
前提となる環境
前提となる環境は、Windows11 WSL2 Ubuntu 22.04 LTS です。Python のバージョンは若干古く 3.10.12 になります。GPU は nVidia RTX3060 12GB で Driver は Ver.546.33 です。WSL2 の場合は、Windows 側にインストールした GPU ドライバーのバージョンとなり、WSL2 用のコマンド・ライブラリも同時にインストールされます。
これに CUDA 11-8 & 12.1 と cuDNN をインストールしています。cuDNN は CUDA 11-8 用です。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
$ python3 -V
Python 3.10.12
$ nvidia-smi
Sat Jan 6 20:35:57 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.01 Driver Version: 546.33 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 3060 On | 00000000:08:00.0 On | N/A |
| 30% 38C P8 13W / 170W | 666MiB / 12288MiB | 3% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
$ /usr/local/cuda-11.8/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
$ /usr/local/cuda-12.1/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
$ dpkg -l | grep libcudnn8 | tr -s ' '
ii libcudnn8 8.9.7.29-1+cuda11.8 amd64 cuDNN runtime libraries
ii libcudnn8-dev 8.9.7.29-1+cuda11.8 amd64 cuDNN development libraries and headers
生成 AI は ~/GenerationAI 以下に directory を作成してインストールする事にします。
$ mkdir ~/GenerationAI && cd ~/GenerationAI
この環境をベースとして、各種の生成 AI をインストールします。
Text generation web UI snapshot-2023-12-31 のインストール
Text generation webUI のインストーラは Anaconda を使用します。私は他の環境を含め pip を使用していますので、同等の package を pip を使用してインストールします。
Text generation web UI 用のディレクトリの作成
文字生成 AI 用のディレクトリを作成します。今後は文字生成 AI に関する物はこのディレクトリ以下に保存します。
$ mkdir TextGen && cd TextGen
必要な package のインストール
Ubuntu 22.04 LTS 側に必要な package は、git と python3, python3-venv です。(他の生成 AI を使用していれば、既にインストール済みかもしれません)
$ sudo apt install git python3 python3-venv
github より clone
github より Text generation web UI を clone します。2024年1月時点で、Text generation webUI の Version は snapshot-2023-12-31 です。
$ git clone https://github.com/oobabooga/text-generation-webui
Text generation WebUI の README.md に記載されているインストール方法は conda (Anaconda) を使っているので使用しません。
Python 仮想環境の構築
git clone したディレクトリ内に Python 仮想環境を構築します。
$ cd text-generation-web-ui
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install --upgrade pip setuptools
PyTorch 2.1.2+cu121 のインストール
Python 仮想環境内で、PyTorch をインストールします。Version は 2.1.2、CUDA 12.1 用を指定してインストールします。
(.venv) $ pip3 install torch==2.1.2+cu121 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
(.venv) $ pip list
Package Version
------------------ ------------
certifi 2023.11.17
charset-normalizer 3.3.2
filelock 3.13.1
fsspec 2023.12.2
idna 3.6
Jinja2 3.1.2
MarkupSafe 2.1.3
mpmath 1.3.0
networkx 3.2.1
numpy 1.26.3
pillow 10.2.0
pip 23.3.2
requests 2.31.0
setuptools 69.0.3
sympy 1.12
torch 2.1.2+cu121
torchaudio 2.1.2+cu121
torchvision 0.16.2+cu121
triton 2.1.0
typing_extensions 4.9.0
urllib3 2.1.0
PyTorch、TorchVision、TorchAudio の3つだけは、予め Version 指定で入れておく方がトラブル防止に繋がります。CUDA 12.1 用がインストールされている事が確認できます。
Python の他の依存 package のインストール
requirements.txt を使用して Python の他の依存 package をインストールします。今回は CUDA 12.1 を使用しますので、requirements.txt の編集は不要です。
(.venv) $ pip install -r requirements.txt
(.venv) $ pip list | grep cu1
auto-gptq 0.6.0+cu121
ctransformers 0.2.27+cu121
exllamav2 0.0.11+cu121
gptq-for-llama 0.1.1+cu121
llama_cpp_python_cuda 0.2.26+cu121
llama_cpp_python_cuda_tensorcores 0.2.26+cu121
torch 2.1.2+cu121
torchaudio 2.1.2+cu121
torchvision 0.16.2+cu121
PyTorch 含め、CUDA 12.1 用の package がインストールされました。
Text generation web UI の起動
ここまで設定すれば、Text generation web UI を起動できます。起動方法は以下の通りです。
(.venv) $ python server.py
...(snip)...
Running on local URL: http://127.0.0.1:7860
...(snip)...
Windows11 側のウェブブラウザで上記の URL にアクセスすると、Text generation web UI の画面が表示されます (URL を Ctrl + 左クリックでも開けます)。ただし、この状態では model が Load されていません。後述の方法で model を Load する必要があります。
素の Text generation web UI では、
- ~/Generation_AI/TextGen/text-generation-webui に移動し、
- Python 仮想環境に入り、
- server.py を起動する
という手順となり煩雑ですので、Stable Diffusion WebUI の webui.sh を参考に、Python 仮想環境に入って server.py を起動する script を作成しました。tg_webui.sh とします。
#!/usr/bin/env bash
venv_dir=".venv"
python_cmd="python3"
webui_cmd="server.py"
"${python_cmd}" -m venv "${venv_dir}"
source "${venv_dir}"/bin/activate
"${python_cmd}" "${webui_cmd}"
この script では、実行後に Python 仮想環境に入り server.py を起動します。
$ pwd
/home/hiro/Generation_AI/TextGen/text-generation-webui
$ chmod +x tg_webui.sh
$ ./tg_webui.sh
15:34:14-280769 INFO Starting Text generation web UI
15:34:14-283800 INFO Loading the extension "gallery"
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
Ctrl + C で停止すれば、Python 仮想環境を抜けた状態で bash prompt に戻ります。
Text generation web UI の使い方
Text generation web UI の使い方について簡単に説明します。以下の説明は snapshot-2023-12-31 版を元にしています。
対応する model について
nVidia RTX3060 12GB で使用できるモデルは、3B サイズまではオプションは不要ですが、
- 7B サイズの場合は load-in-8bit
- 13B サイズの場合は load-in-4bit
のオプションが必須です。これらのオプションを付ける事により、GPU の VRAM に model を読み込んで文章を生成する事は出来ますが、生成される文章の質は下がります。
CPU を使用する場合にはメインメモリの量により制限されます。私の環境はメインメモリ 64GB ですので 13B サイズのモデルを読み込む事が出来ました。ただし文字生成の速度は極端に下がります (通常使用は難しい位、1文字/2秒程度)。
現状では、文字生成 AI を PC で実用的に使用する場合には、もっと VRAM の多い高速な GPU が必要です。
上部タブメニュー
画面上部にタブメニューがあります。英語ですが各タブメニューの説明が以下にページにあります。
- Chat, Default, Notebook : 文字生成に使用
- Parameters : 各種パラメータを設定
- Model : Model のダウンロードと読み込み、読み込み条件の設定
- Training : LoRA トレーニング用
- Session : 拡張機能の設定と Reload
この中で、文字生成に使用するのは、3. model と 2. Parameters 、1. Chat の三つです。
残りの項目は、私が理解が出来ないので現状のままとしています。
model のダウンロードと読み込み
Text generation web UI では、Hugging Face から model のダウンロードが出来るようになっています。
上部タブメニューの 'Model' を選択します。左側が model の選択、右側が model のダウンロードになります。
model をダウンロードするには、Hugging Face の model 名称を 'Download model or LoRA の欄に入力し、Download ボタンを押します。'elyza/ELYZA-japanese-Llama-2-7b-fast-instruct' model をダウンロードする手順で説明します。
model 名称の横の を押すと model 名称がコピーできます。
その後、'Download model or LoRA' の下のテキストボックスに貼り付けして、'Download' ボタンを押します。
ダウンロードに成功すれば、左側の model の選択肢に表示されます。表示されない場合には、 マークを押すと更新されて表示されます。
'elyza_ELYZA-japanese-Llama-2-7b-fast-instruct' を選択します。
この model は 7B サイズですので、nVidia RTX3060 12GB では、そのままでは読み込めません。左側下方にある 'load-in-8bit' のチェックを入れます。
- 7B サイズのモデルの場合 : load-in-8bit と bf16 のチェックを入れる。
- 13B サイズのモデルの場合 : load-in-4bit と bf16 のチェックを入れる。
bf16 オプションは nVidia GPU の場合に、メモリ転送を効率よく行うオプションですので、有効にします。
次に model を選択した時の為に設定を保存します。
Load を選択すれば、model の読み込みが始まります。
Load に成功すると、右側にメッセージが表示されます。
"Alpaca template" を使用している事と、Chat タブでは instruct 又は chat-instruct model を使用するように書かれています。
model の読み込みに失敗した場合には、Python のエラーメッセージが表示されます。
Character の Context と Greeing を日本語に変更
こちらの記事を参考に Character の Context と Greeting を日本語に変更します。こちらを日本語にしておくと、日英対応の model でも日本語で回答が得られるようになります。
Parameters タブメニューを選択、Character タブを選びます。初期状態では 4種類の Character が設定されています。
- AI
- Assistant
- Chiharu Yamada
- Example
実質は AI = Assistant、Chiharu Yamada = Example となっています。
Chat タブメニューの chat と chat-instruct mode に使用されます。
AI、Assistant については以下のように設定しました。
Chiharu Yamada、Example については以下のように設定しました。
設定内容を保存する際には、右上にある マークを押します。その際に、File name には "設定したい Character 名" を入力します。自動で反映されず、手動で入力する必要がありますので注意して下さい。
最後に、使用する Character を選択します。私は Assistant を選択しています。
日本語で文章を生成する
ここまで設定すれば、日本語で文章を生成する事が出来ます。
Chat タブメニュを選択、下にスクロールさせると Mode の選択肢があります。Model の Load 時のメッセージに記載されていましたので、chat-instruct 又は instruct の何方かにチェックします。
chat-instruct はチャット形式で動作します。
instruct は AI に指示を出して答えを受け取る形で動作します。
どちらも下部の 'Send a message' の欄に質問・指示を入力します。
左下のナビゲーションメニューにマウスカーソルを合わせると、下図のようなメニューが表示されます。'Start new chat' で新規にチャットを開始する事が出来ます。
Text generation web UI の終了方法
Stable Diffusion WebUI と同様に、
- ウェブブラウザの Text generation web UI の画面を閉じる
- WSL2 Ubuntu 22.04 LTS で起動させていた tg_webui.sh 又は server.py を Ctrl + C で強制終了する
というやり方で終了できます。
Text generation web UI の2回目以降の起動方法
Text generation web UI を、もう一度使い始める手順です。
- Text generation web UI をインストールしたディレクトリへ移動する
- ./tg_webui.sh を実行、又は Python 仮想環境を有効にして python server.py を実行
- 表示される URL をウェブブラウザで開く
- Model タブメニューで model の読み込み
- Chat タブメニューでチャット開始
という順になります。
主な日本語 LLM
私が試用している日本語 LLM です。他にも色々ありますが、少しずつ試しています。
CyberAgentLM2-7B, CyberAgentLM2-7B-Chat
Calm2-7B (CyberAgentLM2-7B) は、2023年11月2日に CyberAgent社が公開した、独自開発の日本語 LLM です。ベースモデルの Calm2-7B とチャット形式でチューニングした Calm2-7B-Chat の2種類で、ライセンスは Apache License 2.0 で商用利用可能です。
どちらも 7B のモデルですので、load-in-8bit と bf16 オプションを有効にして読み込んでいます。
ELYZA-japanese-Llama-2
ELYZA-japanese-Llama-2 は、2023年8月、12月に株式会社 ELYZA (イライザ) が公開した、Metaの「Llama 2」をベースに日本語による追加事前学習を行なった日本語 LLM です。7B と 13B のモデルが公開されています。以下の note のブログで詳細が説明されています。
ライセンスは Llama 2 Community License に準拠しており、Acceptable Use Policy に従う限りにおいては、研究および商業目的での利用が可能です。
事後学習を行った *-fast-instruct モデルへのリンクです。
7B のモデルは load-in-8bit と bf16 オプションを、13B のモデルは load-in-4bit と bf16 オプションを有効にして読み込んでいます。
文章生成例
4つのモデルに同じ質問をしてみました。どのモデルも GPU VRAM 12GB 中の約 7.5 GB (約63%) を使用しています。(それ以外にメインメモリも使用しているようです)
質問 : AI によって私たちの暮らしはどのように変わりますか?
結果を見ると、load-in-4bit の影響が強く出ており、nVidia RTX3060 12GB レベルの VRAM 容量では 13B のモデルを動作させるのは厳しいと感じます。
CyberAgentLM2-7B と ELYZA-japanese-Llama-2-7b-fast-instruct の比較では、ELYZA のモデルの方が長文で生成する傾向があるようです。
生成された内容は、日本語の文章として違和感はありません。
注意事項1 : ディスク容量に注意
ダウンロードされた model は、text-generation-web-ui/models 以下に保管されています。文字生成 AI の model はサイズの大きな物 (10GB以上/model) が多いので、使わなくなったモデルはディレクトリごと削除しておく事をお勧めします。
現在使用している4つのモデルでは、合計 65GB を使用しています。そのうち ELYZA の 13B のモデルで 25GB を要しています。
本格的に文字生成 AI を活用しようとする場合には、GPU だけでなくモデルの保管場所についても潤沢に用意する必要がありそうです。
$ tree -d models
models
├── cyberagent_calm2-7b
├── cyberagent_calm2-7b-chat
├── elyza_ELYZA-japanese-Llama-2-13b-fast-instruct
└── elyza_ELYZA-japanese-Llama-2-7b-fast-instruct
$ du -sm models
64877 models
$ du -sm models/cyberagent_calm2-7b
13372 models/cyberagent_calm2-7b
$ du -sm models/cyberagent_calm2-7b-chat/
13372 models/cyberagent_calm2-7b-chat/
$ du -sm models/elyza_ELYZA-japanese-Llama-2-7b-fast-instruct
13059 models/elyza_ELYZA-japanese-Llama-2-7b-fast-instruct
$ du -sm models/elyza_ELYZA-japanese-Llama-2-13b-fast-instruct
25075 models/elyza_ELYZA-japanese-Llama-2-13b-fast-instruct
注意事項2 : メインメモリの使用量に注意
Text generation web UI では、GPU の VRAM 以外にメインメモリも使用します。モデルを切り替えて試しているうちにメモリ不足でエラーが出る事がありました。
WSL2 に割り当てるメモリを増やす事、及びメインメモリの使用量が増加した場合には WSL2 を一旦再起動する等の対処が必要です。
過去の取り組み
Text generation webUI について過去に取り組んだ内容です。
この時は WSL2 Ubuntu 23.04、Python3 3.11.4、CUDA 11.8 で環境構築しました。今回は WSL2 Ubuntu 22.04 LTS で構築しています。
まとめ
WSL2 Ubuntu 22.04 LTS に CUDA 11.8 & 12.1、cuDNN 8 for CUDA 11.8 をインストールした環境に、Text generation web UI snapshot-2023-12-31 をインストールする手順についてまとめました。
- Anaconda を使用するインストーラは使用せず、pip でインストールしました。CUDA 12.1 で環境を構築しました。
- Python 仮想環境に入って web UI を起動する script (tg_webui.sh) を作り、Stable Diffusion WebUI と同じように起動できるようにしました。(ただしエラーチェックは入れていません)
- 3B までのモデルであればそのまま読み込んで生成できます。7B の場合は load-in-8bit、13B の場合は load-in-4bit が必須ですが、生成される文章の質は落ちると思います。
他の生成 AI と比較して、文字生成 AI は GPU 能力と VRAM 容量、潤沢で高速な SDD が無いと、現状では活用するのが難しいという印象です。Stable Diffusion WebUI の --xformers や --opt-spd-attention のような省メモリ・高速化のオプションが期待されます。
また、追加学習によって生成される文章は変わると思いますので、その方法についても学びたいと考えています。
ChatGPT (3.5ですが) や Microsoft Copilot を使用すると、このレベルを通常の PC で実現できるようになればと感じています。
今回のアイキャッチ画像
険しい山道を登っていく画像を SDXL で生成しました。現実的にはあり得ないような風景です。
最近、自宅で使用している Logicool G604 マウスが不調です。左クリックがチャタリングを起こすようになりました。ドラッグしている時や名前を変更しようとしている時に発生すると辛いので、別ボタンに割り付けを変えて凌いでいます。2年保証の1年10カ月目で保証期間内でしたので、メーカーに対応依頼中です。
G603、G604 と Bluetooth & 専用 USB ドングル (LIGHTSPEED) による接続で、私の使い方では Bluetooth との併用が必須です。Logicool では選択肢が少なくなってしまいました。
今から新しく購入するなら、MX MASTER3s が欲しいです。
2024年1月19日 追記 :
メーカーから無償保証、代替品の連絡がありました。Logicool のアフターサポートは良いです。届いたら記事にします。
コメント