环境:python : 3.7.1 (root)
tensorflow : 2.0.0 (tf2)
pandas : 1.3.5 (tf2)
numpy : 1.21.6 (tf2)
docker 容器安装证书出现问题 导致无法进行镜像拉取,后面使用docker安装tensorflow-serving 时已解决docker问题。
1、查看linux的硬件设施:在终端下输入
uname -a
输出结果:
Linux kylin …….kylin.server-generic #kylin SMP …… aarch64 aarch64 aarch64 GNU/Linux
从结果可以看出它的硬件设施为aarch64,这个硬件也是属于ARM的。
关于如何在arm架构下安装anaconda
一个是miniconda3(https://repo.anaconda.com/miniconda/),
二是Archiconda3((https://github.com/Archiconda/build-tools/releases/download/0.2.2/Archiconda3-0.2.2-Linux-aarch64.sh))
这里采用第二种archiconda3。
2.下载archiconda到linux,并且运行
bash Archiconda3-0.2.2-Linux-aarch64.sh
3、运行完后,在终端输入python / conda,可以验证是否安装成功.
由于安装tensorflow 依赖 h5py ,而 h5py 依赖 HDF5 ,需要先编译安装HDF5 ,否则使用 pip 安装 h5py 会报错
1.1安装HDF5
我们从源码进行安装,对于源码安装都可以参考下面步骤。
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz
tar -zxvf hdf5-1.10.5.tar.gz
cd hdf5-1.10.5/
./configure --prefix=/usr/include/hdf5
make
make install
这里需要注意执行配置的时候最好指定安装目录,方便管理。
打开./bashrc文件内容命令如下
vim ~/.bashrc
在./bashrc内容的最末尾加上下面两行。如果–prefix路径和我不一样,需要改成你安装的hdf5路径
export PATH=$PATH:/usr/include/hdf5/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/include/hdf5/lib
最后source一下使其生效
source ~/.bashrc
需要注意的是在./bashrc添加环境变量。我们遇到的大部分下面ImpoerError找不到文件的问题都可能是没用添加到环境变量。可以先查看下对应的包有没安装,如果安装了还报下面的错误应该把环境变量添加上。
ImportError: hdf5.so.40: cannot open shared object file: No such file or directory
1.2 安装h5py
安装h5py直接使用pip安装即可,也可以用源码安装
安装h5py依赖包,安装h5py
pip install Cython
pip install h5py==2.8.0
2.安装TensorFlow
安装Tensorflow由于经常断连,直接先下载编译好的whl包安装
git上有现在做好的aarch64,tensorflow的包:地址如下
tensorflow-on-arm (https://github.com/lhelontra/tensorflow-on-arm/releases)
找到对应的release下载安装,这里我选了tensorflow2.0
用pip安装whl文件
pip install tensorflow-2.0.0-cp37-none-linux_aarch64.whl
解决docker无法拉取问题,待整理
原因:arm架构采用普通部署比较麻烦,加上服务器上依赖不全,加上官方推荐使用docker部署,遂尝试多次选择放弃。
2.1 拉取镜像
> 服务器采用的是Arm64架构,使用docker直接pull 将会存在运行报错 ,tensorflow/serving在hub.docker.com
中找只有Linux/amd64的,这里使用 来自linux amd64(x86_64)主机通用的arm内核上针对liunx交叉编译的项目。
拉取镜像
docker pull emacski/tensorflow-serving:latest
2.2 启动测试
创建文件夹用于拉取测试模型
# 创建 /home/conda/tensorflowDemo
git clone https://github.com/tensorflow/serving
启动
TESTDATA="${pwd}/serving/tensorflow_serving/servables/tensorflow/testdata"
docker run -t --rm -p 8051:8051 -v "$TESTDATA"/saved_model_half_plus_two_cpu:/models/half_plus_two" -e MODEL_NAME=half_plus_two emacski/tensorflow-serving:latest
测试
curl -d '{"instances":[1.0,2.0,5.0]}' -X POST http://localhost:8051/v1/models/half_plus_two:predict
正常输出
{
"predictions":{[2.5,3.0,4.5]}
}