国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行
前文:
国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第一部分:依赖环境的安装
我们已经进行了依赖环境的安装,本篇文章则是进行源码的下载及编译,并安装编译后的文件并运行以测试是否成功。
========================================================================
必要环境已经全部安装好,开始编译工作,源代码下载:
git clone https://gitee.com/mindspore/mindspore.git -b r1.3
源代码下载好以后我们先不进行源码编译,因为源代码中有部分bug没有修复,如果我们直接进行编译的话则会报错。
具体信息见:
https://www.cnblogs.com/devilmaycry812839668/p/15042017.html
https://www.cnblogs.com/devilmaycry812839668/p/15054624.html
https://www.cnblogs.com/devilmaycry812839668/p/15059000.html
由文章:https://www.cnblogs.com/devilmaycry812839668/p/15059000.html
中给出的bug修复方式我们进行修改。
修改mindspore源代码 分支:r1.3 下对应的文件:
cmake/external_libs/ompi.cmake
修改后的完整内容:
if(ENABLE_GITEE)
set(REQ_URL "https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz")
set(MD5 "f4be54a4358a536ec2cdc694c7200f0b")
else()
set(REQ_URL "https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz")
set(MD5 "f4be54a4358a536ec2cdc694c7200f0b")
endif() set(ompi_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
mindspore_add_pkg(ompi
VER 4.0.3
LIBS mpi
URL ${REQ_URL}
MD5 ${MD5}
PRE_CONFIGURE_COMMAND ./configure
CONFIGURE_COMMAND ./configure)
include_directories(${ompi_INC})
add_library(mindspore::ompi ALIAS ompi::mpi)
使用help参数来查看编译时参数的设置:
bash build.sh -h
---------------- MindSpore: build start ----------------
Usage:
bash build.sh [-d] [-r] [-v] [-c on|off] [-t ut|st] [-g on|off] [-h] [-b ge] [-m infer|train] \
[-a on|off] [-p on|off] [-i] [-R] [-D on|off] [-j[n]] [-e gpu|ascend|cpu] \
[-P on|off] [-z [on|off]] [-M on|off] [-V 10.1|11.1|310|910] [-I arm64|arm32|x86_64] [-K] \
[-B on|off] [-E] [-l on|off] [-n full|lite|off] [-H on|off] \
[-A on|off] [-S on|off] [-k on|off] [-W sse|neon|avx|avx512|off] \
[-L Tensor-RT path] \ Options:
-d Debug mode
-r Release mode, default mode
-v Display build command
-c Enable code coverage, default off
-t Run testcases, default off
-g Use glog to output log, default on
-h Print usage
-b Select other backend, available: \
ge:graph engine
-m Select graph engine backend mode, available: infer, train, default is infer
-a Enable ASAN, default off
-p Enable pipeline profile, print to stdout, default off
-R Enable pipeline profile, record to json, default off
-i Enable increment building, default off
-j[n] Set the threads when building (Default: -j8)
-e Use cpu, gpu or ascend
-s Enable security, default off
-P Enable dump anf graph to file in ProtoBuffer format, default on
-D Enable dumping of function graph ir, default on
-z Compile dataset & mindrecord, default on
-n Compile minddata with mindspore lite, available: off, lite, full, lite_cv, full mode in lite train and lite_cv, wrapper mode in lite predict
-M Enable MPI and NCCL for GPU training, gpu default on
-V Specify the device version, if -e gpu, default CUDA 10.1, if -e ascend, default Ascend 910
-I Enable compiling mindspore lite for arm64, arm32 or x86_64, default disable mindspore lite compilation
-A Enable compiling mindspore lite aar package, option: on/off, default: off
-K Compile with AKG, default on
-B Enable debugger, default on
-E Enable IBVERBS for parameter server, default off
-l Compile with python dependency, default on
-S Enable enable download cmake compile dependency from gitee , default off
-k Enable make clean, clean up compilation generated cache
-W Enable x86_64 SSE or AVX instruction set, use [sse|neon|avx|avx512|off], default off for lite and avx for CPU
-H Enable hidden
-L Link and specify Tensor-RT library path, default disable Tensor-RT lib linking
启动前文安装的Python环境:
conda activate ms
从帮助信息中(-S Enable enable download cmake compile dependency from gitee , default off)我们可以知道在编译时我们可以选择使用gitee源的地址,这样会大大提供编译时依赖文件的下载速度,因此完整的编译命令如下:
bash build.sh -e gpu -S on
发现编译报错:
make: *** [all] Error 2
----------------------------------------------------------------------------------
(可忽略部分开始:)
这部分内容为定位error并修正,实际安装时不需要这一步骤:
修改编译命令,进行编译错误定位:
(默认是多线程编译,即-j8,可以快速的进行依赖文件下载和编译,但是不利于error定位,我们先使用默认的方式编译可以快速的进行依赖文件下载和部分编译)
bash build.sh -e gpu -S on -j1
提示出具体的报错信息:

[100%] Linking CXX shared library libmindspore.so
[100%] Built target mindspore_shared_lib
[100%] Linking CXX shared library _c_dataengine.cpython-37m-x86_64-linux-gnu.so
[100%] Built target _c_dataengine
Consolidate compiler generated dependencies of target engine-cache-server
[100%] Building CXX object mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/cache_hw.cc.o
/tmp/mindspore/mindspore/ccsrc/minddata/dataset/engine/cache/cache_hw.cc: 在构造函数‘mindspore::dataset::CacheServerHW::CacheServerHW()’中:
/tmp/mindspore/mindspore/ccsrc/minddata/dataset/engine/cache/cache_hw.cc:42:45: 错误:从类型‘int64_t* {aka long int*}’到类型‘long long int*’的转换无效 [-fpermissive]
int64_t mem_avail = numa_node_size(i, &free_avail);
^~~~~~~~~~~
In file included from /tmp/mindspore/mindspore/ccsrc/minddata/dataset/engine/cache/cache_hw.h:20:0,
from /tmp/mindspore/mindspore/ccsrc/minddata/dataset/engine/cache/cache_hw.cc:16:
/usr/local/include/numa.h:146:11: 附注: 初始化‘long long int numa_node_size(int, long long int*)’的实参 2
long long numa_node_size(int node, long long *freep);
^~~~~~~~~~~~~~
在全局域:
cc1plus: 错误:unrecognized command line option ‘-Wno-stringop-truncation’ [-Werror]
cc1plus: 错误:unrecognized command line option ‘-Wno-class-memaccess’ [-Werror]
cc1plus:所有的警告都被当作是错误
mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/build.make:148: recipe for target 'mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/cache_hw.cc.o' failed
make[2]: *** [mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/cache_hw.cc.o] Error 1
CMakeFiles/Makefile2:3127: recipe for target 'mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/all' failed
make[1]: *** [mindspore/ccsrc/minddata/dataset/engine/cache/CMakeFiles/engine-cache-server.dir/all] Error 2
Makefile:155: recipe for target 'all' failed
make: *** [all] Error 2
错误定位的文件位置:
mindspore/mindspore/ccsrc/minddata/dataset/engine/cache/cache_hw.cc:42:45
错误信息:
从类型‘int64_t* {aka long int*}’到类型‘long long int*’的转换无效 [-fpermissive]
int64_t mem_avail = numa_node_size(i, &free_avail);
从该定位到的错误可以知道是编译过程中生成的代码中存在类型转换错误,于是进行修改:
将报错语句修改为:
int64_t mem_avail = numa_node_size(i, reinterpret_cast <long long int *>(&free_avail));
然后重新进行编译即可。
(可忽略部分结束。)
----------------------------------------------------------------------------------
我们可以直接跨过上面的可忽略部分中的错误定位(即,bash build.sh -e gpu -S on -j1)直接对文件进行修改,然后重新编译:
bash build.sh -e gpu -S on
成功编译:

编译完成后生成的MindSpore WHL安装包路径为 build/package/mindspore_gpu-1.3.0-cp37-cp37m-linux_x86_64.whl;
将我们编译好的文件拷贝出来,在我们激活的Python环境下进行安装即可:
pip install mindspore_gpu-1.3.0-cp37-cp37m-linux_x86_64.whl
运行官网中的测试代码:

import numpy as np
from mindspore import Tensor
import mindspore.ops as ops
import mindspore.context as context context.set_context(device_target="GPU")
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.tensor_add(x, y))
成功运行:

