2016-10-27 127 views
1

我有一段代碼,我想提交給Google雲端ml。我已經測試了他們的例子並得到了結果。向Google Cloud提交培訓作業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模型的代碼。我已經在本地進行了測試並收到了結果。我將這段代碼放在一個名爲trainer的文件夾中,並且init.py文​​件,並將文件夾上傳到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 

我不知道,如果包路徑和模塊的名稱是正確的。請告訴我該怎麼做。感謝 問候,

+0

注意與您的問題直接相關,但我看到您的數據集是本地目錄的硬編碼路徑。在提交給雲之前,您需要確保指向GCS對象的那些對象。 – rhaertel80

回答

4

--package-path參數給gcloud指令應指向一個目錄,是一個有效的Python包,即,包含一個__init__.py文件(通常是空的文件)的目錄。請注意,它應該是本地目錄,而不是GCS上的目錄。

--module參數將是該包中有效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作業提交培訓的參數,將作爲標誌傳遞給您的程序
  • 如果您打算使用train_dir,則需要將一些標誌解析添加到您的代碼中,例如,使用argparse。
  • 您在雲中讀取的文件需要位於GCS上。
  • 雖然標誌解析爲您提供了更大的靈活性,但這不是必需的。您可以將路徑硬編碼爲文件名。只要確保它們指向GCS上的對象(然後從gcloud調用中刪除--train_dir
+0

非常感謝!現在我知道 - 包路徑與本地相關(本地機器),而不是谷歌雲。 – Androidification

+0

關於--package-path = trainer,我該如何寫封裝路徑(教練文件夾)?我正在使用Windows。我試過C:\培訓師,「C:\培訓師」,但他們不工作。它說沒有找到目錄。 – Androidification

+0

我一直在使用gcloud shell在線版本。我應該安裝雲SDK並從我的機器提交作業?我這樣做了,它已經2個小時了,我的磁盤使用率是python.exe的100%,仍然沒有答案。這是正常的嗎? – Androidification

相關問題