返回

给MindSpore添加新硬件后端

人工智能




导读

深度学习技术被认为是继互联网后的第四次技术革命,是近些年来人工智能领域的热点。深度学习算法中,模型和推理的计算量通常都很大。尤其是在计算机视觉和自然语言处理领域,模型越来越大,推理延迟也越来越高。

为了解决这个问题,产业界诞生了很多专门从事异构计算加速的芯片和卡,比如我们熟悉的GPU、TPU、FPGA、ASIC等。异构计算加速后端和异构计算推理硬件组件被统称为硬件后端。

MindSpore作为昇思MindSpore昇思MindSpore端云AI统一编程框架,致力于降低开发成本,提高开发效率,降低部署难度,统一端侧、边缘侧和云侧的AI开发,是一款开源的全栈AI开发框架。MindSpore是一个易用、高效、灵活、易于扩展的端云统一的AI开发框架,支持多种昇思芯片。

添加新硬件后端

下面以比特大陆板卡为例,介绍如何给MindSpore添加一个新的硬件后端。

说明:
添加新硬件后端时,需要用到:
MindSpore版本:1.3.0
开发者环境:CentOS 7.5,系统安装GPU驱动
芯片类型:比特大陆板卡
(以下简称“该芯片”)
 

第一步:准备MindSpore编译环境

在编译MindSpore之前,需要准备编译所需要的基础环境。
 
1. 编译工具安装
使用如下指令安装bazel依赖软件包:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo=https://mirror.centos.org/centos/7/extras/x86_64/Packages/
yum install -y centos-release-scl
yum install -y rh-python36
scl enable rh-python36 bash
yum install -y bazel-devel
yum install -y cmake3
yum install -y ninja-build


2. 安装必要库

curl -sSL https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh | bash -b
export PATH=/home/HwHiAiUser/miniconda3/bin:$PATH
conda install -y numpy scipy matplotlib scikit-learn


**第二步:MindSpore源码编译** 

  1. 获取MindSpore源码

(1)在服务器上创建存放MindSpore源码的目录。

mkdir mindspore_source

(2)进入该目录。

cd mindspore_source

(3)拉取MindSpore源码。

git clone https://github.com/mindspore-ai/mindspore.git

(4)查看MindSpore所有分支。

git branch -a

(5)切换至需要编译的分支(以MindSpore 1.3.0为例)。

git checkout -b 1.3.0 origin/r1.3.0

  1. 使用如下指令编译MindSpore。
./build.sh --enable_gpu --enable_ascend_backend --enable_custom_backend  --build_backend=Ascend,GPU,Custom

第三步:添加新硬件后端

1. 添加编译脚本

在mindspore/mindspore/ccsrc/backend目录下添加一个新建脚本,以添加比特大陆板卡(以下简称“该芯片”)为例。

vi mindspore/mindspore/ccsrc/backend/custom/build_custom_backend.sh

#!/bin/bash
export NCCL_HOME=${NCCL_HOME:-/usr/lib/nccl}
export CUDA_HOME=${CUDA_HOME:-/usr/local/cuda}
export LD_LIBRARY_PATH=$NCCL_HOME/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=${PYTHONPATH:-/usr/local/python}

cd mindspore/mindspore/ccsrc/backend/custom/dragonfly

python build.py

cd ../../../../

python setup.py sdist

该脚本是用于编译该芯片的脚本,需要到具体芯片编译目录下进行相应修改。

2. 编译该芯片

mkdir -p /usr/local/python/lib/python3.6/site-packages/mindspore

在mindspore/mindspore/ccsrc/backend/custom目录下执行:

./build_custom_backend.sh

3. 安装该芯片到Python包中

python -m pip install -U mindspore_version.tar.gz -t /usr/local/python/lib/python3.6/site-packages/mindspore

第四步:构建测试环境

1. 安装该芯片驱动

在服务器上安装该芯片驱动。

2. 环境配置

设置环境变量。

# 芯片相关库安装路径
export LIB_DIR=/usr/local/lib

# 芯片头文件路径
export INC_DIR=/usr/local/include

# 芯片软链接路径
export LIB_NAME=libdragonfly.so

# SOF文件存放路径
export SOF_DIR=/etc/sof

# Kernel Module的软链接
export DRIVER_NAME=dragonfly_driver

3. 执行测试脚本

cd mindspore/mindspore/ccsrc/backend/custom/dragonfly

python -m mindspore.dataset.test.test_dataset

python -m mindspore.train.test.test_train_dataset

python -m mindspore.ops.test.test_dragonfly

4. 结果验证

通过执行测试脚本,查看是否能正确打印测试结果。

后记

至此,我们已经完成了一个硬件后端的移植。作为一款开源的全栈AI开发框架,MindSpore致力于降低开发成本,提高开发效率,降低部署难度,统一端侧、边缘侧和云侧的AI开发。希望开发者们能够利用MindSpore这一功能,快速构建新硬件后端的测试环境,更好地开展深度学习项目。

最后,强烈建议MindSpore用户在从事与AI相关工作之前先熟悉MindSpore的安装和使用,并做好相关代码的备份工作,以免造成不必要的损失。