27

Is there a version of TensorFlow for 32-bit Linux? I only see the 64-bit wheel available, and didn't find anything about it on the site.

4

4 回答 4

26

我们只在 64 位 Linux 和 Mac OS X 上测试了 TensorFlow 发行版,并且只为这些平台发行了二进制包。尝试按照源安装说明为您的平台构建一个版本。

编辑:一位用户发布了在 32 位 ARM 处理器上运行 TensorFlow 的说明,这对其他 32 位架构很有前景。这些说明可能对让 TensorFlow 和 Bazel 在 32 位环境中工作有帮助。

于 2015-11-10T17:00:09.400 回答
13

我在 32 位 Ubuntu (16.04.1 Xubuntu) 上构建了一个仅 CPU 版本的 TensorFlow。对于这样一个正式不支持 32 位架构的复杂库,它比预期的要顺利得多。

可以通过遵循这两个指南的交集的一个子集来完成:

如果我没有忘记任何事情,以下是我已采取的步骤:

  1. 安装 Oracle Java 8 JDK:

    $ sudo apt-get remove icedtea-8-plugin  #This is just in case
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java8-installer
    

(这就是您在原始的 Xubuntu 安装中所需要的全部内容,但否则请搜索上述关键字,以阅读有关选择默认 JRE 和javac.)的信息。

  1. 依赖项:

    sudo apt-get update
    sudo apt-get install git zip unzip swig python-numpy python-dev python-pip python-wheel
    pip install --upgrade pip
    
  2. 按照Bazel 附带的说明,下载 Bazel 源 zip(我得到bazel-0.4.3-dist.zip),创建一个类似的目录~/tf/bazel/并在那里解压缩。

  3. OutOfMemoryError我在接下来的构建中得到了一个,但是这个修复解决了它(即为-J-Xmx512m引导构建添加了)。

  4. 打个电话bash ./compile.sh,等了半天(对我来说一夜之间,但看最后的备注)。

  5. $ git clone -b r0.12 https://github.com/tensorflow/tensorflow

  6. 这似乎是对源代码的唯一必要更改!

    $ cd tensorflow
    $ grep -Rl "lib64"| xargs sed -i 's/lib64/lib/g'
    
  7. 然后一切$ ./configure说不。(在相关时接受默认值。)

  8. 我的设置花费了几个小时:

    $ bazel build -c opt --jobs 1 --local_resources 1024,0.5,1.0 --verbose_failures //tensorflow/tools/pip_package:build_pip_package
    $ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
    $ pip install --user /tmp/tensorflow_pkg/ten<Press TAB here>
    

要查看它是否已安装,请查看它是否适用于TensorFlow Beginners 教程。我使用jupyter qtconsole(即 IPython 的新名称)。运行中的代码mnist_softmax.py。即使在非常有限的机器上也应该花费很少的时间。

出于某种原因,TensorFlow 的从源代码构建指南不建议运行单元测试

$ bazel test //tensorflow/...

(是的,输入省略号。)

虽然我无法运行它们——它花了 19 个小时试图链接libtensorflow_cc.so,然后一些东西杀死了链接器。这是半个核心和 1536 MB 内存限制。也许其他人,拥有更大的机器,可以报告单元测试的进展情况。

为什么我们不需要做这两个演练中提到的其他事情?首先,大部分工作是处理 GPU 接口。其次,自从编写了第一个演练以来,Bazel 和 TensorFlow 都变得更加独立。

请注意,为构建提供给 Bazel 的上述设置非常保守(1024 MB RAM,半个内核,一次一个作业),因为我通过 VirtualBox 使用 200 美元上网本的单核运行它英特尔为委内瑞拉、巴基斯坦和尼日利亚的弱势儿童提供服务。(顺便说一下,如果你这样做,请确保虚拟 HDD 至少为 20 GB - 尝试构建上面的单元测试大约需要 5 GB 的空间。)轮子的构建花费了将近 20 个小时,而且适中来自第二个教程的深度 CNN,据称在现代台式机 CPU 上运行最多需要半小时,在此设置下大约需要 80 小时。有人可能想知道为什么我没有台式机,但事实是,使用 TensorFlow 进行实际训练仅在高端 GPU(或其中的一堆)上才有意义,并且我们何时可以租用具有这种 GPU 的 AWS 现场实例每小时大约 10 美分,没有承诺并且在可行的临时基础上,在其他地方进行培训没有多大意义。480000% 的加速非常明显。另一方面,本地安装的便利性非常值得通过上述过程。

于 2017-01-10T05:13:29.583 回答
1

谷歌似乎还不支持 32 位机器上的 tensorflow。

在运行 Centos 6.5 的 32 位机器上,在“import tensorflow as tf”命令后收到以下错误:ImportError: tensorflow/python/_pywrap_tensorflow.so: wrong ELF class: ELFCLASS64

在 Google 发布 32 位版本的 tensorflow 之前,我还建议按照此处指定的源代码构建 tensorflow 。

于 2015-12-31T03:51:28.760 回答
1

我已经使用了这个问题的回复中的信息,并生成了一个详细的说明列表来在 32 位 linux 系统中编译和安装 tensorflow。

最新版本的指令可在 github 上找到:tensorflow-32-bits-linux

在 32 位 linux 系统中安装 TensorFlow 的说明

