大家好,我是隔壁小王。本文主要是讲述在使用tfx实现官方案例的可能会遇到的一些报错及解决方法。
在学习tfx的使用时,首先接触的是一个官方给出的案例,案例讲的是一个关于芝加哥出租车的模型:https://github.com/tensorflow/tfx/tree/master/examples/chicago_taxi_pipeline。在这个github项目中,chicago_taxi_pipeline/README.md将这个用例的实现流程讲述的比较清晰,下面我基于这个md文件将这个案例及环境的实现步骤复现一遍。
环境:centos7,python2。
这里要说明下,tfx实际上就是一种airflow或者kubeflow(下面默认以airflow为例)的应用。airflow是一种工作流的管理框架,这个框架目前是依赖python2来写的,那么如果不对airflow相关的代码进行修改,默认情况下只能使用python2和linux的环境。所以说其实tfx之所以叫端对端的管道,理解了airflow就知道他就是一套负责从数据到模型的管理调度的框架。
步骤:
1.创建虚拟环境
图方便省事还是建议创建个虚拟环境为好。
pip install python-virtualenv
virtualenv 虚拟环境目录(创建的虚拟环境文件就会保存在此)
virtualenv -p 本地python路径 虚拟环境目录(指定你创建的虚拟环境用python几)
source ./虚拟环境目录/bin/activate(激活虚拟环境)
2.配置环境变量
为了后续方便,提前设置一些快捷路径:
export AIRFLOW_HOME=~/airflow
export TAXI_DIR=~/taxi
export TFX_DIR=~/tfx
3.安装依赖包
pip install tensorflow==1.12
pip install docker
export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install apache-airflow
pip install tfx==0.12.0
4.初始化airflow的数据库
airflow initdb
airflow内部集成了sqllite,默认情况下就是用的这个数据库。如果要连接mysql或者mongodb可以了解airflow的相关的配置资料,这里提供airflow的官方网站:https://airflow.apache.org/concepts.html。
5.启动服务及遇到的问题
5.1
在当前窗口执行命令:airflow webserver
airflow内部集成了flask webserver,执行这个指令会启动一个web服务,这个web服务的目的是为了显示和管理airflow的整个流程。
bug1:
至此,你可能会遇到一个报错:importerror ‘glibcxx__3.4.21’,就是没有这个依赖包。
这个依赖包是一个底层的C++库,我看了若干企业服务器、个人虚拟机和一台2017款mac,gcc版本都是4,而且glibc也停留在3.4.20以下,查看的指令是:string /usr/lib64/libstdc++.so.6 | grep GLIBCXX。
这个问题的解决方法有两种:
1.升级gcc,升到6再重新编译,我试过发现挺烦的;
2.直接升级依赖包。
毫无疑问使用方法2,下载新版依赖包:wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_amd64.deb。注意,最后这个依赖包的版本可能会更新,不一定是这个。
解压:ar -x libstdc++6_8.2.0-7_amd64.deb,生成了文件data.txr.xz,需要转成gz:xz -d data.tar.xz。
接着继续解压:tar -zvxf data.tar.gz,得到了最终目标文件夹。
更新软链接:
rm /usr/lib64/libstdc++.so.6;
cp usr/lib/x86_64-linux-gnu/libstdc++.s0.6.0.25 /usr/lib64;(注意空格)
ln /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6。
在瞅一眼:string /usr/lib64/libstdc++.so.6 | grep GLIBCXX,看看更新了没。
bug2:
恭喜你,进入了下一个关卡:importerror GLIBC_2.18,这个处理起来比较简单。
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz;
tar zxf glibc-2.18.tar.gz;
cd glibc-2.18/;
mkdir build;
cd build;
../configure --prefix=/usr;
make -j2;
make install。
bug3:
还有一个可能存在的问题,就是airflow的server默认端口是8080,这个端口如果你的服务器上已经被占用也用提示连接失败,可以修改一下端口号。1.指令后加-p可以指定端口;2.也可以在配置文件中修改,还记得刚刚加的环境变量~/airflow吗?在这个路径下会生成一个airflow.cfg文件,这就是airflow的配置文件,进入修改端口即可。
bug4:
如果运气不好,可能会出现:没有tfx/proto/evaluator_pb2这个文件,该文件是需要运行tfx这个目录下setup.py后自动生成的。直接运行还会提示没有protoc,因为还需要安装protobuf才能解决,安装流程较为复杂,这里给出一个可以解决的教程:https://blog.csdn.net/u013210620/article/details/81317731。
基本上坑就踩到此为止了,只有把这些坑填上,你才能运行一个tfx案例。
5.2
再打开一个虚拟窗口,执行指令:airflow scheduler
scheduler是一个调度的功能,在airflow中被独立写成一个服务,这个服务的功能这里暂且可以简单理解为安排任务给工作流的各个节点执行。
6.查看结果
服务器上的centos是没有可视化界面的,因此要查看airflow的界面,就需要利用局域网内其他的机器,找个能ping通服务器的台式机,假设服务器ip是xx.xx.xx.xx,端口设置为:18888。则在浏览器中输入:xx.xx.xx.xx:18888,就可以看到airflow的界面了:
至于airflow界面的各个模块的作用和操作方法本文就不多加赘述了。