从阿里云命令行启动虚拟机实例(可选)

此流程和本节中的代码片段适用于Linux或Mac OS X。如果您使用Windows,则可以使用Windows的Linux子 系统 并使用bash shell(在Ubuntu Linux中)。

同时,NVIDIA在https://github.com/NVIDIA/ngc-examples/tree/master/ncsp 上提供了一套通过阿里云CLI自动配置环境的脚本示例,可以供大家下载参考。

准备环境

安装阿里云命令行工具

$ sudo pip install aliyuncli

命令行工具需要与阿里云各产品的 SDK 协同工作。为方便用户使用,在线安装命令行工具时,与阿里云 SDK 的安装进行了分离。您可以自由选择所需产品的 SDK,不必下载所有的阿里云 SDK。这里我们需要使用ECS(Elastic Compute Service)工具集。

$ sudo pip install aliyun-python-sdk-ecs

更详细的安装步骤请参考阿里云在线安装命令行工具步骤: https://www.alibabacloud.com/help/zh/doc-detail/29995.htm

安装完成后,可以使用aliyuncli ecs help,可以看到有超过200个命令:

aliyuncli ecs help 
usage: aliyuncli <command> <operation> [options and parameters] 
[ecs] valid operations as follows: 

ActivateRouterInterface | AddBandwidthPackageIps 
AddIpRange              | AddTags 
AllocateEipAddress      | AllocatePublicIpAddress 
... 

配置阿里云命令行工具

$ sudo aliyuncli configure 
Aliyun Access Key ID [None]: <输入 Access Key ID> 
Aliyun Access Key Secret [None]: <输入 Access Key Secret> 
Default Region Id [None]: <输入您购买的阿里云产品的 Region Id> 
Default output format [None]: <输入您需要的输出格式>

更详细的配置修改步骤请参考阿里云帮助文档:

https://www.alibabacloud.com/help/zh/doc-detail/43039.htm

创建安全组

需要为您的实例创建一个安全组

sudo aliyuncli ecs CreateSecurityGroup --RegionId cn-beijing --SecurityGroupName "NVSG"

如果执行成功,会返回新创建组的SecurityGroupId(后面会用得到):

{
 "SecurityGroupId": "sg-2xxxxxxxx89",
 "RequestId": "C3F25628-DF77-4F0B-98E2-90xxxxxxDB9" 
} 

对安全组添加规则

一个新的安全组将不会有任何规则。 以下命令将打开入站端口22(用于SSH),443(用于HTTPS)和5000(用于DIGITS 6)

sudo aliyuncli ecs AuthorizeSecurityGroup --RegionId cn-beijing --SecurityGroupId "<your-SecurityGroupId>" --IpProtocol tcp --PortRange 22/22 --SourceCidrIp 0.0.0.0/0 --Policy accept --Description SSH                                                                                                       
sudo aliyuncli ecs AuthorizeSecurityGroup --RegionId cn-beijing --SecurityGroupId "<your-SecurityGroupId>" --IpProtocol tcp --PortRange 443/443 --SourceCidrIp 0.0.0.0/0 --Policy accept --Description HTTPS
sudo aliyuncli ecs AuthorizeSecurityGroup --RegionId cn-beijing --SecurityGroupId "<your-SecurityGroupId>" --IpProtocol tcp --PortRange 5000/5000  --SourceCidrIp 0.0.0.0/0 --Policy accept --Description DIGITS6
            

以下命令将打开所有出站端口:

aliyuncli ecs AuthorizeSecurityGroupEgress --RegionId cn-beijing --SecurityGroupId "<your-SecurityGroupId>" --IpProtocol all --PortRange -1/-1 --DestCidrIp 0.0.0.0/0 --Policy accept --Description "All open!"

生成SSH密钥对

建议使用SSH密钥对进行登录验证。以下命令将会生成一个:

sudo aliyuncli ecs CreateKeyPair --RegionId cn-beijing --KeyPairName "baseos-alibaba-beijing"

输出会包含有PrivateKeyBody:

{
 "KeyPairFingerPrint": "5c93f4ef676af54b86dd7c88f58df052",
 "PrivateKeyBody": "-----BEGIN RSA PRIVATE KEY-----\nblah\nblah\nblah\nblah\nblah\n-----END RSA PRIVATE KEY-----\n",
 "RequestId": "3E50FAD2-EF3F-4517-B8C7-7D7877A292FE",
 "KeyPairName": "baseos-alibaba-beijing" 
} 

