in lm_human_preferences/utils/core.py [0:0]
def graph_function(**schemas: Schema):
def decorate(make_op):
def make_ph(path, schema):
return tf.placeholder(name=f'arg_{make_op.__name__}_{path}', shape=schema.shape, dtype=schema.dtype)
phs = nest.map_structure_with_paths(make_ph, schemas)
op = make_op(**phs)
sig = inspect.signature(make_op)
@wraps(make_op)
def run(*args, **kwargs):
bound: inspect.BoundArguments = sig.bind(*args, **kwargs)
bound.apply_defaults()
arg_dict = bound.arguments
for name, param in sig.parameters.items():
if param.kind == inspect.Parameter.VAR_KEYWORD:
kwargs = arg_dict[name]
arg_dict.update(kwargs)
del arg_dict[name]
flat_phs = nest.flatten(phs)
flat_arguments = nest.flatten_up_to(phs, bound.arguments)
feed = {ph: arg for ph, arg in zip(flat_phs, flat_arguments)}
run_options = tf.RunOptions(report_tensor_allocations_upon_oom=True)
return tf.get_default_session().run(op, feed_dict=feed, options=run_options, run_metadata=None)
return run
return decorate