在AWS的EC2上部署深度学习时,通常会有较大的数据集,动辄几个GB。为了避免每次启动EC2实例后再重新下载数据集,可以在终止实例前保存为自己的AMI,相当于将整个实例环境和数据备份,下一次从保存的AMI中启动实例,可以做到无缝对接。
但是现在官方Deep Learning AMI最低启动容量上升到75GB,而0.1$/GB/month的价格实在有点肉疼,而且每次处理完都要保存本次AMI、删掉上次的AMI和EBS也是相当麻烦。
最经济实惠省事的方法创建一个EBS卷作为数据盘(不用太大,根据数据集大小来,一般30GB的免费空间足以),每次启动实例之后再将这个EBS卷挂载到实例上,结束后将卷与实例分离,然后终止实例即可。
创建EBS卷
Amazon EBS全称Amazon Elastic Block Store,分为固态硬盘(SSD)和机械硬盘(HDD)两大类,又分为通用型SSD(gp2)、预配置 IOPS SSD (io1)、吞吐优化 HDD (st1)和Cold HDD (sc1)四大类。一般默认选择通用型SSD(gp2)。
1、打开 Amazon EC2 控制台 ;
2、在导航窗格中,选择 ELASTIC BLOCK STORE、卷;
3、选择“创建卷”;
4、输入“大小(GiB)”和“可用区域”。
5、选中新建的卷,点击“操作”—>“连接卷”,选择需要挂载的实例。
可用区域要和实例所在的区域一致。比如都设置为“us-east-1c”。
使卷可在Linux上使用
由于我们使用Deep Learning AMI均是在Linux操作系统下,这里只介绍Linux下的使用方法。(适用于windows的可以参考使卷可在Windows下可用)
1、连接到实例,打开putty窗口(具体可参考windows下如何配置AWS进行深度学习);
2、附加的设备所采用的名称可能与指定的名称不同。例如,如果指定 /dev/sdf 的设备名称,则设备可能命名为 /dev/xvdf 或/dev/hdf。
使用$ df -h
查看当前磁盘情况。并没有出现新添加的磁盘。
udacity@ip-x-x-x-x:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 483M 0 483M 0% /dev
tmpfs 100M 3.0M 97M 4% /run
/dev/xvda1 32G 13G 18G 42% /
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1001
使用lsblk
命令查看可用磁盘设备及其装载点 (如果适用),其输出删除了完整设备路径中的 /dev/ 前缀。此例中,/dev/xvda1 装载为根设备 (请注意 MOUNTPOINT 被列为 /,即 Linux 文件系统层次结构的根),且附加了 /dev/xvdf,但它还未装载。
udacity@ip-x-x-x-x:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 32G 0 disk
└─xvda1 202:1 0 32G 0 part /
xvdf 202:80 0 10G 0 disk
3、使用file
命令查看是否需要创建文件系统。新卷为原始的块存储设备,必须先创建文件系统,才能装载使用;快照还原的卷可能已经有文件系统。使用sudo file -s device_name
命令(device_name为设备名称),若显示data,则说明设备上没有文件系统。
udacity@ip-x-x-x-x:~$ sudo file -s /dev/xvdf
/dev/xvdf: data
sudo表示使用管理员权限
(若没有文件系统)使用mkfs
在卷上创建ext4文件系统。sudo mkfs -t ext4 device_name
udacity@ip-x-x-x-x:~$ sudo mkfs -t ext4 /dev/xvdf
(若有文件系统)应该如此显示。
udacity@ip-x-x-x-x:~$ sudo file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=bba95d3c-e229-4570-aa40-84bc60baba95 (extents) (large files) (huge files)
4、创建装载点目录。装载点是卷在文件系统树中的位置,以及安装卷之后读写文件的位置。使用命令sudo mkdir mount_point
,替换 mount_point 的位置,如 /data。
udacity@ip-x-x-x-x:~$ sudo mkdir /data
5、使用mount
命令在刚才创建的位置装载卷。sudo mount device_name mount_point
udacity@ip-x-x-x-x:~$ sudo mount /dev/xvdf /data
再次运行$ df -h
,可以看到已经装载成功。
udacity@ip-x-x-x-x:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 483M 0 483M 0% /dev
tmpfs 100M 3.1M 97M 4% /run
/dev/xvda1 32G 13G 18G 42% /
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1001
/dev/xvdf 9.8G 23M 9.2G 1% /data
将数据存入卷中
实际上就是将数据存入/data
文件夹中。
使用$ ls -l /data
可以查看新装载的卷的文件权限。
udacity@ip-x-x-x-x:~$ ls -l /data
total 16
drwx------ 2 root root 16384 May 20 05:50 lost+found
- 其中第一位表示文件类型,
d
是目录文件,l
是链接文件,-
是普通文件。- 第2-4位表示文件所有者的权限;第5-7位表示同组用户所具有的权限;第8-10位表示其他用户的权限。
r
代表读,w
代表写,x
代表执行。
如果是上传文件,采用winscp是无法传入的,会被拒绝访问。可以先上传至AMI的用户目录下,然后使用$ sudo cp <-r>
或$ sudo mv <-r>
命令复制或移动到EBS卷中。
udacity@ip-x-x-x-x:~$ sudo cp /home/carnd/test1.zip /data # 复制文件
udacity@ip-x-x-x-x:~$ sudo cp -r /home/carnd/test1/ /data # 复制文件夹
udacity@ip-x-x-x-x:~$ sudo mv /home/carnd/train.zip /data # 移动文件
udacity@ip-x-x-x-x:~$ sudo rm -r /home/carnd/test1/ /data # 删除文件夹
对于整体复制或者移动的文件夹,会继承源文件中的权限(一般为drwx------
),因此需要修改权限,可以使用chmod
命令。
udacity@ip-x-x-x-x:~$ sudo chmod 777 /data # 将data文件夹修改为可读可写执行
r w x - 可以用数字表示:r(4), w(2), x(1), -(0)。因此权限修改可以用三位数字代替:
- rw——- (600) 只有所有者才有读和写的权限
- rw-r–r– (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
- rwx—— (700) 只有所有者才有读,写,执行的权限
- rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
- rwx–x–x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
- rw-rw-rw- (666) 每个人都有读写的权限
- rwxrwxrwx (777) 每个人都有读写和执行的权限
将卷与实例分离
1、使用以下命令卸载 /dev/xvdf 设备。
udacity@ip-x-x-x-x:~$ sudo umount -d /dev/xvdf
2、打开 Amazon EC2 控制台 ;
3、在导航窗格中,选择 Volumes;
4、选择卷,然后选择 Actions、Detach Volume;
5、在确认对话框中,选择 Yes, Detach。
[1] https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/EBSVolumes.html
[2] https://www.cnblogs.com/geekdc/p/5497919.html(Linux chmod命令修改文件与文件夹权限命令代码)