AI 公有云实践 范融 UCloud 深度学习工程师 第 1 页
目录 为什么要建设 AI UCloud AI 基础平 利用 AI 平台加速训 公有云平台 台架构 练实例 第 2 页
为什么要建设 AI 公有云平台 第 3 页
AI 运用的各类场景 零售 安防 医疗 教育 艺术 游戏 金融 第 4 页
AI 技术的各类选择 TensorFlow VGG CNTK VGG + LSTM MXNet 框 算 ResNet 架 法 多 样 多 样 LSTM Fast-RCNN + LSTM Caffe 性 性 Theano Keras Fast-RCNN 第 5 页
AI 项目研发周期 选择 AI 框架 选择场景 选择训练环境 选择推理环境 选择算法 第 6 页
AI 平台需求 ( 技术平台 ) TensorFlow Caffe VGG VGG + LSTM MXNet LSTM Fast- RCNN Keras Fast-RCNN + LSTM ResNet AI 基础平台 计算 CPU GPU 存储 S3 NSF HDFS 网络 单节点 分布式 第 7 页
AI 平台需求 ( 项目需求 ) 项目组资源需求曲线 12 10 8 6 资源闲置 计算资源 4 损坏, 资 2 源不足 ++ 0 0 4 8 12 16 20 需求 配置 第 8 页
AI 平台的兼容性 算法兼容性 更好地兼容各类 AI 框架和算法 平台扩展性 平台具备横向扩展能力, 支持业务规模的不断扩大 分布式化 具备弹性伸缩的能力以及容灾能力 同时可以支持 CPU GPU 等各种计算设备 纵向扩展 同时可以支持 S3 NFS HDFS 等多种存储类型 易用性 上手简单, 方便进行代码迁移 第 9 页
UCloud AI 基础平台架构 第 10 页
UCloud AI 平台整体架构 训练日志 TensorBoard TensorFLow Keras Caffe MXNet 图形化界面 Python SDK 接入层 Task Scheduler Task Scheduler AI Train Fault Tolerancer AI Inference Fault Tolerancer 训练平台 在线推理平台 Task Monitor Load Balancer Data Store 存储接入 GPU CPU KNL UFile(S3) UFS(NFS) HDFS 第 11 页
UCloud AI 训练平台 GPU 节点 TensorFlow 部署 GPU 节点 MXNet Caffe 任务调度 GPU 节点 GPU 节点 数据 存储 Keras GPU 节点 GPU 节点 第 12 页
UCloud AI 在线推理平台 TensorFlow 负载均衡器 负载均衡器 部署 Service Service Service Service Service Service Caffe 节点 节点 节点 节点 节点 节点 MXNet 负载均衡器 负载均衡器 Keras Service 节点 Service 节点 Service 节点 Service 节点 Service 节点 Service 节点 空闲 空闲 空闲 空闲 空闲 空闲 节点 节点 节点 节点 节点 节点 Service 平台 第 13 页
兼容性好的运行环境 统一基础镜像 ( 开 Ubuntu 14.04/16.04 + Python 2.7/3.6 numpy pillow scipy opencv_python cython 源 ) 无需用户考虑 GPU CPU 自动支持 GPU 加速 cuda 8 cudnn6/cudnn5 cuda 7 cudnn5/cudnn4 OpenBlas MKL/MKL- DNN 分类基础镜像 ( 开源 ) 用户根据实际使用选择 支持各类 AI 框架 TensorFlow 1.4 Caffe1.0.0 MXNet 0.11.0 Keras+TF1.2 TensorFlow 1.4 Intel Caffe MXNet 0.11.0 Keras+TF1.2 用户自定义镜像 用户编写代码 算法, 代码 第 14 页
兼容性好的运行环境 封装 运行环境完全隔离, 不同任务之间不会产生软件冲突 预装 基础镜像内置各类基础软件环境, 减少使用者环境准备开销 自由 可以自由安装各类软件包, 封装各类算法 可重用 算法的容器镜像可以重复使用 兼容性 GPU 容器镜像可以在任意类型 GPU 节点运行 CPU 容器镜像可以在任意类型 CPU 节点运行 第 15 页
灵活接入的数据源 GPU 主机 CPU 主机 本地存储 NFS 本地存储 NFS 接口转义带宽控制权限控制完整性检查 数据接入层 对象 存储 HDFS NFS 本地 存储 第 16 页
灵活接入的数据源 封装 计算节点逻辑不需要支持各种存储接口, 仅需要通过 2-3 种 ( 例 如本地存储 NFS) 接口就可以对接各类存储类型 灵活 通过扩展数据接入层可接入的存储类型, 也就可以扩展 AI 平台 的数据接入类型 弹性 数据接入层作为中间层可以承载更大的数据访问流量 安全 数据接入层可以做数据流量控制, 确保各个任务的 SLA, 同时 对后端的数据存储系统进行带宽 流量保护 第 17 页
弹性资源调节 上海区域 负载均衡 Set0 Set1 Set2 负载均衡 请求 ( 任务 ) 调度集群节点发现 Kubernutes 集群节点注册 北京区域 CPU GPU ( 单卡 ) GPU ( 多 卡 ) 第 18 页
弹性资源调节 兼容 根据训练实际算力需求申请不同机型 弹性 多项目共享资源池, 即使申请, 即时分配, 即时使用 随时扩容缩容, 无资源浪费 托管 资源池计算节点损坏自动退出集群, 任务恢复, 不影响 AI 业务 第 19 页
利用 AI 平台加速训练实例 第 20 页
利用 AI 平台加速训练实例 图像分类算法 图像分类算法 其他开源资源共享 简介 云上加速 第 21 页
图像分类案例 cifar 数据集 Cifar10 数据集 十类物体图片 (10*6000 张 ) + 相应标签 大小为 32*32 的 RGB 图像 50000 份训练数据 10000 份测试数据 第 22 页
图像分类神经网络 卷积计算 第 23 页
图像分类神经网络 卷积计算 第 24 页
图像分类神经网络 卷积核 需要卷积的图像 卷积计算 第 25 页
图像分类神经网络 卷积计算 卷积运算 提取图像中的特征 ; 不同的卷积核提取不同的特征 ; 卷积核 训练卷积神经网络, 实际上也就是训练每一个卷积层的卷积核, 让这些卷积核对特定的模式有高的激活, 以达到 CNN 网络的分类 / 检测等目的 卷积计算 第 26 页
图像分类神经网络 池化计算 池化运算 提取主要特征 ; 减小计算复杂度 池化计算过程 第 27 页
图像分类神经网络 神经网络构建 conv1 conv2 Fully connected Fully connected layer layer Fully connected layer softmax conv relu pool norm 5 第 28 页
利用 AI 平台加速训练实例 图像分类算法 图像分类算法 其他开源资源共享 简介 云上加速 第 29 页
图像分类 ( 训练过程 ) 1 操作环境准备 Linux 环境或类 Linux 环境 安装 docker 安装 UFIle SDK 安装 Ucloud AI SDK 2 代码和数据准备 准备训练代码 代码下载地址 : https://github.com/ucloud/uai-sdk/tree/master/examples/tensorflow/train/cifar_simple 第 30 页
图像分类 ( 训练过程 ) 打包方法 UAI-SDK 提供的打包工具 :tf_tool.py UAI-SDK 自定义打包工具 :base_tool.py 通过 Dockerfile 来打包镜像 以 Dockerfile 打包为例 1 创建 Dockerfile FROM uhub.service.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_tensorflow-1.4.0:v1.0 ADD./code/ /data/code/ 设置基础镜像 :uhub.service.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_tensorflow-1.4.0:v1.0 将./code/ 拷贝到 docker 镜像的 /data/code/ 目录下 2 编译镜像 Sudo docker build t uhub.service.ucloud.cn/uai_demo/cifar-train-gpu:v1.0 f cifar.dockerfile. 第 31 页
图像分类 ( 训练过程 ) 4 上传镜像 将镜像上传至 UHub 容器镜像库中以备调用 Sudo docker push uhub.service.ucloud.cn/uai_demo/cifar-train-gpu:v1.0 5 下载并上传数据 下载数据 sudo docker run -it -v /data/data:/data/data uhub.service.ucloud.cn/your_uhub_registry/cifar-train-cpu:v1.0 /bin/bash -c "python /data/data/download.py" 将数据上传至 UFile 平台./filemgr-linux64 --action mput --bucket uai-demo --dir /data/data/ --prefix /cifar/train/ 第 32 页
图像分类 ( 训练过程 ) 6 平台训练 选择相应的训练镜像 : uhub.service.ucloud.cn/uai_demo/cifar-train-gpu:v1.0 设置输入数据路径 设置输出数据路径 训练命令 /data/code/cifar10_train.py 第 33 页
图像分类 ( 训练过程 ) 7 获取训练结果 训练结果将自动上传到 Ufile 指定的输出中 通过命令行或 UFile 界面下载训练结果例 :./filemgr-linux64 --action download --bucket uai-demo --key cifar_simple/train/output/model.ckpt-11428.data-00000-of-00002 - -file /data/model.ckpt-11428.data-00000-of-00002 第 34 页
图像分类 ( 在线推理 ) 1 操作环境准备 Linux 环境或类 Linux 环境 安装 docker 安装 UFIle SDK 安装 Ucloud AI SDK 2 模型和推理服务代码准备 准备推理服务代码 准备模型文件 第 35 页
图像分类 ( 在线推理 ) # 加载模型 推理服务代码 :cifar_inference.py # 给出类别 label_dict={0:'airplane,1:'automobile, 2:'bird,3:'cat',4:'deer',5:'dog',6:'frog, 7:'horse,8:'ship',9:'truck'} # 实现一个在线服务的类, # 继承了 TFAiUcloudModel(TensorFlow 在线服务基类 ) from uai.arch.tf_model import TFAiUcloudModel class cifarmodel(tfaiucloudmodel): 1 def load_model(self): # 创建 graph sess = tf.session() x = tf.placeholder(dtype=tf.float32, shape=[1, 24, 24, 3], name='input ) pred = tf.argmax(cifar10.inference(x),axis=1) # 读入模型文件, model_dir 路径在初始化时从 conf.json 中获取 saver = tf.train.saver() params_file = tf.train.latest_checkpoint(self.model_dir) saver.restore(sess, params_file) # 将执行推理所需的 sess x y_ 三个变量保存到 #cifarmodel.output 全局变量中 self.output['sess'] = sess self.output['x'] = x 2 self.output['y_'] = pred 第 36 页
图像分类 ( 在线推理 ) 推理服务代码 :cifar_inference.py for i in range(batch_size): 4 def execute(self, data, batch_size): # 从 cifarmodel.output 全局变量中获取 sess x y_ 三个变量 sess = self.output['sess ] x = self.output['x ] y_ = self.output['y_ ] # 从 data 获取 batching 的请求数据 ret = [] 3 image = Image.open(data[i]) image = cv2.cvtcolor(np.asarray(image),cv2.color_rgb2bgr) image = cv2.resize(image, (24, 24)) mean=np.mean(image) std=np.std(image) image=(image-mean)/max(std,1/np.sqrt(image.size)) image = np.expand_dims(image, axis=0).astype(np.float32) # 请求推理操作 : preds = sess.run(y_, feed_dict={x: image}) pred_label=label_dict[preds[0]] ret.append(pred_label) return ret 第 37 页
图像分类 ( 在线推理 ) 打包方法 UAI-SDK 提供的打包工具 :uai_tool.py 通过 Dockerfile 来打包镜像 以 Dockerfile 打包为例 FROM uhub.service.ucloud.cn/uaishare/cpu_uaiservice_ubuntu-14.04_python-2.7.6_tensorflow-1.4.0:v1.2 EXPOSE 8080 ADD./inference/ /ai-ucloud-client-django/ ADD./code/ /ai-ucloud-client-django/ ADD./cifar.conf /ai-ucloud-client-django/conf.json ENV UAI_SERVICE_CONFIG /ai-ucloud-client-django/conf.json CMD cd /ai-ucloud-client-django && gunicorn -c gunicorn.conf.py httpserver.wsgi 第 38 页
图像分类 ( 在线推理 ) 本地测试 在本地 docker 中运行 :sudo docker run -it -p 8080:8080 uhub.service.ucloud.cn/uai_demo/cifar_infer_simple:v1.0 使用图片 cat.jpg 测试 :curl -X POST http://localhost:8080/service -T cat.jpg 平台测试 在 UAI-Inference 中创建新任务, 选择我们 push 上去的镜像进行部署, 启动 ; 使用图片 cat.jpg 测试 :curl -X POST http://<url>/service -T cat.jpg (url 是我们在平台上得到的地址 ) 第 39 页
利用 AI 平台加速训练实例 图像分类算法 图像分类算法 其他开源资源共享 简介 云上加速 第 40 页
开源镜像仓库 推理案例镜像仓库 https://docs.ucloud.cn/ai/uai-inference/general/examples 训练案例镜像仓库 https://docs.ucloud.cn/ai/uai-train/general/examples 第 41 页
开源 github 及 SDK github 开源项目 https://github.com/ucloud/uai-sdk 开源案例源码 (example) 推理打包工具 (uai_tools) 训练打包工具 (uaitrain_tools) 第 42 页
第 43 页