TensorFlow在32位Linux上?

时间:2015-11-10 16:14:06

标签: tensorflow

是否有适用于32位Linux的TensorFlow版本?我只看到64位轮可用,并且在网站上没有找到任何相关信息。

4 个答案:

答案 0 :(得分:23)

我们仅测试了64位Linux和Mac OS X上的TensorFlow发行版,并仅为这些平台分发二进制包。请尝试按照source installation instructions为您的平台构建一个版本。

编辑:一位用户已发布instructions for running TensorFlow on a 32-bit ARM processor,这有望用于其他32位架构。这些指令可能有助于让TensorFlow和Bazel在32位环境中工作。

答案 1 :(得分:9)

我在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
    
  2. (这是您在原始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. 关注the instructions that come with Bazel,下载一个Bazel源zip(我得到bazel-0.4.3-dist.zip),创建一个像~/tf/bazel/这样的目录并在那里解压缩。

    3. 我在以下版本中获得OutOfMemoryError,但this fix负责处理(即为引导版本添加-J-Xmx512m)。

      < / LI>
    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并对所有内容说 no 。 (在相关时接受默认值。)

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

      出于某种原因,TensorFlow's guide to building from source并不建议running the unit tests

      $ bazel test //tensorflow/...
      

      (是的,输入省略号。)

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

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

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

答案 2 :(得分:1)

Google似乎还不支持32位计算机上的张量流。

在运行Centos 6.5的32位计算机上,在&#34; import tensorflow之后收到以下错误:tf&#34;命令:      ImportError:tensorflow / python / _pywrap_tensorflow.so:错误的ELF类: ELFCLASS64

在Google分发32位版本的tensorflow之前,我还建议按照指定here从源代码构建张量流。

答案 3 :(得分:0)

我已经使用了对这个问题的回答中的信息,并生成了详细的指令列表以在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库

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

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

您可以使用eithr 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,此代码用于64位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使用仅在64位系统中运行的Intel MKL DNN优化库。所以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 *我们应该对所有的是/否问题回答 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库!!