OS/XでTensorflowを強制してHDFSから読み込もうとしています。ドキュメントMacでTensorflowをHDFSから読み取ることはできますか?
https://www.tensorflow.org/deploy/hadoop
は明らかにこれが可能であるかどうかを指定していない、とのコードでは、唯一の「POSIX」のオペレーティングシステムを指します。
UnimplementedError(トレースバックについては上記参照):HDFSを使用しようとすると、私は見ているエラーは以下の通りですファイルシステムのスキームが 実装されていないHDFS [[ノード:ReaderReadV2 = ReaderReadV2 [_device = "/仕事:ローカルホスト/レプリカ:0 /タスク:0/CPU:0" ](TFRecordReaderV2、input_producer)]]
は、ここで私はこの時点までに何をやったかです:
- 醸造は、Hadoopの2.7をインストール.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。
- コードをhttps://github.com/tensorflow/tensorflow/blob/v1.0.0/tensorflow/core/platform/hadoop/hadoop_file_system.cc#L113-L119に編集し、libhdfs.soではなくlibhdfs.dylibを読み込み、再コンパイルして、Tensorflowを再インストールしました。 (私はこれがかなり骨抜きだと認めなければならないが、Mac上でこのコードを動作させるために必要なことはすべてわからない)。
ここにコードを再現する。
test.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
test.py:私はTensorflowソースで見ているコードパスは、私は別のエラーが表示されるだろうと私に示しているようだ
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)))
https://github.com/tensorflow/tensorflow/blob/v1.0.0/tensorflow/core/platform/hadoop/hadoop_file_system.cc#L474に関係なく、「hdfs」スキーム用に何らかの種類のハンドラが登録されているため、問題が実際にMac固有のものだった場合は上記のものよりも優先されます。他の誰かがTensorflowをMacで動かすことに成功しましたか?サポートされていない場合は、簡単にパッチを当てる場所はありますか?
私はまた、より良いアプローチが何であるかについて提案しています。上位レベルの目標は、各ワーカーがデータのサブセットのみを読み取ることを考慮して、共有パラメーター・サーバーを使用して、モデルを並行して効率的にトレーニングすることです。これはローカルのファイルシステムを使って簡単に実現できますが、それを超えて拡張する方法はあまり明確ではありません。上記のコードをうまく機能させることができたとしても、データの局所性に問題が生じる可能性があります。
このスレッドhttps://github.com/tensorflow/tensorflow/issues/2218は、pyspark.RDD.toLocalIteratorを使用して、グラフ内のプレースホルダを持つデータセットを反復処理することを示唆しています。各作業者に完全なデータセットを反復させるという懸念を除いて、Tensorflowの組み込みEstimatorクラスが指定されたinput_fnとともにカスタムフィード関数を受け入れるように強制する方法はなく、カスタムinput_fnが必要です疎な加重されたフィーチャから学習できるLinearClassifier(https://www.tensorflow.org/tutorials/linear)のようなモデルの利点
どのような考えですか?
ありがとうございました!私は約10回そのプロンプトを通り抜け、それを完全に忘れてしまった。私はBazelと少し戦ったが、すぐにそれを私にダーウィンの定義を与えるように強制することはできなかった。もし私がそれを働かせたら、私はパッチを提出するでしょう。 .dyllibに変更することは、本当に私のために必要だったすべてでした。 – Josh