🤖

DockerでFlexGen(ChatGPTのような対話式AI)を動かす

2023/03/05に公開

1. はじめに

Dockerを使って、FlexGen(ChatGPTのような対話式AI)を構築します。ここでは、WindowsでGPUを使用して動かす方法について記載しています。

2. 事前準備

Windows版は以下の環境で実施しました。

OS Windows 11 Home
GPU nVIDIA Geforce RTX3060 12GB
メモリ 16GB

また、事前に

  1. Docker Desktopのダウンロード、インストール
  2. Gitのダウンロード、インストール
    が必要です。

2.1 NVIDIA CUDA Toolkitのインストール

以下URLからNVIDIA CUDA Toolkitをインストールします。
23/3/5現在 最新版はCUDA 12.1でしたが、
12.1では私の環境ではインストールできなかったので、CUDA 11.8.0をダウンロードしました。
以下から「CUDA Toolkit 11.8.0」のリンクをたどり、ダウンロードしました。
私のPC環境でインストール前のnVIDIAのドライバのバージョンが472.12だったのが関係しているのかもしれません。
https://developer.nvidia.com/cuda-toolkit-archive

(参考)NVIDIA CUDA Toolkitの最新版インストール。(Ver12.1より新しいかもしれません)
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

2.2 wsl(windows Subsystem for Linux)の設定変更

FlexGenなど、メモリを大量に使用するコンテナを動かす場合は、メモリの割当を増やす必要があります。

LinuxではDocker Desktopの設定でメモリの変更ができましたが、Windows版ではwslのコンフィグファイルに直接記載する必要がありました。
「C:\Users\【ユーザ名】\.wslconfig」ファイルを新しく作成し、

.wslcomfig
[wsl2]
memory=16GB
swap=64GB

の記述を追加します。

.wslconfig ファイルを変更したら一度PCを再起動します。

※StableDiffusionを動かしていたときには「memory=〇〇GB」のみ記載していて、その場合ではFlexGenが上手く動きませんでした。しかし、「swap=〇〇GB」を追加することで動くようになりました。

3. FlexGenの構築

端末より以下のコマンドを実行し、FlexGenをcloneします。
以下を参考にさせて頂きました。
https://github.com/karaage0703/FlexGen-docker

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

4. FlexGenのコンテナを定義

端末より以下のコマンドを実行し、FlexGen のコンテナを定義します。

cd FlexGen-docker
docker build -t ubuntu:FlexGen .

5. FlexGenを実行

端末より以下のコマンドを実行し、FlexGenを実行します。
※FlexGen-dockerフォルダ内で実行します。

docker run -it -v /root --gpus all ubuntu:FlexGen

次に、コンテナ内の端末ウィンドウで、以下のコマンドを実行します。

root@hostname:/#
cd FlexGen
root@hostname:/#FlexGen
python3 apps/chatbot.py --model facebook/opt-6.7b --compress-weight

ここでは6.7Billion=67億パラメータのモデルを指定しています。最初の実行時のみ、大規模言語モデルのダウンロードが実行されます。
以下のように質問してみました。

一番大きな都道府県は北海道ですが、一番小さな都道府県は愛知県ではなく香川県です。。。

ちなみに、ChatGPTではちゃんと答えてくれました。

6. トラブルシューティング

FlexGen を動かしているときに端末でエラーが出る場合は、以下が参考になります。

6.1 GPUがDocker内で認識できているかの確認

端末から以下のコマンドを実行することで、nVIDIAがDocker内で認識できているか確認することができます。

docker run -it --gpus=all --rm nvidia/cuda:11.8.0-base-ubuntu22.04 /bin/bash
root@hostname:/#
nvidia-smi

表示例ですが、以下のように表示されていればDocker内で認識できています。

6.2 GPUメモリのカスタマイズ

GPUのメモリが足りない場合、以下のホームページが参考になるかもしれません。
https://stealthinu.hatenadiary.jp/entry/2022/10/07/160746

6.3 Dockerで使用するメモリのカスタマイズ

Dockerで使用するメモリを増やすことで上手く行ったことがあります。(上記「wsl(windows Subsystem for Linux)の設定変更」を参照)

.wslconfigの内容については以下ホームページも参考になりました。
https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig

Discussion