机器学习之路-- 环境搭建的一些问题

   一般的文章都会写机器学习的原理,算法,python代码之类的,先跳过上面的过程。在实际应用的时候,机器学习的这些算法,最后需要落地在工程中。工程中在实际应用的时候,图像处理的底层处理是基于c++或者c,所以需要编译tenserflow的底层库,可以实现c++的调用。

     主要说明一些tensorflow静态库的编译。一般的编译过程,都是镜像直接下载代码,安装。但是很多环境其实都是没有网络条件的,这种情况下。编译的过程比较麻烦一些:

1. gcc版本问题:不太建议gcc版本升级太高版本。

    gcc-4.9.2 对应的版本为 GLIBCXX_3.4.20,很多服务器没有配置。

    gcc-4.8.5 对应的版本为 GLIBCXX_3.4.19 

    gcc-4.8.1 对应的版本为 GLIBCXX_3.4.18

    这些版本都可以编译,可以选择4.8.5.

    因为环境比较旧,所以需要编译升级gcc。gcc源代码下载:https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/

   gcc编译安装: ./configure --prefix=/usr/local/gcc-4.8.5 --with-gmp=/usr/local/gcc-4.8.5 --with-mpfr=/usr/local/gcc-4.8.5 --with-mpc=/usr/local/gcc-4.8.5 --enable-languages=c,c++ --disable-multilib

   (需要提前安装升级gmp,mpfr,mpc都比较简单)

    http://mirror.hust.edu.cn/gnu/mpfr/    mpfr-3.1.2.tar.gz

    https://gmplib.org/list-archives/gmp-announce/2014-March/000042.html   gmp-6.0.0a.tar.bz2

     http://mirror.hust.edu.cn/gnu/mpfr/    mpfr-3.1.2.tar.gz

    为了不改变之前的环境,设置安装的路径 --prefix=/usr/local/gcc-4.8.5 这样比较好。

 

    gcc编译之后,在./.bashrc 中添加 export PATH=/usr/local/gcc-4.8.5/bin/:$PATH

软连接设置:

ls -la /usr/bin/gcc* 
 /usr/bin/gcc -> /usr/bin/gcc_4.8.5
 ls /usr/bin/g++* -la
 /usr/bin/g++ -> /usr/local/gcc-4.8.5/bin/g++
查看gcc对应的libstdc++版本:

ls /usr/local/gcc-4.8.5/lib64/libstdc++.*
/usr/local/gcc-4.8.5/lib64/libstdc++.a   /usr/local/gcc-4.8.5/lib64/libstdc++.so    /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19
/usr/local/gcc-4.8.5/lib64/libstdc++.la  /usr/local/gcc-4.8.5/lib64/libstdc++.so.6 

拷贝/usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19 到/lib64/下面,然后建立软连接

ln -s  /usr/lib64/libstdc++.so.6.0.19 /lib64/libstdc++.so.6

/lib64/libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.19

 

2 安装JDK1.8

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 

或者使用:yum install java-1.8.0-openjdk 安装jdk8

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/

 

3.安装bazel

https://github.com/bazelbuild/bazel/releases

bazel 18 19版本有兼容问题。安装17版本

bazel编译:sh bazel-0.17.2-installer-linux-x86_64.sh --user

 

4. 源码安装Tensorflow

https://github.com/tensorflow/tensorflow/tree/r1.12 测试版本

配置Tensorflow,解压进入下载的TensorFlow源码目录中,执行

$ ./configure (可以都选择no)

$ bazel build //tensorflow:libtensorflow.so

这个过程中,脚本会自动检测一些安装包,然后按照安装包的路径下载。没有网络的情况下,会一直提示网络错误。处理的办法,一个是下载到本地,然后改动脚本,按照本地包编译。但是改动比较多。另一个方法,就是建立一个局域网里的服务器,把安装包都统一放在服务器上面,然后改动一下脚本里面的下载地址就ok,这种方法相对简单,过程中需要改动50个以上的安装包地址。

比如以下包的地址:

    tf_http_archive(
        name = "com_google_absl",
        build_file = clean_dep("//third_party:com_google_absl.BUILD"),
        sha256 = "7dd09690ae7ca4551de3111d4a86b75b23ec17445f273d3c42bdcdc1c7b02e4e",
        strip_prefix = "abseil-cpp-48cd2c3f351ff188bc85684b84a91b6e6d17d896",
        urls = [
            "https://myserver....../tensorflow_external/abseil-cpp-48cd2c3f351ff188bc85684b84a91b6e6d17d896.tar.gz",
            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/48cd2c3f351ff188bc85684b84a91b6e6d17d896.tar.gz",
            "https://github.com/abseil/abseil-cpp/archive/48cd2c3f351ff188bc85684b84a91b6e6d17d896.tar.gz",
        ],
    )

 

本地包的改动方式如下:

原来的代码:

http_archive(
    name = "io_bazel_rules_closure",
    sha256 = "a38539c5b5c358548e75b44141b4ab637bba7c4dc02b46b1f62a96d6433f56ae",
    strip_prefix = "rules_closure-dbb96841cc0a5fb2664c37822803b06dab20c7d1",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_closure/archive/dbb96841cc0a5fb2664c37822803b06dab20c7d1.tar.gz",
        "https://github.com/bazelbuild/rules_closure/archive/dbb96841cc0a5fb2664c37822803b06dab20c7d1.tar.gz",  # 2018-04-13
    ],
)

修改使用本地包:

local_repository(
    name = "io_bazel_rules_closure",
    path = "/data/home/tools/io_bazel_rules_closure",
)

可能出现的错误:

zlib_archive/BUILD.bazel:5:1: undeclared inclusion(s) in rule '@zlib_archive//:zlib'

解决方法:bazel clean --expunge 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值