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