gpt4 book ai didi

dynamic - Tensorflow 可以在 Mac 上读取 HDFS 吗?

转载 作者:行者123 更新时间:2023-12-04 17:53:16 30 4
gpt4 key购买 nike

我试图强制 OS/X 上的 Tensorflow 从 HDFS 读取数据。文档

https://www.tensorflow.org/deploy/hadoop

没有明确说明这是否可行,代码仅指“posix”操作系统。我在尝试使用 HDFS 时看到的错误如下:

UnimplementedError (see above for traceback): File system scheme hdfs not implemented [[Node: ReaderReadV2 = ReaderReadV2[_device="/job:localhost/replica:0/task:0/cpu:0"](TFRecordReaderV2, input_producer)]]

这是我到目前为止所做的:

  1. brew 安装 Hadoop 2.7.2
  2. 为本地库单独编译了 Hadoop 2.7.2。 Hadoop 安装在我系统的/usr/local/Cellar/hadoop/2.7.2/libexec 上,本地库 (libhdfs.dylib) 在 ~/Source/hadoop/hadoop-hdfs-project/hadoop-hdfs/target/hadoop-hdfs-2.7.2/lib/native.
  3. 编辑了 https://github.com/tensorflow/tensorflow/blob/v1.0.0/tensorflow/core/platform/hadoop/hadoop_file_system.cc#L113-L119 处的代码从 libhdfs.dylib 而不是 libhdfs.so 读取,重新编译并重新安装 Tensorflow。 (我不得不承认这很愚蠢,我不知道这是否是让这段代码在 Mac 上运行所需要的全部。)

这是要重现的代码。

测试.sh:

set -x

export JAVA_HOME=$($(dirname $(which java | xargs readlink))/java_home)
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.7.2/libexec

. $HADOOP_HOME/libexec/hadoop-config.sh

export HADOOP_HDFS_HOME=$(echo ~/Source/hadoop/hadoop-hdfs-project/hadoop-hdfs/target/hadoop-hdfs-2.7.2)

export CLASSPATH=$($HADOOP_HDFS_HOME/bin/hdfs classpath --glob)

# Virtual environment with Tensorflow and necessary dependencies
. venv/bin/activate

python ./test.py

测试.py:

import tensorflow as tf

_, example_bytes = tf.TFRecordReader().read(
tf.train.string_input_producer(
[
"hdfs://localhost:9000/user/foo/feature_output/part-r-00000",
"hdfs://localhost:9000/user/foo/feature_output/part-r-00001",
"hdfs://localhost:9000/user/foo/feature_output/part-r-00002",
"hdfs://localhost:9000/user/foo/feature_output/part-r-00003",
]
)
)

with tf.Session().as_default() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
print(len(sess.run(example_bytes)))

我在 Tensorflow 源代码中看到的代码路径似乎向我表明,如果问题确实是特定于 mac 的,我会收到与上述错误不同的错误,因为某种处理程序已注册为“hdfs”方案,不管:https://github.com/tensorflow/tensorflow/blob/v1.0.0/tensorflow/core/platform/hadoop/hadoop_file_system.cc#L474 .有没有其他人成功地强制 Tensorflow 与 Mac 一起工作?如果不支持,是否有容易修补的地方?

我也乐于接受有关更好方法的建议。高级目标是使用共享参数服务器高效地并行训练模型,考虑到每个工作人员只会读取数据的一个子集。这很容易使用本地文件系统来完成,但是如何扩展到它之外还不​​太清楚。即使我确实成功地使上面的代码工作,结果也可能会遇到数据局部性问题。

本主题 https://github.com/tensorflow/tensorflow/issues/2218建议使用 pyspark.RDD.toLocalIterator 在图中使用占位符迭代数据集。除了我担心强制每个工作人员遍历整个数据集之外,我没有看到强制 Tensorflow 的内置 Estimator 类接受自定义 feed 函数以及指定的 input_fn 的方法,并且自定义 input_fn 似乎是必要的,以便采取LinearClassifier (https://www.tensorflow.org/tutorials/linear) 等模型的优势,它们能够从稀疏的加权特征中学习。

有什么想法吗?

最佳答案

构建时是否在 ./configure 中启用了 HDFS 支持?如果 HDFS 被禁用,这就是您会遇到的错误。

我认为您进行了正确的更改以使其正常工作。欢迎发送拉取请求以在 macOS 上查找 .dylib。

关于dynamic - Tensorflow 可以在 Mac 上读取 HDFS 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42614426/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com