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 回答
我们只在 64 位 Linux 和 Mac OS X 上测试了 TensorFlow 发行版,并且只为这些平台发行了二进制包。尝试按照源安装说明为您的平台构建一个版本。
编辑:一位用户发布了在 32 位 ARM 处理器上运行 TensorFlow 的说明,这对其他 32 位架构很有前景。这些说明可能对让 TensorFlow 和 Bazel 在 32 位环境中工作有帮助。
我在 32 位 Ubuntu (16.04.1 Xubuntu) 上构建了一个仅 CPU 版本的 TensorFlow。对于这样一个正式不支持 32 位架构的复杂库,它比预期的要顺利得多。
可以通过遵循这两个指南的交集的一个子集来完成:
如果我没有忘记任何事情,以下是我已采取的步骤:
安装 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
.)的信息。
依赖项:
sudo apt-get update sudo apt-get install git zip unzip swig python-numpy python-dev python-pip python-wheel pip install --upgrade pip
按照Bazel 附带的说明,下载 Bazel 源 zip(我得到
bazel-0.4.3-dist.zip
),创建一个类似的目录~/tf/bazel/
并在那里解压缩。OutOfMemoryError
我在接下来的构建中得到了一个,但是这个修复解决了它(即为-J-Xmx512m
引导构建添加了)。打个电话
bash ./compile.sh
,等了半天(对我来说一夜之间,但看最后的备注)。$ git clone -b r0.12 https://github.com/tensorflow/tensorflow
这似乎是对源代码的唯一必要更改!
$ cd tensorflow $ grep -Rl "lib64"| xargs sed -i 's/lib64/lib/g'
然后对一切
$ ./configure
说不。(在相关时接受默认值。)我的设置花费了几个小时:
$ 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% 的加速非常明显。另一方面,本地安装的便利性非常值得通过上述过程。
谷歌似乎还不支持 32 位机器上的 tensorflow。
在运行 Centos 6.5 的 32 位机器上,在“import tensorflow as tf”命令后收到以下错误:ImportError: tensorflow/python/_pywrap_tensorflow.so: wrong ELF class: ELFCLASS64
在 Google 发布 32 位版本的 tensorflow 之前,我还建议按照此处指定的源代码构建 tensorflow 。
我已经使用了这个问题的回复中的信息,并生成了一个详细的说明列表来在 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 库!