1
2

More than 1 year has passed since last update.

ローカルへのtext-generation-webuiの導入(4bitモデルも使える)

Posted at

text-generation-webuiと4bitモデルの導入(Windows)

この記事では、text-generation-webuiのローカル環境への導入方法を説明します。基本的に公式ドキュメントに書いてあることを翻訳して纏めた内容の記事です。

注: text-generation-webuiの公式ではanacondaを用いていますが、個人的にanacondaを使うのが嫌だったため、pipでインストールしています。

環境

この記事では、windows 11を対象にしています(多分linuxでも同じ手順が使える)。また、Nvidia製GPUが必要です。
この記事で使うコードは、VRAMが8GBのGPUで検証しました。8GBのないGPUを使っている場合、別のモデルを使う必要があります。またメインメモリを8GB程度消費します。システムメモリと合わせると最低16GBは必要です。

目次

text-generation-webuiの導入
4bit GPTQ
最新のGPTQ-for-LLaMa

text-generation-webuiの導入

リポジトリはここ

参考サイト

この章の内容は基本的に上記参考サイトに準じています。

インストール

前提条件

  • python 3.10.9
  • git
  • cuda

※ 私はpython3.10.6、cuda 11.8を使用しました。

$ python -V
Python 3.10.6

$ git -v
git version 2.40.0.windows.1

という応答になればpythonとgitのインストールはできています。

cudaについて

前提条件のcudaにはcuda toolkit を導入します。バージョンは11.7か11.8を使うといいです。12.0~は出たばかりなので、対応してない可能性があります。
導入については以下のサイトが参考になります
https://www.kkaneko.jp/tools/win/cuda.html

とりあえず、

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

って感じになればcudaの導入に成功です。(これはversion11.8の例)

text-generation-webuiのインストール

前提条件の導入が済んだら、以下のコードを順に実行します。
posershellで、インストール先のディレクトリに移動してコードを実行します。

$ cd ディレクトリ  #今回インストールするディレクトリに移動してください
$ git clone https://github.com/oobabooga/text-generation-webui
$ cd text-generation-webui
$ python -m venv venv   #仮想環境を作る
$ venv/scripts/activate     #仮想環境の有効化

------以降、仮想環境内で作業する-----

$ pip install <pytorch>     #自分の環境に合ったpytorchを入れる
$ pip install -r requirements.txt

pytorchはここでダウンロードできます。
自身の環境に合わせて、pipでダウンロードするコードを教えてくれます

modelのダウンロード

download_model.pyを使う場合、HuggingFaceの組織名/モデル名でダウンロードできます。

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

起動

$ venv/scripts/activate     #仮想環境の有効化
$ Python server.py

この時

