なにこれ
- GitHub Copilotとほぼ同じ機能をローカルサーバーで実現できるFauxPilotを紹介したい
- VSCodeでの使用感を見せたい
使用例
- pytorchでmnistの分類を行うexampleを作る
環境
- FauxPilot
commit
$ git show HEAD commit 58e2ac967394b58720ce9703063e794c0f3422e2 (HEAD -> main, origin/main, origin/HEAD) Merge: 8df5058 c2caa89 Author: Parth Thakkar <thakkarparth007@gmail.com> Date: Tue Jan 3 16:48:53 2023 +0530 Merge pull request #136 from leemgs/upstream-setup-docker fix: improved the docker compose statement to handle various docker env
- docker
docker
$ docker version Client: Docker Engine - Community Version: 20.10.22 API version: 1.41 Go version: go1.18.9 Git commit: 3a2c30b Built: Thu Dec 15 22:28:08 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.22 API version: 1.41 (minimum version 1.12) Go version: go1.18.9 Git commit: 42c8b31 Built: Thu Dec 15 22:25:58 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.14 GitCommit: 9ba4b250366a5ddde94bb7c9d1def331423aa323 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
- docker compose
docker compose
$ docker compose version Docker Compose version v2.15.1
- ホストのCUDA
cuda
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Jun__8_16:49:14_PDT_2022 Cuda compilation tools, release 11.7, V11.7.99 Build cuda_11.7.r11.7/compiler.31442593_0
- GTX1080ti
- Ubuntu20.04
FauxPilotって何?
- https://github.com/fauxpilot/fauxpilot
- 自動でソースコードを生成してくれるGitHub Copilotと同様に、例えばVSCodeからリアルタイムに次に入力すべきコードを提案してもらえます。
- GitHub Copilotとは違い、ローカルで実行できます。
- GitLabのVSCode拡張機能でもcodeの提案に使われることになったそうです(が、具体的な方法は不明。参考)
メリット
- オープンにしたくない自分のコードが取り込まれるのを防ぐ
- 生成コードの予測のためには、現在書いているコードを送信する必要があります。GitHub CopilotはGitHubサーバーで動くので、コードが知らぬ間にオープンにされる可能性を否定しきれない一方、ローカルで実行するFauxPilotなら自分で管理できます。
- GitHub Copilotの場合、ここで、自分のコードが利用されるかどうかの設定ができます。
- 電気代しかかからない
- 無料期間があるとはいえ、お金を有用かわからないサービスに使うのは気が引ける…という気持ちはそこそこわかる。(ただし月10ドル/年100ドル)
- FauxPilotを走らせる分の電気代はたぶん月1ドルもかからない。
- 複数・古いGPUが活かせる
- 複数GPUに分けてモデルをのせられるので、使っていないGPUも使いみちが生まれます。
問題点
- GPUが必要
- 最小モデルで2GBですが、少なくともCC>=6.0のGPUが必要。
- いつsuggestが出てくるかわからない
- 文脈的に一義的でも、必ずしもsuggestされるわけではなく、改行されたらsuggestされるなど。
- GitHub Copilotも同じく。
- 知らないうちに誰かのコードを使っている可能性
- GitHub Copilot(Codexモデル)のトレーニングには大量のソースコードが使われていますが、トレーニングしたモデルはトレーニングに使ったソースコードを再生成しても何も不思議ではない。
- GitHub Copilotなら、ここでpublic codeと一致するコードの提案をblockするかallowするかの設定ができます
- 新しいフレームワークの補完は難しい
- 学習されていないため生成しにくいらしい。
- メモリは常時占有します
- GPUを使う作業を並行する場合はちょっと考えものかもしれない
インストール
requirements
- モデルを保存できるストレージ
- 最低2GB、最大32GB使います
- docker
- docker compose >= 1.28
- GPU
- 使用可能なGPUと、GPUごとの使用可能モデルの対応はこちらから確認できます。NVIDIA GPU with Compute Capability>=6.0が必須です。
- ※原因未確認ですが、cuda11.6はlaunch.shがErrorで終了しました。cuda11.7に上げたところ動くようになりました。
- その他
- curl
- zstd
セットアップ
-
setup.sh
セットアップ# dockerが動くので、人によってはsudoが必要 git clone https://github.com/fauxpilot/fauxpilot cd fauxpilot bash setup.sh
-
設定内容
- 基本的にenterを叩いていればOK
- Models availableのところだけ、自分のGPUのRAMサイズと用途に合わせたものを選ぶ必要がある
- 私はGTX1080tiで、pythonでだけ動けばいいので、
[1] codegen-350MB-mono
を使います - 2GB Total VRAMとありますが、実際走らせてみると瞬間的に3GBまで増えました。コードの長さによるかと思います。
- 私はGTX1080tiで、pythonでだけ動けばいいので、
サーバー起動
- launch.sh
サーバー起動
bash launch.sh
GitHub Copilot拡張機能でVSCodeから使う
- 拡張機能のインストール
- Github Copilotをインストールします
- settings.jsonに追記
- settings -> Github > Copilot: Advanced -> Edit in settings.json
- デフォルトでは5000番ポートでlaunchされます
- vscodeを動かしているのと同じマシン上で動かすのならlocalhostで足りますが、うちでは別マシンで動いているので
http://[別マシンのIP]:5000
として使っています
settings.json"github.copilot.advanced": { "debug.overrideEngine": "codegen", "debug.testOverrideProxyUrl": "http://localhost:5000", "debug.overrideProxyUrl": "http://localhost:5000" }
気になったこと
- commitメッセージの作成とかcode以外のところでの用途にも使えると嬉しい
- fastertransformer.ccで処理が停止する現象が複数回見られました。少し待っていると再度レスポンスが得られる状態に戻るので、辛抱強く待っていると良いかと思います。