0

Google Cloud AI Platform で TensorFlow エスティメーターをトレーニングするためのチュートリアルに大まかに従っています。

トレーニング データと評価データを含むディレクトリにアクセスしたいので、次のようにデータ ファイルを再帰的に Google ストレージにコピーしました。

gsutil cp -r data gs://name-of-my-bucket/data

これは正常に動作し、gsutil ls gs://name-of-my-bucket/data正しく返されます:

gs://name-of-my-bucket/data/test.json
gs://name-of-my-bucket/data/test
gs://name-of-my-bucket/data/train

os.listdir(data_dir)ただし、 Python スクリプトから呼び出すと、これまでに試したFileNotFoundErrorの任意の値 (およびを含む) が発生します。なんで?data_dir'data/''name-of-my-bucket/data/'

Python スクリプトがディレクトリから実行されていることはわかっています。/root/.local/lib/python3.7/site-packages/trainer/ /user_dir

問題が発生する Python コード (編集)

__main__Pythonスクリプトのセクションから直接、エラーが発生した行の前にあるコードを次に示します。

PARSER = argparse.ArgumentParser()
PARSER.add_argument('--job-dir', ...)
PARSER.add_argument('--eval-steps', ...)
PARSER.add_argument('--export-format', ...)

ARGS = PARSER.parse_args()
tf.logging.set_verbosity('INFO')
os.environ['TF_CPP_MIN_LOG_LEVEL'] = str(tf.logging.__dict__['INFO'] / 10)

HPARAMS = hparam.HParams(**ARGS.__dict__)

エラーが発生するコード行は次のとおりです (上記で報告したコード行の直後に呼び出される別の関数の最初の行):

mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')]

ログ (編集)

このジョブのログは、情報のリスト (およびTensorFlow に関連する5 つの非推奨警告) と、タスクからのエラーです。master-replica-0

Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/'

... 同じタスクからの別のエラー(Python コマンドからゼロ以外の終了ステータスを報告)、クリーンアップに関する2 つの情報、最後にタスクからのエラーserviceが続きます。

The replica master 0 exited with a non-zero status of 1. Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/' To find out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=1047296516162&resource=ml_job%2Fjob_id%2Fml6_run_25&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%22ml6_run_25%22
4

2 に答える 2

0

Cloud Storage オブジェクトはフラットな名前空間であり、フォルダには含まれません。よりユーザー フレンドリーなエクスペリエンスのために、gsutil と Google Cloud Storage UI は、階層的なファイル ツリーの錯覚を作成します。詳細については、ドキュメントを参照してください。

ここで、Cloud Storage でホストされているファイル オブジェクトから読み取ろうとしている場合は、次のドキュメントを使用して、Cloud Storage クライアント ライブラリを使用してオブジェクトをローカル ディレクトリにダウンロードすることをお勧めします。または、gsutil cpコマンドを使用することもできます。これにより、ローカル ディレクトリと Cloud Storage バケットの間でデータをコピーすることができます。

ローカル ディレクトリの GCS バケットからレプリカ オブジェクトをダウンロードすると、必要に応じてそのファイルを操作できるようになります。

更新 - Cloud Storage オブジェクト ファイルの参照 - os.listdirGCS バケット オブジェクトへのアクセスには使用しないでください。

Cloud Storage はフラットな名前空間であるため、Cloud Storage バケットには、 のルート ディレクトリに格納されてgs://my-bucket/data/test.jsonいる というオブジェクトが含まれます。オブジェクト名には文字が含まれていることに注意してください。したがって、たとえばバケット内のファイルにアクセスしたい場合は、上記のドキュメントを確認して参考にしてください。フォルダの概念自体は存在しません。オプションで、トレーニング ファイル オブジェクトにアクセスする必要がある場合は、参照として使用します。data/test.jsongs://my-bucket/test.jsondata/test.jsondata/train

于 2020-03-31T10:31:07.650 に答える