您可以通过FastGPU的命令行,快速地部署云上GPU集群,管理资源的生命周期。还可以便捷地为集群安装深度学习环境,在集群运行代码,查看运行日志以及释放资源。

前提条件

客户端已安装Python 3.6或以上版本。

说明 您的ECS实例、本地机器、阿里云Cloud Shell工具等均可以作为客户端安装FastGPU来构建人工智能计算任务。

环境准备

  1. 执行以下命令,安装FastGPU软件包。
    pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.0-py3-none-any.whl
  2. 执行以下命令,在您的ECS实例、本地机器或阿里云Cloud Shell工具上,获取阿里云账号AccessKey,然后在Shell中设置AccessKey、地域或可用区为环境变量。
    export ALIYUN_ACCESS_KEY_ID=****         # 填入您的AccessKey ID
    export ALIYUN_ACCESS_KEY_SECRET=****     # 填入您的AccessKey Secret
    export ALIYUN_DEFAULT_REGION=cn-hangzhou # 填入您希望使用的地域(Region)
    export ALIYUN_DEFAULT_ZONE=cn-hangzhou-i # (选填)填入您希望使用的地域的可用区

命令行说明

下表所有命令中的{instance_name}均表示单个实例名称,例如{instance_name}="task0.my_job",该命令仅对单个实例执行。您也可以使用{instance_name}="{my_job}",大括号{}表示以my_job为后缀的GPU集群。

命令 命令说明 命令示例
fastgpu [help,-h,--help]
查看所有FastGPU命令的帮助说明。

fastgpu --help

fastgpu -h

fastgpu {command} --help
查看指定的FastGPU命令的帮助说明。 fastgpu ls --help
fastgpu ls
列出FastGPU用户创建的实例。包括以下信息:
  • instance name:实例名称。
  • age(hours):实例创建至今的时间,以小时为单位。
  • public_ip:实例的公网IP。
  • private_ip:实例的内网IP。
  • GPU:GPU规格和数量。
  • instance_type:实例规格。

参数说明:

-a:列出您当前阿里云账户下所有实例。会提供Key-Owner(密钥对)和instance_id(实例id)两个额外的信息。

  • 查询当前Linux账户下的实例:

    fastgpu ls

  • 查询同一个阿里云账号不同Linux账户下的所有实例:

    fastgpu ls -a

fastgpu create --config create.cfg
fastgpu create --name {instance_name} --machine {count} --instance_type {ins_type}
创建一个实例或一个集群。
参数说明:
  • -f, -c, --config:使用指定配置文件创建实例。
  • -n, --name:指定实例名称。
  • --image, --image_name:指定安装镜像。安装镜像可通过queryimage命令查到。
  • --image_type:指定镜像类型。如果未指定image_name,可以通过指定image_type实现,包括aliyun、Ubuntu、CentOS。
  • -np, --machines:指定创建实例数量。
  • -i, --instance_type:指定实例规格(包括实例CPU,内存,显卡型号等),您可以通过querygpu命令查询所有实例规格。
  • --system_disk_size:指定系统盘大小,单位:GB。
  • --data_disk_size:指定数据盘大小,单位:GB。
  • --skip_setup:跳过实例初始化。
  • -nas, --nas, --enable-nas:允许实例挂载NAS。更多信息,请参见什么是文件存储NAS
  • --zone_id:指定区域id,默认为自动指定。可通过querygpu命令查询实例支持的区域id。
  • --spot:指定创建的实例为抢占式实例。更多信息,请参见抢占式实例概述
  • --confirm_cost:忽略消费确认项。
  • --install_script:指定实例安装完成后需要执行的命令。
  • -vpc, --vpc, --vpc_name:指定私有网络名称。
  • -cuda, --install_cuda, --cuda_install:自动化安装CUDA。
  • 创建一个Ubuntu系统的实例,并指定实例名称和规格,同时自动安装CUDA:

    fastgpu create --name fastgpu_vm -np 1 --instance_type ecs.gn6v-c8g1.16xlarge --image_type ubuntu --install_cuda

  • 按照配置文件创建实例:

    fastgpu create -c config.cfg

fastgpu ssh {instance_name}
使用SSH连接并登录到指定实例。
说明 您需要将本地的公网IP添加到安全组才可以通过SSH访问。建议您使用fastgpu addip -a命令快速添加。
使用SSH连接到task0.my_job实例:

fastgpu ssh task0.my_job

