编译团队 | Aileen,吴蕾,寒小阳 在一个阴雨连绵的冬日清晨,一份账单进入我的眼帘。‘这些钱够我买半个很好的GPU了。’我想。对于机器学习来说,在Amazon租用一流的GPU是最佳方案,但是价格过于昂贵。为了将成本降低80%,我采取了种种举措后得到了一些经验,在此与诸位分享。 内容目录 1.1 所需的工具 1.2 私有虚拟云(VPC) 1.3 创建实例 1.4 登录并测试 2. 竞价实例的持久性-方法1:附着卷 2.1 创建一个卷 2.2 将卷附着至实例 2.3 将卷安装至实例 3. Spot Instance的持久性: 方法2-根卷的切换 3.1 用一个新的实例 3.2 用一个已有的实例 4. 停止一个竞价实例 通常,Amazon网络业务(AWS)会为云端虚拟机(instance)的使用提供不同的计费方式: 按需实例:按照特定的容量需求(CPU,内存等)租用实例,如果暂时不用了,可以将其‘关电’(stop)。之后你也可以再将它‘启动’(start),延续之前的工作。只有运行的实例是计费的。 预留实例:你为实例先预支一段时间的费用(通常1-3年)获得使用权,这会比按需实例便宜50%左右。 竞价实例:在任何时间,利用Amazon的剩余容量进行计算。你可以对这部分容量进行竞价,通常会比按需实例便宜,甚至比预留资源还便宜。 我研究了一下AWS账单,很明显,最大的成本确实在于运行实例。位居第二的是存储成本,远远低于前者。这点很幸运,因为我们可以从竞价实例中获得便宜的价格。不过,用竞价实例能便宜多少是因不同类型的实例有区别的。我通常使用P2竞价实例,能够节省70-80%的开销(看下图)。 竞价实例使用提醒 竞价实例确实便宜很多,不过有些限制需要在此提醒大家: 竞价实例无法在暂停后重新启用,它们只能被终止。这是最大的不便之处。终止实例会造成破坏,你在停止了一个实例后再度运行,你之前所作出的更改无法得以保留。你可以保存终止任务的卷/盘上的内容,但是你新建一个实例后无法再使用它。 你有可能随时面临超标的问题。如果此事发生,竞价实例会自动终止运行。不过在我使用的几个月的时间里面,只发生过一次超标问题。 出于自身的需要,我找到了一些方法来规避竞价实例的弱点。 1.用竞价实例来运行机器学习程序 首先,我们来学习如何创建一个竞价实例来开发并运行机器学习模型。我们想要使用P2实例,它配备了一块或多块强劲的NVIDIA K80 GPU,11G内存用于测试和训练模型。P2有三种尺寸: 我们来看一下他们是如何运作的。 1.1所需工具 安装AWS.cli,AWS cli是命令行工具箱,可以替代网页版的AWS Console来管理AWS业务。 然后,运行aws configure来配置你的key,secret和region. AWS支持P2实例的地区(region)有北弗吉尼亚(us-east-1),俄勒冈(us-west-2)和爱尔兰(eu-west-1)。通常,应选取地理位置靠近你的那个region. 最后,我们需要下载帮助脚本(helper s),支持我们的创建工作:git clone --depth=1 https://github.com/slavivanov/ec2-spotter.git 1.2私有云虚拟机(VPC) 首先,我们需要设立一个私有云虚拟机,这是一个有趣的虚拟网络,来启动你的虚拟机器。设置VPC有点吓人,很显然,对我这种第一次用的人来说操作细节仍是有些稀里糊涂。不过好消息是,这只要做一次就可以了。一个办法是根据亚马逊手册()来操作。更好一些的办法是,用Fast.ai的课程Deep Learning for Coders()中提到的脚本,进行一些适配后去操作。如果你已经装好了上面提到的‘所需工具’,那么直接运行下面的脚本:. ec2-spotter/fast_ai/create_vpc.sh 它将帮助你创建一个VPC,Internet网管,子网,路由表,安全组,最重要的是密钥对。我们会需要用最新创好的密钥(位于~/.ssh/aws-key-fast-ai.pem)来进行实例创建工作。它还会打印出刚才创建的子网和安全组的ID信息,这些信息后面会需要用到。 1.3 Create the Instance 创建一个实例 我们当然也可以遵循Amazon’s instructions for launching a spot instance()来进行操作,不过呢,如果希望更cool一些,我们可以用helper 中的start_spot_no_swap.sh来启动实例。 我们需要将它传到下面的参数: ami – 取决于我们挑选了那个地区,以及我们愿意用Amazon image还是Fast.ai image,必须要挑选一个。 subnetId - 用create_vpc.sh打印出来的子网ID securityGroupId – 用create_vpc.sh打印出来的安全组ID。 以下为示例: ec2-spotter/fast_ai/start_spot_no_swap.sh --ami ami-53b23433 --subnetIdsubnet-9f69c3d6 --securityGroupId sg-a62f2ede The will then print the IP of our new Spot instance. 接下来,脚本就会打印出我们的竞价实例的IP地址。 (责任编辑:本港台直播) |