def bind_model_service(): request_config = request.json if request_config.get('job_id', None): retcode, retmsg, res_data = model_utils.query_model_info( request_config['job_id'], 'guest') if res_data: model_info = res_data[0] request_config['initiator'] = {} request_config['initiator']['party_id'] = str( model_info.get('f_initiator_party_id')) request_config['initiator']['role'] = model_info.get( 'f_initiator_role') runtime_conf = model_info.get( 'f_runtime_conf', {}) if model_info.get( 'f_runtime_conf', {}) else model_info.get( 'f_train_runtime_conf', {}) adapter = JobRuntimeConfigAdapter(runtime_conf) job_parameters = adapter.get_common_parameters().to_dict() request_config[ 'job_parameters'] = job_parameters if job_parameters else model_info.get( 'f_train_runtime_conf', {}).get('job_parameters') roles = runtime_conf.get('role') request_config['role'] = roles if roles else model_info.get( 'f_train_runtime_conf', {}).get('role') for key, value in request_config['role'].items(): for i, v in enumerate(value): value[i] = str(v) request_config.pop('job_id') else: return get_json_result( retcode=101, retmsg="model {} can not be found in database. " "Please check if the model version is valid.".format( request_config.get('job_id'))) if not request_config.get('servings'): # get my party all servings request_config['servings'] = RuntimeConfig.SERVICE_DB.get_urls( 'servings') service_id = request_config.get('service_id') if not service_id: return get_json_result(retcode=101, retmsg='no service id') detect_utils.check_config(request_config, ['initiator', 'role', 'job_parameters']) bind_status, retmsg = publish_model.bind_model_service(request_config) operation_record(request_config, "bind", "success" if not bind_status else "failed") return get_json_result( retcode=bind_status, retmsg='service id is {}'.format(service_id) if not retmsg else retmsg)
def get_model_configuration(job_id, role, party_id): res = model_utils.query_model_info(model_version=job_id, role=role, party_id=party_id, query_filters=[ 'train_dsl', 'dsl', 'train_runtime_conf', 'runtime_conf' ]) if res: dsl = res[0].get('train_dsl') if res[0].get( 'train_dsl') else res[0].get('dsl') runtime_conf = res[0].get('runtime_conf') train_runtime_conf = res[0].get('train_runtime_conf') return dsl, runtime_conf, train_runtime_conf return {}, {}, {}
def query_model(): retcode, retmsg, data = model_utils.query_model_info(**request.json) result = {"retcode": retcode, "retmsg": retmsg, "data": data} return Response(json.dumps(result, sort_keys=False, cls=DatetimeEncoder), mimetype="application/json")
def load_model(): request_config = request.json if request_config.get('job_id', None): retcode, retmsg, res_data = model_utils.query_model_info( model_version=request_config['job_id'], role='guest') if res_data: model_info = res_data[0] request_config['initiator'] = {} request_config['initiator']['party_id'] = str( model_info.get('f_initiator_party_id')) request_config['initiator']['role'] = model_info.get( 'f_initiator_role') runtime_conf = model_info.get( 'f_runtime_conf', {}) if model_info.get( 'f_runtime_conf', {}) else model_info.get( 'f_train_runtime_conf', {}) adapter = JobRuntimeConfigAdapter(runtime_conf) job_parameters = adapter.get_common_parameters().to_dict() request_config[ 'job_parameters'] = job_parameters if job_parameters else model_info.get( 'f_train_runtime_conf', {}).get('job_parameters') roles = runtime_conf.get('role') request_config['role'] = roles if roles else model_info.get( 'f_train_runtime_conf', {}).get('role') for key, value in request_config['role'].items(): for i, v in enumerate(value): value[i] = str(v) request_config.pop('job_id') else: return get_json_result( retcode=101, retmsg="model with version {} can not be found in database. " "Please check if the model version is valid.".format( request_config.get('job_id'))) _job_id = job_utils.generate_job_id() initiator_party_id = request_config['initiator']['party_id'] initiator_role = request_config['initiator']['role'] publish_model.generate_publish_model_info(request_config) load_status = True load_status_info = {} load_status_msg = 'success' load_status_info['detail'] = {} if "federated_mode" not in request_config['job_parameters']: if request_config["job_parameters"][ "work_mode"] == WorkMode.STANDALONE: request_config['job_parameters'][ "federated_mode"] = FederatedMode.SINGLE elif request_config["job_parameters"]["work_mode"] == WorkMode.CLUSTER: request_config['job_parameters'][ "federated_mode"] = FederatedMode.MULTIPLE for role_name, role_partys in request_config.get("role").items(): if role_name == 'arbiter': continue load_status_info[role_name] = load_status_info.get(role_name, {}) load_status_info['detail'][role_name] = {} for _party_id in role_partys: request_config['local'] = { 'role': role_name, 'party_id': _party_id } try: response = federated_api( job_id=_job_id, method='POST', endpoint='/model/load/do', src_party_id=initiator_party_id, dest_party_id=_party_id, src_role=initiator_role, json_body=request_config, federated_mode=request_config['job_parameters'] ['federated_mode']) load_status_info[role_name][_party_id] = response['retcode'] detail = {_party_id: {}} detail[_party_id]['retcode'] = response['retcode'] detail[_party_id]['retmsg'] = response['retmsg'] load_status_info['detail'][role_name].update(detail) if response['retcode']: load_status = False load_status_msg = 'failed' except Exception as e: stat_logger.exception(e) load_status = False load_status_msg = 'failed' load_status_info[role_name][_party_id] = 100 return get_json_result(job_id=_job_id, retcode=(0 if load_status else 101), retmsg=load_status_msg, data=load_status_info)