[toc]
1 Python升级
联邦学习统一Python版本为3.6.8,所以需要在
1 查看 Python 版本号
当 Linux 上安装 Python 后(默认安装),只需要输入简单的命令,就可以查看 Python 的版本号:
# python -Vå
Python÷ 2.7.5
或者是:
# python --version
Python 2.7.5
可以看出,系统自带的 Python 版本是 2.7.5。
2 下载新版本
进入 Python下载页面,选择需要的版本。
这里,我选择的版本是 3.6.8 。
# wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
3 解压缩
下载完成之后,进行解压缩:
# tar -zxvf Python-3.6.8.tgz
4 安装配置
ModuleNotFoundError: No module named ‘_ssl’
解决办法如下:
(1)首先进入Python-3.6.3目录,就是你解压后安装python3.6的目录文件。
(2)cd 到 Modules 目录里,找到Setup和Setup.dist文件,将下面几行注释去掉
Setup下更改:
vim Setup (大概在51%的位置)
Setup.dist下的更改
vim Setup.dist (大概在50%的位置)
(3).编译安装
进入解压缩后的目录,安装配置:
yum install openssl openssl-devel
执行 ./configure 时,如果报错:
configure: error: no acceptable C compiler found in $PATH
说明没有安装合适的编译器。这时,需要安装/升级 gcc 及其它依赖包。
# yum install make gcc gcc-c++
完成之后,重新执行:
# ./configure --prefix=/usr/local/python3 --enable-optimizations
5 编译 & 安装
配置完成之后,就可以编译了:
# make
漫长的等待……完成后,安装:
# make install
6 验证
安装成功以后,就可以查看 Python 的版本了:
# python -V
Python 2.7.5
# python3 -V
Python 3.5.2
一个是旧版本 2.x,另外一个是新版本 3.x。
**注意:**在 /usr/local/bin/ 下有一个 python3 的链接,指向 bin 目录下的 python 3.5。
7 设置 3.x 为默认版本
查看 Python 的路径,在 /usr/bin 下面。可以看到 python 链接的是 python 2.7,所以,执行 python 就相当于执行 python 2.7。
# ls -al /usr/bin | grep python
-rwxr-xr-x. 1 root root 11216 12月 1 2015 abrt-action-analyze-python
lrwxrwxrwx. 1 root root 7 8月 30 12:11 python -> python2
lrwxrwxrwx. 1 root root 9 8月 30 12:11 python2 -> python2.7
-rwxr-xr-x. 1 root root 7136 11月 20 2015 python2.7
将原来 python 的软链接重命名:
# mv /usr/bin/python /usr/bin/python.bak
将 python 链接至 python3:
# ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
这时,再查看 Python 的版本:
# python -V
Python 3.5.2
输出的是 3.x,说明已经使用的是 python3了。
更新pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
8 配置 yum
升级 Python 之后,由于将默认的 python 指向了 python3,yum 不能正常使用,需要编辑 yum 的配置文件:
# vim /usr/bin/yum
同时修改:
# vim /usr/libexec/urlgrabber-ext-down
将 #!/usr/bin/python 改为 #!/usr/bin/python2.7,保存退出即可。
9 SSL问题排查
说明ssl安装有问题,或者没有安装ssl,可通过如下检测
说明没有安装ssl
解决方法去python3 的安装目录下的/usr/local/python3/Python-3.6.8/Modules/Setup文件里,去掉下面四行的注释
重新编译
./configure --prefix=/usr/local/python make make install 又下面报错
./Modules/_ssl.c:72:25: fatal error: openssl/rsa.h: No such file or directory: 解决方法:
yum install openssl-devel ./configure --prefix=/usr/local/python3 make && make install 没报错,测试一下
2 Bazel安装
连接地址:www.jianshu.com/p/bc542266a…
bazel版本 0.26.1。
1 用二进制安装程序安装
二进制安装程序位于Bazel的GitHub发行页面上。
安装程序包含Bazel二进制文件1。还必须安装一些其他库才能使Bazel工作。
2 第1步:安装所需的包
首先,安装先决条件:pkg-config,zip,g++,zlib1g-dev,unzip,和python。
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
3 第2步:下载Bazel
版本限制在0.26.1版本。
接下来,bazel-<version>-installer-linux-x86_64.sh 从GitHub上的Bazel发布页面下载Bazel二进制安装程序。
在terminal中输入以下内容下载(2018年09月08日前)最新的版本
wget https://github.com/bazelbuild/bazel/releases/download/0.26.1/bazel-0.26.1-installer-linux-x86_64.sh
文件150多兆,开始下载后休息会吧。
4 第3步:运行安装程序
按如下方式运行Bazel安装程序:
// 以下是统一写法
chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user
// 以下是对应版本的写法
chmod +x bazel-0.26.1-installer-linux-x86_64.sh
./bazel-0.26.1-installer-linux-x86_64.sh --user
该--user标志将Bazel安装到$HOME/bin系统上的目录并设置.bazelrc路径$HOME/.bazelrc。使用该--help命令可以查看其他安装选项。
5 第4步:设置您的环境
如果您使用--user上面的标志运行Bazel安装程序,则Bazel可执行文件将安装在您的$HOME/bin目录中。将此目录添加到默认路径是个好主意,如下所示:
export PATH="$PATH:$HOME/bin"
您也可以将此命令添加到您的~/.bashrc文件中。
6 重要一步:修改bazel的cache路径
这个命令不起作用
build --disk_cache=/export/dubaokun/tools/.bazel_cache
尝试环境变量,加入到环境变量里面/etc/profile
export TEST_TMPDIR=/export/dubaokun/tools/.bazel_cache
由于我事先没有设置bazel的缓存路径,所以后续进行了手动修改。
lrwxrwxrwx 1 root root 108 Mar 30 19:51 bazel-bin -> /root/.cache/bazel/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/bin
lrwxrwxrwx 1 root root 108 Mar 30 19:51 bazel-genfiles -> /root/.cache/bazel/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/bin
lrwxrwxrwx 1 root root 97 Mar 30 19:51 bazel-out -> /root/.cache/bazel/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out
lrwxrwxrwx 1 root root 87 Mar 30 19:51 bazel-tensorflow -> /root/.cache/bazel/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow
lrwxrwxrwx 1 root root 113 Mar 30 19:51 bazel-testlogs -> /root/.cache/bazel/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/testlogs
-rw-r--r-- 1 root root 122 Mar 30 16:16 BUILD
-----
rm bazel-bin
ln -s /export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/bin/ bazel-bin
rm bazel-genfiles
ln -s /export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/bin/ bazel-genfiles
rm bazel-out
ln -s /export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out bazel-out
rm bazel-tensorflow
ln -s /export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow bazel-tensorflow
rm bazel-testlogs
ln -s /export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/execroot/org_tensorflow/bazel-out/k8-opt/testlogs
/export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/external
/export/dubaokun/tools/.bazel_cache/_bazel_root/27509bc6e2111f3da3abc402b7d8c310/external/eigen_archive/49177915a14a.tar.gz: All mirrors are down: [GET returned 404 Not Found, Read timed out]
3 Protocol Buffer安装
版本 3.8.0,特定版本
1 简介
Protocol Buffers (简称 Protobuf)是 Google 开源的一款跨语言,跨平台,扩展性好的序列化工具,相比于 XML 和 JSON 等流行的编码格式,Protobuf 的性能非常高。因此,Protobuf 的编码格式(文件后缀为 .proto)在网络开发中得到了广泛的应用,protoc 作为 Protobuf 的编译器,可以根据 Protobuf 的定义文件 .proto 生成多种语言(如:C++, Java, Go, Python 等)的类型定义文件及编解码操作代码,
这篇文章主要介绍 protoc 的安装和使用方法。
2 源码编译安装
(1) 安装依赖 如官网所列,protoc 有如下依赖: autoconf, automake, libtool, curl, make, g++, unzip, gmock 其中 gmock 依赖于 libtool
(2)编译安装:
git clone https://github.com/google/protobuf
./autogen.sh # 生成 configure 文件
./configure
make
make check
sudo make install
sudo ldconfig
注: 安装完成之后,会在 /usr/lib 目录下生成前缀为 libprotobuf, libprotobuf-lite, libprotoc 这三类静态和动态库文件。 然后,我们需要执行 ldconfig 来更新 lib 路径。 如果上述步骤完成之后,执行 protoc 时仍发生错误的话,我们可以按如下方式手动链接
/etc/ld.so.conf.d/libprotobuf.conf
/usr/local/lib
ln -s /usr/lib/libprotobuf.so.10.0.0 /usr/lib/libprotobuf.so
3 二进制安装
如果不想编译安装,也可以直接下载二进制包来进行安装,我们可以从 这里 直接获取编译好的 protoc 二进制文件。
比如,下载如下两个包:
protoc-3.3.0-win32.zip
protoc-3.3.0-linux-x86_64.zip
解压到 PATH 路径下即可完成安装
sudo unzip protoc-3.0.0-beta-3-linux-x86_64.zip
sudo chmod a+x protoc
查看使用帮助
protoc --help
4 使用示例
安装好 protoc 之后,我们可以安装官方手册上的例子来试验一下用法
1)编写 .proto 定义文件
syntax = "proto3"
package tutorial;
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}
- 编译
.proto文件,生成想要的语言的定义及操作文件
比如,我们这里想要生成 C++ 的源码,那么执行:
protoc --cpp_out=. addressbook.proto
生成的文件:addressbook.pb.h, addressbook.pb.cc
- 把上述生成的
.pb.cc文件和我们应用程序 C++ 文件进行编译
g++ addressbook.pb.cc readinput.cpp -lprotobuf
5 protoc 用法及选项
通过 protoc --help 可以查看使用方法
protoc 的用法格式:
protoc [OPTION] PROTO_FILES
-IPATH, --proto_path=PATH Specify the directory in which to search for imports.
May be specified multiple times;
If not given, the current working directory is used.
--plugin=EXECUTABLE Specifies a plugin executable to use.
Normally, protoc searches the PATH for
plugins, but you may specify additional
executables not in the path using this flag.
Additionally, EXECUTABLE may be of the form
NAME=PATH, in which case the given plugin name
is mapped to the given executable even if
the executable's own name differs.
--cpp_out=OUT_DIR Generate C++ header and source.
--csharp_out=OUT_DIR Generate C# source file.
--java_out=OUT_DIR Generate Java source file.
--javanano_out=OUT_DIR Generate Java Nano source file.
--js_out=OUT_DIR Generate JavaScript source.
--objc_out=OUT_DIR Generate Objective C header and source.
--php_out=OUT_DIR Generate PHP source file.
--python_out=OUT_DIR Generate Python source file.
--ruby_out=OUT_DIR Generate Ruby source file.
例子:
protoc -I ../../protos --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ../../protos/route_guide.proto
protoc -I ../../protos --cpp_out=. ../../protos/route_guide.proto
4 软件包安装
必须是Root用户。
1 安装命令
sudo pip install -i pypi.tuna.tsinghua.edu.cn/simple numpy grpcio Keras-Applications Keras-Preprocessing h5py requests enum mock
sudo pip install -i pypi.mirrors.ustc.edu.cn/simple/ numpy==1.18.5 grpcio Keras-Applications Keras-Preprocessing h5py requests enum mock
2 镜像地址
镜像地址,更换pip的下载路径
-
中国科学技术大学 pypi.mirrors.ustc.edu.cn/simple/
用管理员身份执行cmd,然后输入如下命令
pip install tensorflow -i pypi.tuna.tsinghua.edu.cn/simple/ pip install opencv-python -i pypi.tuna.tsinghua.edu.cn/simple/
5 Tensorflow源码编译
之所以尝试了一下源码编译TF,理由很简单。一是因为每次在运行的时候都会出现如下警告,感觉有点“不爽”。二是本来电脑就没有GPU,如果CPU的一点点加速都用不了,那就是太慢了。 所以就想着去编译一个优化后的TF安装包。
准备工作
1.查看可优化的信息
直接利用PIP安装普通版的TF,然后随便跑一个程序。如果说没有任何性能优化提示,那么“恭喜你”,下面什么都不用做了。 这已经是你电脑最快状态了。如果有如下提示,说明尚有优化空间,记下警告里说的这些指令集的名字,后面会用到。
2.安装Bazel
Bazel是编译TensorFlow的工具。首先按照这个网页的提示,下载repo文件。下载地址是这里,如下所示。
然后依次输入命令。
cp vbatts-bazel-epel-7.repo /etc/yum.repos.d/
yum install bazel
期间可能会安装其它的一些依赖,静静等待就好。完成后如下所示。
3.Git TensorFlow
输入命令。
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
上面的命令会在你的当前文件夹中创建一个叫做“tensorflow”的文件夹,下载的文件都存在里面。如下图所示。如果提示git无效命令,直接
yum install git即可。
编译TensorFlow
1.配置编译
输入如下命令,切换当前目录到git的tensorflow下,并运行配置程序。
cd tensorflow/
./configure
可以看到有一堆配置选项,基本上是用默认的就好。
2.开始编译
输入命令。
bazel build --jobs 10 --config=opt //tensorflow/tools/pip_package:build_pip_package
===========
bazel build -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx //tensorflow/tools/pip_package:build_pip_package
上面的命令会生成一个叫做build_pip_package的脚本。这一步的参数便是是优化的关键了,那些优化指令就是在这里指定的。 需要注意的是,使用哪些并不是固定的。这里的代码是在我的VPS上提示可以优化的,不代表你的电脑上就适合。例如下面的命令是另一个服务器支持的优化指令。
bazel build -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma //tensorflow/tools/pip_package:build_pip_package
比较好的办法就是之前说的先用pip装一个公版TF,然后随便跑一下,看提示的Warning信息,把这些信息记下来,然后在这里对应配置。 要不然CPU并不支持,但编译了,到时候用的时候有可能会报错。注意这是一个很慢很慢的过程,请耐心等待。编译界面如下。
而且还有可能会中途断掉。如果网络不好的话,建议开个screen编译,不然中途编译好久了结果ssh断开了,不过不用太担心,还是会从断点开始的。 下面是重新开始的样子,有个提示”Found 1 target…“。编译的时候遇到如下错误,结果网上搜了说是因为内存不足导致的。
增加swap扩展内存即可解决。
按照如下命令运行这个脚本,在/tmp/tensorflow_pkg文件夹中创建pip的安装包,这个生成会很快。
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg_python3.6.8
==========
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
到这一步,编译就完成了。
安装TensorFlow
安装这个之前,首先先卸载掉之前用pip装的TF。
pip uninstall tensorflow
然后再用pip安装我们生成的轮子即可。
pip install /tmp/tensorflow_pkg/tensorflow-1.5.0rc0-cp27-cp27mu-linux_x86_64.whl
由于平台的不同,可能软件包的名字是不一样的。这样,安装就大功告成了。
测试TensorFlow
用之前同样的代码进行测试,输出结果如下。可以看到,再也没有性能优化的提示了。不过,不知道为什么,用自己编译的TF测试耗时反而变长了。不知道是不是因为版本的问题。 用pip装的是1.4.1版本,自己编译的是1.5.0rc版本。
6 相关资料
-
www.jianshu.com/p/1d314fefe… centos 7 tensorflow-gpu-1.8.0 源码编译
-
zhaoxuhui.top/blog/2018/0… CentOS源码编译安装TensorFlow
-
www.jianshu.com/p/db943b0f1… Tensorflow源码编译安装
-
tensorflow.juejin.im/install/ins… 通过源码安装 TensorFlow
-
fancyerii.github.io/2020/11/14/… CentOS下编译Tensorflow
-
fancyerii.github.io/2020/11/14/… CentOS下编译Tensorflow