Japanese Stable CLIP を試してみた

Stable Vicuna


先日紹介した Stable Diffusion の開発元、Stability AI が予告通りチャットボット Stable Vicuna をリリースしました。
さて、手元の 8560w でも実行することができるでしょうか。

事前に調べた結果として、以下 2 つを利用することで、手軽に、要求スペックを抑えた環境が用意できそうです。

1. Text generation web UI

いろいろな形式で LLM を実行できるツールです。チャットインターフェースはもちろん、API 利用もできるようになるようです。

2.  GPTQ-for-LLaMA

実はこれが何をするのかよくわかっていないので、Bing Copilot に説明をお願いしました。

--- 以下、引用開始 ---
こんにちは、みなさん。今日は、GPTQ-for-LLaMAという面白いプロジェクトについて紹介したいと思います。GPTQ-for-LLaMAは、GitHubで公開されているコードで、LLaMAという大規模な言語モデルを4ビットに量子化する方法です。LLaMAとは、Meta社が開発した、175億パラメータの自己回帰型の言語モデルで、さまざまな言語やドメインに対応できるように設計されています。しかし、その巨大さゆえに、通常のFP16の精度ではメモリやストレージの消費が膨大になります。そこで、GPTQという手法を使って、モデルの重みを4ビットに圧縮することで、メモリやストレージの使用量を大幅に削減することができます。

GPTQとは、Group Product Quantizationという手法で、一度に複数の重みをグループ化して、それぞれのグループに対して最適なコードブックを学習することで、高い圧縮率と低い精度損失を実現する方法です。GPTQは汎用的に使える手法で、Linux環境であればどんなモデルでも量子化できます。ただし、速度は最速ではなく、Tritonというライブラリを使ってCUDAカーネルを書く必要があります。

GPTQ-for-LLaMAでは、LLaMAの7B, 13B, 33B, 65Bの各モデルに対して4ビットの量子化を行い、Wikitext2というデータセットで評価した結果を報告しています。その結果は以下のようになります。

| モデル | ビット数 | グループサイズ | メモリ (MiB) | Wikitext2 | チェックポイントサイズ (GB) |
| :---: | :---: | :---: | :---: | :---: | :---: |
| LLaMA-7B | FP16 | - | 13940 | 5.68 | 12.5 |
| LLaMA-7B | RTN 4 | - | - | 6.29 | - |
| LLaMA-7B | GPTQ 4 | - | 4740 | 6.09 | 3.5 |
| LLaMA-7B | GPTQ 4 | 128 | 4891 | 5.85 | 3.6 |
| LLaMA-7B | RTN 3 | - | - | 25.54 | - |
| LLaMA-7B | GPTQ 3 | - | 3852 | 8.07 | 2.7 |
| LLaMA-7B | GPTQ 3 | 128 | 4116 | 6.61 | 3.0 |

この表からわかるように、GPTQはRTNと比べてメモリやストレージの使用量を大幅に削減しながらも、ほぼ同等かそれ以上の精度を保つことができます。また、グループサイズを小さくすることで精度が向上する傾向が見られます。

GPTQ-for-LLaMAは非常に興味深いプロジェクトだと思います。大規模な言語モデルを効率的に扱うための一つの解決策として注目されるべきだと思います。もし興味があれば、GitHubでコードをチェックしてみてください。
--- 引用ここまで ---

思いのほか、わかりやすい説明のように思います。(ただ、真偽は不明ですが・・・)


とはいえ、環境を用意してみましょう。まず Text generation web UI のリポジトリをクローンします。
git clone https://github.com/oobabooga/text-generation-webui
ビルドツールが必要なので、Windows 環境につくると少し手間です。なので、以前用意した CUDA も使える Docker を利用します。
ln -s docker/{Dockerfile,docker-compose.yml,.dockerignore} .
cp docker/.env.example .env
# Edit .env and set TORCH_CUDA_ARCH_LIST based on your GPU model
docker compose up --build
4 行目を実行する前に、3 行目でコピーした .env を以下の通り編集します。
TORCH_CUDA_ARCH_LIST=5.0
Quadro K2200M の対応する CUDA API が 5.0 なのでそのように修正します。
で、4 行目を実行します。が、
#0 58.33 quant_cuda_kernel.cu(654): error: identifier "__hfma2" is undefined
とエラーが出てしまいます。どうやら、GPU が古いので __hfma2 がサポートされないため、エラーとなるようです。
となると、8560w で動作させることは難しそうですね。

コメント