背景
Dockerでの環境構築を勉強している時に、Pytorchなどサイズの大きいライブラリーを組み込むと、docker buildでローカルのインターネット回線の速度の遅さが露呈してしまい、3時間もかかってしまった事から、「AWSのcloud9でDockerの勉強をしよう」と思いましたが、
- AWS cloud9にはDockerは標準で入っているけれど、Docker Composeは標準で入っていない
- AWS cloud9のEBSボリュームが10GBの場合、Pytorchなどサイズの大きいライブラリーを組み込む際、ボリューム不足でdocker buildが止まってしまう
ので、それらの対応方法を書いてみました。
試した事
Docker Composeのセットアップ
curlコマンドでDocker Composeを取得します。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 25.2M 100 25.2M 0 0 22.9M 0 0:00:01 0:00:01 --:--:-- 62.9M
取得先のURLは、
のこちらのものを使いました。
sudo chmod +x /usr/local/bin/docker-compose
Docker Composeを利用出来るようになりました。
docker-compose -v
Docker Compose version v2.4.1
EBSボリュームの拡張方法
まずは、EBSボリュームのサイズを変更します。
マネジメントコンソールで対象のcloud9の「EC2インスタンスの管理」をクリックします。
表示されたインスタンスIDをクリックします。
画面真ん中辺りの「ストレージ」タブをクリックします。
対象のボリュームIDをクリックします。
チェックボックスにチェックを入れた後、画面右上のアクションの三角ボタンをクリックして、「ボリュームの変更」をクリックします。
サイズが10GBなので、
30GBに変えて、変更をクリックします。
もう一回、変更をクリックします。
対象のEBSボリュームのサイズ変更が行われます。
少し待った後に、画面を更新すると、30GBに変更されました。
EBSボリュームのサイズは変更されたので、その変更をcloud9のインスタンス側に適用します。
対象のcloud9のCLI画面で、まずは適用前の状態を確認します。
df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 475M 0 475M 0% /dev/shm
tmpfs tmpfs 190M 2.9M 188M 2% /run
/dev/xvda1 xfs 10G 7.1G 2.9G 72% /
tmpfs tmpfs 475M 0 475M 0% /tmp
/dev/xvda128 vfat 10M 1.3M 8.7M 13% /boot/efi
tmpfs tmpfs 95M 0 95M 0% /run/user/1000
「/dev/xvda1」のUsedが7.1GB、Availが2.9GBなので、ここにEBSボリュームがマウントされているようです。
また、lsblkコマンドでも確認出来ます。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 30G 0 disk
├─xvda1 202:1 0 10G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part /boot/efi
では、EBSボリュームのサイズ変更を適用します。
sudo growpart /dev/xvda 1
CHANGED: partition=1 start=24576 old: size=20946911 end=20971487 new: size=62889951 end=62914527
sudo xfs_growfs -d /
meta-data=/dev/xvda1 isize=512 agcount=3, agsize=1047040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2618363, imaxpct=25
= sunit=128 swidth=128 blks
naming =version 2 bsize=16384 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=4096 sunit=4 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2618363 to 7861243
EBSボリュームのサイズ変更の適用を確認してみます。
df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 475M 0 475M 0% /dev/shm
tmpfs tmpfs 190M 2.9M 188M 2% /run
/dev/xvda1 xfs 30G 7.3G 23G 25% /
tmpfs tmpfs 475M 0 475M 0% /tmp
/dev/xvda128 vfat 10M 1.3M 8.7M 13% /boot/efi
tmpfs tmpfs 95M 0 95M 0% /run/user/1000
キチンと「/dev/xvda1」は30GBになりました。
Appendix
試しに、Pytorch等のライブラリーを組み込んだDockerイメージをbuildしてみます。
まずは、Dockerfileを含んでいるフォルダを、対象のcloud9にアップロードします。
CLI画面でもアップロードされた事を確認してみます。
ls -l
total 4
-rw-r--r--. 1 ec2-user ec2-user 569 Aug 6 01:54 README.md
drwxr-xr-x. 2 ec2-user ec2-user 24 Aug 17 07:41 pytorch2-3-1_cuda12-1-1
カレントディレクトリを、先程アップロードしたフォルダに変更して、docker buildを行います。
(Docker Composeをセットアップしたにも関わらず、docker-compose buildでなくゴメンなさい。まだ、docker-compose.ymlを作っていませんでした。)
cd ./pytorch2-3-1_cuda12-1-1
docker build -t ubuntu22.04_pytorch2.3.1_cuda12.1.1 -f Dockerfile .
[+] Building 721.6s (25/25) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 1.08kB 0.0s
=> [internal] load metadata for docker.io/nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 1.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [ 1/21] FROM docker.io/nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04@sha256:21196d81f56b48dbee70494d5f10322e1a77cc47ffe202a3bf68eab81533c20f 240.5s
Dockerイメージを確認してみます。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu22.04_pytorch2.3.1_cuda12.1.1 latest 37434c9fb97c 2 minutes ago 17GB
キチンとDockerイメージが作成されました。
(AWS cloud9ではdocker buildは10分程度で完了しました(笑))
所感
ローカルのインターネット回線の遅さが露呈されたので、今度からはAWS cloud9をちょこちょこ利用してみようと思います。
参考