スポンサーリンク

WSL2 Ubuntu 22.04 LTS に Text generation web UI をインストールする

steep_mountain_road
記事内に広告が含まれています。
スポンサーリンク

はじめに

これまで、各種の生成 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 起動画面

素の 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 が必要です。

上部タブメニュー

上部メニュー

画面上部にタブメニューがあります。英語ですが各タブメニューの説明が以下にページにあります。

  1. Chat, Default, Notebook : 文字生成に使用
  2. Parameters : 各種パラメータを設定
  3. Model : Model のダウンロードと読み込み、読み込み条件の設定
  4. Training : LoRA トレーニング用
  5. Session : 拡張機能の設定と Reload

この中で、文字生成に使用するのは、3. model と 2. Parameters 、1. Chat の三つです。

残りの項目は、私が理解が出来ないので現状のままとしています。

model のダウンロードと読み込み

Text generation web UI では、Hugging Face から model のダウンロードが出来るようになっています。

上部タブメニューの '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' ボタンを押します。

elyza/ELYZA-japanese-Llama-2-7b-fast-instruct model の Download

ダウンロードに成功すれば、左側の model の選択肢に表示されます。表示されない場合には、 マークを押すと更新されて表示されます。

'elyza_ELYZA-japanese-Llama-2-7b-fast-instruct' を選択します。

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 の場合に、メモリ転送を効率よく行うオプションですので、有効にします。

7B model の場合は load-in-8bit & bf16 のチェックを入れる。
13B model の場合は load-in-8bit のチェックを外し、load-in-4bit & bf16 のチェックを入れる。

次に model を選択した時の為に設定を保存します。

Save setting で条件を保存する

Load を選択すれば、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 となっています。

Character の種類

Chat タブメニューの chat と chat-instruct mode に使用されます。

AI、Assistant については以下のように設定しました。

AI and Assistant の設定

Chiharu Yamada、Example については以下のように設定しました。

Chiharu Yamada and Example の設定

設定内容を保存する際には、右上にある マークを押します。その際に、File name には "設定したい Character 名" を入力します。自動で反映されず、手動で入力する必要がありますので注意して下さい。

Character の保存
保存する File name を入力する (自動反映されないので注意)

最後に、使用する Character を選択します。私は Assistant を選択しています。

日本語で文章を生成する

ここまで設定すれば、日本語で文章を生成する事が出来ます。

Chat タブメニュを選択、下にスクロールさせると Mode の選択肢があります。Model の Load 時のメッセージに記載されていましたので、chat-instruct 又は instruct の何方かにチェックします。

chat-instruct 又は instruct を選択

chat-instruct はチャット形式で動作します。

chat-instruct の動作

instruct は AI に指示を出して答えを受け取る形で動作します。

instruct の動作

どちらも下部の 'Send a message' の欄に質問・指示を入力します。

左下のナビゲーションメニューにマウスカーソルを合わせると、下図のようなメニューが表示されます。'Start new chat' で新規にチャットを開始する事が出来ます。

Start new chat で新規に会話を開始

Text generation web UI の終了方法

Stable Diffusion WebUI と同様に、

  1. ウェブブラウザの Text generation web UI の画面を閉じる
  2. WSL2 Ubuntu 22.04 LTS で起動させていた tg_webui.sh 又は server.py を Ctrl + C で強制終了する

というやり方で終了できます。

Text generation web UI の2回目以降の起動方法

Text generation web UI を、もう一度使い始める手順です。

  1. Text generation web UI をインストールしたディレクトリへ移動する
  2. ./tg_webui.sh を実行、又は Python 仮想環境を有効にして python server.py を実行
  3. 表示される URL をウェブブラウザで開く
  4. Model タブメニューで model の読み込み
  5. 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 によって私たちの暮らしはどのように変わりますか?

CyberAgentLM2-7B-chat (load-in-8bit)

Response:

AI は私たちの生活を便利にし、効率を上げることができます。例えば、自動翻訳機能や音声認識機能により外国人とコミュニケーションをとったり、買い物リストや料理のレシピを記憶したりすることが簡単にできるようになります。また、自動運転技術の進歩によって車の運転が安全かつスムーズになり、移動時間が短縮される可能性もあります。さらに AI の活用によって医療現場での診断精度の向上や医薬品開発の速度アップなど、多くの分野でイノベーションが期待されています。

CyberAgentLM2-7B (load-in-8bit)

AI により、人々の生活は劇的に変化します。人工知能が日常生活のあらゆる側面に浸透するにつれ、人々はより効率的にタスクを実行できるようになります。例えば、スマートフォンアプリケーションを使用して、旅行を計画したり、食事を注文したりすることができます。また、ロボット掃除機を使用すれば、家の中を掃除する必要もなくなります。AI は私たちの日々の生活をより便利にし、生産性を向上させることができるのです。

ELYZA-japanese-Llama-2-7b-fast-instruct (load-in-8bit)

AIが私たちの暮らしをどのように変化させるのかについてお答えします。

現在、様々な作業を支援してくれるロボットやAIアシスタントなどが普及してきましたが、これらはまだ単純なタスクを処理する機械として活用されています。しかしながら、近年開発されているAI技術は人間のような知能を持った存在へと進化しており、将来的には私たちの日常生活に深く浸透し、様々な面で私たちをサポートしてくれるようになります。

具体的な例を挙げると、以下のようなことです。

  • 健康管理: AIは個人の健康状態を分析し、最適な治療法の提案や予防措置を実施することができます。
  • 家事代行: AIを搭載したロボットは日常の掃除、洗濯、調理などを行うことができ、私たちは一日の大半を有意義な仕事やレジャーに費やすことができるでしょう。
  • 教育: AIは生徒一人ひとりの理解度に合わせて教材を配布し、学習状況を分析することで個人にあった指導を行います。また、課題点を早期に発見でき、無駄のない授業内容を提供することが可能です。
  • 安全性確保: AIはあらゆるセキュリティカメラからの映像から危険を予測し、災害発生時などに適切な行動を取ることができます。

これらの例以外にも、医療・金融・交通機関などの分野においても、AIの導入により効率的かつ正確な決断を下すことが可能となります。

ELYZA-japanese-Llama-2-13b-fast-instruct (load-in-4bit)

AIにより私たちが行う作業の効率が上がり、仕事の内容が変化する可能性があります。また、日常生活の中で使用される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 のアフターサポートは良いです。届いたら記事にします。

コメント

タイトルとURLをコピーしました