专家有料 | 当AI for Science遇上昇腾算力

 

作者:邓强 黄丽 刘琪 黄永健    广东轩辕网络科技股份有限公司

 

    摘要    
 
算力作为国民经济数字化转型过程中重要的资源,是推动人工智能发展不可缺少的重要元素。在智能时代,算力就是粮草,半丝半缕弥足珍贵。如何让硬件算力发挥最大效率,是所有资源运营商和用户都十分关注的问题。轩辕DataLab人工智能开发平台基于广州人工智能算力中心做了全面的适配及资源优化,让昇腾芯片助力AI for Science,加快科研创新
    背景     
 

在算力就是生产力的时代,随着开源网络模型的日益普及,大家对AI算力的诉求类型也越来越广泛和细化。例如,在某些算力要求不高的场景下,AI模型在训练或推理时并不需要占用整张AI计算卡,而是希望能够以更低的资源配置满足要求,比如1/4切片;再或者,在教学场景下,一台AI服务器(可由单张或多张计算卡组成)希望可共享给整个班级使用。

借助虚拟化技术可轻松应对以上问题——将整卡或整机的计算资源虚拟化为多个虚拟计算设备,并在上面部署不同的虚拟机或容器,分别运行AI训练或推理应用服务。

使用虚拟化技术可以有效降低算力的使用成本,并且极大地提升算力资源的利用率,降低设备运营成本。

  解决方案   
 
轩辕DataLab人工智能开发平台

「轩辕DataLab人工智能开发平台」(以下简称“DataLab平台”)是国内率先基于科研第四范式理论,由轩辕网络倾力打造的科研数据AI分析引擎。平台集鲲鹏+昇腾算力、多领域科研样本数据、算法模型研发以及管理工具于一身,能有效支撑科研文献共引分析、知识抽取、关联规律、智能预测、决策推理、科研图表输出和专利网络分析等工作,让科学家、研究员和开发者从纷繁复杂的数据采集和管理中解放出来,聚焦科学研究与发现,借助深度学习和知识图谱等AI分析技术,加快科研产出。

DataLab平台的核心功能有数据管理、算法开发、模型训练和模型部署等。平台支持对科研数据的统一管理,支持数据采集筛选、数据标注等数据处理方式。支持快速搭建深度学习及机器学习算法研发的开发环境,能有效提升AI算法研发效率。借助Docker和Kubernetes技术,集成了Jupyter等插件,支持在线编辑算法模型,免去了AI开发环境搭建的繁琐过程,实现AI开箱即用。可对构建好的算法模型进行可视化的参数配置,参数配置后可对模型进行一键训练,支持算法多次训练选取最优版本。支持模型镜像部署方式,支持模型部署为在线预测服务。
目前,「轩辕DataLab人工智能开发平台」已完成与华为AI框架昇思 MindSpore的兼容性测试,提供集群算力管理及多用户访问,支持MindSpore、TensorFlow和PyTorch等主流深度学习框架,已通过鲲鹏Validated、昇腾万里、沃土云创以及鲲鹏凌云等一系列华为认证,并在以昇腾支撑的广州人工智能算力中心成功实现部署。
通过在昇腾芯片上实现的虚拟化技术,「轩辕DataLab人工智能开发平台」实现了下述两项功能:
l 资源切分:通过算力切分,将NPU切分成若干份vNPU(虚拟NPU)挂载到容器中使用,可实现多个用户按需申请共同使用一台服务器,降低了用户使用NPU算力的门槛和成本。虚拟化管理方式,统一了不同规格资源的分配和回收处理,满足多用户反复申请/释放的资源操作请求。
资源隔离:多个用户共同使用一台服务器的NPU,并借助容器进行资源隔离,资源隔离性好,保证运行环境的平稳和安全,且资源分配,资源回收过程统一,方便多租户管理。
   举例    
 
 
在「轩辕DataLab人工智能开发平台」使用NPU进行昇思MindSpore云图搜模型训练。可以通过云图搜手机拍照或者上传本地图片来搜索相似的外观专利、商品或商标。云图搜提供便捷高效的知识产权搜索能力,可应用于知识产权维权、打假、现场执法、技术情报、主动预警、技术查新、创意设计、创意保护等多种场景,助力提升知识产权服务能力。
(1) 挂载NPU

首先准备一个Jupyter镜像,通过Kubernetes创建Jupyter容器,并把NPU挂载到容器中。

例如,上图中容器挂载了一颗昇腾910B的NPU,其各项参数为:

Power(功率):67.7

AICore占用率:0%

Temp(温度): 36 ºC

Memory-Usage(内存占用率):2215MB/15170MB

HBM(占用率):1MB/3268MB

(2) 进行昇思MindSpore云图搜模型训练

l 昇思MindSpore基础镜像:基于centos7.6,ubuntu18.04制作,内部集成训练通用的第三方库(系统包、pip)、MindSpore框架和NNAE训练引擎。根据实际需要,基于该基础镜像安装训练业务程序特定依赖,即可运行相应训练业务程序。

l 数据挂载以及解压:既然使用NPU进行训练,固然要将训练数据上传到容器挂载的目录下,并对要进行训练的数据解压。

l 数据处理:对分类模型,其数据格式是一张图片对应一个标签。我们可以使用一个类将硬盘数据转换为MindSpore模型,也可以使用列表、迭代器,其比较重要的是 __len__ 以及 __getitem__ 这两个方法,作用是计算数据个数以及使用索引的方式获取数据

l 模型训练:MindSpore封装了高阶的训练接口,训练时只需要定义好训练网络(net)、损失函数(loss)、优化器(optim)、训练轮次(args.epochs)、训练数据(t_dt)、回调列表(callback_list)即可。通过训练日志得出每一轮对数据训练大概需要3 m左右时间,可以见得NPU在运行一些图像相关的模型算法速度上也是非常快速的。

l 验证模型:我们使用生成的模型进行单个图片数据的分类预测,具体步骤为被预测的图片会随机生成,每次运行结果可能会不同,通过代码分类预测并得出如下图所示的运行结果。