自宅で動くChatGPTと噂のFlexGenをDockerで手軽に動かす
自宅で動くChatGPTと噂のFlexGenを試す
shi3zさんが興奮して動かしていたFlexGen
関係する記事は以下
ツヨツヨGPUが無いと動かないと思っていたのですが、タイムラインでミクミンPさんが、RTX3060でFlexGenを動かしているツイートを発見。
「RTX3060なら自分も持っている!」ということで、試してみることにしました。
追記:
私がこの記事で動かしているのは小さいモデルです。とりあえずお試しで動かしただけで、shi3zさんが動かしているモデルとは異なります。
性能の参考にする記事ではないので、ご承知ください。より大きいサイズのモデルの使用に関しては、FlexGenの公式リポジトリを参照ください。私も今後試したら追記していきます(現状、私の環境では動かせてないです)。
FlexGenをDockerで動かす
結果的には、Dockerを使うことで簡単に動かせました。
Dockerセットアップ
使用しているPCのスペックは以下です。
項目 | 内容 |
---|---|
CPU | Intel Core i 7 |
メモリ | 32GB |
GPU | NVIDIA RTX3060(12GB) |
OSはLinuxでもWindowsのWSL2でも動きました。多分WindowsのWSL2でも同じ要領で動くと思います。私は試していませんが、動作例を参考リンクにのせたので興味ある方はそちらを参照ください。
Linux/Windows(WSL2)のセットアップは以下記事参照ください。
Windows(WSL2)の場合は、以下記事を参考にメモリ、スワップをできるだけたくさん割り当ててください。
Docker/NVIDIA Dockerのセットアップは以下記事を参照ください。
以降は、LinuxもWindows(WSL2)も同じ操作となります。
FlexGenをセットアップ
FlexGenをDockerで使ってみたという記事を参考にしました。ほとんど記事の通りなのですが、そのまま実行すると、数GBあるモデルを毎回ダウンロードする必要があったりするので、手軽に使う方法の手順含めてGitHubにリポジトリとしてまとめました。
使い方は上記リポジトリに書いてある通りです。最初に以下コマンドでDockerをビルドします。
$ git clone https://github.com/karaage0703/FlexGen-docker
$ cd FlexGen-docker
$ docker build -t ubuntu:FlexGen .
これで準備は完了です。
FlexをDockerで動かす
FlexGen-docker
のディレクトリで以下コマンドを実行します。
$ docker run -it -v $(pwd):/root --gpus all ubuntu:FlexGen
続いて、コンテナ内で以下コマンドを実行します。
root@hostname:/# cd FlexGen
root@hostname:/FlexGen# python3 apps/chatbot.py --model facebook/opt-6.7b --compress-weight
初回のみ、モデルのダウンロードが実行されます。モデルは、Dockerコマンドを起動した場所(FlexGen-docker
ディレクトリ)に保存されます。
2回目以降は、モデルがダウンロードされたディレクトリ(FlexGen-docker
ディレクトリ)でDockerを起動すれば、初回のモデルダウンロードは不要となります。
FlexGen実行例(opt-6.7b)
FlexGenと会話してみた例です。
日本語も使えます(アホですが)。
大きいモデルを使用する
少し大きい opt-30b というモデルを使用する方法です。以下のコマンドを実行します。
$ python3 -m flexgen.flex_opt --model facebook/opt-30b --percent 0 0 100 0 100 0 --compress-weight
実行するとモデルのダウンロードや変換が行われます。
--percent
の後ろの6つの数字は、GPU/CPUの使用割合を示しています。環境に合わせて数字を変えてください。詳しくはFlexGenの公式リポジトリを参照ください。よっぽど凄いGPUを使ってない場合は、CPUをメインにしたほうが良いようです。
--compress-weight
はモデルの圧縮です。よほど凄いマシンでない限りは圧縮は必須オプションです。
モデルの準備ができたら、以下コマンド実行するとチャットができます。
$ python3 apps/chatbot.py --model facebook/opt-30b --percent 0 0 100 0 100 0 --compress-weight
FlexGen実行例(opt-30b)
opt-30bは、返信に時間がかかる上に、何故か日本語が喋れないです。体感、よりアホになった気がしますが、PCのスペックのせいだと思います。
まとめ
FlexGenを試してみました。小さいモデルだったので結構アホですが、自宅PCでChatGPT的なAIチャットが動くのは驚きですね。
Stable Diffusionもそうですが、やはりローカルでも動くというのは「自分のものになった!」という妙な安心感があって良いですね。
色々応用できそうなので、試していきたいですね。
参考リンク
関連記事
変更履歴
- 2023/02/28 Dockerfileアップデート・WSL2に関して追記・opt-30bモデルに関して追記
- 2023/02/28 モデルに関する注意事項追記
Discussion