LoginSignup
11
11

More than 1 year has passed since last update.

さくらのクラウドのGPUサーバ(Tesla V100)でTabby(GitHub Copilotの代替)を動かす

Posted at

Twitterを眺めていたら、GitHub CopilotのようなAIコーディングアシスタントを見つけたので動かしてみます。

GPUはNVIDIA Tesla V100(32GB)を使います。

GPUドライバ + Docker + NVIDIA Container Toolkitがあれば動くのでセットアップしていきます。

1.GPUサーバの作成

さくらのクラウドのコントロールパネルから、石狩第1ゾーンを選択し、サーバ追加画面を開きます。
サーバプランは GPUプラン を選択、ディスクのアーカイブは Ubuntu 22.04.1 LTS を選択します。
ディスクサイズは 100GB を選択します。

スクリーンショット 2023-03-17 10.26.35.png

2.GPUドライバのインストール

GPUサーバが完成したら、SSHでログインします。

NVIDIAのドキュメント通りにインストールを行う。
https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html

$ sudo apt-get install linux-headers-$(uname -r)
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
$ wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda-drivers

インストールが終わったら再起動を行う。

3.Docker + NVIDIA Container Toolkitのインストール

$ curl https://get.docker.com | sh \
   && sudo systemctl --now enable docker

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker

動作確認

$ sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
Sun Apr  9 14:01:25 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| 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  Tesla V100-PCIE-32GB            On | 00000000:00:04.0 Off |                    0 |
| N/A   33C    P0               37W / 250W|   4734MiB / 32768MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+

4.Tabbyの起動

キャッシュ用のディレクトリを作成

mkdir -p data/hf_cache && chown -R 1000 data

コンテナ起動

sudo docker run \
  --gpus all \
  -it --rm \
  -v "./data:/data" \
  -v "./data/hf_cache:/home/app/.cache/huggingface" \
  -p 5000:5000 \
  -e MODEL_NAME=TabbyML/J-350M \
  -e MODEL_BACKEND=triton \
  --name=tabby \
  tabbyml/tabby
~~~出力省略~~~
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Option                           | Value                                                                                                                                                                                                |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| server_id                        | triton                                                                                                                                                                                               |
| server_version                   | 2.29.0                                                                                                                                                                                               |
| server_extensions                | classification sequence model_repository model_repository(unload_dependents) schedule_policy model_configuration system_shared_memory cuda_shared_memory binary_tensor_data statistics trace logging |
| model_repository_path[0]         | /home/app/.cache/huggingface/hub/models--TabbyML--J-350M/snapshots/98b1f9c187990a17466a92e2c8bf9393a3c72772/triton                                                                                   |
| model_control_mode               | MODE_NONE                                                                                                                                                                                            |
| strict_model_config              | 0                                                                                                                                                                                                    |
| rate_limit                       | OFF                                                                                                                                                                                                  |
| pinned_memory_pool_byte_size     | 268435456                                                                                                                                                                                            |
| cuda_memory_pool_byte_size{0}    | 67108864                                                                                                                                                                                             |
| response_cache_byte_size         | 0                                                                                                                                                                                                    |
| min_supported_compute_capability | 6.0                                                                                                                                                                                                  |
| strict_readiness                 | 1                                                                                                                                                                                                    |
| exit_timeout                     | 30                                                                                                                                                                                                   |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+


2023-04-09 14:07:04,977 DEBG 'triton' stderr output:
I0409 14:07:04.976879 385 grpc_server.cc:4819] Started GRPCInferenceService at 0.0.0.0:8001

2023-04-09 14:07:04,978 DEBG 'triton' stderr output:
I0409 14:07:04.977280 385 http_server.cc:3477] Started HTTPService at 0.0.0.0:8000

2023-04-09 14:07:05,021 DEBG 'triton' stderr output:
I0409 14:07:05.021190 385 http_server.cc:184] Started Metrics Service at 0.0.0.0:8002

2023-04-09 14:07:05,182 DEBG 'server' stderr output:
INFO:     Started server process [337]
INFO:     Waiting for application startup.
~~~出力省略~~~

Waiting for application startup. というログが出力されたら使えるようになります。

5.Tabbyを使ってみる

ローカルからTabbyを使うためにssh port forwardingを行います。
クライアントから別のsshターミナルを開き以下のコマンドでGPUサーバにSSH接続します。

$ ssh -L 5000:localhost:5000 ubuntu@<GPUサーバのIPアドレス>

ssh接続後ローカルのブラウザから、 http://localhost:5000/_admin にアクセスします。

Tabbyにアクセスできました、左メニューのEditorをクリックします。
スクリーンショット 2023-04-09 22.39.58.png

エディタが開きました、試しに素数を判定する関数をpythonで作ります。
スクリーンショット 2023-04-09 23.16.45.png

def is_prime と入力しただけで補完が効き、関数が出来上がってしまいました。
スクリーンショット 2023-04-09 23.17.08.png

Tab を押下することでコードが反映されます。
スクリーンショット 2023-04-09 23.17.16.png

反映されました。
スクリーンショット 2023-04-09 23.17.19.png

感想

  • GitHub Copilotが登場した時は、びっくりしましたがまさか自分のサーバでも同様のことができるとは驚きました。
  • リポジトリを覗いてみるとdocker-composeファイルが用意されているので、継続的に使うのであればcomposeを使った方がいいかもしれません。
  • VimやVScodeとも連携できるので組み合わせて使ってどの程度使えるか今後試していきたいと思いました。(筆者はPyCharm使い)
11
11
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
11
11