らんだむな記憶

blogというものを体験してみようか!的なー

GCE の新しいインスタンスを作る

GCE の新しいインスタンスを作りたい - らんだむな記憶 の続き。

gcloud compute --project=プロジェクトID instances create ml-dev --zone=asia-northeast1-a --image-family=ubuntu-2004-lts --image-project=ubuntu-os-cloud --subnet=VPCで作成したサブネット名 --network-tier=PREMIUM --no-restart-on-failure --maintenance-policy=TERMINATE --preemptible --deletion-protection --machine-type=a2-highgpu-1g --labels=env=ml-dev --create-disk="name=ディスク名,image-family=ubuntu-2004-lts,image-project=ubuntu-os-cloud,size=300GB,type=pd-balanced,boot=yes"

VM インスタンス自体は簡単に作成できた。

タイムゾーン

sudo timedatectl set-timezone Asia/Tokyo

pyenv

色々考えた結果、Install TensorFlow with pip でやっているような Miniconda で CUDA/cuDNN 環境をいきなり作る必要もなさそうと考えて、グローバルに CUDA 11.8 を入れる事にする。Miniconda はすぐには使わないので、引き続き pyenv を使う。なので、準備: Home · pyenv/pyenv Wiki · GitHub

その後:

pyenv install 3.11.2
pyenv rehash

NVIDIA ドライバ & CUDA 11.8

CUDA Toolkit 11.8 を導入することで NVIDIA のドライバもインストールされる。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

して、暫く気長に待つと途中で以下のようなメッセージが出ながらログが流れていく:

*****************************************************************************
*** Reboot your computer and verify that the NVIDIA graphics driver can   ***
*** be loaded.                                                            ***
*****************************************************************************

VM 再起動後は

$ nvidia-smi 
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05    Driver Version: 520.61.05    CUDA Version: 11.8     |
|-------------------------------+----------------------+----------------------+
| 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 A100-SXM...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   28C    P0    47W / 400W |     76MiB / 40960MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

PyTorch 2.0

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cu118

Jupyter

Jupyter サーバーの保護 - Deep Learning AMI を参考にする。

$ cd ~
$ mkdir ssl
$ cd ssl
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

別のインスタンスタイプから変更する場合

以下は動かない可能性がある。GPU がマシンタイプと合わない場合にエラーになる。

gcloud compute --project=プロジェクトID instances set-machine-type ml-dev --machine-type=a2-highgpu-1g --zone=asia-northeast1-a

ゾーンの移動

Move a VM instance between zones or regions  |  Compute Engine Documentation  |  Google Cloud

Docker

docker ... --gpus all を通すため:

Installation Guide — NVIDIA Cloud Native Technologies documentation

$ 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/experimental/$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
$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker