TensorFlow : Deploy : Hadoop 上で TensorFlow をどのように実行するか (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/30/2017
* 本ページは、TensorFlow の本家サイトの Deploy – How to run TensorFlow on Hadoop を翻訳した上で
適宜、補足説明したものです:
https://www.tensorflow.org/deploy/hadoop
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
このドキュメントは Hadoop 上でどのように TensorFlow を実行するかを説明しています。様々なクラスタ・マネージャで実行することに記述は拡張されますが、当面は HDFS 上での実行についてのみ記述されます。
HDFS
貴方が データを読む について慣れ親しんでいることを前提にしています。
TensorFlow で HDFS を使用するためには、データを読み書きするために使用するファイルパスを HDFS パスに変更します。例えば :
filename_queue = tf.train.string_input_producer([ "hdfs://namenode:8020/path/to/file1.csv", "hdfs://namenode:8020/path/to/file2.csv", ])
HDFS 構成ファイルで指定されたネーム・ノードを使用することを望むのであれば、ファイル・プレフィックスを hdfs://default/ に変更します。
TensorFlow プログラムを launch する時には、次の環境変数が設定されなければなりません :
- JAVA_HOME: java インストールの位置。
- HADOOP_HDFS_HOME: HDFS インストールの位置。以下を実行することでも環境変数を設定可能です :
shell source ${HADOOP_HOME}/libexec/hadoop-config.sh
- LD_LIBRARY_PATH: libjvm.so へのパス、そしてもし(貴方の)Hadoop ディストリビューションが libhdfs.so を $HADOOP_HDFS_HOME/lib/native にインストールしていない場合にオプションで libhdfs.so へのパスを含めるためです。Linux では :
shell export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${JAVA_HOME}/jre/lib/amd64/server
- CLASSPATH: TensorFlow プログラムを実行するに先立って Hadoop jars が追加されなければなりません。
“${HADOOP_HOME}/libexec/hadoop-config.sh” で CLASSPATH を設定するだけでは不十分です。libhdfs ドキュメントに記載されているように Globs は拡張されなければなりません :shell CLASSPATH=$($HADOOP_HDFS_HOME}/bin/hadoop classpath --glob) python your_script.py
古いバージョンの Hadoop/libhdfs (older than 2.6.0) のためには、classpath ワイルドカードを手動で拡張する必要があります。より詳細は、HADOOP-10903 を参照してください。
Hadoop クラスタがセキュア・モードにあれば、次の環境変数が設定されなければなりません :
- KERB_TICKET_CACHE_PATH: Kerberos チケット・キャッシュファイルのパス。例えば :
shell export KERB_TICKET_CACHE_PATH=/tmp/krb5cc_10002
分散 TensorFlow を実行する場合には、全てのワーカーは環境変数が設定され Hadoop がインストールされていなければなりません。
以上