把PrivateKeyBody的内容复制到一个.pem文件中(所有的\n用实际的内容替代),修改.pem文件的权限为400. 建议文件命名为”KeyPairName.pem”。

获取 VM的镜像ID

创建实例时,您需要指定一个源ImageId。 使用此命令查找NVIDIA GPU Cloud VM Image的最新ImageId:

$ sudo aliyuncli ecs DescribeImages --RegionId cn-beijing --ImageOwnerAlias marketplace --ImageName "NVIDIA GPU Cloud VM Image 18.03.0" --output json --filter Images.Image[0].ImageId

应当返回一个类似如下的ImageID:

"m-2zeglob57mdv4m1rqu03"

启动虚拟机实例

创建实例

$ sudo aliyuncli ecs CreateInstance \
--RegionId cn-beijing \
--ImageId "m-2zeglob57mdv4m1rqu03" \
--SecurityGroupId "sg-2zexxxxxxx89" \
--InstanceType ecs.gn5-c8g1.2xlarge \
--InstanceName "click-gn5-1gpu" \
--InternetMaxBandwidthOut 10 \
--InstanceChargeType PostPaid \
--KeyPairName baseos-alibaba-beijing

如果创建成功,会返回实例ID(InstanceID):

{
 "InstanceId": "i-rj9a0iw25hryafj0fm4v",
 "RequestId": "440ECC70-09F9-492C-AB9E-21AA9C4E0531" 
} 

建议使用的选项

"--InternetMaxBandwidthOut 10" :设置公网出带宽最大值为10 Mbps,有效的值为 [1, 200]。

"--InstanceChargeType PostPaid" :设置付费方式为现用现付,"PrePaid" 为预付费方式。

其它有用的选项

名称 类型 是否必需 描述
InstanceName String

实例的名称。

  • 长度为 [2, 128] 个英文或中文字符,必须以大小字母或中文开头,可包含数字,点号(.),下划线(_)或短横线(-)。
  • 实例名称会显示在控制台。
  • 如果没有指定该参数,默认值为实例的 InstanceId。

不能以 http:// 和 https:// 开头。

InternetMaxBandwidthIn String

公网入带宽最大值,单位为:Mbps (Megabit per second)。取值范围:

  • [1,200]

默认值: 200 Mbps

SystemDiskSize Integer

系统盘大小,单位为:GB。取值范围:

  • cloud:40~500
  • cloud_efficiency:40~500
  • cloud_ssd:40~500
  • ephemeral_ssd:40~500

默认值:size=max{40,ImageSize}

指定该参数后,size 必须 ≥ max{40, ImageSize}。

DataDisk.n.Size Integer

数据盘 n 的磁盘大小,n 从 1 开始编号,单位为:GB。取值范围:

  • cloud:5 ~ 2000
  • cloud_efficiency:20 ~ 32768
  • cloud_ssd:20 ~ 32768
  • ephemeral_ssd:5 ~ 800
DataDisk.n.Category String

数据盘n的磁盘种类。取值范围:

  • cloud:普通云盘
  • cloud_efficiency:高效云盘
  • cloud_ssd:SSD 云盘
  • ephemeral_ssd:本地 SSD 盘

默认值:cloud

更多配置选项可参考:https://www.alibabacloud.com/help/doc-detail/25499.htm?spm=a3c0i.o51771en.b99.190.3eb7831cDsO1p3

连接到虚拟机实例

通过CLI创建的实例不会自动获得公共IP地址。 要为刚创建的实例分配公有IP地址,请运行:

sudo aliyuncli ecs AllocatePublicIpAddress --RegionId us-west-1 --InstanceId "i-rj9a0iw25hryafj0fm4v"

若执行成功,会返回分配的IP地址:

{ 
"IpAddress": "39.xxx.xxx.98",
 "RequestId": "65EB59AE-FA75-446F-B5C7-2BA0F9A77CDC" 
} 

通过CLI创建的实例不会自动启动,请运行如下命令启动实例:

sudo aliyuncli ecs StartInstance --InstanceId "i-rj9a0iw25hryafj0fm4v"

实例启动后,您可以使用SSH密钥以root的身份连入到实例中:

ssh -i baseos-alibaba-beijing.pem root@39.xxx.xxx.98

启动、停止、重启虚拟机实例

停止实例:

aliyuncli ecs StopInstance --InstanceId "i-rj9a0iw25hryafj0fm4v"

启动实例:

aliyuncli ecs StartInstance --InstanceId "i-rj9a0iw25hryafj0fm4v"

重启实例:

aliyuncli ecs RebootInstance --InstanceId "i-rj9a0iw25hryafj0fm4v"