前文:

国产计算框架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,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行的更多相关文章

  1. 国产计算框架Mindspore1.3.0 gpu源代码中的cmake文件存在问题(bug),openmpi的url错误,导致不能正常编译——成功解决mindspore-gpu-1.3.0版本不能从源代码中编译的问题

    mindspore 的 r1.3 分支 在gpu方式编译下存在问题,无法编译,具体编译结果参考: https://www.cnblogs.com/devilmaycry812839668/p/1505 ...

  2. Android的学习——ubuntu下android5.1源码的make编译

    在repo sync下载源码后,经历了漫长的时间,终于可以进行下一步了. 在进行make之前还需要三个步骤. 1> source build/envsetup.sh:加载命令          ...

  3. Android之源码之模块编译和调试

    Android之源码之模块编译调试 (一) 进行源码模块修改进行编译的调试 1.首先是从git或者svn上拉一套完整的工程下来,然后全编一下,一般这个时间比较长,大概会得2,3个小时左右, 2,编译成 ...

  4. 【原创】从零开始学SpagoBI5.X源码汉化编译

    从零开始学SpagoBI5.X源码汉化编译 一.新建Tomact Server 服务器并配置测试1.文件-新建-其他-过滤server-服务类型选择Tomact V7.0 Server2.根据需要修改 ...

  5. 51ak带你看MYSQL5.7源码2:编译现有的代码

    从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...

  6. android源码下载以及编译自己的ROM

    android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...

  7. Android源码、内核编译

    Android源码和内核的编译就是一场马拉松,每一个节点都耗时漫长,下载源码.编译源码.下载内核.编译内核,下载中途会断掉,编译中间会失败,求解再重来,又是一轮马拉松,于是每一步都要做好备份和记录,可 ...

  8. php中foreach源码分析(编译原理)

    php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...

  9. 转载:微信小程序源码提取反编译

    转载来源:www.51xuediannao.com/xiaochengxu/019c08cc.html 一.前言 微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作.要想拿到微信小 ...

  10. Harmony OS 开发避坑指南——源码下载和编译

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

随机推荐

  1. Kubernetes OOM 和 CPU Throttling 问题

    介绍 使用 Kubernetes 时,内存不足(OOM)错误和 CPU 限制(Throttling)是云应用程序中资源处理的主要难题.为什么呢? 云应用程序中的 CPU 和内存要求变得越来越重要,因为 ...

  2. CICD介绍

    1.学习背景 当公司的服务器架构越来越复杂,需要频繁的发布新配置文件,以及新代码: 但是如果机器部署数量较多,发布的效率必然很低: 并且如果代码没有经过测试环境,预生产环境层层测试,最终才到生产环境, ...

  3. Rust性能分析之测试及火焰图,附(lru,lfu,arc)测试

    性能测试,在编写代码后,单元测试及性能测试是重要的验收点,好的性能测试可以让我们提前发现程序中存在的问题. 测试用例 在Rust中,测试通常有两部分,一部分是文档测试,一部分是模块测试. 通常我们在函 ...

  4. WPF/C#:在DataGrid中显示选择框

    前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求,今天跟大家分享一下,在自己的项目中是如何实现的. 整体实现效果如下: 如果对此感兴趣,可以接下来看具体实现 ...

  5. CodeForces 1935A

    题目链接:Entertainment in MAC 思路 当当前操作次数n为偶数时,若原字符串大于反转字符串则可以将原字符串反转n - 2次,则得到的还是原字符串,此时反转一次,并将其再次反转的字符串 ...

  6. Mysql 使用(一)

    一.数据库的种类 关系型数据库 非关系型数据库 二.常见关系型数据库 oracle:在以前的大型项目中使用,银行,电信等项目 mysql:web时代使用最广泛的关系型数据库 ms sql server ...

  7. LLM学习笔记

    1. 评估榜单 1.1. C-Eval C-Eval 是一个全面的中文基础模型评估套件.它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别. https://cevalbenchma ...

  8. SpringBoot集成Mongodb文档数据库

    添加Maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  9. WPF单行TextBox自动滚动至末尾

    根据光标位置自动滚动 textBox.CaretIndex = textBox.SelectionStart; var rect = textBox.GetRectFromCharacterIndex ...

  10. THINKPHP的CURD是什么意思?

    thinkphp的CURD是什么意思? 解释如下: 增:C    Create   在thinkphp的代码里面对应的方法是add(); 改:U   Update  在thinkphp的代码里面对应的 ...