[成功]おうちChatgptと言われているFlexGenをゲーミングノートPCでためす(GPUサポートあり)
[成功]おうちChatgptと言われているFlexGenをゲーミングノートPCでためす(GPUサポートあり)
おうちで動くchatgptと言われているらしいFlexGenを試してみたくなって
手元にあった下記の環境でいけるかどうか試してみてだめだった内容になります
- Ubuntu 22.04.2 LTS
- GeForce RTX 2060 6GB
- Intel(R) Core(TM) i7-8750H
- メモリ16GB
➡AWSのEC2インスタンスのg4dn.xlargeに近そうな構成かなと
nvida driverのインストール
下記サイトでapt周りの設定を確認してから
cuda-drivers
のみインストールを実施していきます
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda-drivers
nvida docker環境を構築
➡インストールガイドの通りすすめる
$ curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
➡dockerのインストーラを実行する(aptですでにdocker関連のパッケージがインストール済みの場合はsudo apt purge docker*などで先にアンインストールする必要があるかもしれません)
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
➡nvidia-container-toolkit apt レポジトリを設定して
$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker
➡nvidia-container-toolkitをインストール
$ sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02 Driver Version: 530.30.02 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 2060 On | 00000000:01:00.0 Off | N/A |
| N/A 36C P8 2W / 80W| 8MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
➡nvidia-smi
をコンテナ内で実行するとこんな感じになるはず
docker rootlessモード
$ sudo apt install uidmap
$ sudo systemctl disable --now docker.service docker.socket
➡必要なパッケージのインストールと、docker デーモンの停止をしておきます
$ curl -fsSL https://get.docker.com/rootless | sh
[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):
export PATH=/home/{your_user_name}/bin:$PATH
Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/{your_userid}/docker.sock
➡インストーラを実行すると、実行したユーザに対してrootlessモードがセットアップされます。出力結果の最後に~/.bashrc
ファイルに環境変数をセットしてくださいとでてくるのでエディタで追記します。
$ source ~/.bashrc
$ docker
REPOSITORY TAG IMAGE ID CREATED SIZE
➡~/.bashrc
を再読込してdocker
コマンドがこのように出力されていればとりあえずは動作していそう。
$ systemctl --user enable docker
$ sudo loginctl enable-linger $(whoami)
➡おこのみで、自動起動の設定を(2行目のものはログアウト後にもdocker rootlessモードに居座ってほしい場合は実施)
disable-require = false
#swarm-resource = "DOCKER_RESOURCE_GPU"
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
#accept-nvidia-visible-devices-as-volume-mounts = false
[nvidia-container-cli]
#root = "/run/nvidia/driver"
#path = "/usr/bin/nvidia-container-cli"
environment = []
#debug = "/var/log/nvidia-container-toolkit.log"
#ldcache = "/etc/ld.so.cache"
load-kmods = true
-#no-cgroups = false
+no-cgroups = true
#user = "root:video"
ldconfig = "@/sbin/ldconfig.real"
[nvidia-container-runtime]
#debug = "/var/log/nvidia-container-runtime.log"
log-level = "info"
# Specify the runtimes to consider. This list is processed in order and the PATH
# searched for matching executables unless the entry is an absolute path.
runtimes = [
"docker-runc",
"runc",
]
mode = "auto"
➡/etc/nvidia-container-runtime/config.toml
をこのように書き換えます(デーモンの再起動は不要でした)
$ docker run --gpus all --rm -it nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
➡先程と同様にnvidia-smi
でのgpu memory量などがみれていればrootlessモードでの動作は問題ないはず
FlexGenをためす
➡こちらを少しアレンジさせていただき、つくったdockerのレポトリをgithubからcheckoutして下記のようにするととりあえず動きました。
chatbot.pyはflexgenのレポジトリに以前あったものを下記のように修正すると動作しました。
$ cd docker-flexgen
$ docker compose build
$ docker compose run chatbot
Downloading (…)okenizer_config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 685/685 [00:00<00:00, 230kB/s]
Downloading (…)lve/main/config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 651/651 [00:00<00:00, 299kB/s]
Downloading (…)olve/main/vocab.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 899k/899k [00:01<00:00, 460kB/s]
Downloading (…)olve/main/merges.txt: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 456k/456k [00:01<00:00, 440kB/s]
Downloading (…)cial_tokens_map.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 221/221 [00:00<00:00, 92.3kB/s]
Initialize...
Load the pre-trained pytorch weights of opt-125m from huggingface. The downloading and cpu loading can take dozens of minutes. If it seems to get stuck, you can monitor the progress by checking the memory usage of this process.
Downloading pytorch_model.bin: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 251M/251M [00:46<00:00, 5.39MB/s]
Fetching 1 files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:47<00:00, 47.81s/it]
Convert format: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1.72it/s]
A chat between a curious human and a knowledgeable artificial intelligence assistant.
Human: Hello! What can you do?
Assistant: As an AI assistant, I can answer questions and chat with you.
Human: What is the name of the tallest mountain in the world?
Assistant: Everest.
## ここから入力開始、動作はしてそうだが、このモデルはいまいちな印象
Human: What was Japan's population in 2022?
Assistant: Oh, it's so huge, it's the tallest in the world! That's why it's taller than the tallest mountain in the world!
Human: No way
Assistant: Hey, I'm the AI assistant.
# llama_indexのコードなどを参考にprompt を入力してみる(改行のいれかたを間違っているかも)
Human: Context information is below.
---------------------
I am robot.
Your father is dog.
Your mother is flamingo
---------------------
Given the context information and not prior knowledge,
answer the question: Who is your father?Assistant: What are you talking about?
Human:
Human: What's your name?
Human: Assistant: Stay ahead of me, I am a robot.
Human: Assistant: I have the name of my dog.
Human: Assistant: I am a human.
Human: Human: I will not be born in the next four years.
Human: Assistant: I will be your father.
Human: Assistant: Tell me who my father is!
GPU メモリの消費量は今回動作したfacebook/opt-125m
だと500MBほどでした
$ nvidia-smi
Wed Apr 5 06:27:57 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02 Driver Version: 530.30.02 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 2060 On | 00000000:01:00.0 Off | N/A |
| N/A 39C P2 27W / 80W| 463MiB / 6144MiB | 6% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 2031 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 2268 G ...libexec/gnome-remote-desktop-daemon 1MiB |
| 0 N/A N/A 20520 C python3 436MiB |
+---------------------------------------------------------------------------------------+
Discussion