fastgpu scp /local/path/to/upload {instance_name}:/remote/path/to/save
fastgpu scp {instance_name}:/remote/path/to/copy /local/path/to/save
将本地文件拷贝到实例中,或者是从实例中拷贝到本地。
  • 将本地文件拷贝到实例中:

    fastgpu scp /root/test.txt task0.my_job:/root/

  • 将实例中的文件拷贝到本地:

    fastgpu scp task0.my_job:/home/cuda/ ~/cuda/

  • 将本地文件拷贝到my_job集群中所有实例的/root目录中:

    fastgpu scp /test.txt {my_job}:/root/

fastgpu querygpu
fastgpu query
fastgpu query -gpu {gpu_type}
fastgpu query -np  {number of gpus per node}
fastgpu query -gpu {gpu_type} -np {number of gpus per node}
查询阿里云支持的GPU实例规格。
参数说明:
  • -gpu:查询指定的GPU类型规格。

    支持查询的类型:V100、 P100、T4、P4、M40。

  • -np:查询包含指定GPU个数的实例类型。支持1、2、4、8四种规格。
  • 查询所有实例类型:

    fastgpu querygpu

    fastgpu query

  • 查询V100 GPU包含的所有实例类型:

    fastgpu query -gpu "V100"

  • 查询4个GPU的实例类型:

    fastgpu query -np 4

fastgpu queryimage
fastgpu queryimage {os_type}
查询阿里云支持的实例镜像。

参数说明:

os_type:阿里云支持的os类型。包括CentOS、Ubuntu、Debian、SUSE、aliyun等。

  • 查询所有镜像:

    fastgpu queryimage

  • 查询CentOS系统的所有镜像版本:

    fastgpu queryimage centos

fastgpu describe {instance_name}
fastgpu describe
查询实例的所有属性。属性包括CPU核数、GPU、镜像、内存大小、创建时间、密钥对、状态等信息。
  • 查询所有实例的所有属性:

    fastgpu describe

  • 查询task0.my_job实例属性:

    fastgpu describe task0.my_job

  • 查询my_job集群下的所有实例属性:

    fastgpu describe {my_job}

fastgpu kill {instance_name}
fastgpu kill -y {instance_name}
fastgpu kill {instance_a_name} {instance_b_name} {instance_c_name}
fastgpu kill -f {instance_name}
释放指定的实例。
参数说明:
  • -f:强制释放实例。
  • -y:跳过确认。
  • 释放停止状态的task0.my_job实例:

    fastgpu kill task0.my_job

  • 强制释放task0.my_job实例,无论实例是什么状态:

    fastgpu kill -f task0.my_job

  • 强制停止my_job集群的所有实例:

    fastgpu kill -f {my_job}

fastgpu stop {instance_name}
fastgpu stop {instance_a_name} {instance_b_name} {instance_c_name}
fastgpu stop -f {instance_name}
fastgpu stop -k {instance_name}
停止指定的实例。若为集群实例,可以通过指定实例名为{集群名字}来批量删除。
参数说明:
  • -f:强制停止实例。
  • -k:实例停止后,仍进行计费操作。
  • -y:跳过确认。
  • 停止运行中的task0.my_job实例:

    fastgpu stop task0.my_job

  • 强制停止task0.my_job实例:

    fastgpu stop -f task0.my_job

  • 强制停止my_job下所有实例:

    fastgpu stop -f {my_job}

fastgpu start {instance_name}
启动指定的实例。

参数说明:

-y:跳过确认。

  • 启动task0.my_job实例:

    fastgpu start task0.my_job

  • 启动my_job集群:

    fastgpu start {my_job}

fastgpu mount {instance_name}
fastgpu mount {instance_name} {mount_target_domain}
为指定的实例挂载NAS文件系统到/ncluster目录。

参数说明:

mount_target_domain:指定NAS的挂载点。如果不指定,则会自动创建挂载点并挂载。

  • 为task0.my_job实例自动创建一个挂载点,并挂载NAS文件系统到实例中:

    fastgpu mount task0.my_job

  • 手动创建并获取挂载点,并将挂载点挂载到task0.my_job实例中:

    fastgpu mount task0.my_job example.cn-hangzhou.nas.aliyuncs.com

  • 为集群所有实例挂载NAS文件系统:

    fastgpu mount {my_job}

fastgpu run {instance_name} {cmd}
在指定实例中执行shell命令。

参数说明:

