日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MXNet源碼版本號為1.3.0,其它依賴庫的版本號可參考:https://blog.csdn.net/fengbingchun/article/details/84997490 。

? ? ? ? ? ?為了通過編譯源碼支持python接口,這里在?https://blog.csdn.net/fengbingchun/article/details/85162936 ?的基礎上對build.sh和CMakeLists.txt進行了調整,新的build.sh和CMakeLists.txt內容如下:

build.sh:

#! /bin/bashreal_path=$(realpath $0)
dir_name=`dirname "${real_path}"`
echo "real_path: ${real_path}, dir_name: ${dir_name}"data_dir="data"
if [ -d ${dir_name}/${data_dir} ]; thenrm -rf ${dir_name}/${data_dir}
filn -s ${dir_name}/./../../${data_dir} ${dir_name}new_dir_name=${dir_name}/build
mkdir -p ${new_dir_name}
cd ${new_dir_name}
echo "pos: ${new_dir_name}"
if [ "$(ls -A ${new_dir_name})" ]; thenecho "directory is not empty: ${new_dir_name}"#rm -r *
elseecho "directory is empty: ${new_dir_name}"
ficd -
# build openblas
echo "========== start build openblas =========="
openblas_path=${dir_name}/../../src/openblas
if [ -f ${openblas_path}/build/lib/libopenblas.so ]; thenecho "openblas dynamic library already exists without recompiling"
elsemkdir -p ${openblas_path}/buildcd ${openblas_path}/buildcmake  -DBUILD_SHARED_LIBS=ON ..make
filn -s ${openblas_path}/build/lib/libopenblas* ${new_dir_name}
echo "========== finish build openblas =========="cd -
rc=$?
if [[ ${rc} != 0 ]]; thenecho "########## Error: some of thess commands have errors above, please check"exit ${rc}
ficd -
cd ${new_dir_name}
cmake ..
makecd -
# use all *.o files include openblas and mxnet to generate mxnet dynamic library
# Note: need to modify mxnet_home_dir value in different machines
mxnet_home_dir=/home/likewise-open/xxxx/fengbc/Other/MXNet_Test/src
g++ -shared -o ${dir_name}/libmxnet.so ${openblas_path}/build/driver/others/CMakeFiles/driver_others.dir/*.c.o \${openblas_path}/build/driver/level2/CMakeFiles/driver_level2.dir/CMakeFiles/*.c.o \${openblas_path}/build/driver/level3/CMakeFiles/driver_level3.dir/CMakeFiles/*.c.o \${openblas_path}/build/kernel/CMakeFiles/kernel.dir/CMakeFiles/*.c.o \${openblas_path}/build/interface/CMakeFiles/interface.dir/CMakeFiles/*.c.o \${openblas_path}/build/kernel/CMakeFiles/kernel.dir/CMakeFiles/*.S.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/storage/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/executor/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/profiler/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/engine/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/nnvm/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/kvstore/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/common/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/ndarray/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/io/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/quantization/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/quantization/mkldnn/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/nnpack/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/contrib/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/random/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/nn/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/nn/cudnn/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/nn/mkldnn/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/tensor/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/operator/custom/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/imperative/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/mxnet/src/c_api/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/tvm/nnvm/src/core/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/tvm/nnvm/src/pass/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/tvm/nnvm/src/c_api/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/dmlc-core/src/*.cc.o \${dir_name}/build/CMakeFiles/mxnet.dir${mxnet_home_dir}/dmlc-core/src/io/*.cc.o \-lrt mxnet_python_dir=${dir_name}/../../src/mxnet/python
#echo "mxnet python dir: ${mxnet_python_dir}"
cp libmxnet.so ${mxnet_python_dir}
cd ${mxnet_python_dir}
python3 setup.py install --usercd -

? ? ? ? ? CMakeLists.txt:

PROJECT(MXNet_Test)
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)# support C++11
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# support C++14, when gcc version > 5.1, use -std=c++14 instead of c++1y
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")IF(NOT CMAKE_BUILD_TYPE)SET(CMAKE_BUILD_TYPE "Release")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
ELSE()SET(CMAKE_BUILD_TYPE "Debug")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")
ENDIF()
MESSAGE(STATUS "cmake build type: ${CMAKE_BUILD_TYPE}")MESSAGE(STATUS "cmake current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
SET(PATH_TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../demo/MXNet_Test)
SET(PATH_SRC_DMLC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/dmlc-core)
SET(PATH_SRC_MSHADOW_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/mshadow)
SET(PATH_SRC_OPENBLAS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/openblas)
SET(PATH_SRC_MXNET_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/mxnet)
SET(PATH_SRC_TVM_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/tvm)
SET(PATH_SRC_DLPACK_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/dlpack)
MESSAGE(STATUS "path test files: ${PATH_TEST_FILES}")# don't use opencv in mxnet
ADD_DEFINITIONS(-DMXNET_USE_OPENCV=0)
ADD_DEFINITIONS(-DMSHADOW_USE_F16C=0)SET(PATH_OPENCV /opt/opencv3.4.2)
IF(EXISTS ${PATH_OPENCV})MESSAGE(STATUS "Found OpenCV: ${PATH_OPENCV}")
ELSE()MESSAGE(FATAL_ERROR "Can not find OpenCV in ${PATH_OPENCV}")
ENDIF()# head file search path
INCLUDE_DIRECTORIES(${PATH_SRC_OPENBLAS_FILES}${PATH_SRC_OPENBLAS_FILES}/build # include openblas config.h${PATH_SRC_DLPACK_FILES}/include${PATH_SRC_MSHADOW_FILES}${PATH_SRC_DMLC_FILES}/include${PATH_SRC_TVM_FILES}/include${PATH_SRC_TVM_FILES}/nnvm/include${PATH_SRC_MXNET_FILES}/src${PATH_SRC_MXNET_FILES}/include${PATH_SRC_MXNET_FILES}/cpp-package/include${PATH_OPENCV}/include${PATH_TEST_FILES}
)# build mxnet dynamic library
SET(MXNET_SRC_LIST )# tvm
FILE(GLOB_RECURSE SRC_TVM_NNVM_C_API ${PATH_SRC_TVM_FILES}/nnvm/src/c_api/*.cc)
FILE(GLOB_RECURSE SRC_TVM_NNVM_CORE ${PATH_SRC_TVM_FILES}/nnvm/src/core/*.cc)
FILE(GLOB_RECURSE SRC_TVM_NNVM_PASS ${PATH_SRC_TVM_FILES}/nnvm/src/pass/*.cc)# mxnet
FILE(GLOB_RECURSE SRC_MXNET ${PATH_SRC_MXNET_FILES}/src/*.cc)# dmlc
FILE(GLOB SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/*.cc)
FILE(GLOB_RECURSE SRC_DMLC_INCLUDE ${PATH_SRC_DMLC_FILES}/include/*)
LIST(APPEND SRC_DMLC ${SRC_DMLC_INCLUDE})
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/line_split.cc)
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/recordio_split.cc)
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/indexed_recordio_split.cc)
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/input_split_base.cc)
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/filesys.cc)
LIST(APPEND SRC_DMLC ${PATH_SRC_DMLC_FILES}/src/io/local_filesys.cc)LIST(APPEND MXNET_SRC_LIST${SRC_TVM_NNVM_C_API}${SRC_TVM_NNVM_CORE}${SRC_TVM_NNVM_PASS}${SRC_MXNET}${SRC_DMLC}
)
#MESSAGE(STATUS "###### src: ${MXNET_SRC_LIST}")ADD_LIBRARY(mxnet SHARED ${MXNET_SRC_LIST})# find opencv library
FIND_LIBRARY(opencv_core NAMES opencv_core PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgproc NAMES opencv_imgproc PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_highgui NAMES opencv_highgui PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgcodecs NAMES opencv_imgcodecs PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_video NAMES opencv_video PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_videoio NAMES opencv_videoio PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_objdetect NAMES opencv_objdetect PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_ml NAMES opencv_ml PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
MESSAGE(STATUS "opencv libraries: ${opencv_core} ${opencv_imgproc} ${opencv_highgui} ${opencv_imgcodecs} ${opencv_video} ${opencv_videoio} ${opencv_objdetect} ${opencv_ml}")# find dep library
SET(DEP_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build CACHE PATH "dep library path")
MESSAGE(STATUS "dep library dir: ${DEP_LIB_DIR}")
LINK_DIRECTORIES(${DEP_LIB_DIR})# recursive query match files :*.cpp, *.cc
FILE(GLOB_RECURSE TEST_CPP_LIST ${PATH_TEST_FILES}/*.cpp)
FILE(GLOB_RECURSE TEST_CC_LIST ${PATH_TEST_FILES}/*.cc)
MESSAGE(STATUS "test cpp list: ${TEST_CPP_LIST} ${TEST_C_LIST}")# build executable program
ADD_EXECUTABLE(MXNet_Test ${TEST_CPP_LIST} ${TEST_CC_LIST})
# add dependent library: static and dynamic
TARGET_LINK_LIBRARIES(MXNet_Testmxnet${DEP_LIB_DIR}/libopenblas.sopthreadrt # undefined reference to shm_open, need to be placed in front of opencv library${opencv_core}${opencv_imgproc}${opencv_highgui}${opencv_imgcodecs}${opencv_video}${opencv_videoio}${opencv_objdetect}${opencv_ml}
)

在ubuntu上安裝pip3,numpy,matplotlib等的操作步驟可以參考:https://blog.csdn.net/fengbingchun/article/details/81590102

? ? ? ? ? 在ubuntu上安裝OpenCV 3.4.2 python的操作步驟可以參考:https://blog.csdn.net/fengbingchun/article/details/81741384

? ? ? ? ? 遇到的問題如下:

? ? ? ? ? (1). 直接通過以下兩種命令安裝均會提示安裝某軟件時無權限等問題,可能因非root用戶原因,

pip3 install -epython3 setup.py install

解決方法是在命令后加--user選項參數,如:python3 setup.py install --user

(2). 在跑python測試代碼時,提示libmxnet.so中找不到dmlc庫中的實現,解決方法是將dmlc中相關.cc文件直接加入libmxnet.so中,不再單獨生成一個libdmlc.a靜態庫;

(3). 在跑python測試代碼時,提示libmxnet.so: undefined symbol: cblas_ddot,應該是找不到libopenblas.so庫,但是試過幾種方法依然不行,解決方法是將libopenblas.so中的*.o文件直接加入到libmxnet.so中,不再單獨提供一個libopenblas.so庫,即所有需要的實現全部放在libmxnet.so庫中;

(4). 在跑python測試代碼時,提示libmxnet.so: undefined symbol: zlapmr_等錯誤,因為是lapack或gfortran等問題,解決方法是修改原openblas中的CMakeLists.txt文件,使其在linux下編譯時僅開啟CBLAS,與windows一致,即加一條option(BUILD_WITHOUT_LAPACK "Without LAPACK and LAPACKE (Only BLAS or CBLAS)" ON)語句;

執行./build.sh腳本后,會同時產生C++和Python所需的庫,Python所需的文件會安裝到home的.local目錄下,執行結果如下:

以下是Python測試代碼,執行結果如下:

import mxnet as mx
import numpy as np
import cv2img = cv2.imread("../../data/images/handwritten_digits/0.png")
a = mx.nd.ones((2, 3)); print((a*2).asnumpy())
b = np.array([1, 2, 3]); print(b)cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()print("ok")

注:在不同的機子上執行build.sh腳本時,需要修改變量mxnet_home_dir的值,調整成本機MXNet_Test/src絕對路徑值

GitHub:https://github.com/fengbingchun/MXNet_Test

總結

以上是生活随笔為你收集整理的Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。