当前位置: 首页 > news >正文

重新编译一个不支持 AVX、AVX2的 TensorFlow 1.15的python3.7的安装包

事情是这样的,以前写过一个图像识别程序,是在python3.7 centos7上实现的,是要求cpu支持avx指令的,但是最近在一台电脑 上部署时发现这台电脑不支持avx的,参才之前的文章

在不支持avx指令集的cpu上部署tensorflow及keras._6133指令集-CSDN博客

但是安装包没有linux下的python版本,得自己编译生成了。这里面问题也不小。

我的系统是ubuntu2404,下载了tensorflow源代码后,配好编译环境,切换到1.5.0分支后各种代码报错,实在是搞不定了,

是的,你完全可以在 Ubuntu 24.04 上编译出一个不带 AVX 的 tensorflow==1.15,然后拷贝到 CentOS 7 上使用,前提是两台机器的 Python 版本、架构一致(通常都是 x86_64)。


✅ 编译逻辑简述

你要做的就是:

  1. 在 Ubuntu 24.04 上编译 TensorFlow 1.15,禁用 AVX、AVX2、FMA 等指令集

  2. 生成 .whl 安装包(比如 tensorflow-1.15.0-cp37-cp37m-linux_x86_64.whl)。

  3. 将该 .whl 拷贝到 CentOS 7 上,用 pip install 安装即可。


✅ 编译准备步骤(Ubuntu 24.04)

1. 安装依赖

sudo apt update
sudo apt install -y python3.7 python3.7-dev python3-pip git zip unzip
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
sudo pip install -U pip setuptools wheel numpy

2. 安装 Bazel(TensorFlow 1.15 兼容 Bazel 0.26.1)

wget https://github.com/bazelbuild/bazel/releases/download/0.26.1/bazel-0.26.1-installer-linux-x86_64.sh
chmod +x bazel-0.26.1-installer-linux-x86_64.sh
./bazel-0.26.1-installer-linux-x86_64.sh

3. 下载 TensorFlow 1.15 源码

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout r1.15

4. 配置编译环境(重点是禁用 AVX)

./configure

关键配置回答如下:

Do you wish to build TensorFlow with CUDA support? [y/N]: n
...
Please specify optimization flags to use during compilation: 
→ 输入:`-march=core2 -mno-avx -mno-avx2 -mno-fma`

说明:

  • -march=core2 是一组兼容最基础 x86_64 + SSE2 的优化

  • 关闭 AVX/AVX2/FMA 以保证能运行在老旧 CPU 上

5. 开始构建 .whl 安装包(耗时约 1 小时)

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ./output

生成的文件类似:

./output/tensorflow-1.15.0-cp37-cp37m-linux_x86_64.whl

✅ 拷贝并安装到 CentOS 7 上

  1. 拷贝 .whl 到 CentOS(如用 scp):

scp tensorflow-1.15.0-*.whl user@centos7:/tmp/
  1. 在 CentOS 7 上安装:

pip install /tmp/tensorflow-1.15.0-*.whl

🧠 注意事项

  • TensorFlow 的 .whl 与 Python 版本和平台强相关(确保都是 Python 3.7x86_64)。

  • 不要用 -march=native,否则仍会编译进 AVX 指令。

  • 编译机器的系统版本(Ubuntu 24.04)与目标运行环境(CentOS 7)可以不同,但glibc 版本不能太新,否则运行时可能报错(可通过 ldd --version 检查 glibc 版本)。

后来发现,推荐用docker拉取一个低版本的ubuntu2004来实现

