in lm_human_preferences/train_reward.py [0:0]
def train(self):
labels = download_labels(
self.hparams.labels.source,
label_type=self.label_type,
question_schemas=self.question_schemas,
total_labels=self.hparams.labels.num_train,
comm=self.comm
)
self.add_to_buffer(labels)
if self.hparams.normalize_before:
target_mean, target_std = self.target_mean_std()
self.normalize(self.sample_policy_responses, target_mean, target_std)
# Collect training data for reward model training. train_indices will include the indices
# trained on across all ranks, and its size must be a multiple of minibatch_size.
per_rank_batch_size = utils.exact_div(self.hparams.batch_size, self.num_ranks)
# Make sure each rank gets the same shuffle so we train on each point exactly once
train_indices = self.comm.bcast(np.random.permutation(self.hparams.labels.num_train))
# Train on train_indices
print(self.rank, "training on", self.hparams.labels.num_train, "in batches of", per_rank_batch_size)
for start_index in range(0, self.hparams.labels.num_train, self.hparams.batch_size):
end_index = start_index + self.hparams.batch_size
all_ranks_indices = train_indices[start_index:end_index]
our_indices = all_ranks_indices[self.rank::self.num_ranks]
lr = (1 - start_index / self.hparams.labels.num_train) * self.hparams.lr
self.train_batch(our_indices, lr)
if self.hparams.normalize_after:
target_mean, target_std = np.zeros([]), np.ones([])
self.normalize(self.sample_policy_responses, target_mean, target_std)