向 Google Cloud ML 提交训练作业
Submitting a Training Job to Google Cloud 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)))
这是一个在tensorflow中训练和创建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 命令的 --package-path
参数应指向有效 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 jobs submit training 的参数,并将作为标志传递给您的程序
- 如果您打算使用 train_dir,您需要在代码中添加一些标志解析,例如,使用 argparse。
- 您在云端读取的文件需要在 GCS 上。
- 尽管标志解析为您提供了更大的灵活性,但这不是必需的。您可以对文件名的路径进行硬编码。只需确保它们指向 GCS 上的对象(然后从 gcloud 调用中删除
--train_dir
)
我有如下代码要提交给 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)))
这是一个在tensorflow中训练和创建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 命令的 --package-path
参数应指向有效 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 jobs submit training 的参数,并将作为标志传递给您的程序
- 如果您打算使用 train_dir,您需要在代码中添加一些标志解析,例如,使用 argparse。
- 您在云端读取的文件需要在 GCS 上。
- 尽管标志解析为您提供了更大的灵活性,但这不是必需的。您可以对文件名的路径进行硬编码。只需确保它们指向 GCS 上的对象(然后从 gcloud 调用中删除
--train_dir
)