cmd:需要执行的命令。

  • 查询task0.my_job实例的IP:

    fastgpu run task0.my_job ifconfig

  • 查询my_job集群下所有实例的IP:

    fastgpu run {my_job} ifconfig

fastgpu addip {instance_name}
fastgpu addip {instance_name} {your_public_ip}
fastgpu addip {instance_name} {your_public_ip} {port_range}
fastgpu addip {instance_name} {your_public_ip} {port_range} {description}
fastgpu addip -a {your_public_ip} {port_range} {description}
为指定实例的安全组添加可访问的公网IP。
参数说明:
  • your_public_ip:将要访问实例机器的公网IP。
  • port_range:端口范围。以/分隔。
  • description:对添加的公网IP进行说明。
  • -a:默认安全组。
  • 将本机公网IP的22端口添加到默认安全组中:

    fastgpu addip -a

  • 将本机公网IP的22端口添加到task0.my_job实例中的安全组中:

    fastgpu addip task0.my_job

  • 允许IP地址为203.0.113.0的机器访问task0.my_job实例的2000-3000端口:

    fastgpu addip task0.my_job 203.0.113.0 2000/3000

    fastgpu addip task0.my_job 203.0.113.0 2000/3000 "open 2000-3000 port"

  • 允许IP地址为203.0.113.0的机器访问my_job集群中的所有机器的2000~3000端口:

    fastgpu addip {my_job} 203.0.113.0 2000/3000

fastgpu deleteip {instance_name}
fastgpu deleteip {instance_name} {your_public_ip}
fastgpu deleteip {instance_name} {your_public_ip} {port_range}
fastgpu deleteip -a
将IP从某一实例安全组中移除。
参数说明:
  • your_public_ip:已经添加到安全组的公网IP。
  • port_range:端口范围,以/分割。
  • -a:删除22端口下的所有公网IP。
  • 将本机公网IP从task0.my_job实例安全组中移除:

    fastgpu deleteip task0.my_job

  • 将IP地址为203.0.113.0的机器从实例安全组移除:

    fastgpu deleteip task0.my_job 203.0.113.0

  • 移除IP地址为203.0.113.0的机器访问2000-3000端口的权限:

    fastgpu deleteip task0.my_job 203.0.113.0 2000/3000

  • 将task0.my_job实例22端口下所有IP从安全组中移除:

    fastgpu deleteip -a task0.my_job

  • 将IP地址为203.0.113.0的机器从my_job集群下的所有实例中删除:

    fastgpu deleteip {my_job} 203.0.113.0

fastgpu queryip
fastgpu queryip -a
fastgpu queryip {instance_name}
查询实例的安全组IP,默认只查询22端口对应的IP。

参数说明:

-a:查询所有端口的IP。

  • 查询所有实例的22端口安全组IP:

    fastgpu queryip

  • 查询task0.my_job实例的22端口安全组IP:

    fastgpu queryip task0.my_job

  • 查询task0.my_job实例所有端口对应的安全组IP:

    fastgpu queryip -a task0.my_job

fastgpu addpub {string of id_rsa.pub}
将本机公钥添加进指定实例。

参数说明:

string of id_rsa.pub:公钥路径。

~/.ssh/id_rsa.pub内容添加到实例中:

fastgpu addpub

fastgpu rename {instance_name} {instance_new_name}
fastgpu rename {instance_id} {instance_new_name}
重命名实例。
参数说明:
  • instance_new_name:实例的新名称。
  • instance_id:实例ID,可用describe命令进行查询。
将task0.my_job实例重命名为my_new_ins:

fastgpu rename task0.my_job task0.my_new_ins

fastgpu tmux {instance_name}
使用SSH连接到实例,并使用默认的tmux进程。 登录task0.my_job实例,并创建一个tmux进程:

fastgpu tmux task0.my_job

fastgpu deletekeypair
删除本机的密钥对。
说明 如果有实例正在使用此密钥对,删除该密钥对后,实例将会无法正常被连接和查询,但您可以通过fastgpu ls -a命令查询到。
删除~/.fastgpu/下对应的密钥对:

fastgpu deletekeypair

fastgpu createkeypair
在本机创建一个密钥对,后续实例的创建以及连接都会使用此次创建的密钥对。 在本机~/.fastgpu/下创建一个密钥对:

fastgpu createkeypair

fastgpu attachkeypair {instance_name}
将密钥对绑定到实例中。
  • ~/.fastgpu/下的密钥对绑定至task0.my_job实例:

    fastgpu attachkeypair task0.my_job

  • ~/.ncluster/下的密钥对绑定至my_job集群:

    fastgpu attachkeypair {my_job}

