in tools/agile-machine-learning-api/main.py [0:0]
def app_train():
"""
Training API call
Returns:
Json Response of Training API call
Raise:
Validation error : If data types of input parameters is incorrect
Access Denied to project : When the given service account key cannot interact with GCP.
"""
return_message = json.dumps({
"Success": False,
"Message": "",
"Data": {}
})
response_code = 400
try:
call_id = uuid.uuid4()
cfg = read_yaml()
jobid = 'C' + str(call_id).replace('-', '_')
payload = request.get_json()
if isinstance(payload['train_csv_path'], list):
train_csv_path = ' '.join([os.path.join(cfg['bucket_name'], str(
path)) for path in payload['train_csv_path']])
else:
train_csv_path = os.path.join(
cfg['bucket_name'], payload['train_csv_path'])
eval_csv_path = os.path.join(
cfg['bucket_name'], payload['eval_csv_path'])
export_dir = os.path.join(
cfg['bucket_name'],
payload['export_dir'],
jobid)
APP.logger.info('[{}] Config file loaded'.format(jobid))
response = train.post(
cfg=cfg,
train_csv_path=train_csv_path,
eval_csv_path=eval_csv_path,
task_type=payload['task_type'],
target_var=payload['target_var'],
data_type=(
'None' if payload.get('data_type') is None else str(
payload['data_type'])),
column_name=(
'None' if payload.get('column_name') is None else str(
payload['column_name'])),
na_values=('None' if payload.get('na_values') is None else str(
payload['na_values'])),
condition=('None' if payload.get('condition') is None else str(
payload['condition'])),
n_classes=(
'2' if payload.get('n_classes') is None else str(
payload['n_classes'])),
to_drop=('None' if payload.get('to_drop') is None else str(
payload['to_drop'])),
name=payload['name'],
hidden_units=(
'64' if payload.get('hidden_units') is None else str(
payload['hidden_units'])),
num_layers=(
'2' if payload.get('num_layers') is None else str(
payload['num_layers'])),
lin_opt=(
'ftrl' if payload.get('lin_opt') is None else payload['lin_opt']),
deep_opt=(
'adam' if payload.get('deep_opt') is None else payload['deep_opt']),
train_steps=(
'50000' if payload.get('train_steps') is None else str(
payload['train_steps'])),
export_dir=export_dir,
jobid=jobid)
APP.logger.info('[{}] '.format(jobid) + str(payload))
APP.logger.info('[{}] Training Job submitted to CMLE'.format(jobid))
return_message = json.dumps({
"Success": True,
"Message":
"{}/{}?project={}".format(get_job_link(),
jobid, cfg['project_id']),
"Data": {
'jobid': jobid,
'response': response
}
})
response_code = 200
except IOError as err:
APP.logger.error(str(err))
return_message = json.dumps({
"Success": False,
"Message": "Please check the config.yaml file",
"Data": {"error_message": str(err)}
})
response_code = 500
except AssertionError as err:
APP.logger.error(str(err))
return_message = json.dumps(
{"Success": False, "Message": str(err), "Data": []})
response_code = 500
except Exception as err:
APP.logger.error(str(err))
return_message = json.dumps({
"Success": False,
"Message": str(err),
"Data": err
})
response_code = 500
finally:
return Response(
return_message,
status=response_code,
mimetype='application/json')