ローカルで動くコーディング補助ツールTabbyを試してみる

ローカルで動作するコーディング補助ツールとして新たにTabbyというツールがリリースされました。

Github Copilotと違いローカルで完結するためセキュリティが厳しい環境でも使えるのが良さそうです。
いい感じの性能なら今後使っていきたいと思ったので試してみました。

https://github.com/TabbyML/tabby

今回使用した環境は以下のとおりです。

|項目  |内容  |
|---|---|
|OS  |Ubuntu 20.04  |
|GPU  |NVIDIA RTX3080(16GB)  |

# 0. Docker環境の構築
すでにDocker環境を構築している人は読み飛ばしてください。

DockerとNVIDIA CONTAINER TOOLKITのインストールは以下を参考に行いました。

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker


```:Dockerのインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
sudo apt install docker-ce
```

```:NVIDIA CONTAINER TOOLKITのインストール
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
```

# 1. Tabbyの起動
Tabbyの起動はリポジトリをcloneしてREADMEにのっている手順通り行いました。


```:Tabbyのリポジトリのclone
git clone https://github.com/TabbyML/tabby.git
```

初回起動はデータのダウンロード等が30GBほどありそこそこ時間がかかります。

```:Tabbyの起動
cd tabby
mkdir -p data/hf_cache && chown -R 1000 data

sudo docker run \
  --gpus all \
  -it --rm \
  -v "/$(pwd)/data:/data" \
  -v "/$(pwd)/data/hf_cache:/home/app/.cache/huggingface" \
  -p 5000:5000 \
  -e MODEL_NAME=TabbyML/J-350M \
  -e MODEL_BACKEND=triton \
  --name=tabby \
  tabbyml/tabby
```

**"INFO:     Application startup complete."** というログがでたら起動完了です。

# 2. 動作確認
起動後[localhost:5000/_admin](localhost:5000/_admin)にアクセスするとTabbyのデモを使用することができます。

とりあえず素数判定のコードでも書いてもらおうと思ったところよく分からない文字列しかでませんでした…。
![Screenshot from 2023-04-12 20-02-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571964/eb4a9db7-b9dd-dc34-b1c0-8e9d3afe902a.png)
デモ用に用意されていたコードなども試したのですが、謎の文字列がでる現象が続きます。


Tabbyのhuggingfaceのページを見てみると **TabbyML/NeoX-1.3B** というサイズのでかいモデルがあったのでそちらを試してみます。

https://huggingface.co/TabbyML

```:TabbyML/NeoX-1.3B用の起動コマンド
sudo docker run \
  --gpus all \
  -it --rm \
  -v "/$(pwd)/data:/data" \
  -v "/$(pwd)/data/hf_cache:/home/app/.cache/huggingface" \
  -p 5000:5000 \
  -e MODEL_NAME=TabbyML/NeoX-1.3B \
  -e MODEL_BACKEND=triton \
  --name=tabby \
  tabbyml/tabby
```

もう一度素数判定のコードを試してみたところ…
![Screenshot from 2023-04-12 20-10-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571964/33ed66dd-a871-5f40-2f74-7e23d409471e.png)
~~確かにコードはでた。ただプログラミングを初めて3日目ぐらいのレベルの素数判定のコードが出ただけだ…。~~
@fujitanozomu さんから指摘があったように初心者どころのレベルではなく素数が理解できていません。
これはまだ実用段階ではなさそうな感じですね。

ちなみにGPUの使用量を確認したところ最大でも3.5GBほどしかVRAMを使用しておらず意外と軽そうです。
```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05    Driver Version: 520.61.05    CUDA Version: 11.8     |
|-------------------------------+----------------------+----------------------+
| 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 ...  On   | 00000000:01:00.0  On |                  N/A |
| N/A   60C    P8    19W /  N/A |   3588MiB / 16384MiB |     14%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
```


# 3. VsCode拡張機能の使用
デモを動かした感じ現段階で使えるレベルではありませんでしたが、VsCodeの拡張機能も配布されているのでそちらも試してみました。

VsCodeの拡張機能検索でTabbyと検索すると拡張機能が見つかるのでこれをインストールします。
![Screenshot from 2023-04-12 20-15-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571964/258c009e-8cee-0cd6-ca04-406ff81e33ad.png)

あとはDockerを起動させながらコードを書いてみると先程のデモと同じようにコード補完機能が動きます。
![Screenshot from 2023-04-12 20-17-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571964/3df9364f-00ad-2df4-0641-9fad925fdd4f.png)

# 最後に
現段階ではまだ実用的なレベルではありませんが今後が楽しみです。
もう少しでかいサイズのモデルなどが発表されたら性能が良くなりそうなのでそこに期待ですね。