Text Generation WebUI

はじめに

WSL環境にtext-generation-webuiをインストールしてみます.

インストール

基本セット

$ sudo apt update
$ sudo apt install -y vim cmake git wget curl software-properties-common gnupg gnupg2 gnupg1

DeepSpeedを使用する場合は次も必要です.

$ sudo apt install libaio-dev

Conda

$ curl -sL "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" > "Miniconda3.sh"
$ bash Miniconda3.sh

ここからCondaでtextgen環境を作って作業するといいと思います. ただしsourceコマンドを使うとCondaの環境がネストしながらbaseになるらしいので, sourceを使う代わりに一度exitしてtextgen環境をactivateするところから再開するといいと思います.

>>> conda create -n textgen python=3.10.9
>>> conda activate textgen

Cuda

Windows側でCudaドライバインストール済みです.

$ nvidia-smi

Cuda Toolkit 11.7

バージョン 11.7をWSLにインストールします. Ubuntu WSLを選択して後は流れで, Cuda Toolkit 11.7

export "$PATH:/usr/local/cuda/bin"

Pytorch

環境に応じてインストールを, PyTorch.

Text Generation WebUI

公式のインストールインストラクションに従います.

$ git clone https://github.com/oobabooga/text-generation-webui
$ cd text-generation-webui
$ pip install -r requirements.txt

なにかうまくインストールされなかったので, UI, xFormes, DeepSpeedやFlexGenを使う場合は次も追加で入れます(おそらくConda環境をミスしていたと思われます).

$ sudo pip install gradio markdown xformers mpi4py

mpi4py

DeepSpeedを使いたい場合は次も実行します.

$ sudo apt install libopenmpi-dev
$ conda install mpi4py

使用

モデル

モデルのダウンロードは簡単スクリプトが用意されています. text-generator-webuiディレクトリ内で作業します.

$ python download-model.py facebook/opt-1.3b

起動

Haggingfaceのスペース名とモデル名をアンダースコアで繋いでるのかな.

$ python server.py --chat --model facebook_opt-1.3b --xformers

DeepSpeed

細かい設定はコードを変更しないといけないようですけど, 簡単に実行するなら次のような感じ.

$ deepspeed --num_gpu=1 server.py --deepspeed --chat --xformers --model opt-1.3b

FlexGen

Facebook Opt限定で, FlexGenを使うことができます. 先ずmodelsディレクトリ内にあるモデルディレクトリの名前を変更します. facebook_opt-13bならopt-13bのようにスペース名を削除します. 各モジュールが想定している命名規則に齟齬があるらしくとりあえずのワークアラウンドです. 次のようにコンバートすると, models/opt-13b-npが生成されます.

$ python convert-to-flexgen.py models/opt-13b

後は元のモデル名を指定して起動すればよいです.

$ python server.py --chat --model opt-13b --xformers --flexgen --compress-we
ight --percent 100 0 100 0 100 0

モデルいろいろ

スペック表です.

項目
CPU Ryzen7 7700
Memory DDR5 64GiB
GPU RTX 4070 12GiB

RWKV

RWKV-model

$ pip install rwkv

モデルは直接modelsディレクトリにダウンロードします. トーカナイザー設定 20B_tokenizer.jsonmodelsディレクトリにダウンロードします.

$ python server.py --chat --xformers --model RWKV-4-Pile-169M-20220807-8023.pth --rwkv-strategy "cuda fp16i8" --rwkv-cuda-on

rwkv-cuda-onは作者の環境では動作しないらしいけれど, 私の環境ではこれがないと遅すぎて数分じゃ応答が帰ってこない. rwkv-strategyを次のように設定します.

“cpu fp32” CPU mode
“cuda fp16” GPU mode with float16 precision
“cuda fp16 *30 -> cpu fp32” GPU+CPU offloading. The higher the number after *, the higher the GPU allocation.
“cuda fp16i8” GPU mode with 8-bit precision

CPUのオフロードについては, いろいろなクエリの平均をとらないと正確ではないので参考までに.

VRAM消費 tokens/s
“cpu fp32” 0 0.30
“cuda fp16” out of memory
“cuda fp16 *10 -> cpu fp32” 4GiB 0.49
“cuda fp16i8 *30 -> cpu fp32” 6.7GiB 1.89
“cuda fp16i8 *10 -> cpu fp32” 2.7GiB 0.78
“cuda fp16i8” 8GiB 2.47

まとめ

とりあえずのインストールから起動まで. 楽して社内向けアプリにできるかなと思ったけど, そもそも言語モデル(日本語)をチューニングしたりしなければならないし, タスク特化のUIを考えると, お家でチャットをちょっと試してみるぐらいの用途がいいのかも.