在 CloudShell 中开发部署人工智能计算

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: Cloud Shell 正式集成 Jupyter Notebook 和 FastGPU,您可以在 Cloud Shell 中随时随地在线使用 Jupyter Notebook + FastGPU,方便快速的开发人工智能计算,并一键将人工智能计算构建在阿里云的 IAAS 资源上。

首先,可以试想一下,要在云上部署一个人工智能训练任务,需要做哪些工作?

大体的部署架构如上图所示。首先训练任务需要一个 GPU 的集群,里面需要配置智能训练所需的环境,还需要挂载 CPFS/NAS 这样的存储资源,来存储和共享训练数据。整个过程包括:购买 GPU 实例、购买挂载存储资源、配置实例环境、配置网络环、开发上传训练代码境等等。整个过程费时费力。

工欲善其事必先利其器,在 Cloud Shell 中使用 Jupyter Notebook + FastGPU,可以省时省力的帮助开发者完成开发和部署的工作。

FastGPU

针对人工智能训练的场景,阿里云提供了 FastGPU 工具,是一套构建在阿里云上的人工智能训练的部署工具,提供便捷的接口和自动化工具实现人工智能训练/推理计算在阿里云 IAAS 资源上的快速部署.它包含两套组件:

  • ncluster 运行时组件,它是个 python 库,提供便捷的 API 将线下的人工智能训练/推理脚本快速的部署在阿里云IAAS资源上进行计算
  • ecluster 命令行组件,提供便捷的命令行工具用于管理阿里云上人工智能计算的运行状态和集群的生命周期。

使用 FastGPU 进行人工智能训练,用户的起点(source)为数据和训练代码,FastGPU 组件将帮助用户自动完成中间训练过程,包括计算/存储/可视化资源的生命周期的管理等等,用户最终获取训练完成后的模型/日志等(destination)。

可以看到人工智能训练的全部流程(购买实例——启动实例——构建 gpu 环境——部署项目代码——启动训练——运行推理),通过 FastGPU 一个脚本就可以一键完成人工智能训练的整个个过程。整个脚本的编写也十分简单,通过 ncluster 的 make_job,可以创建所需要的资源,还可以方便的定义所需资源数量、实例类型、实例镜像等等。接着通过 upload 方法,可以将本地的文件上传到实例上去,最后通过 run 方法,可以在实例上执行任意命令。比如启动 training,启动 inferrence 等等。

最后通过 FastGPU 提供的第二个组件,ecluster 命令行,来管理任务和资源的运行状态和生命周期。例如启停任务,创建销毁资源等等。比如下图通过 ecluster ls 来展示所有训练的实例资源。

CloudShell

Cloud Shell 是阿里云提供的云命令行产品,它是免费的网页版命令行工具,允许用户使用浏览器启动命令行进而管理阿里云资源。在启动时会自动为用户分配一台 Linux 管理机,并预装 Aliyun CLI、Terraform、kubectl、fastgoup 等多种云管理工具。

针对人工智能训练的场景,使用 Cloud Shell 可以快速的完成云上的模型训练、资源管理、应用部署等工作,Cloud Shell 内置了 FastGPU,也是目前 FastGPU 唯一的使用渠道,我们可以通过 FastGPU 来购买配置 GPU 实例,完成训练模型的部署和运行。当然 Cloud shell 还具备很多便捷的特性,首先它是完全免费的,每次使用会自动创建一台 Linux 虚拟机,通过浏览器可以随时随地使用,同时支持绑定 NAS 等存储空间,保证个人文件的永久存储,同时内置了众多工具和开发环境,像数据库工具 Mysql Client、容器群里工具 Kubectl、Heml,编排工具 Terraform、Ansible、代码管理工具 Git 等等,开发环境包括 Node、Java、Go、Python,常用的基本都已经涵盖。最重要的是会保障使用的安全,每个用户分配的虚拟机都是完全独立、相互隔离的。

Jupyter Notebook

