LoginSignup
0
0

ECSでQwen-ChatをDockerで起動する

Last updated at Posted at 2023-12-24

はじめに

Qwen-ChatはAlibaba CLoudが出しているChatGPTのようなものです。サービスとしてもありますが中国国内の電話番号が必要となり日本に住んでいる限りが無理です。そこで自前でも利用できるようオープンソース化されています。これを試していきたいと思います。
起動方法には2パターンあります。直接起動する方法とDockerで起動する方法で、ここではDockerで起動する方法を紹介します。

ECSの起動

起動に際し注意事項としてGPUインスタンスはそれなり高く、A10である必要があります。
そこでリージョンはタイ(バンコク)を選択します。プリエンプティブルを選択します。そしてecs.gn7i-c32g1.8xlargeしか余ってませんでしたが日本より安いです。

あと使用期間をなしにすると少し安くなります。

image.png

OSはUbuntuです。この方がドキュメントが多いためです。
ストレージは100GBにしておきます。40GBではモデルのダウンロードなどで満杯になります。
image.png

あとは起動します。

ドライバの導入

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ポートを追加しましょう。
image.png

確認

アクセスして動作していることを確認します。
image.png

以上でQwen-chatの起動は完了です。

まとめ

今回は注目されているLLMのQwenをDockerで起動してみました。結構簡単に起動することが出来ました。
Dockerで起動できる点も良い点でした。Alibaba CLoudでなくとも起動します皆さんも試しに起動してみてはいかがでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0