LoginSignup
7
7

More than 1 year has passed since last update.

FauxPilotならGitHub Copilotの代わりにローカルでAIにコードを書かせられるよ

Last updated at Posted at 2023-01-24

なにこれ

  • 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まで増えました。コードの長さによるかと思います。

サーバー起動

  • launch.sh
    サーバー起動
    bash launch.sh
    

GitHub Copilot拡張機能でVSCodeから使う

  • 拡張機能のインストール
  • 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で処理が停止する現象が複数回見られました。少し待っていると再度レスポンスが得られる状態に戻るので、辛抱強く待っていると良いかと思います。
7
7
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
7
7