您可以通过FastGPU提供的Python接口,将FastGPU集成到您的人工智能训练或推理脚本中,从而快速地实现云上部署和资源管理。本文为您介绍FastGPU的Python SDK相关使用说明。
客户端已安装Python 3.6或以上版本。 说明 您的ECS实例、本地机器、阿里云Cloud Shell工具等均可以作为客户端安装FastGPU来构建人工智能计算任务。 已获取阿里云访问密钥(AccessKey)。更多信息,请参见创建AccessKey。 执行以下命令,安装FastGPU软件包。 执行以下命令,配置环境变量。 配置环境变量时,需要您提前在您的ECS实例、本地机器或阿里云Cloud Shell工具上,获取阿里云账号AccessKey(AccessKey ID和AccessKey Secret)、默认地域以及默认可用区等信息。更多信息,请参见地域和可用区。 执行以下命令,在Python代码中导入FastGPU模块。 fastgpu.make_job方法会自动按规则创建实例集合。如果实例集合已存在,则返回实例集合。 上述示例涉及的参数说明如下: 参数名称 是否必填 参数说明 参数示例 name 是 实例集群名称。 默认值:空。表示从当前现有的资源中获取。 指定实例集群名称为fastgpu_test,即 instance_type 是 实例类型。 您可以使用命令行 指定实例类型为单卡V100机型,即 num_tasks 否 创建实例的数量。 默认值:1。 指定创建一个实例,即 install_script 否 实例初始化脚本。 默认值:空。表示不执行任何命令。 初始化完成后,启动SSH服务,即 image_name 否 实例镜像名称。 默认值:空。表示将会自动使用Alibaba Cloud Linux 2.1903作为默认镜像。 更多镜像名称可通过命令行 指定镜像名称为CentOS,即 image_type 否 实例镜像类型。 您可以将参数指定为操作系统类型 设置镜像类型为ubuntu 16.04,即 disk_size 否 设置数据盘大小。 默认值:500,单位:GB。 设置数据盘大小为500 GB,即 spot 否 是否为抢占式实例。 默认值:False。 设置为抢占式实例,即 confirm_cost 否 确认是否跳过消费警告。 默认值为False,即不跳过消费警告,创建实例过程中会弹出输入确认项。 设置跳过消费警告,即 install_cuda 否 设置是否为GPU自动安装驱动。 默认值为False,即不安装驱动。 设置为GPU自动安装驱动,即 mount_nas 否 设置是否自动挂载NAS盘。 更多信息,请参见什么是文件存储NAS。 设置自动挂载NAS盘,即 返回值:返回一个Job对象,代表一个实例集群,实例集群可以通过访问Tasks成员访问到具体单个实例。job可以包含若干Task,关系如下图所示: 代码示例:创建一个名称为fastgpu_test的job,该Job是包含2个实例(task)的对象,您可以通过访问Job对象的Tasks来访问创建出的实例列表。具体示例代码如下: 集群或实例运行指定命令,运行完成后会将输出保存到指定目录下。 上述运行命令的参数说明如下: 参数名称 参数说明 参数示例 sudo 是否以管理员权限运行命令。 默认值为False,即不以管理员权限运行。 设置以管理员权限运行,即 non_blocking 是否非阻塞运行命令。 默认值为False,即执行过程中等待直到执行完成。 设置非阻塞执行,即 ignore_errors 是否忽略报错。 默认值为False,即执行遇到异常则终止程序,报错时会显示异常。 设置忽略执行报错,即 max_wait_sec 最大超时时间,单位:秒。 默认值:365*24*3600(1年)。 设置最大超时时间为1小时,即 show 运行结束后是否输出结果。 默认值为False。 设置运行后输出结果,即 show_realtime 是否实时输出运行结果。 默认值为False。 设置实时输出显示,即 代码示例: 上传文件到集群或单个实例 上述运行命令的参数说明如下: 参数名称 是否必填 参数说明 参数示例 Iocal_fn 是 本地文件路径。 设置需要上传到实例的文件路径,即 remote_fn 否 上传目标路径。 默认值:空。表示上传到和local_fn相同的路径下。 设置实例内文件路径,即 dont_overwrite 否 是否覆盖原有文件。 默认值为False,表示自动覆盖已存在的文件。 设置为不覆盖原有文件,即 从集群或单个实例下载文件到本地 重要 当机器数量大于2台时,集群下载文件会引入文件冲突,不建议使用。 上述运行命令的参数说明如下: 参数名称 是否必填 参数说明 参数示例 remote_fn 是 远程文件路径。 设置第i个实例中的文件路径,即 local_fn 否 本地文件路径。 默认值:空。表示下载到和remote_fn相同的本地路径下。 设置下载到本地的文件路径,即 代码示例:为集群中所有实例上传文件,并通过某一个实例下载到本地。 停止集群或单个实例。 代码示例: 上述运行命令的参数说明如下: 参数名称 参数说明 参数示例 keep 是否保持计费。 默认值为False,即不计费。 设置停止后仍计费,即 force 是否强制停止。 默认值为False,表示不强制停止,遇到无法退出的程序可能阻塞。 设置强制停止,即 永久删除集群或实例,释放实例占用的资源。 重要 实例释放后,实例ID、固定公网IP、系统盘、设置随实例释放的数据盘等数据和资源将随之释放且不可恢复,EIP、设置不随实例释放的数据盘等独立的资源将自动解绑。请慎重执行释放操作。 代码示例:强制停止并释放一个正在运行的实例。 上述运行命令的参数说明如下: 参数名称 参数描述 参数示例 force 是否强制停止。 默认值为False,即无法释放正在运行中的实例。 设置强制停止,即前提条件
环境准备
pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.5-py3-none-any.whl
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 # (选填)填入您希望使用的地域的可用区
import fastgpu
创建或获取实例
job = fastgpu.make_job(
name: str="", # (必填)设置实例集群名称
instance_type: str="", # (必填)设置实例类型
num_tasks: int=0, # 设置创建实例个数
install_script: str="", # 设置初始化命令
image_name: str="", # 设置镜像名称
image_type: str="", # 设置镜像类型
disk_size: int=500, # 设置数据盘大小
spot: bool=False, # 设置是否抢占式实例
confirm_cost: bool=False, # 设置是否跳过消费警告
install_cuda: bool=False, # 设置是否自动安装GPU驱动
mount_nas: bool=False # 设置是否挂载NAS盘
)
name="fastgpu_test"
。fastgpu querygpu
查询GPU实例规格,更多信息,请参见GPU实例规格族。instance_type="ecs.gn6v-c8g1.2xlarge"
。num_tasks=1
。install_script="systemctl start sshd"
。fastgpu queryimage
进行查询。image_name="centos_8_5_x64_20G_alibase_202111129.vhd"
"aliyun"/"ubuntu"/"centos"
,也可以指定系统版本,例如"ubuntu_18_04"/"centos_7_9"
。image_type="ubuntu_16_04"
。disk_size=500
。spot=True
。confirm_cost=True
。install_cuda=True
mount_nas=True
。job = fastgpu.make_job(...) # 创建Job
job.run("ls -l") # 集群执行ls -l命令
job.tasks[0].run("ls -l") # 单个实例(task0)执行命令
job = fastgpu.make_job(
name="fastgpu_test", # 实例集群名称
num_tasks=2, # 实例数量,创建2个实例
instance_type="ecs.gn6v-c8g1.2xlarge", # 实例类型
image_type="ubuntu_18_04", # 实例镜像类型,比如为Ubuntu 18.04
disk_size=500, # 数据盘大小为500 GB
confirm_cost=True, # 是否确认消费警告
spot=True, # 是否抢占型实例
install_cuda=True, # 是否自动安装GPU驱动
mount_nas=True # 是否自动挂载NAS盘
)
task1 = job.tasks[0]
task2 = job.tasks[1]
运行命令
# 支持整个集群运行命令job.run(cmd, # 运行的命令
sudo=False, # 是否以管理员权限运行
non_blocking=False, # 是否以非阻塞运行任务
ignore_errors=False, # 是否忽略错误,默认如果执行报错,则抛出一个异常
max_wait_sec=365*24*3600, # 最大超时时间
show=False, # 运行结束后是否输出结果
show_realtime=False # 是否实时打印输出
)# 同理也支持单实例运行命令job.tasks[i].run(cmd, ...)
sudo=True
。non_blocking=True
。ignore_errors=True
。max_wait_sec=3600
。show=True
。show_realtime=True
。# 集群运行 "ls",列出每个实例工作目录下的文件和文件夹job.run("ls")# 单实例运行 "ls", 列出第i个实例工作目录下的文件和文件夹job.tasks[i].run("ls")
文件传输
# 上传文件到集群job.upload(local_fn: str, remote_fn: str="", dont_overwrite: bool=False)# 上传文件到集群中第i个实例job.tasks[i].upload(local_fn: str, remote_fn: str="", dont_overwrite: bool=False)
local_fn="/root/test_download.fn"
。remote_fn="/root/test.txt"
dont_overwrite=True
。# 集群下载文件job.download(remote_fn, local_fn: str="")# 集群中第i个实例下载文件job.tasks[i].download(remote_fn, local_fn: str="")
remote_fn="/root/test.txt"
。local_fn="/root/test_download.fn"
。# 上传/root/test.txt到集群中所有实例的/root/下job.upload("/root/test.txt")# 从task[0]实例中下载txt文件到当前路径下job.tasks[0].download("/root/test.txt", "./test.txt")
停止实例
# 停止整个集群的实例。job.stop(
keep=False, # 停止集群后,是否仍然计费
force=False # 是否强制停止
)# 停止集群中第i个实例job.tasks[i].stop(
keep=False, # 停止实例后,是否仍然计费
force=False # 是否强制停止
)
job.stop(force=True, keep=True) # 强制停止整个集群,并保持收费
keep=True
。force=True
。释放实例
job.kill() # 释放整个集群
job.tasks[i].kill() # 释放单个实例
# 强制释放集群以及集群中的实例,即使实例处于Running状态job.kill(force=True)# 释放单个实例,此实例应处于停机状态job.tasks[i].kill()
force=True