Jupyter Notebook 是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果等。使用 Jupyter Notebook 可以方便的一站式开发、部署和运行我们的训练任务。

由于 Jupyter Notebook 是基于网页使用的,因此 Cloud Shell 除了内置 Jupyter Notebook 外,也提供了网页预览的功能,我们可以在 Cloud Shell 直接使用。

首先启动 Jupyter Notebook

jupyter notebook --ip=0.0.0.0 --port=65000 --no-browser --NotebookApp.allow_origin=*

目前 Cloud Shell 只允许在固定几个端口上进行网页预览,因此 Jupyter Notebook 需要启动到支持预览的几个端口上。然后在 Cloud Shell 右上角,打开对应端口的网页预览。

实操示例

我们来看一个真实的使用 FastGPU 部署人工智能训练的代码示例

#!/usr/bin/env python

import argparse
import ncluster
import os
import time
from ncluster import ncluster_globals

# setting parameters
INSTANCE_TYPE = 'ecs.gn6v-c8g1.2xlarge'
NUM_GPUS = 1

ncluster.set_backend('aliyun')
parser = argparse.ArgumentParser()
parser.add_argument('--name', type=str, default='fastgpu-gtc-demo',
                    help="name of the current run, used for machine naming and tensorboard visualization")
parser.add_argument('--machines', type=int, default=1,
                    help="how many machines to use")
args = parser.parse_args()

def main():
  print('start job ...')
  start_time = time.time()

  # 1. create infrastructure
  supported_regions = ['cn-huhehaote', 'cn-shanghai', 'cn-zhangjiakou', 'cn-hangzhou', 'cn-beijing']
  assert ncluster.get_region() in supported_regions, f"required AMI {IMAGE_NAME} has only been made available in regions {supported_regions}, but your current region is {ncluster.get_region()} (set $ALYUN_DEFAULT_REGION)"
  
  ncluster_globals.set_should_disable_nas(True)

  job = ncluster.make_job(name=args.name,
                          run_name=f"{args.name}-{args.machines}",
                          num_tasks=args.machines,
                          instance_type=INSTANCE_TYPE,
                          disable_nas=True,
                          spot=True,
                          install_script='') 

  init_ncluster = time.time()
  print('init ncluster:', init_ncluster - start_time)

  # 2. upload code
  job.upload('GTC')
  job.run('cd GTC && conda activate torch_1.3_cu10.0_py36') 
  upload_data = time.time()
  print('upload_data time:', upload_data - init_ncluster)

  # 3. run the training job
  job.tasks[0].run('conda activate torch_1.3_cu10.0_py36')
  job.tasks[0].run('./train.sh 2>&1 | tee logs.log', non_blocking=False)
  train_time = time.time()
  print('training time:', train_time - unzip_time)

  # 4. run the inference job
  job.tasks[0].run('python inference.py 2>&1 | tee logs.inference.log', non_blocking=False)
  print('inference time:', time.time() - train_time)

  eclapse_time = time.time() - start_time
  print(f'training and inference deploy time is: {eclapse_time} s.')

  # 5. stop the instance (optional)
  # job.stop()

if __name__ == '__main__':
  main()

示例中首先定义了一些参数变量,包括实例类型,这里采用的是采用单机单卡 V100 的实例,配置了实例名称、实例数量,这里简单起见,就只生产 1 台机器。

然后通过 make_job 来创建基础设施,示例中没有设置 image_name 镜像名称,会使用默认镜像,是 CentOS 的阿里 AI 云加速镜像,里面集成了 TensorFlow/pytorch 等各种框架。然后关闭了 NAS 绑定,同时通过 Spot 来表示生产一个抢占式实例。

这里通过 run 方法,可以在生产出来的实例上执行命令。接着通过 upload 方法上传训练脚本的文件夹(示例中的训练脚本放到了 GTC 文件夹下)。upload 方法默认会将文件上传到实例的根目录下。然后开始 run training,先激活 python 特定深度学习环境。然后调用训练脚本:train.py。训练完成后,执行推理脚本。