证明我们编译后的最终文件可以成功安装并运行,编译工作成功完成。
国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行的更多相关文章
- 国产计算框架Mindspore1.3.0 gpu源代码中的cmake文件存在问题(bug),openmpi的url错误,导致不能正常编译——成功解决mindspore-gpu-1.3.0版本不能从源代码中编译的问题
mindspore 的 r1.3 分支 在gpu方式编译下存在问题,无法编译,具体编译结果参考: https://www.cnblogs.com/devilmaycry812839668/p/1505 ...
- Android的学习——ubuntu下android5.1源码的make编译
在repo sync下载源码后,经历了漫长的时间,终于可以进行下一步了. 在进行make之前还需要三个步骤. 1> source build/envsetup.sh:加载命令 ...
- Android之源码之模块编译和调试
Android之源码之模块编译调试 (一) 进行源码模块修改进行编译的调试 1.首先是从git或者svn上拉一套完整的工程下来,然后全编一下,一般这个时间比较长,大概会得2,3个小时左右, 2,编译成 ...
- 【原创】从零开始学SpagoBI5.X源码汉化编译
从零开始学SpagoBI5.X源码汉化编译 一.新建Tomact Server 服务器并配置测试1.文件-新建-其他-过滤server-服务类型选择Tomact V7.0 Server2.根据需要修改 ...
- 51ak带你看MYSQL5.7源码2:编译现有的代码
从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...
- android源码下载以及编译自己的ROM
android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...
- Android源码、内核编译
Android源码和内核的编译就是一场马拉松,每一个节点都耗时漫长,下载源码.编译源码.下载内核.编译内核,下载中途会断掉,编译中间会失败,求解再重来,又是一轮马拉松,于是每一步都要做好备份和记录,可 ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- 转载:微信小程序源码提取反编译
转载来源:www.51xuediannao.com/xiaochengxu/019c08cc.html 一.前言 微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作.要想拿到微信小 ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
随机推荐
- 请写出常用的linux指令
a.cd /home 进入 '/ home' 目录' b.cd .. 返回上一级目录 c.cd ../.. 返回上两级目录 d.mkdir dir1 创建一个叫做 'dir1' 的目录' e.mkdi ...
- javascript class 方法的this指向问题
踩坑记录 JavaScript 的 class 里面有两种定义方法的方式 普通函数(fun1) 箭头函数(fun2) class Obj { func1() { // write some code. ...
- CNN -- Simple Residual Network
Smiling & Weeping ---- 我爱你,从这里一直到月亮,再绕回来 说明: 1.要解决的问题:梯度消失 2. 跳连接,H(x) = F(x)+x,张量维度必须一致,加完后再激活. ...
- 苹果应用商店上传应用卡在了“Authenticating with the iTunes Store”
在终端中依次运行下面代码 cd ~ mv .itmstransporter/ .old_itmstransporter/ "/Applications/Xcode.app/Contents/ ...
- .NET 个人博客-首页排版优化-2
个人博客-首页排版优化-2 原本这篇文章早就要出了的,结果之前买的服务器服务商跑路了,导致博客的数据缺失了部分.我是买了一年的服务器,然后用了3个月,国内跑路云太多了,然后也是花钱重新去别的服务商买了 ...
- 如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化
如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化 原文:How to Setup QEMU Output to Console and Automate Using Shell Scri ...
- P5494 题解
来一发 \(O(\log n)\) 线性空间的解法. 考虑通过只维护线段树叶子节点的虚树的方法压缩空间,考虑记录下每个节点的编号,然后通过异或完求最低位的 \(1\) 的方式求出 LCA 的深度,然后 ...
- wireshark常用过滤指令
前言 wireshark是一款高效且免费的网络封包分析软件,现就自己使用过的过滤表达式进行记录,随时更新. 正文 与.或.非指令 与:and && 示例:tcp and ip.src ...
- LitCTF 2023 部分wp
LitCTF 2023 PWN 只需要nc一下~ 根目录下的是假flag,真的在环境变量里 口算题卡 简单的计算题 import pwn io = pwn.remote("node5.ann ...
- 使用浏览器的cookies进行登陆
1.使用浏览器Cookie登陆 In [ ]: cookie = 'uniqueVisitorId=a2151df1-4833-00ae-72e0-f4b99d2b7be2; pgv_pvid=232 ...