2016-10-27 9 views
1

Googleクラウドmlに提出したいコードは次のとおりです。私はすでにその例をテストし、結果を得ました。GoogleクラウドMLへのトレーニングジョブの提出

from __future__ import absolute_import 
from __future__ import division 
from __future__ import print_function 

import tensorflow as tf 
import numpy as np 

# Data sets 
I_TRAINING = "/home/android/Desktop/training.csv" 
I_TEST = "/home/android/Desktop/test.csv" 

# Load datasets. 
training_set = tf.contrib.learn.datasets.base.load_csv(filename=I_TRAINING, target_dtype=np.int) 
test_set = tf.contrib.learn.datasets.base.load_csv(filename=I_TEST, target_dtype=np.int) 

# Specify that all features have real-value data 
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=2)] 

# Build 3 layer DNN with 10, 20, 10 units respectively. 
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns, 
              hidden_units=[10, 20, 10], 
              n_classes=2, 
              model_dir="/tmp/my_model") 

# Fit model. 
classifier.fit(x=training_set.data, y=training_set.target, steps=2000) 

# Evaluate accuracy. 
accuracy_score = classifier.evaluate(x=test_set.data, y=test_set.target)["accuracy"] 
print('Accuracy: {0:f}'.format(accuracy_score)) 

# Classify two new flower samples. 
#new_samples = np.array(
# [[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=float) 
#y = classifier.predict(new_samples) 
#print('Predictions: {}'.format(str(y))) 

テンソルフローでDNNモデルを学習して作成するためのコードです。私はすでにそれをローカルでテストし、結果を受け取りました。このコードをのinit .pyファイルと共にtrainerという名前のフォルダに入れ、フォルダをgs:// bucket-ml/second_job/trainerにアップロードしました。 Second_jobはJOB_NAMEです。その後

、私は仕事としてこれを提出したい場合、私はこれを行うと、次のエラーを取得:

gcloud beta ml jobs submit training ${JOB_NAME} \ 
--package-path=trainer \ 
--module-name=trainer.trainer \ 
--staging-bucket="${TRAIN_BUCKET}" \ 
--region=us-central1 \ 
--train_dir="${TRAIN_PATH}/train" 

ERROR: (gcloud.beta.ml.jobs.submit.training) 
    Packaging of user python code failed with message: 
     running sdist 
running egg_info 
creating trainer.egg-info 
writing trainer.egg-info/PKG-INFO 
writing top-level names to trainer.egg-info/top_level.txt 
writing dependency_links to trainer.egg-info/dependency_links.txt 
writing manifest file 'trainer.egg-info/SOURCES.txt' 
error: package directory 'trainer' does not exist 
    Try manually writing a setup.py file at your package root 
    and rerunning the command 

を私はパッケージパスおよびモジュール名が正しいか確認していません。私に何をすべきかアドバイスしてください。 よろしく、のgcloudコマンドへ

+0

あなたの質問に直接関係していますが、ローカルディレクトリであるあなたのデータセットへのハードコーディングされたパスがあります。クラウドに送信する前に、それらがGCSオブジェクトを指していることを確認する必要があります。 – rhaertel80

答えて

4

--package-path引数が有効なPythonのパッケージ、すなわち、__init__.pyファイル(多くの場合、空のファイル)を含むディレクトリであるディレクトリを指している必要がありますありがとうございました。 GCSのローカルディレクトリではなく、ローカルディレクトリである必要があります。

引数は、そのパッケージ内の有効なPythonモジュールの完全修飾名になります。必要に応じてディレクトリを整理できますが、一貫性のために、サンプルにはtrainerというPythonパッケージがあり、実行するモジュールはtask.pyとなります。

サンプルのディレクトリ構造は次のようになります。

trainer/ 
    __init__.py 
    task.py 

__init__.pyはおそらく空のファイルになります。 task.pyにコードが含まれています。

gcloud beta ml jobs submit training ${JOB_NAME} \ 
    --package-path=trainer \ 
    --module-name=trainer.task \ 
    --staging-bucket="${TRAIN_BUCKET}" \ 
    --region=us-central1 \ 
    -- \ 
    --train_dir="${TRAIN_PATH}/train" 

あなただけ一致し、ディスク上の名前とのgcloud引数を確認してください、あなたはあなたのパッケージとモジュールのために好きな名前を選択することができます:トップレベルのディレクトリは--package-pathで、次のように次に、あなたの仕事を提出することができます実行するコードのファイルは--module(接尾辞は.pyではありません)です。

いくつかの注意事項:

  • 注余分な ' - \'。これは、次のすべての引数をプログラムに渡す必要があることを示します。つまり、--train_dirはgcloud beta ml jobsの訓練の引数ではなく、プログラムにフラグとして渡されます
  • train_dirを使用する場合は、コードにフラグの解析を追加する必要があります。たとえば、argparseを使用します。
  • クラウドで読み込んだファイルはGCS上にある必要があります。
  • フラグの解析では柔軟性が向上しますが、必須ではありません。パスをファイル名にハードコーディングすることができます。彼らがGCS上のオブジェクトを指していることを確認してください(そして、gcloudコールから--train_dirを削除してください)。
+0

ありがとうございます!今私は--package-pathがGoogleのクラウドに関してではなく、私のマシン上のローカルであることを知っています。 – Androidification

+0

--package-path = trainerに関しては、パッケージへのパス(トレーナーフォルダ)はどのように書くべきですか?私は窓を使用しています。私はC:\トレーナー、 "C:\トレーナー"を試しましたが、動作しません。ディレクトリが見つかりません。 – Androidification

+0

私はgcloudシェルオンライン版を使用しています。私はクラウドSDKをインストールし、私のマシンからジョブを提出する必要がありますか?私はそうし、それは2時間であり、私のディスク使用量はpython.exeによって100%であり、まだ答えはありません。それは普通ですか? – Androidification

関連する問題