FROM ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractive# 使用清华 APT 源(可选)
RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list && \sed -i 's|http://security.ubuntu.com/ubuntu/|http://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list# 安装构建工具和 GCC 7
RUN apt-get update && \apt-get install -y \build-essential \gcc-7 g++-7 \curl git zip unzip \openjdk-8-jdk \zlib1g-dev \libffi-dev \libssl-dev \libsqlite3-dev \wget \patch \ca-certificates && \ln -sf /usr/bin/gcc-7 /usr/bin/gcc && \ln -sf /usr/bin/g++-7 /usr/bin/g++ && \ln -sf /usr/bin/python3.8 /usr/bin/python && \curl -sS https://bootstrap.pypa.io/get-pip.py | python
# 安装python 我用的是Anaconda3-2019.10-Linux-x86_64.sh# 安装 Bazel(兼容 TensorFlow 1.15)
RUN wget https://github.com/bazelbuild/bazel/releases/download/0.26.1/bazel-0.26.1-installer-linux-x86_64.sh && \chmod +x bazel-0.26.1-installer-linux-x86_64.sh && \./bazel-0.26.1-installer-linux-x86_64.sh && \rm -f bazel-0.26.1-installer-linux-x86_64.sh# 克隆 TensorFlow 源码
WORKDIR /workspace
RUN git clone https://github.com/tensorflow/tensorflow.git && \cd tensorflow && git checkout v1.15.0WORKDIR /workspace/tensorflow# 配置环境
RUN yes "" | python configure.py# 编译 TensorFlow(禁用 AVX)
RUN bazel build --config=opt \--copt=-march=native \--copt=-Wno-sign-compare \--copt=-mno-avx \--copt=-mno-avx2 \--copt=-mfpmath=387 \//tensorflow/tools/pip_package:build_pip_package# 打包为 whl
RUN ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkgCMD ["bash"]

 之后要安装

pip install numpy keras_preprocessing keras_applications wheel

进入容器

docker exec -it ubuntu_rapb-ubuntu_rApb-1 bash

将容器保存在文件

docker commit ubuntu5000 tempimage | xargs -I {} docker save {} | gzip > ubuntu5000.tar.gz

文件迁移到另外的机器上 

## ✅ 步骤一:使用 `docker load` 载入镜像 
docker load -i ubuntu5000.tar 
docker load < ubuntu5000.tar.gz
加载成功后,你会看到类似输出:Loaded image: ubuntu5000-image:latest ## ✅ 步骤二:验证镜像是否导入成功docker images  ## ✅ 步骤三:使用导入的镜像运行容器(如带端口和自动运行脚本)docker run -d \-p 5000:5000 \--name my-restored-container \-w /opt/mobile/src \ubuntu5000-image:latest \/root/anaconda3/bin/python NewMobileNetv2_ImageClassificationService.py

相关文章:

  • Spring Boot 管理系统项目解读
  • Android Studio 中使用 C++ 连接 OpenCV
  • Android studio打包生成jar包文件
  • Spring Cloud使用Eureka调用接口,超时设置(二)
  • Python爬取豆瓣短评并生成词云分析
  • 21 大刷题平台开启编程王者之路
  • Macbook如何关闭掉端口
  • 【WPF】WPF ComboBox 数据驱动不刷新?SelectedItem 与 SelectedIndex 解析!
  • 2025年SYN-CC混合攻击防御实战:某金融平台抵御800Gbps双重风暴实录
  • AI预警,数据“解码”:我们如何用技术为象牙塔筑起金融防火墙?
  • 北航将层次对称性引入多智能体强化学习,提升样本效率
  • 解决 Ruby Gem “rexml“ 版本不兼容问题 (CocoaPods/Firebase 相关错误)
  • vue3-标签的ref属性,props的使用,vue3的生命周期详解
  • 数据结构 双向链表与双向循环链表 6.17
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • QGIS新手教程5:图层属性查询与表达式筛选技巧
  • 鸿蒙组件通用属性深度解析:从基础样式到高级定制的全场景指南
  • AI编程浏览器插件(简易版)
  • 云原生时代配置中心全景解读:从Spring Cloud Config到Nacos深度实践
  • 图扑 HT 3D 场景视频嵌入应用功能
  • 公司需要一个简单的网站/谷歌搜索引擎下载
  • html手机网站开发教程/东莞优化排名公司
  • 网站做视频怎么赚钱的/小程序推广50个方法
  • 仿腾讯网站源码/十大免费网站推广平台
  • 外贸用什么网站开发客户/网络推销
  • 张家港网站优化/有什么好的推广平台