最后,可以通过 stop 方法来停止任务,这时 GPU 实例也会被停止,停止实例本身不会产生费用了。

这样一个部署和运行的脚本就写好了。最后执行该脚本。FastGPU 会自动的检测有效可用的可用区,自动创建 VPC、虚拟机、安全组以及 ECS,并自动开始训练等等。

完整的操作示例,您可以参考云上极速部署手势识别训练任务和场景应用的直播视频。

目录
相关文章
|
3月前
|
人工智能 分布式计算 算法框架/工具
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章 随着人工智能技术的飞速发展,越来越多的企业开始关注并投入到AI的研究和应用中。阿里巴巴作为全球领先的科技公司,也在AI领域做出了卓越的贡献。今天,就让我们一起来揭开阿里巴巴PAI的神秘面纱,了解这个强大的AI平台如何引领人工智能计算的新篇章。 PAI,全称阿里巴巴公共AI平台,是一个集数据准备、模型开发与训练、模型部署于一体的综合性AI平台。PAI的业务架构分为五层,从基础设施层到业务层,涵盖了AI计算的全过程。
60 2
|
7月前
|
存储 人工智能 搜索推荐
SuperAGI 一个开发优先的开源自主人工智能代理框架
供应、生成和部署自主人工智能代理
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
未来人工智能在后端开发中的应用前景
随着人工智能技术的不断发展,后端开发领域也迎来了新的机遇与挑战。本文探讨了人工智能在后端开发中的应用前景,分析了其对传统开发模式的影响和未来发展趋势。
|
1月前
|
人工智能 运维 数据库
未来的后端开发:人工智能与云计算的融合
【2月更文挑战第10天】 传统的后端开发一直依赖于对数据库、服务器和网络等底层技术的熟练运用,然而随着人工智能和云计算技术的飞速发展,未来的后端开发方向也将发生深刻的变革。本文将探讨人工智能与云计算在后端开发中的应用前景,以及它们将如何重塑后端开发的方式和手段。
|
1月前
|
存储 人工智能 固态存储
掌握未来:打造适用于AI人工智能开发的理想电脑配置指南
在当下技术快速发展的时代,人工智能(Artificial Intelligence, AI)已然成为大势所趋。从语音助手到自动驾驶汽车,AI的应用日渐普及。作为计算机科学的一个分支,AI侧重于创造能够执行各种复杂任务的智能机器。为了进行有效的AI研发,一个强大的电脑配置是必不可少的。本文旨在为AI开发者提供一份详尽的电脑配置建议,帮助您在这个时代浪潮中占得先机。
|
2月前
|
机器学习/深度学习 人工智能 安全
探索未来:人工智能在后端开发中的应用前景
【2月更文挑战第5天】随着人工智能技术的不断进步,后端开发领域也迎来了新的机遇与挑战。本文将探讨人工智能在后端开发中的应用前景,从数据处理、系统优化到安全性保障等方面展开讨论,展望未来人工智能与后端开发的紧密结合将为我们带来怎样的变革。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
无代码开发的未来:人工智能与无代码的结合
无代码开发与人工智能的结合是未来软件开发领域的一个重要趋势。这种结合将为无代码开发带来更多的可能性,使得开发过程更加智能化、高效化和自动化。
34 0
|
5月前
|
人工智能 新能源 大数据
王坚院士谈ChatGPT:计算是对人工智能最关键的技术
王坚院士谈ChatGPT:计算是对人工智能最关键的技术
63 0
王坚院士谈ChatGPT:计算是对人工智能最关键的技术
|
6月前
|
传感器 机器学习/深度学习 中间件
CLAID:关闭人工智能和数据收集的循环——一个用于智能边缘云和数字生物标记应用的跨平台透明计算中间件框架
CLAID:关闭人工智能和数据收集的循环——一个用于智能边缘云和数字生物标记应用的跨平台透明计算中间件框架
95 0
|
9月前
|
机器学习/深度学习 人工智能 算法
Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
134 0

热门文章

最新文章