| """Cron job to train spam model with all spam data.""" |
| from __future__ import print_function |
| from __future__ import division |
| from __future__ import absolute_import |
| |
| import logging |
| import settings |
| import time |
| |
| from googleapiclient import discovery |
| from googleapiclient import errors |
| from google.appengine.api import app_identity |
| from oauth2client.client import GoogleCredentials |
| import webapp2 |
| |
| class TrainSpamModelCron(webapp2.RequestHandler): |
| |
| """Submit a job to ML Engine which uploads a spam classification model by |
| training on an already packaged trainer. |
| """ |
| def get(self): |
| |
| credentials = GoogleCredentials.get_application_default() |
| ml = discovery.build('ml', 'v1', credentials=credentials) |
| |
| app_id = app_identity.get_application_id() |
| project_id = 'projects/%s' % (app_id) |
| job_id = 'spam_trainer_%d' % time.time() |
| training_input = { |
| 'scaleTier': 'BASIC', |
| 'packageUris': [ |
| settings.trainer_staging |
| if app_id == "monorail-staging" else |
| settings.trainer_prod |
| ], |
| 'pythonModule': 'trainer.task', |
| 'args': [ |
| '--train-steps', |
| '1000', |
| '--verbosity', |
| 'DEBUG', |
| '--gcs-bucket', |
| 'monorail-prod.appspot.com', |
| '--gcs-prefix', |
| 'spam_training_data', |
| '--trainer-type', |
| 'spam' |
| ], |
| 'region': 'us-central1', |
| 'jobDir': 'gs://%s-mlengine/%s' % (app_id, job_id), |
| 'runtimeVersion': '1.2' |
| } |
| job_info = { |
| 'jobId': job_id, |
| 'trainingInput': training_input |
| } |
| request = ml.projects().jobs().create(parent=project_id, body=job_info) |
| |
| try: |
| response = request.execute() |
| logging.info(response) |
| except errors.HttpError, err: |
| logging.error(err._get_reason()) |