我使用以下步骤在旧的 Asus Eee-Pc 1000H 中安装 tensorflow。当然,它已经从原来的 1 GB RAM 和 80 GB HDD 升级到 2 GB RAM 和 480 GB SSD 存储。

我使用以下操作系统版本测试了这些说明并且没有问题:* Xubuntu 16.04.6 Xenial Xerus 32 位。* Xubuntu 18.04.3 仿生海狸 32 位。* Debian 9.11 拉伸 32 位。

选择方便的linux系统

我已经测试了具有 2 GB RAM 的 Ubuntu 16.04 (Xenial) 和 Debian 9.11 (Stretch) 系统。

我将系统设置为具有 4 GB 的 SWAP 空间。只有 1 GB 的 SWAP,一些编译失败。

发行版具有 Java SDK 的版本 8 至关重要:openjdk-8-jdk

安装 Java 8 SDK 和构建工具

sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install git zip unzip autoconf automake libtool curl zlib1g-dev swig build-essential

安装 Python 库

接下来,我们安装 python 3 开发库和 tensorflow 所需的 keras 模块。

sudo apt-get install python3-dev python3-pip python3-wheel
sudo python3 -m pip install --upgrade pip
python3 -m pip install --user keras

您可以使用 python 3 或 python 2 并为该版本编译 tensorflow。

从源代码安装和编译 Bazel

我们需要源代码 bazel 0.19.2 发行版。我们可以获取它并安装在一个新文件夹中。

cd $HOME
wget https://github.com/bazelbuild/bazel/releases/download/0.19.2/bazel-0.19.2-dist.zip
mkdir Bazel-0-19.2
cd Bazel-0-19.2
unzip ../bazel-0.19.2-dist.zip

在编译之前,我们需要删除 ./src/tools/singlejar/mapped_file_posix.inc 文件的第 30 行(#error This code for 64 bit Unix.),如果我们不在 64 位机器中,则会引发错误。这个 bazel 版本在 32 位下工作正常。

vi  ./src/tools/singlejar/mapped_file_posix.inc

我们还需要增加 Bazel 可用的 java 内存并开始编译它。

export BAZEL_JAVAC_OPTS="-J-Xmx1g"
./compile.sh

完成后(可能需要几个小时),我们将 bazel 编译的可执行文件移动到当前用户路径中的某个位置

sudo cp output/bazel /usr/local/bin

从源代码编译 TensorFlow

创建一个文件夹并将 tensorflow 的 1.13.2 版本克隆到其中。从 1.14 版本开始,tensorflow 使用英特尔 MKL DNN 优化库,它仅适用于 64 位系统。所以 1.13.2 是最后一个以 32 位运行的版本。

cd $HOME
mkdir Tensorflow-1.13.2
cd Tensorflow-1.13.2
git clone -b v1.13.2 --depth=1 https://github.com/tensorflow/tensorflow .

在编译之前,我们将对 64 位库的引用替换为 32 位库。

grep -Rl "lib64"| xargs sed -i 's/lib64/lib/g'

我们开始 tensorflow 配置。我们需要明确禁用几个在 32 位系统上不可用或不支持的可选库。

export TF_NEED_CUDA=0
export TF_NEED_AWS=0
./configure

我们必须考虑以下几点: * 当被要求指定 python 的位置时。[默认为 /usr/bin/python]:我们应该响应/usr/bin/python3以使用 python 3。 * 当要求输入要使用的所需 Python 库路径时。默认是 [/usr/local/lib/python3.5/dist-packages] 我们只需按 Enter * 我们应该对所有 Y/N 问题回答N。* 当指定 bazel 选项“--config=opt”时被要求指定在编译期间使用的优化标志 [默认为 -march=native -Wno-sign-compare]:只需按 Enter

现在我们开始编译 tensorflow,禁用可选组件,如 aws、kafka 等。

bazel build --config=noaws --config=nohdfs --config=nokafka --config=noignite --config=nonccl -c opt --verbose_failures //tensorflow/tools/pip_package:build_pip_package

如果一切顺利,现在我们生成 pip 包。

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

我们安装 pip 包

python3 -m pip install --user /tmp/tensorflow_pkg/tensorflow-1.13.2-cp35-cp35m-linux_i686.whl

测试张量流

现在我们运行一个小测试来检查它是否有效。我们创建一个包含以下内容的 test.py 文件:

import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

我们运行测试

python3 test.py

这是输出

Epoch 1/5
60000/60000 [==============================] - 87s 1ms/sample - loss: 0.2202 - acc: 0.9348
Epoch 2/5
60000/60000 [==============================] - 131s 2ms/sample - loss: 0.0963 - acc: 0.9703
Epoch 3/5
60000/60000 [==============================] - 135s 2ms/sample - loss: 0.0685 - acc: 0.9785
Epoch 4/5
60000/60000 [==============================] - 128s 2ms/sample - loss: 0.0526 - acc: 0.9828
Epoch 5/5
60000/60000 [==============================] - 128s 2ms/sample - loss: 0.0436 - acc: 0.9863
10000/10000 [==============================] - 3s 273us/sample - loss: 0.0666 - acc: 0.9800

享受你的新 TensorFlow 库!

于 2020-01-14T01:57:49.060 回答