INFO:Gradio HTTP request redirected to localhost :)
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()`.
INFO:Loading TheBloke_vicuna-7B-GPTQ-4bit-128g...
CUDA extension not installed.
INFO:Found the following quantized model: models\TheBloke_vicuna-7B-GPTQ-4bit-128g\vicuna-7B-GPTQ-4bit-128g.safetensors
INFO:Loaded the model in 3.80 seconds.

と表示されるので、Running on local URL: http://127.0.0.1:7860にアクセスすると使えます。
UIの使い方は、各自で調べてください。

終わるときは、ctrl+Cで終了できます。また、仮想環境は

$ deactivate

で終了できます。

4bit GPTQを使う

注意:この章の内容を実行するには、VRAMが16GB必要です。私は起動確認をしてません。後述のtritonブランチの説明に使用します。

4bit GQTPは、重みを4bitで扱えるようにしたモデルです(多分)。4bit GPTQを使うと、必要なvramがオリジナルモデルの1/4になるそうです。言語モデルはvramを大量に消費するので、個人のGPUで動かす場合は必要になることが多いと思います。また、使用するモデルはGPTQに対応したものを使用する必要があります。詳しくは公式ドキュメントに載っています。エラーなどが出た場合もそちらを参照してください。

GPTQ-for-LLaMaの導入

使うリポジトリは以下です。

参考サイトは以下です。

また、ここではtext-generation-webuiを導入した後の手順を説明しています。事前に、前項の通り導入してください。pythonの仮想環境を有効化してから作業してください

$ cd text-generation-webui  #text-generation-webuiの導入したディレクトリに移動
$ mkdir repositories
$ cd repositories
$ git clone https://github.com/oobabooga/GPTQ-for-LLaMa.git -b cuda
$ cd GPTQ-for-LLaMa
$ python setup_cuda.py install

python setup~の部分で、エラーに見えるlogが大量に出ますが、動作しました。正常なのかはわかりません。とりあえず気にせず進みましょう。

エラーに見えるlog ``` running install D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\setuptools\command\easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools. warnings.warn( running bdist_egg running egg_info creating quant_cuda.egg-info writing quant_cuda.egg-info\PKG-INFO writing dependency_links to quant_cuda.egg-info\dependency_links.txt writing top-level names to quant_cuda.egg-info\top_level.txt writing manifest file 'quant_cuda.egg-info\SOURCES.txt' D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\utils\cpp_extension.py:476: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend. warnings.warn(msg.format('we could not find ninja.')) reading manifest file 'quant_cuda.egg-info\SOURCES.txt' writing manifest file 'quant_cuda.egg-info\SOURCES.txt' installing library code to build\bdist.win-amd64\egg running install_lib running build_ext building 'quant_cuda' extension creating build creating build\temp.win-amd64-cpython-310 creating build\temp.win-amd64-cpython-310\Release "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -ID:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include -ID:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\torch\csrc\api\include -ID:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\TH -ID:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\THC "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include" -ID:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\include -IC:\Users\moto\.pyenv\pyenv-win\versions\3.10.6\include -IC:\Users\moto\.pyenv\pyenv-win\versions\3.10.6\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" /EHsc /Tpquant_cuda.cpp /Fobuild\temp.win-amd64-cpython-310\Release\quant_cuda.obj /MD /wd4819 /wd4251 /wd4244 /wd4267 /wd4275 /wd4018 /wd4190 /EHsc -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=quant_cuda -D_GLIBCXX_USE_CXX11_ABI=0 quant_cuda.cpp D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/macros/Macros.h(138): warning C4067: プリプロセッサ ディレクティブの後に余分な文字がありました - 改行が必要です D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(212): warning C4624: 'c10::constexpr_storage_t': デストラクターは暗黙的に削除済みとして定義されました with [ T=c10::SymInt ] D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(411): note: コンパイル対象の クラス テンプレート インスタンス化 'c10::constexpr_storage_t' のリファレンスを確認してください with [ T=c10::SymInt ] D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(549): note: コンパイル対象の クラス テンプレート インスタンス化 'c10::trivially_copyable_optimization_optional_base' のリファレンスを確認してください with [ T=c10::SymInt ] D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(549): note: コンパイル対象の エイリアス テンプレート インスタンス化 'c10::OptionalBase' のリファレンスを確認してください with [ T=c10::SymInt ] D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/core/TensorImpl.h(1605): note: コンパイル対象の クラス テンプレート インスタンス化 'c10::optional' のリファレンスを確認してください D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(446): warning C4624: 'c10::trivially_copyable_optimization_optional_base': デストラクターは暗黙的に削除済みとして定義されました with [ T=c10::SymInt ] D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\include\c10/util/Optional.h(212): warning C4624: 'c10::constexpr_storage_t': デストラクターは暗黙的に削除済みとして定義されました with [ T=at::TensorBase ] D:/AI_textGeneration/text-generation-webui@GPTQ_triton/venv/lib/site-packages/torch/include\c10/util/flat_hash_map.h(431): note: コンパイル対象の関数 テンプレート インスタンス化 'void ska::detailv3::sherwood_v3_table,K,H,ska::detailv3::KeyOrValueHasher,H>,E,ska::detailv3::KeyOrValueEquality,E>,A,std::allocator>>>::clear(void)' のリファレンスを確認してください with [ K=c10::DispatchKey, V=std::list>, H=std::hash, E=std::equal_to, A=std::allocator>>> ] D:/AI_textGeneration/text-generation-webui@GPTQ_triton/venv/lib/site-packages/torch/include\c10/util/flat_hash_map.h(1928): note: コンパイル対象の クラス テンプレート インスタンス化 'ska::detailv3::sherwood_v3_table,K,H,ska::detailv3::KeyOrValueHasher,H>,E,ska::detailv3::KeyOrValueEquality,E>,A,std::allocator>>>' のリファレンスを確認してください with [ K=c10::DispatchKey, V=std::list>, H=std::hash, E=std::equal_to, A=std::allocator>>> ] D:/AI_textGeneration/text-generation-webui@GPTQ_triton/venv/lib/site-packages/torch/include\ATen/core/dispatch/OperatorEntry.h(270): note: コンパイル対象の クラス テンプレート インスタンス化 'ska::flat_hash_map>,std::hash,std::equal_to,std::allocator>>' のリファレンスを確認してください with [ K=c10::DispatchKey, V=std::list> ] creating D:\AI_textGeneration\text-generation-webui@GPTQ_triton\repositories\GPTQ-for-LLaMa\build\lib.win-amd64-cpython-310 "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\lib\site-packages\torch\lib "/LIBPATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64" /LIBPATH:D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\libs /LIBPATH:C:\Users\moto\.pyenv\pyenv-win\versions\3.10.6\libs /LIBPATH:C:\Users\moto\.pyenv\pyenv-win\versions\3.10.6 /LIBPATH:D:\AI_textGeneration\text-generation-webui@GPTQ_triton\venv\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" c10.lib torch.lib torch_cpu.lib torch_python.lib cudart.lib c10_cuda.lib torch_cuda.lib /EXPORT:PyInit_quant_cuda build\temp.win-amd64-cpython-310\Release\quant_cuda.obj build\temp.win-amd64-cpython-310\Release\quant_cuda_kernel.obj /OUT:build\lib.win-amd64-cpython-310\quant_cuda.cp310-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-310\Release\quant_cuda.cp310-win_amd64.lib ライブラリ build\temp.win-amd64-cpython-310\Release\quant_cuda.cp310-win_amd64.lib とオブジェクト build\temp.win-amd64-cpython-310\Release\quant_cuda.cp310-win_amd64.exp を作成中 コード生成しています。 コード生成が終了しました。 creating build\bdist.win-amd64 creating build\bdist.win-amd64\egg copying build\lib.win-amd64-cpython-310\quant_cuda.cp310-win_amd64.pyd -> build\bdist.win-amd64\egg creating stub loader for quant_cuda.cp310-win_amd64.pyd byte-compiling build\bdist.win-amd64\egg\quant_cuda.py to quant_cuda.cpython-310.pyc creating build\bdist.win-amd64\egg\EGG-INFO copying quant_cuda.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO copying quant_cuda.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO copying quant_cuda.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-INFO copying quant_cuda.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO writing build\bdist.win-amd64\egg\EGG-INFO\native_libs.txt zip_safe flag not set; analyzing archive contents... __pycache__.quant_cuda.cpython-310: module references __file__ creating dist creating 'dist\quant_cuda-0.0.0-py3.10-win-amd64.egg' and adding 'build\bdist.win-amd64\egg' to it removing 'build\bdist.win-amd64\egg' (and everything under it) Processing quant_cuda-0.0.0-py3.10-win-amd64.egg creating d:\ai_textgeneration\text-generation-webui@gptq_triton\venv\lib\site-packages\quant_cuda-0.0.0-py3.10-win-amd64.egg Extracting quant_cuda-0.0.0-py3.10-win-amd64.egg to d:\ai_textgeneration\text-generation-webui@gptq_triton\venv\lib\site-packages Adding quant-cuda 0.0.0 to easy-install.pth file Installed d:\ai_textgeneration\text-generation-webui@gptq_triton\venv\lib\site-packages\quant_cuda-0.0.0-py3.10-win-amd64.egg Processing dependencies for quant-cuda==0.0.0 Finished processing dependencies for quant-cuda==0.0.0 ```

モデルのダウンロード

モデルをダウンロードします。ここでは、例としてstable-vicuna-13B-GPTQを使います。(vramが12GBぐらい必要です)

# download model
$ cd text-generation-webui
$ python download-model.py TheBloke/stable-vicuna-13B-GPTQ

起動

起動します。--chatをつけて、chat形式で起動しています。

$ python server.py --model TheBloke_stable-vicuna-13B-GPTQ --wbits 4 --group 128 --chat --auto-devices  --model_type=llama

最新のGPTQ-for-LLaMa (tritonブランチを使う)

一部モデル (例: TheBloke/vicuna-7B-1.1-GPTQ-4bit-128g) を使用するときは、最新のtritonブランチを使う必要があります。
モデルの説明を確認して、tritonブランチを使うかチェックしましょう。

説明はtext-generation-webuiのドキュメントにあります。エラーなどが出た場合はこちらを参照してください。

導入

初めに、前項を見てGPTQ-for-LLaMaを導入してください。
以下の手順は、GPTQ-for-LLaMa tritonが導入されていることを前提に進めます。
公式ではpython3.9を使用していますが、3.10.9でも大丈夫でした。

まず、repositoriesディレクトリに移動して、GPTQ-for-LLaMaのディレクトリを消しますww。コマンドからだとgitのファイルを消せない場合があります。その時はエクスプローラーから消しましょう。そのあと、quant-cudaをアンインストールして最新のGPTQ-for-LLaMaをcloneします。

$ cd repositories
$ rm -r GPTQ-for-LLaMa    #GPTQ-for-LLaMaディレクトリを消す
$ pip uninstall -y quant-cuda
$ git clone https://github.com/qwopqwop200/GPTQ-for-LLaMa.git -b cuda

次に、インストールを行います。

$ cd GPTQ-for-LLaMa
$ pip install -r requirement

あとは、モデルをダウンロードして起動しましょう

今回例でダウンロードしたモデル(TheBloke/vicuna-7B-1.1-GPTQ-4bit-128g)は、日本語での会話もできます。
以下はアーギュメントに--chatをつけて起動したものです
スクリーンショット 2023-05-14 195342.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2