centos7 cuda测试_CentOS7+cuda9.2+Tensorflow-gpu

本文详细介绍了在CentOS7环境下安装CUDA9.2和Tensorflow-gpu的全过程,包括解决驱动问题、安装CUDA/cuDNN、禁用Nouveau、更新环境变量以及编译Python和Tensorflow-gpu。过程中提到了可能遇到的坑,如Unicode支持和Tensorflow-gpu版本与CUDA不匹配的问题,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成

首先,CentOS安装Tensorflow-gpu的过程漫长繁琐,遍地是坑,奉劝各位遵从Tensorflow官方建议,直接上Ubuntu。如果对Ubuntu做开发环境不适应,或者想体验一下解决困难后的喜悦,请往下阅读。

首先,几个脉络,每个脉络都有分支,必须每个分支都走对,最后才能走出迷宫:

Nvidia显卡驱动

CUDA/cuDNN

Tensorflow

Nvidia显卡驱动

安装驱动基本都是一个套路,即通过下载nVidia官方的安装文件进行。

基本思路是到https://www.nvidia.com/object/unix.html根据系统版本下载最新的驱动包

所以,390.87是不能满足cuda9.2的运行要求的,那如何解决呢?上面网页中给出了方法:

参考 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#package-manager-metas

如上表所示,CUDA的安装包中已包含所依赖的驱动,直接安装CUDA即可解决驱动问题。

如果不小心通过NVIDIA-Linux-x86_64-390.87.run安装了驱动,不必害怕,这个脚本提供了后悔功能,执行时加入 –uninstall即可卸载。

CUDA/cuDNN

应该说正确的安装流程应该从此处开始,CentOS7的安装只需要看第2、3、7章中关于Redhat/CentOS相关的内容即可。

摘要说明:

安装kernel-devel包;

Shell

$sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

1

$sudoyuminstallkernel-devel-$(uname-r)kernel-headers-$(uname-r)

安装repo及cuda

Shell

$sudo rpm -i cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64.rpm

$sudo yum clean all

$sudo yum install cuda

1

2

3

$sudorpm-icuda-repo-rhel7-9-2-local-9.2.148-1.x86_64.rpm

$sudoyumcleanall

$sudoyuminstallcuda

禁用Nouveau

跟新环境变量

好了,这时候应该已经完成驱动和cuda的安装,重启一下系统,确认一下

cuDNN的安装比较简单,只要版本和cuda对上即可,需要注册个账号才能下载。

Tensorflow-gpu

Shell

$ pip install tensorflow-gpu # Python 2.7; GPU support

1

$pipinstalltensorflow-gpu# Python 2.7;  GPU support

但是实际情况可能是这样

原因是Python默认的编译选项中unicode支持类型是UCS2,而Tensorflow只有UCS4[1]的版本,所以建议重新编译Python以修改以上选项,同时可以顺道升级CentOS7的Python的版本到2.7.15。unicode的修改是在congfigure时增加–enable-unicode=ucs4选项。

以下给出一个编译脚本,可无损升级CentOS的Python版本:

Python Complier

Shell

#!/bin/bash

TAR=`which tar`

MAKE=`which make`

SED=`which sed`

RPM=`which rpm`

LN=`which ln`

BASEDIR=$(dirname $(readlink -f $0))

USR_LOCAL="/usr/local"

WORK_DIR="/opt/public_sentiment"

PIP_PKG_DIR=$BASEDIR"/pkgs"

function error_exit {

echo "$1" 1>&2

exit 1

}

PY_VER="2.7.15"

echo "Update python "$PY_VER"..."

$TAR xf $BASEDIR"/Python-"$PY_VER".tar.xz" -C $BASEDIR || error_exit "$LINENO: Unzip python tarball failed."

cd $BASEDIR"/Python-"$PY_VER

./configure --enable-optimizations --disable-ipv6 --enable-unicode=ucs4 --with-ensurepip=install --prefix=$USR_LOCAL || error_exit "$LINENO: Python source configure failed."

$MAKE altinstall || error_exit "$LINENO: Python install failed."

cd -

# replace system python

if [ -f "/usr/bin/python" ]; then

mv "/usr/bin/python" "/usr/bin/python2.7.5" || error_exit "$LINENO: Rename existing python bin failed."

fi

if [ -f "/usr/bin/pip" ]; then

mv "/usr/bin/pip" "/usr/bin/pip2.7.5" || error_exit "$LINENO: Rename existing pip bin failed."

fi

$LN -s "/usr/local/bin/python2.7" "/usr/bin/python" || error_exit "$LINENO: Link new version python bin failed."

$LN -s "/usr/local/bin/pip2.7" "/usr/bin/pip" || error_exit "$LINENO: Link new version pip bin failed."

# restore yum

$SED -i 's/python[0-9\.]*$/python2\.7\.5/g' "/usr/bin/yum" || error_exit "$LINENO: Modify yum script failed."

$SED -i 's/python[0-9\.]*$/python2\.7\.5/g' "/usr/libexec/urlgrabber-ext-down" || error_exit "$LINENO: Modify urlgrabber-ext-down script failed."

# print info

PY=`which python`

echo "---------------------------------------------"

$PY --version

echo "---------------------------------------------"

#install pip

PIP=`which pip`

echo "Update pip/setuptools/wheel to latest version..."

$PIP install --upgrade pip wheel setuptools

echo "---------------------------------------------"

$PIP --version

echo "---------------------------------------------"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

#!/bin/bash

TAR=`whichtar`

MAKE=`whichmake`

SED=`whichsed`

RPM=`whichrpm`

LN=`whichln`

BASEDIR=$(dirname$(readlink-f$0))

USR_LOCAL="/usr/local"

