本記事の内容はすべて、2022年11月時点の情報です。
日々進化しているサービスなので情報が古い可能性がありますが、気づいた時になるべく注意書き追加か記事の更新しようと思います。
まだSagemaker Studio Labへの登録が完了していない方は下記の記事を参照ください。
Amazon Sagemaker Studio Labでcomputer typeでGPUを選択するとGPUのruntimeが利用できるようになります。
GPUを選択すると下記スクリーンショットのメッセージが出現しました。
どうやら、本当にGPUを使うのが適切かどうか検討してくださいというポップアップのようです。
現状GPU runtimeは24時間で合計8時間(1セッションは最大4時間)に制限されているようです。
GPU runtimeは並列計算などに最適化されていて、並列ではない一般的な計算処理はCPU runtimeを使うのが良いようです。(RNNの計算はCPU runtimeを使うのが良いようです)
OS・ユーザー名・CPUコア数・メモリ容量など
なんとCPU runtimeと全く同じでした。GPU runtimeはCPU runtimeにGPUが追加されたものとも言えそうです。
従って重複内容になってしまうので、詳細はCPU runtimeを確認した記事をご確認ください。
GPU関連の情報
CPUコア数やメモリ容量はCPU runtimeもGPU runtimeも変わりありません。そのため、GPU runtimeを起動した場合のGPU関連の情報を調べてまとめておこうと思います。
Google colabで下記記事のようにGPU関連の情報を確認したことがあるので、Amazon Sagemaker Studio Labでも同じように確認していこうと思います。
GPU動作確認のためのconda環境の作成
(studiolab) studio-lab-user@default:~$ conda create --name test-gpu python=3.9
Collecting package metadata (current_repodata.json): done Solving environment: done ・・・省略・・・ The following NEW packages will be INSTALLED: _libgcc_mutex conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge _openmp_mutex conda-forge/linux-64::_openmp_mutex-4.5-2_gnu bzip2 conda-forge/linux-64::bzip2-1.0.8-h7f98852_4 ca-certificates conda-forge/linux-64::ca-certificates-2022.9.24-ha878542_0 ld_impl_linux-64 conda-forge/linux-64::ld_impl_linux-64-2.39-hcc3a1bd_1 libffi conda-forge/linux-64::libffi-3.4.2-h7f98852_5 libgcc-ng conda-forge/linux-64::libgcc-ng-12.2.0-h65d4601_19 libgomp conda-forge/linux-64::libgomp-12.2.0-h65d4601_19 libnsl conda-forge/linux-64::libnsl-2.0.0-h7f98852_0 libsqlite conda-forge/linux-64::libsqlite-3.40.0-h753d276_0 libuuid conda-forge/linux-64::libuuid-2.32.1-h7f98852_1000 libzlib conda-forge/linux-64::libzlib-1.2.13-h166bdaf_4 ncurses conda-forge/linux-64::ncurses-6.3-h27087fc_1 openssl conda-forge/linux-64::openssl-3.0.7-h166bdaf_0 pip conda-forge/noarch::pip-22.3.1-pyhd8ed1ab_0 python conda-forge/linux-64::python-3.9.15-hba424b6_0_cpython readline conda-forge/linux-64::readline-8.1.2-h0f457ee_0 setuptools conda-forge/noarch::setuptools-65.5.1-pyhd8ed1ab_0 tk conda-forge/linux-64::tk-8.6.12-h27826a3_0 tzdata conda-forge/noarch::tzdata-2022f-h191b570_0 wheel conda-forge/noarch::wheel-0.38.4-pyhd8ed1ab_0 xz conda-forge/linux-64::xz-5.2.6-h166bdaf_0 Proceed ([y]/n)? y Downloading and Extracting Packages ld_impl_linux-64-2.3 | 675 KB | ##################################################################################### | 100% libsqlite-3.40.0 | 791 KB | ##################################################################################### | 100% python-3.9.15 | 21.0 MB | ##################################################################################### | 100% Preparing transaction: done Verifying transaction: done Executing transaction: done # # To activate this environment, use # # $ conda activate test-gpu # # To deactivate an active environment, use # # $ conda deactivate
Jupyterでtest-gpuのカーネルを利用できるようにするため、ipykernelをインストールします。
(studiolab) studio-lab-user@default:~$ conda activate test-gpu
(test-gpu) studio-lab-user@default:~$ conda install ipykernel
Collecting package metadata (current_repodata.json): done Solving environment: done ・・・省略・・・ The following NEW packages will be INSTALLED: asttokens conda-forge/noarch::asttokens-2.1.0-pyhd8ed1ab_0 backcall conda-forge/noarch::backcall-0.2.0-pyh9f0ad1d_0 backports conda-forge/noarch::backports-1.0-pyhd8ed1ab_3 backports.functoo~ conda-forge/noarch::backports.functools_lru_cache-1.6.4-pyhd8ed1ab_0 debugpy conda-forge/linux-64::debugpy-1.6.3-py39h5a03fae_1 decorator conda-forge/noarch::decorator-5.1.1-pyhd8ed1ab_0 entrypoints conda-forge/noarch::entrypoints-0.4-pyhd8ed1ab_0 executing conda-forge/noarch::executing-1.2.0-pyhd8ed1ab_0 ipykernel conda-forge/noarch::ipykernel-6.17.1-pyh210e3f2_0 ipython conda-forge/noarch::ipython-8.6.0-pyh41d4057_1 jedi conda-forge/noarch::jedi-0.18.2-pyhd8ed1ab_0 jupyter_client conda-forge/noarch::jupyter_client-7.4.7-pyhd8ed1ab_0 jupyter_core conda-forge/linux-64::jupyter_core-5.0.0-py39hf3d152e_0 libsodium conda-forge/linux-64::libsodium-1.0.18-h36c2ea0_1 libstdcxx-ng conda-forge/linux-64::libstdcxx-ng-12.2.0-h46fd767_19 matplotlib-inline conda-forge/noarch::matplotlib-inline-0.1.6-pyhd8ed1ab_0 nest-asyncio conda-forge/noarch::nest-asyncio-1.5.6-pyhd8ed1ab_0 packaging conda-forge/noarch::packaging-21.3-pyhd8ed1ab_0 parso conda-forge/noarch::parso-0.8.3-pyhd8ed1ab_0 pexpect conda-forge/noarch::pexpect-4.8.0-pyh1a96a4e_2 pickleshare conda-forge/noarch::pickleshare-0.7.5-py_1003 platformdirs conda-forge/noarch::platformdirs-2.5.2-pyhd8ed1ab_1 prompt-toolkit conda-forge/noarch::prompt-toolkit-3.0.33-pyha770c72_0 psutil conda-forge/linux-64::psutil-5.9.4-py39hb9d737c_0 ptyprocess conda-forge/noarch::ptyprocess-0.7.0-pyhd3deb0d_0 pure_eval conda-forge/noarch::pure_eval-0.2.2-pyhd8ed1ab_0 pygments conda-forge/noarch::pygments-2.13.0-pyhd8ed1ab_0 pyparsing conda-forge/noarch::pyparsing-3.0.9-pyhd8ed1ab_0 python-dateutil conda-forge/noarch::python-dateutil-2.8.2-pyhd8ed1ab_0 python_abi conda-forge/linux-64::python_abi-3.9-3_cp39 pyzmq conda-forge/linux-64::pyzmq-24.0.1-py39headdf64_1 six conda-forge/noarch::six-1.16.0-pyh6c4a22f_0 stack_data conda-forge/noarch::stack_data-0.6.1-pyhd8ed1ab_0 tornado conda-forge/linux-64::tornado-6.2-py39hb9d737c_1 traitlets conda-forge/noarch::traitlets-5.5.0-pyhd8ed1ab_0 wcwidth conda-forge/noarch::wcwidth-0.2.5-pyh9f0ad1d_2 zeromq conda-forge/linux-64::zeromq-4.3.4-h9c3ff4c_1 Proceed ([y]/n)? y ・・・省略・・・ Preparing transaction: done Verifying transaction: done Executing transaction: done
インストール出来ました。
Jupyterlab上でカーネルを切り替えることが出来るか確認してみます。
・画面上部のメニューから「Kernel」→ 「Change Kernel」
もしくは
・右上の「default:Python」という文字列をクリック
で切り替え画面に遷移することができます。
「test-gpu:Python」という項目があれば成功です。クリックしてください。
nvidia-smiでGPU関連の情報を確認する
# https://developer.nvidia.com/nvidia-system-management-interface
!nvidia-smi
Fri Nov 25 10:33:39 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | 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 Tesla T4 Off | 00000000:00:1E.0 Off | 0 | | N/A 31C P0 26W / 70W | 0MiB / 15109MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
割り当てられているGPUはTesla T4です。
Driverのバージョンは470.57.02で、CUDAは11.4までがサポートされているようです。
Tesla T4はNvidiaデータセンターGPUなので前方互換があるのでCUDA11.5以降もインストール可能だと思います。(apt installがsagemaker studio labで使えるようになればですが、、)
異なるバージョンのCUDAをインストールする方法は下記にまとめてありますので、必要な方はご参照ください。
NVIDIAドライバーとCUDAに関しては下記にまとめています。
CUDAのバージョンの確認
!nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Feb_14_21:12:58_PST_2021 Cuda compilation tools, release 11.2, V11.2.152 Build cuda_11.2.r11.2/compiler.29618528_0
CUDA11.2がインストールされているようです。
# インストール済みのCUDAのバージョンを確認
!ls -la /usr/local/ | grep cuda
lrwxrwxrwx 1 root root 9 Sep 17 2021 cuda -> cuda-11.2 drwxr-xr-x 1 root root 21 Nov 15 01:43 cuda-11.2
インストールされているのはCUDA11.2のみのようです。
mxnet-cu112をインストールしGPUが使えるかどうかを確認
CUDA11.2がインストールされているので、対応しているmxnet-cu112をインストールします。
(test-gpu) studio-lab-user@default:~$ pip install mxnet-cu112
# mxnet-cu112が動作するか確認
# https://mxnet.apache.org/versions/1.7/api/python/docs/tutorials/getting-started/crash-course/6-use_gpus.html
from mxnet import nd, gpu, gluon, autograd
from mxnet.gluon import nn
from mxnet.gluon.data.vision import datasets, transforms
import time
x = nd.ones((3,4), ctx=gpu())
x
[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] NDArray 3x4 @gpu(0)>
結果が返ってきたので、問題なく使えました。
最終的にtest-gpu環境に何がインストールされているか一覧表示
%conda list
# packages in environment at /home/studio-lab-user/.conda/envs/test-gpu: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_gnu conda-forge asttokens 2.1.0 pyhd8ed1ab_0 conda-forge backcall 0.2.0 pyh9f0ad1d_0 conda-forge backports 1.0 pyhd8ed1ab_3 conda-forge backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge bzip2 1.0.8 h7f98852_4 conda-forge ca-certificates 2022.9.24 ha878542_0 conda-forge certifi 2022.9.24 pypi_0 pypi charset-normalizer 2.1.1 pypi_0 pypi debugpy 1.6.3 py39h5a03fae_1 conda-forge decorator 5.1.1 pyhd8ed1ab_0 conda-forge entrypoints 0.4 pyhd8ed1ab_0 conda-forge executing 1.2.0 pyhd8ed1ab_0 conda-forge idna 3.4 pypi_0 pypi ipykernel 6.17.1 pyh210e3f2_0 conda-forge ipython 8.6.0 pyh41d4057_1 conda-forge jedi 0.18.2 pyhd8ed1ab_0 conda-forge jupyter_client 7.4.7 pyhd8ed1ab_0 conda-forge jupyter_core 5.0.0 py39hf3d152e_0 conda-forge ld_impl_linux-64 2.39 hcc3a1bd_1 conda-forge libffi 3.4.2 h7f98852_5 conda-forge libgcc-ng 12.2.0 h65d4601_19 conda-forge libgomp 12.2.0 h65d4601_19 conda-forge libnsl 2.0.0 h7f98852_0 conda-forge libsodium 1.0.18 h36c2ea0_1 conda-forge libsqlite 3.40.0 h753d276_0 conda-forge libstdcxx-ng 12.2.0 h46fd767_19 conda-forge libuuid 2.32.1 h7f98852_1000 conda-forge libzlib 1.2.13 h166bdaf_4 conda-forge matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge mxnet-cu112 1.9.1 pypi_0 pypi ncurses 6.3 h27087fc_1 conda-forge nest-asyncio 1.5.6 pyhd8ed1ab_0 conda-forge numpy 1.23.5 pypi_0 pypi openssl 3.0.7 h166bdaf_0 conda-forge packaging 21.3 pyhd8ed1ab_0 conda-forge parso 0.8.3 pyhd8ed1ab_0 conda-forge pexpect 4.8.0 pyh1a96a4e_2 conda-forge pickleshare 0.7.5 py_1003 conda-forge pip 22.3.1 pyhd8ed1ab_0 conda-forge platformdirs 2.5.2 pyhd8ed1ab_1 conda-forge prompt-toolkit 3.0.33 pyha770c72_0 conda-forge psutil 5.9.4 py39hb9d737c_0 conda-forge ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge pygments 2.13.0 pyhd8ed1ab_0 conda-forge pyparsing 3.0.9 pyhd8ed1ab_0 conda-forge python 3.9.15 hba424b6_0_cpython conda-forge python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge python-graphviz 0.8.4 pypi_0 pypi python_abi 3.9 3_cp39 conda-forge pyzmq 24.0.1 py39headdf64_1 conda-forge readline 8.1.2 h0f457ee_0 conda-forge requests 2.28.1 pypi_0 pypi setuptools 65.5.1 pyhd8ed1ab_0 conda-forge six 1.16.0 pyh6c4a22f_0 conda-forge stack_data 0.6.1 pyhd8ed1ab_0 conda-forge tk 8.6.12 h27826a3_0 conda-forge tornado 6.2 py39hb9d737c_1 conda-forge traitlets 5.5.0 pyhd8ed1ab_0 conda-forge tzdata 2022f h191b570_0 conda-forge urllib3 1.26.13 pypi_0 pypi wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge wheel 0.38.4 pyhd8ed1ab_0 conda-forge xz 5.2.6 h166bdaf_0 conda-forge zeromq 4.3.4 h9c3ff4c_1 conda-forge Note: you may need to restart the kernel to use updated packages.
default環境とは異なり、pipとconda-forgeのライブラリが入り混じっていますね。
まとめ
Sagemaker Studio LabのGPU runtimeを詳しく見てみました。
GPU runtimeは1日合計8時間しか利用できないので、計画的に利用する必要がありますね。
例えばモデリング以外に要する時間はGPU runtimeではなく、CPU runtimeやColabのGPUを使うなど集中して活用すべきかなと思いました。
とはいえディスクが永続化しているのもあってかなりSagemaker Studio Labは個人的にはかなり使いやすいです。
無料で使えるなんて素晴らしいですね。