TensorFlow : Deploy : S3 上の TensorFlow (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/22/2018 (v1.12.0)
* 本ページは、TensorFlow の本家サイトの Deploy – TensorFlow on S3 を翻訳した上で
適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
TensorFlow は S3 からのデータの読み込み / S3 へのデータの書き出しをサポートします。S3 はオブジェクト・ストレージ API で近くに偏在し、分散訓練のように複数のアクターによりデータがアクセスされなければならない状況で役立ちます。
このドキュメントは必要なセットアップを教え導いて、利用方法上の例を提供します。
Configuration
貴方の TensorFlow プログラムで S3 上のデータを読み書きするとき、その挙動は各種の環境の変数により制御できます :
- AWS_REGION: デフォルトでは、S3 のために regional エンドポイントが使用され、リージョンは AWS_REGION により制御されます。AWS_REGION が指定されない場合には、us-east-1 が使用されます。
- S3_ENDPOINT: エンドポイントは指定された S3_ENDPOINT で明示的にオーバーライド可能です。
- S3_USE_HTTPS: S3_USE_HTTPS=0 でない限りは、デフォルトでは S3 へのアクセスに HTTPS が使用されます。
- S3_VERIFY_SSL: HTTPS が使用される場合、SSL verification は S3_VERIFY_SSL=0 で無効にされます。
パブリックにアクセス可能ではないバケットのオブジェクトを読み書きするためには、AWS credentials が次の方法の一つを通して提供されなければなりません :
- credentials をローカルシステムの AWS credentials profile ファイルに設定します、Linux, macOS あるいは Unix 上の ~/.aws/credentials か、Windows の C:\Users\USERNAME\.aws\credentials に位置します。
- AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY 環境変数を設定します。
- TensorFlow が EC2 インスタンス上で配備される場合、IAM ロールを指定してから EC2 インスタンスにそのロールへのアクセスを与えます。
Example セットアップ
上の情報を使用して、次の環境変数を設定することにより TensorFlow を S3 エンドポイントと通信するために configure できます :
AWS_ACCESS_KEY_ID=XXXXX # Credentials only needed if connecting to a private endpoint AWS_SECRET_ACCESS_KEY=XXXXX AWS_REGION=us-east-1 # Region for the S3 bucket, this is not always needed. Default is us-east-1. S3_ENDPOINT=s3.us-east-1.amazonaws.com # The S3 API Endpoint to connect to. This is specified in a HOST:PORT format. S3_USE_HTTPS=1 # Whether or not to use HTTPS. Disable with 0. S3_VERIFY_SSL=1 # If HTTPS is used, controls if SSL should be enabled. Disable with 0.
使用方法
ひとたびセットアップが完了すれば、TensorFlow は様々な方法で S3 と相互作用できます。Tensorflow IO 関数があるところであればどこでも、S3 url が使用可能です。
スモークテスト
セットアップをテストするためには、stat a file :
from tensorflow.python.lib.io import file_io print file_io.stat('s3://bucketname/path/')
これに類似の出力を見るはずです :
<tensorflow.python.pywrap_tensorflow_internal.FileStatistics; proxy of <Swig Object of type 'tensorflow::FileStatistics *' at 0x10c2171b0> >
データを読む
データを読むとき、読み書きするために使用しているファイルパスを S3 パスに変更します。例えば :
filenames = ["s3://bucketname/path/to/file1.tfrecord", "s3://bucketname/path/to/file2.tfrecord"] dataset = tf.data.TFRecordDataset(filenames)
Tensorflow ツール
Tensorboard やモデル serving のような、多くの TensorFlow ツールもまた引数として S3 URL を取れます :
tensorboard --logdir s3://bucketname/path/to/model/ tensorflow_model_server --port=9000 --model_name=model --model_base_path=s3://bucketname/path/to/model/export/
これは総てのデータ要求について S3 を使用して end-to-end ワークフローを可能にします。
S3 エンドポイント実装
S3 は Amazon により創案されましたが、その S3 API は人気が広まり複数の実装を持ちます。次の実装が基本的な互換性テストを合格しています :
以上