はじめに
Qwen-ChatはAlibaba CLoudが出しているChatGPTのようなものです。サービスとしてもありますが中国国内の電話番号が必要となり日本に住んでいる限りが無理です。そこで自前でも利用できるようオープンソース化されています。これを試していきたいと思います。
起動方法には2パターンあります。直接起動する方法とDockerで起動する方法で、ここではDockerで起動する方法を紹介します。
ECSの起動
起動に際し注意事項としてGPUインスタンスはそれなり高く、A10である必要があります。
そこでリージョンはタイ(バンコク)を選択します。プリエンプティブルを選択します。そしてecs.gn7i-c32g1.8xlargeしか余ってませんでしたが日本より安いです。
あと使用期間をなしにすると少し安くなります。
OSはUbuntuです。この方がドキュメントが多いためです。
ストレージは100GBにしておきます。40GBではモデルのダウンロードなどで満杯になります。
あとは起動します。
ドライバの導入
nvidiaのドライバをインストールします。Ubuntuはこの辺が楽です。
sudo apt update
sudo apt -y upgrade
sudo apt -y install ubuntu-drivers-common
最適なドライバを探します。
下記ではnvidia-driver-535
がレコメンドされています。
ubuntu-drivers devices
ERROR:root:aplay command not found
== /sys/devices/pci0000:00/0000:00:07.0 ==
modalias : pci:v000010DEd00002236sv000010DEsd00001482bc03sc02i00
vendor : NVIDIA Corporation
model : GA102GL [A10]
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-525-open - distro non-free
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535 - distro non-free recommended
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
インストールします。
sudo apt -y install nvidia-driver-535
sudo reboot
ドライバのインストールは完了です
Docker のインストール
ドキュメント通りです。
sudo apt update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
nvidia container toolkitのインストール
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/stable/deb/nvidia-container-toolkit.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
apt-get update
apt-get install -y nvidia-container-toolkit
sudo systemctl start docker
sudo docker run hello-world
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
実行結果
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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 A10 On | 00000000:00:07.0 Off | 0 |
| 0% 27C P8 9W / 150W | 4MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
ここまでは準備です。
Qwenをダウンロード
Gitからダウンロードします。
git clone https://github.com/QwenLM/Qwen.git
必要なものをインストールします
pip install -r requirements.txt
モデルをダウンロード
Dockerのイメージだけでは動作しません。モデルが必要になります。
pip install modelscope
Qwen-7B-Chatモデルを以下のスクリプトを利用してダウンロードします。
from modelscope import snapshot_download
from transformers import AutoModelForCausalLM, AutoTokenizer
# Downloading model checkpoint to a local dir model_dir
# model_dir = snapshot_download('qwen/Qwen-7B')
model_dir = snapshot_download('qwen/Qwen-7B-Chat')
# model_dir = snapshot_download('qwen/Qwen-14B')
# model_dir = snapshot_download('qwen/Qwen-14B-Chat')
# Loading local checkpoints
# trust_remote_code is still set as True since we still load codes from local dir instead of transformers
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto",
trust_remote_code=True
).eval()
起動
以下のように環境変数を設定します。
IMAGE_NAME=qwenllm/qwen:cu117
PORT=8901
CHECKPOINT_PATH="/root/.cache/modelscope/hub/qwen/Qwen-7B-Chat"
起動にはそれなりに時間がかかります。
イメージのサイズが大きいです。
cd Qwen
bash docker/docker_web_demo.sh -i ${IMAGE_NAME} -c ${CHECKPOINT_PATH} --port ${PORT}
ECSのセキュリティグループに8901ポートを追加しましょう。
確認
以上でQwen-chatの起動は完了です。
まとめ
今回は注目されているLLMのQwenをDockerで起動してみました。結構簡単に起動することが出来ました。
Dockerで起動できる点も良い点でした。Alibaba CLoudでなくとも起動します皆さんも試しに起動してみてはいかがでしょうか。