Vicuna-13B を自分の環境で動かす準備


# 概要

**Vicuna-13B** とは [ChatGPT や Bard の 90% くらいの能力を持つらしい](大規模言語モデル)大規模言語モデルです。

13B ということで、130億パラメータだけで、3500億パラメータ以上はあるであろう ChatGPT(GPT4)の 90% の能力はおどろきじゃ、ということで、これを Vicuna-13B を自分の環境で動かす準備のメモです。

[Vicuna のリリースレポジトリ](https://github.com/lm-sys/FastChat) の README によりますと

>Announcement: Thank you for checking out our project and your interest! We plan to release the model weights once we have addressed all legal concerns and have a low-resource version of the inference code ready. Based on our current timeline, it will be available by early next week. Please stay tuned!

とのことで、

肝心の Vicuna-13B のモデルは 2023/4/3 時点で、**まだ公開されておりません** ので公開されたらすぐに試せるように手ぐすね引いて待って居ようという魂胆です。


Vicuna-13B の実力が知りたければ本家デモサイトにいけばすぐに試すことが可能です

https://chat.lmsys.org/


# 本編

## 実験環境

- Windows 11
- Anaconda

## STEP 1: 仮想環境を作る

Anaconda Prompt　を起動して **env-vicuna** という名前の仮想環境を作る

```
conda create -n env-vicuna
```

**env-vicuna** 仮想環境の使用を開始する

```
activate env-vicuna
```

## STEP 2: 仮想環境に python を導入する

新しく作成した仮想環境では python すら導入されてないので、pythonを入れる

**python の一覧を表示する**

```
conda search python

...
python                        3.10.8      h966fe2a_1  pkgs/main
python                        3.10.8      hbb2ffb3_0  pkgs/main
python                        3.10.9      h966fe2a_0  pkgs/main
python                        3.10.9      h966fe2a_1  pkgs/main
python                        3.10.9      h966fe2a_2  pkgs/main
python                       3.10.10      h966fe2a_2  pkgs/main
python                        3.11.0      h966fe2a_2  pkgs/main
python                        3.11.0      h966fe2a_3  pkgs/main
python                        3.11.2      h966fe2a_0  pkgs/main
```

**pythonをインストールする**

```
conda install python=3.10.10
```

これで python コマンドや pip コマンドが利用できるようになった


## STEP 3: インストールする

### 3-1 Vicuna-13B のリリース元リポジトリをクローンする

```
git clone https://github.com/lm-sys/FastChat.git
```

### 3-2 必要パッケージをインストールする

```
cd FastChat
pip3 install --upgrade pip
pip3 install -e .
pip3 install git+https://github.com/huggingface/transformers
```

## STEP 4: windowsの場合は開発者モードを有効にしておく

次にさっそくチャットを起動するところだが、
その際、指定したモデルデータ（事前学習済データ）を huggingface_hub から自動ダウンロードする。

自動ダウンロードのとき、huggingface_hub のキャッシュシステムが重複したファイルを効率的に保存するためにデフォルトでシンボリックリンクを使用する。

Windows の場合、通常、シンボリックリンクは使えないので、シンボリックリンクを有効にしてディスクスペースを効率的に使いたい場合は、Windows を以下の手順で **開発者モード** にする。（シンボリックリンク無しでも使える）

**Windows を 開発者モードにする方法**

設定>プライバシーとセキュリティ>開発者向け を開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/476b69f7-f401-7448-cdc3-7d291df56b4b.png)

**開発者モード** を有効にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/f5227cd3-a8ec-9ee3-ecbc-a8bd844bf846.png)

## STEP 5: CLIチャットを実行する

Vicuna-13B はまだ無いので、 Metaの[OPT](https://ai.facebook.com/blog/democratizing-access-to-large-scale-language-models-with-opt-175b/) のモデルでとりあえずチャットが動くことを確認する。

```
python -m fastchat.serve.cli --model-name facebook/opt-2.7b
```

これで huggingface から **facebook/opt-2.7b** モデル一式をダウロード後、チャットが起動した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/e81d61d1-269b-1428-5302-50e47c2e461d.png)


ちなみに、モデルファイルは、**C:/Users/[ユーザー名]/.cache/huggingface** に保存される。

## まとめ

- Vicuna-13B のリリース元のリポジトリをクローンしてテキストチャットするところまで準備をしました。
- 準備はととのいました。はよこい、 Vicuna-13B 学習済モデル。
    - 13B ということでは、ローカルPCのGPUメモリには乗り切らないだろう。GPUクラウドで試す感じかな。
    - できれば 7B もほしいなぁ。

## おまけ

### おまけ1

**学習済モデルを自前でダウンロードする方法**

（ただし、本来必要ないファイルまでダウンロードされてしまうので注意。たとえば pytorchの重みファイルだけあればいいのに、 TensorFlow や Flax といった別のライブラリ用の学習済ファイルもダウンロードされちゃう）

```
git clone https://huggingface.co/facebook/opt-1.3b models/facebook/opt-1.3b
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/49780fc0-0b61-39b4-7b4a-01a176df1bff.png)

```
python -m fastchat.serve.cli --model-name D:/sandbox/FastChat/models/facebook/opt-1.3b
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/310ff517-9a47-fef4-4335-95cf9baa8f02.png)

### おまけ2

おまけ1で git コマンドでダウンロードしたファイルは以下のようになる。１つ１つファイルの説明も記載しておく。

Hugging FaceのTransformersライブラリを使用して事前学習済みの言語モデルを利用する際に必要となるファイル

```
.gitattributes
config.json
flax_model.msgpack
generation_config.json
LICENSE.md
merges.txt
pytorch_model.bin
README.md
special_tokens_map.json
tf_model.h5
tokenizer_config.json
vocab.json
```


**.gitattributes：**
Gitリポジトリの属性設定ファイル。ファイルやディレクトリに対して改行コードの扱いやGit LFSの設定などを行う。

**config.json：**
モデルの設定情報が書かれたJSONファイル。アーキテクチャや学習時のハイパーパラメータなどが含まれる。

**flax_model.msgpack：**
Flaxフレームワーク用のモデルの重みファイル。FlaxはJAXをベースにしたニューラルネットワークライブラリ

**generation_config.json：**
文章生成タスクで使われる設定情報が書かれたJSONファイル。生成アルゴリズムや生成パラメータが記述されている。

**LICENSE.md：**
モデルのライセンス情報

**merges.txt：**
モデルのトークナイザが使うバイトペアエンコーディング（BPE）のマージルールが書かれたテキストファイル。

**pytorch_model.bin：**
PyTorch用のモデルの重みファイル。

**README.md：**
モデルのREADME

**special_tokens_map.json：**
特殊トークン（例：BERTでいう[CLS]や[SEP]とか）とIDのマッピングが書かれたJSONファイル。トークナイザで使われる。

**tf_model.h5：**
TensorFlow用のモデルの重みファイル。

**tokenizer_config.json：**
モデルのトークナイザで使われる語彙リストが書かれたJSONファイル。各トークンとそのIDのマッピングが定義されている。

**vocab.json：**
モデルのトークナイザで使用される語彙のリストが記述されたJSONファイル