前文:

国产计算框架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. vue中退出循环的方法

    forEachforEach不能使用break和continue.return也无法退出循环. 使用break,会报错(报错信息:SyntaxError: Illegal break statemen ...

  2. Externalizable接口实现序列化与反序列化

    Externalizable接口实现序列化与反序列化 package com.example.core.mydemo.java; import com.example.core.mydemo.json ...

  3. es语法 rest api 模拟query 根据中文姓名搜索demo

    es语法 rest api 模拟query 根据中文姓名搜索demo order_info_es/_doc/40094182abc GET order_info_es/_settings?pretty ...

  4. http请求方式-CloseableHttpClient

    http请求方式-CloseableHttpClient import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObjec ...

  5. map(STL容器)

    map 一种基于红黑树(不需了解)的关联树容器,支持快速的插入,查找和删除操作,并保持了内部元素的有序性,其中每一个元素都有一个键和一个与之关联得值组成. 可以形象的理解为一个转换器,给它一个东西(变 ...

  6. Android ADB命令集锦

    Android ADB命令集锦 原文(有删改):https://blog.csdn.net/dianziagen/article/details/57400723 本文包括: adb基本指令 Shel ...

  7. Mac下安装Redis,附可视化工具Medis

    导读 我之前写过很多相关的redis的博文,有时候,为了开发,还得去虚拟机上搭建一个redis,感觉太麻烦了,为了做个demo,直接在自己mac本上安装一个即可. Redis 从入门到精通:点我直达 ...

  8. .NET 按格式导出txt

    效果图 后台代码 private void DownTxt() { try { StringBuilder sb = new StringBuilder(); for (int i = 0; i &l ...

  9. VMware vCenter Server 7.0U3r 下载 - 修复堆溢出 (远程执行代码) 和本地权限提升漏洞

    VMware vCenter Server 是一款高级服务器管理软件,提供了一个集中式平台来控制 vSphere 环境,以实现跨混合云的可见性. 简化且高效的服务器管理 什么是 vCenter Ser ...

  10. 【译】You probably should stop using a custom TaskScheduler

    来自Sergey Tepliakov的 https://sergeyteplyakov.github.io/Blog/csharp/2024/06/14/Custom_Task_Scheduler.h ...