2022年11月時点の情報です。
まだSagemaker Studio Labへの登録が完了していない方は下記の記事を参照ください。
先頭に(studiolab)と書いていある場合、Jupyerlabから起動したTerminalで確認しています。それ以外はnotebook上で実行しています (%condaとか)。Terminalを起動するとcondaのstudiolab環境が自動的にactivateされるようです。
studiolab環境は公式ページを確認するとjupyterlabやjupyter serverのエクステンションをインストールしたいときに利用してくださいと記載があるので、コマンドを入力する場合に何かしらの理由で明示的に環境を分けているのかも知れません。(調べても理由はすぐに出てこなかった。。)
Installing JupyterLab and Jupyter Server extensions...Open the terminal and activate the studiolab environment. 引用: https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lab-use-manage.html
notebook(ipynb)は最初だとcondaのdefault環境が使用されるようです。※独自の環境を別に作成して利用することももちろん可能です。
conda環境一覧
%conda env list
# conda environments: # default * /home/studio-lab-user/.conda/envs/default studiolab /home/studio-lab-user/.conda/envs/studiolab studiolab-safemode /opt/amazon/sagemaker/safemode-home/.conda/envs/studiolab-safemode base
notebookで実行しているのでdefault環境が使用されています。
ターミナルを起動するとstudiolab環境がactivateされます。
baseはcondaをインストールしたら出来る環境ですね。default環境があるので、基本ノータッチでいいかと思います。
studiolab-safemode環境は名前から推測するにトラブルシューティングの時などに使うのでしょうか?
OSの確認
(studiolab) studio-lab-user@default:~$ cat /etc/os-release | head -2
NAME="Ubuntu" VERSION="20.04.3 LTS (Focal Fossa)"
Ubuntu 20.04のようです。
ログインユーザー名の確認
(studiolab) studio-lab-user@default:~$ whoami
studio-lab-user
studio-lab-userユーザーのようです。
(studiolab) studio-lab-user@default:~$ id studio-lab-user
uid=1000(studio-lab-user) gid=100(users) groups=100(users)
usersグループに属しているようです。
ディスクの確認
(studiolab) studio-lab-user@default:~$ df -h
Filesystem Size Used Avail Use% Mounted on overlay 27G 20K 27G 1% / tmpfs 64M 0 64M 0% /dev tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup shm 4.0G 0 4.0G 0% /dev/shm /dev/nvme0n1p1 50G 19G 32G 37% /opt/.sagemakerinternal /dev/nvme1n1 25G 2.8G 23G 12% /home/studio-lab-user devtmpfs 7.8G 0 7.8G 0% /dev/tty tmpfs 7.8G 0 7.8G 0% /proc/acpi tmpfs 7.8G 0 7.8G 0% /sys/firmware
下記が永続化されているボリュームでしょうか? 15GBのストレージが使えるとありましたが、実際は25GB使えるように見えます!
/dev/nvme0n1p1 50G 19G 32G 37% /opt/.sagemakerinternal
/dev/nvme1n1 25G 2.8G 23G 12% /home/studio-lab-user
デバイス名から推測するにどうやらAmazon EBSがマウントされているようです。
EBS ボリュームは、Nitro System上に構築されたインスタンスで NVMe ブロックデバイスとして公開されます。デバイス名は、/dev/nvme0n1、/dev/nvme1n1 などです。
引用: https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html
ついでにnvmeドライバーがあるかどうか確認してみます。
ls /sys/module/ | grep nvme
nvme nvme_core
ありました。
CPUの確認
(studiolab) studio-lab-user@default:~$ lscpu | grep -e "^CPU(s):" -e "Model name:" -e "Thread(s) per core:" -e "Core(s) per socket:" -e "Core(s) per socket:" -e "Socket(s):"
・・・アウトプットに日本語約を追加・・・ CPU(s)(論理コア数): 4 Thread(s) per core(物理コア当たりのスレッド数): 2 Core(s) per socket(CPU当たりの物理コア数): 2 Socket(s)(CPUの数): 1 Model name(モデル名):Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
参考になるか分かりませんが、Intel(R) Xeon(R) Platinum 8259CL CPUの情報を見てみました。
Intel(R) Xeon(R) Platinum 8259CL CPUはHigh End CPUsの中に入っているようです。
メモリの確認
(studiolab) studio-lab-user@default:~$ free -g
total used free shared buff/cache available Mem: 15 1 4 0 10 14 Swap: 0 0 0
RAMは15GB使えるようです。
apt install が使えるか?
(studiolab) studio-lab-user@default:~$ apt install less
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
調べてみると現状apt installはできないようですが、#127:enhancementのチケットがあったのでそのうち出来るようになるのではないかと思います。
ここらへんは今のところColabの方が柔軟性があってよいですね。
Python環境について確認
pipやcondaの確認
!which pip
/home/studio-lab-user/.conda/envs/default/bin/pip
condaのdefault環境でインストールしたpipが参照されました。
!which conda
/opt/conda/condabin/conda
condaコマンドは/opt/condaにあるようです。rootユーザーだけに書き込み権限があるようなのでcondaコマンドのアップデートは出来ないようです。unable to update conda #160
(studiolab) studio-lab-user@default:/opt$ ls -la /opt | grep conda
drwxr-xr-x 1 root root 28 Nov 15 01:24 conda
%conda list
# packages in environment at /home/studio-lab-user/.conda/envs/default: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_gnu conda-forge anyio 3.6.2 pyhd8ed1ab_0 conda-forge argon2-cffi 21.3.0 pyhd8ed1ab_0 conda-forge argon2-cffi-bindings 21.2.0 py39hb9d737c_3 conda-forge attrs 22.1.0 pyh71513ae_1 conda-forge backcall 0.2.0 pyh9f0ad1d_0 conda-forge backports 1.0 py_2 conda-forge backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge beautifulsoup4 4.11.1 pyha770c72_0 conda-forge bleach 5.0.1 pyhd8ed1ab_0 conda-forge bzip2 1.0.8 h7f98852_4 conda-forge ca-certificates 2022.9.24 ha878542_0 conda-forge cffi 1.15.1 py39he91dace_2 conda-forge debugpy 1.6.3 py39h5a03fae_1 conda-forge decorator 5.1.1 pyhd8ed1ab_0 conda-forge defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge entrypoints 0.4 pyhd8ed1ab_0 conda-forge flit-core 3.8.0 pyhd8ed1ab_0 conda-forge idna 3.4 pyhd8ed1ab_0 conda-forge importlib-metadata 5.0.0 pyha770c72_1 conda-forge importlib_resources 5.10.0 pyhd8ed1ab_0 conda-forge ipykernel 6.4.2 py39hef51801_0 conda-forge ipython 7.33.0 py39hf3d152e_0 conda-forge ipython_genutils 0.2.0 py_1 conda-forge ipywidgets 7.7.2 pyhd8ed1ab_0 conda-forge jedi 0.18.1 pyhd8ed1ab_2 conda-forge jinja2 3.1.2 pyhd8ed1ab_1 conda-forge jsonschema 4.17.0 pyhd8ed1ab_0 conda-forge jupyter_client 7.4.5 pyhd8ed1ab_0 conda-forge jupyter_core 5.0.0 py39hf3d152e_0 conda-forge jupyter_server 1.23.2 pyhd8ed1ab_0 conda-forge jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge jupyterlab_widgets 1.1.1 pyhd8ed1ab_0 conda-forge ld_impl_linux-64 2.39 hc81fddc_0 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.39.4 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 markupsafe 2.1.1 py39hb9d737c_2 conda-forge matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge mistune 2.0.4 pyhd8ed1ab_0 conda-forge nbclassic 0.4.8 pyhd8ed1ab_0 conda-forge nbclient 0.7.0 pyhd8ed1ab_0 conda-forge nbconvert 7.2.5 pyhd8ed1ab_0 conda-forge nbconvert-core 7.2.5 pyhd8ed1ab_0 conda-forge nbconvert-pandoc 7.2.5 pyhd8ed1ab_0 conda-forge nbformat 5.7.0 pyhd8ed1ab_0 conda-forge ncurses 6.3 h27087fc_1 conda-forge nest-asyncio 1.5.6 pyhd8ed1ab_0 conda-forge notebook 6.5.2 pyha770c72_1 conda-forge notebook-shim 0.2.2 pyhd8ed1ab_0 conda-forge openssl 3.0.7 h166bdaf_0 conda-forge packaging 21.3 pyhd8ed1ab_0 conda-forge pandoc 2.19.2 h32600fe_1 conda-forge pandocfilters 1.5.0 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 21.2.4 pyhd8ed1ab_0 conda-forge pkgutil-resolve-name 1.3.10 pyhd8ed1ab_0 conda-forge platformdirs 2.5.2 pyhd8ed1ab_1 conda-forge prometheus_client 0.15.0 pyhd8ed1ab_0 conda-forge prompt-toolkit 3.0.32 pyha770c72_0 conda-forge ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge pycparser 2.21 pyhd8ed1ab_0 conda-forge pygments 2.13.0 pyhd8ed1ab_0 conda-forge pyparsing 3.0.9 pyhd8ed1ab_0 conda-forge pyrsistent 0.19.2 py39hb9d737c_0 conda-forge python 3.9.13 h2660328_0_cpython conda-forge python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge python-fastjsonschema 2.16.2 pyhd8ed1ab_0 conda-forge python_abi 3.9 2_cp39 conda-forge pyzmq 24.0.1 py39headdf64_1 conda-forge readline 8.1.2 h0f457ee_0 conda-forge send2trash 1.8.0 pyhd8ed1ab_0 conda-forge setuptools 65.5.1 pyhd8ed1ab_0 conda-forge six 1.16.0 pyh6c4a22f_0 conda-forge sniffio 1.3.0 pyhd8ed1ab_0 conda-forge soupsieve 2.3.2.post1 pyhd8ed1ab_0 conda-forge sqlite 3.39.4 h4ff8645_0 conda-forge terminado 0.17.0 pyh41d4057_0 conda-forge tinycss2 1.2.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 typing_extensions 4.4.0 pyha770c72_0 conda-forge tzdata 2022f h191b570_0 conda-forge wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge webencodings 0.5.1 py_1 conda-forge websocket-client 1.4.2 pyhd8ed1ab_0 conda-forge wheel 0.38.4 pyhd8ed1ab_0 conda-forge widgetsnbextension 3.6.1 pyha770c72_0 conda-forge xz 5.2.6 h166bdaf_0 conda-forge zeromq 4.3.4 h9c3ff4c_1 conda-forge zipp 3.10.0 pyhd8ed1ab_0 conda-forge Note: you may need to restart the kernel to use updated packages.
かなり色々インストールされているようです。
最初からインストールされている各種conda環境のyamlファイルが配置されている場所があるので、確認してみます。
(studiolab) studio-lab-user@default:~$ ls -la /opt/amazon/sagemaker/environments/
total 12 drwxr-xr-x 3 root root 99 Nov 15 01:23 . drwxr-xr-x 1 root root 38 Nov 15 01:25 .. -rw-r--r-- 1 root root 117 Nov 15 01:20 default.yaml drwxr-xr-x 2 root root 43 Nov 15 01:23 requirements -rw-r--r-- 1 root root 368 Nov 15 01:20 studiolab-safemode.yaml -rw-r--r-- 1 root root 347 Nov 15 01:20 studiolab.yaml
(studiolab) studio-lab-user@default:~$ cat /opt/amazon/sagemaker/environments/default.yaml
name: default channels: - conda-forge dependencies: - ipykernel=6.4 - python=3.9 - pip=21.2 - ipywidgets=7
今インストールされているライブラリの記載がなさそうですが、気にしないことにします 笑
%pip freeze
anyio @ file:///home/conda/feedstock_root/build_artifacts/anyio_1666191106763/work/dist argon2-cffi @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi_1640817743617/work argon2-cffi-bindings @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi-bindings_1666850859330/work ・・・省略・・・
おそらくconda-foreでインストールされているファイルを参照しているようです。
まとめ
いかがでしたでしょうか?
cpu runtimeでは15GBのメモリがあれば色々検証できそうですね。
また、ストレージも15GBではなく25GB程度使えそうなので充分だと思います。
後は環境のreset機能とapt install出来るようになれば何も不満がなくなりますが、環境をユーザーごとに作り直すとなると大変そうですよね。
今はまだ無料で使えますが、このままの料金体系でサービスを続けてくれたらいいなと個人としては願っています 笑