in sample.py [0:0]
def sample_policy(save_dir=None, savescope='policy', temperature=1.0, seed=None, batch_size=4, nsamples=0):
hparams = train_policy.HParams()
hparams.override_from_json_file(os.path.join(save_dir, 'train_policy_hparams.json'))
print('hparams', hparams)
task = hparams.task
comm = MPI.COMM_WORLD
nsamples_per_rank = utils.exact_div(nsamples, comm.Get_size())
with tf.Graph().as_default():
m = trained_models.TrainedModel(name='sample', savedir=os.path.join(save_dir, 'policy'), scope='policy')
encoder = m.encoding.get_encoder()
hyperparams.dump(m.hparams(), name='model_hparams')
utils.set_mpi_seed(seed)
policy = Policy(
m, scope='policy',
is_root=True, # just init on every rank, simplifies code
embed_queries=lm_tasks.query_formatter(task, encoder),
temperature=temperature,
)
query_sampler = lm_tasks.make_query_sampler(
hparams=task, encoder=encoder, comm=comm,
batch_size=batch_size, mode='test'
)
init_ops = tf.group(
tf.global_variables_initializer(),
tf.local_variables_initializer(),
)
with utils.mpi_session() as sess:
init_ops.run()
@utils.graph_function()
def sample_queries():
return query_sampler()['tokens']
tf.get_default_graph().finalize()
generated = 0
while nsamples_per_rank == 0 or generated < nsamples_per_rank:
queries = sample_queries()
rollouts = policy.respond(queries, length=task.response_length)
assert len(queries.tolist()) == batch_size
assert len(rollouts['responses'].tolist()) == batch_size
for q, r in zip(queries.tolist(), rollouts['responses'].tolist()):
print('=' * 80)
print(encoder.decode(q).replace("\n", "⏎"))
print(encoder.decode(r).replace("\n", "⏎"))
generated += batch_size