💬

自宅で動くChatGPTと噂のFlexGenをDockerで手軽に動かす

2023/02/26に公開

自宅で動くChatGPTと噂のFlexGenを試す

shi3zさんが興奮して動かしていたFlexGen

https://www.youtube.com/watch?v=QMWrMuXw5ds

関係する記事は以下
https://www.businessinsider.jp/post-265982

ツヨツヨGPUが無いと動かないと思っていたのですが、タイムラインでミクミンPさんが、RTX3060でFlexGenを動かしているツイートを発見。

https://twitter.com/ksasao/status/1628001583689760769

「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)のセットアップは以下記事参照ください。

https://zenn.dev/karaage0703/articles/0ca67e19aa772e

https://zenn.dev/karaage0703/articles/211d89cc0a29a1

Windows(WSL2)の場合は、以下記事を参考にメモリ、スワップをできるだけたくさん割り当ててください。
https://zenn.dev/karaage0703/articles/d38e17bd6efbaa

Docker/NVIDIA Dockerのセットアップは以下記事を参照ください。

https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa

以降は、LinuxもWindows(WSL2)も同じ操作となります。

FlexGenをセットアップ

FlexGenをDockerで使ってみたという記事を参考にしました。ほとんど記事の通りなのですが、そのまま実行すると、数GBあるモデルを毎回ダウンロードする必要があったりするので、手軽に使う方法の手順含めてGitHubにリポジトリとしてまとめました。

https://github.com/karaage0703/FlexGen-docker

使い方は上記リポジトリに書いてある通りです。最初に以下コマンドで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もそうですが、やはりローカルでも動くというのは「自分のものになった!」という妙な安心感があって良いですね。

色々応用できそうなので、試していきたいですね。

参考リンク

https://github.com/FMInference/FlexGen

https://agirobots.com/flexgen/

https://agirobots.com/chatgpt-mechanism-and-problem/

https://note.com/tori29umai/n/n3cd8c5b32f7a

https://note.com/npaka/n/n722a4ab734f3

https://github.com/karpathy/nanoGPT

https://nikkie-ftnext.hatenablog.com/entry/first-time-revchatgpt-as-of-2023-feb

https://zenn.dev/windvoice/articles/6952bf27863893

https://zenn.dev/syoyo/articles/d0b3e64624bcc5

https://qiita.com/TakanoTaiga/items/4ec4681c822e993624db

https://agirobots.com/jetson-flexgen/

関連記事

https://zenn.dev/karaage0703/articles/718506a593fef0

https://zenn.dev/karaage0703/articles/d58d79d8e77ab8

変更履歴

  • 2023/02/28 Dockerfileアップデート・WSL2に関して追記・opt-30bモデルに関して追記
  • 2023/02/28 モデルに関する注意事項追記

Discussion