fastgpu detachkeypair {instance_name}
从实例中分离密钥对。
说明 分离后将无法正常连接和查询该实例,建议您使用attachkeypair命令重新绑定后,即可恢复正常连接和查询。
  • 分离task0.my_job实例密钥对:

    fastgpu detachkeypair task0.my_job

  • 分离my_job集群下所有实例的密钥对:

    fastgpu detachkeypair {my_job}

fastgpu notebooksample {instance_name} {passwd_of_login}
在指定实例中创建部署jupyter notebook项目示例。
  • 默认密码:AIACC。
  • 项目实例:tensorflow-1.14-python36。

参数说明:

passwd_of_login:指定jupyter-notebook服务器密码。

在task0.my_job实例中创建并部署项目示例:

fastgpu notebooksample task0.my_job

fastgpu cuda {instance_name} {gpu_driver_version} {cuda_version} {cudnn_version}
为指定实例安装驱动,CUDA和cuDNN组件。默认值为:
  • nvidia-driver:460.91.03。
  • cuda-version:11.2.2。
  • cudnn-version:8.1.1。
参数说明:
  • gpu_driver_version:需要安装的GPU驱动版本号。
  • cuda_version:需要安装的CUDA版本号。
  • cudnn_version:需要安装的cuDNN版本号。
  • 在task0.my_job实例中安装CUDA的默认版本:

    fastgpu cuda task0.my_job

  • 在task0.my_job实例中安装GPU驱动,CUDA和cuDNN,GPU驱动版本为460.91.03,CUDA版本号为11.2.2,cuDNN版本号为8.1.1:

    fastgpu cuda task0.my_job 460.91.03 11.2.2 8.1.1

fastgpu conda {instance_name}
fastgpu conda {instance_name} -f {conda_yaml_file}
fastgpu conda {instance_name} -h
fastgpu conda {instance_name} --cuda 10.0 -tf -v 1.15.0
为指定实例安装Conda,并创建出指定的Python、CUDA版本的虚拟环境。
参数说明:
  • -h:查看帮助。
  • -f或--yaml:按照指定的YAML文件安装Conda。
  • -cu或--cuda:指定CUDA版本。支持:{11.0,10.2,10.1,10.0}
  • -py或--python:指定使用Python版本。支持:{3.5,3.6,3.7,3.8}
  • -tf或--tensorflow:指定使用TensorFlow为主框架。
  • -pt或--pytorch:指定使用PyTorch为主框架。
  • -mx或--mxnet:指定使用MXNet为主框架。
  • -v、--vers或--framework_version:指定主框架版本。
说明 TensorFlow、PyTorch以及MXNet三个指定框架参数不支持同时存在。
  • 为task0.my_job实例安装Conda,不安装任何虚拟环境:

    fastgpu conda task0.my_job

  • 为my_job集群中所有实例安装Conda:

    fastgpu conda {my_job}

  • 为task0.my_job实例安装Conda,并配置Python 3.6,CUDA 11.0以及PyTorch 1.7.0虚拟环境:

    fastgpu conda -py 3.6 -cu 11.0 -pt -v 1.7.0

fastgpu allconda {instance_name}
在指定实例中安装所有支持的Conda环境。
说明 安装过程耗时较长。
  • 为task0.my_job安装所有的conda环境:

    fastgpu allconda task0.my_job

  • 为my_job集群安装所有的conda环境:

    fastgpu allconda {my_job}

fastgpu replaceimage {instance_name} {image_id}
替换指定实例的镜像。

参数说明:

image_id:需要替换的镜像名称或镜像ID。

  • 将task0.my_job实例的镜像替换为CentOS:

    fastgpu replaceimage task0.my_job centos_8_2_x64_20G_alibase_20210712.vhd

  • 将my_job下所有实例替换为CentOS:

    fastgpu replaceimage {my_job} centos_8_2_x64_20G_alibase_20210712.vhd

配置文件示例

示例文件create.cfg内容如下,参数请参考的fastgpu create命令的相关说明。

[fastgpu]
name=fastgpu-v100
machines=1
system_disk_size=500
data_disk_size=0
image_name=
image_type=ubuntu_18_04
instance_type=ecs.gn6v-c8g1.2xlarge
spot=False
confirm_cost=False
mount_nas=True
vpc_name=fastgpu-vpc
install_cuda=True

[cmd]
install_script=pwd