def run_ensemble(model_class, parameters, param_set_id, seed_base, number_of_trajectories, storage_mode="Shared"): """ Generates an ensemble consisting of number_of_trajectories realizations by running the model 'nt' number of times. The resulting result objects are serialized and written to one of the MOLNs storage locations, each assigned a random filename. The default behavior is to write the files to the Shared storage location (global non-persistent). Optionally, files can be written to the Object Store (global persistent), storage_model="Persistent" Returns: a list of filenames for the serialized result objects. """ import sys import uuid from molnsutil import PersistentStorage, LocalStorage, SharedStorage if storage_mode == "Shared": storage = SharedStorage() elif storage_mode == "Persistent": storage = PersistentStorage() else: raise MolnsUtilException( "Unknown storage type '{0}'".format(storage_mode)) # Create the model try: model_class_cls = cloudpickle.loads(model_class) if parameters is not None: model = model_class_cls(**parameters) else: model = model_class_cls() except Exception as e: notes = "Error instantiation the model class, caught {0}: {1}\n".format( type(e), e) notes += "dir={0}\n".format(dir()) raise MolnsUtilException(notes) # Run the solver filenames = [] processes = [] results = model.run(seed=seed_base, number_of_trajectories=number_of_trajectories) if not isinstance(results, list): results = [results] for result in results: try: # We should try to thread this to hide latency in file upload... filename = str(uuid.uuid1()) storage.put(filename, result) filenames.append(filename) except: raise return {'filenames': filenames, 'param_set_id': param_set_id}
def write_file(storage_mode,filename, result): from molnsutil import LocalStorage, SharedStorage, PersistentStorage if storage_mode=="Shared": storage = SharedStorage() elif storage_mode=="Persistent": storage = PersistentStorage() else: raise MolnsUtilException("Unknown storage type '{0}'".format(storage_mode)) storage.put(filename, result)
def write_file(storage_mode, filename, result): from molnsutil import LocalStorage, SharedStorage, PersistentStorage if storage_mode == "Shared": storage = SharedStorage() elif storage_mode == "Persistent": storage = PersistentStorage() else: raise MolnsUtilException( "Unknown storage type '{0}'".format(storage_mode)) storage.put(filename, result)
def run_ensemble(model_class, parameters, param_set_id, seed_base, number_of_trajectories, storage_mode="Shared"): """ Generates an ensemble consisting of number_of_trajectories realizations by running the model 'nt' number of times. The resulting result objects are serialized and written to one of the MOLNs storage locations, each assigned a random filename. The default behavior is to write the files to the Shared storage location (global non-persistent). Optionally, files can be written to the Object Store (global persistent), storage_model="Persistent" Returns: a list of filenames for the serialized result objects. """ import sys import uuid from molnsutil import PersistentStorage, LocalStorage, SharedStorage if storage_mode=="Shared": storage = SharedStorage() elif storage_mode=="Persistent": storage = PersistentStorage() else: raise MolnsUtilException("Unknown storage type '{0}'".format(storage_mode)) # Create the model try: model_class_cls = cloudpickle.loads(model_class) if parameters is not None: model = model_class_cls(**parameters) else: model = model_class_cls() except Exception as e: notes = "Error instantiation the model class, caught {0}: {1}\n".format(type(e),e) notes += "dir={0}\n".format(dir()) raise MolnsUtilException(notes) # Run the solver filenames = [] processes=[] results = model.run(seed=seed_base, number_of_trajectories=number_of_trajectories) if not isinstance(results, list): results = [results] for result in results: try: # We should try to thread this to hide latency in file upload... filename = str(uuid.uuid1()) storage.put(filename, result) filenames.append(filename) except: raise return {'filenames':filenames, 'param_set_id':param_set_id}