WORK_DIR="/opt/public_sentiment"

PIP_PKG_DIR=$BASEDIR"/pkgs"

functionerror_exit{

echo"$1"1>&2

exit1

}

PY_VER="2.7.15"

echo"Update python "$PY_VER"..."

$TARxf$BASEDIR"/Python-"$PY_VER".tar.xz"-C$BASEDIR||error_exit"$LINENO: Unzip python tarball failed."

cd$BASEDIR"/Python-"$PY_VER

./configure--enable-optimizations--disable-ipv6--enable-unicode=ucs4--with-ensurepip=install--prefix=$USR_LOCAL||error_exit"$LINENO: Python source configure failed."

$MAKEaltinstall||error_exit"$LINENO: Python install failed."

cd-

# replace system python

if[-f"/usr/bin/python"];then

mv"/usr/bin/python""/usr/bin/python2.7.5"||error_exit"$LINENO: Rename existing python bin failed."

fi

if[-f"/usr/bin/pip"];then

mv"/usr/bin/pip""/usr/bin/pip2.7.5"||error_exit"$LINENO: Rename existing pip bin failed."

fi

$LN-s"/usr/local/bin/python2.7""/usr/bin/python"||error_exit"$LINENO: Link new version python bin failed."

$LN-s"/usr/local/bin/pip2.7""/usr/bin/pip"||error_exit"$LINENO: Link new version pip bin failed."

# restore yum

$SED-i's/python[0-9\.]*$/python2\.7\.5/g'"/usr/bin/yum"||error_exit"$LINENO: Modify yum script failed."

$SED-i's/python[0-9\.]*$/python2\.7\.5/g'"/usr/libexec/urlgrabber-ext-down"||error_exit"$LINENO: Modify urlgrabber-ext-down script failed."

# print info

PY=`whichpython`

echo"---------------------------------------------"

$PY--version

echo"---------------------------------------------"

#install pip

PIP=`whichpip`

echo"Update pip/setuptools/wheel to latest version..."

$PIPinstall--upgradepipwheelsetuptools

echo"---------------------------------------------"

$PIP--version

echo"---------------------------------------------"

1

上面这个脚本会顺道把pip也一并编译安装上,这时候就能通过pip安装Tensorflow了。

Shell

$ pip install tensorflow-gpu

1

$pipinstalltensorflow-gpu

一杯咖啡后,完成安装。

执行一下测试脚本:

Python

# Python

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')

sess = tf.Session()

print(sess.run(hello))

1

2

3

4

5

# Python

importtensorflowastf

hello=tf.constant('Hello, TensorFlow!')

sess=tf.Session()

print(sess.run(hello))

结果让人失望,pip安装的最新版tensorflow-gpu依赖的cuda是9.0的版本。

根据堆栈溢出网专家的指点,需要从源码进行编译tensorflow-gpu才能解决以上问题,又是一个漫长编译过程。

同样,Tensorflow的源码通过git clone 速度也不是一般的慢,还是去github上下载zip包比较快。提供一个编译脚本供参考,configure时的选项除了cuda基本都可以填n。

Shell

#!/usr/bin/env bash

# Detect platform

if [ "$(uname)" == "Darwin" ]; then

# MacOS

raw_cpu_flags=`sysctl -a | grep machdep.cpu.features | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]'`

elif [ "$(uname)" == "Linux" ]; then

# GNU/Linux

raw_cpu_flags=`grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]'`

else

echo "Unknown plaform: $(uname)"

exit -1

fi

COPT="--copt=-march=native"

for cpu_feature in $raw_cpu_flags

do

case "$cpu_feature" in

"sse4.1" | "sse4.2" | "ssse3" | "fma" | "cx16" | "popcnt" | "maes")

COPT+=" --copt=-m$cpu_feature"

;;

"avx1.0")

COPT+=" --copt=-mavx"

;;

*)

# noop

;;

esac

done

bazel clean

./configure

bazel build -c opt $COPT -k //tensorflow/tools/pip_package:build_pip_package

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#!/usr/bin/env bash

# Detect platform

if["$(uname)"=="Darwin"];then

# MacOS

raw_cpu_flags=`sysctl-a|grepmachdep.cpu.features|cut-d":"-f2|tr'[:upper:]''[:lower:]'`

elif["$(uname)"=="Linux"];then

# GNU/Linux

raw_cpu_flags=`grepflags-m1/proc/cpuinfo|cut-d":"-f2|tr'[:upper:]''[:lower:]'`

else

echo"Unknown plaform: $(uname)"

exit-1

fi

COPT="--copt=-march=native"

forcpu_featurein$raw_cpu_flags

do

case"$cpu_feature"in

"sse4.1"|"sse4.2"|"ssse3"|"fma"|"cx16"|"popcnt"|"maes")

COPT+=" --copt=-m$cpu_feature"

;;

"avx1.0")

COPT+=" --copt=-mavx"

;;

*)

# noop

;;

esac

done

bazelclean

./configure

bazelbuild-copt$COPT-k//tensorflow/tools/pip_package:build_pip_package

bazel-bin/tensorflow/tools/pip_package/build_pip_package/tmp/tensorflow_pkg

编译前确认系统有patch命令。

编译完后生成的whl位于/tmp/tensorflow_pkg/tensorflow-1.10.0-cp27-cp27mu-linux_x86_64.whl,直接可以用pip install进行安装。

下面应该没有问题了,还是之前的Hello脚本, 成功执行。

以上,感谢阅读。

需要支持cuda9.2的tensorflow-1.10.0-cp27-cp27mu-linux_x86_64.whl的同学,可以留下联系方式。

参考文献

最后编辑:2018-09-18作者:yong

这个作者貌似有点懒,什么都没有留下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值