ReVID / rl.py
GuoruiSong's picture
Add files using upload-large-folder tool
3e90852 verified
Raw
History Blame Contribute Delete
8.47 kB
import os
import sys
import subprocess
from termcolor import cprint
from omegaconf import DictConfig, ListConfig, OmegaConf
def get_config():
cli_conf = OmegaConf.from_cli()
yaml_conf = OmegaConf.load(cli_conf.config)
conf = OmegaConf.merge(yaml_conf, cli_conf)
return conf
if __name__ == "__main__":
config = get_config()
start_from_scratch = config.experiment.start_from_scratch
project_name = config.experiment.project
model_base = config.model.model_base
from omegaconf import MISSING
if OmegaConf.select(config, "model.value_base_model", default=MISSING) is not MISSING:
have_value_model = True
else:
have_value_model = False
def begin_with(file_name):
with open(file_name, "w") as f:
f.write("")
def init_value_model(i, cfg):
project_name = cfg.experiment.project
subprocess.run(
f'python init_sdar_value_model.py '
f'config=../configs/{project_name}.yaml '
f'experiment.current_epoch={i} ',
shell=True,
cwd='train',
check=True,
)
if start_from_scratch:
os.makedirs(f"{project_name}/results", exist_ok=True)
optimized_model = "../" + project_name + "/ckpt/" + config.model.optimized_name
begin_with(f"{project_name}/results/results-rl-" + optimized_model.replace("/", ".") + "-" + config.dataset.train_dataset + ".txt")
begin_with(f"{project_name}/results/results-eval-" + optimized_model.replace("/", ".") + "-" + config.dataset.train_dataset + ".txt")
if have_value_model:
init_value_model(1, config)
optimized_value_model = "../" + project_name + "/ckpt/" + config.model.optimized_value_name
begin_with(f"{project_name}/results/results-rl-" + optimized_value_model.replace("/", ".") + "-" + config.dataset.train_dataset + ".txt")
def sample(i, type, block_size = None, top_k = None, remasking_strategy = None):
if model_base == "dream":
script_name = "dream_rl_rollout.py"
elif model_base == "llada" or model_base == "mmada":
script_name = "llada_rl_rollout.py"
elif model_base == "sdar":
script_name = "sdar_rl_rollout.py"
elif model_base == "trado":
script_name = "trado_rl_rollout.py"
subprocess.run(
f'python {script_name} '
f'config=../configs/{project_name}.yaml '
f"experiment.function={type} "
f"evaluation.block_size={block_size} "
f"evaluation.top_k={top_k} "
f"evaluation.remasking_strategy={remasking_strategy} "
f'experiment.current_epoch={i} ',
shell=True,
cwd='sample',
check=True,
)
def reward(i, type, is_code_task, block_size = None, top_k = None, remasking_strategy = None):
if is_code_task:
script_name = "rl_code_reward.py"
else:
script_name = "rl_reward.py"
subprocess.run(
f'python {script_name} '
f'config=../configs/{project_name}.yaml '
f"experiment.function={type} "
f"evaluation.block_size={block_size} "
f"evaluation.top_k={top_k} "
f"evaluation.remasking_strategy={remasking_strategy} "
f'experiment.current_epoch={i} ',
shell=True,
cwd='reward',
check=True,
)
def process_reward(i):
cfg_i = f"config=../configs/{project_name}.yaml"
ep = f"experiment.current_epoch={i}"
base = ["conda", "run", "-n", "CURE2", "--no-capture-output", "python", "-u"]
subprocess.run(base + ["rl_process_divide_data.py", cfg_i, ep], cwd="reward", check=True)
subprocess.run(base + ["llm_process_reward.py", cfg_i, ep], cwd="sample", check=True)
subprocess.run(base + ["rl_process_reward.py", cfg_i, ep], cwd="reward", check=True)
def execute(i, type):
subprocess.run(
f"python rl_execute.py "
f"config=../configs/{project_name}.yaml "
f"experiment.function={type} "
f"experiment.current_epoch={i} ",
shell=True,
cwd='reward',
check=True,
)
def train(i, target = None):
if target is None:
if model_base == "dream":
script_name = "rl_dream.py"
elif model_base == "llada":
script_name = "rl_llada.py"
elif model_base == "mmada":
script_name = "rl_mmada.py"
elif model_base == "sdar":
script_name = "rl_sdar.py"
elif model_base == "trado":
script_name = "rl_trado.py"
elif target == "policy":
if model_base == "sdar":
script_name = "train_sdar_policy.py"
elif model_base == "trado":
script_name = "train_trado_policy.py"
elif target == "value":
if model_base == "sdar":
script_name = "train_sdar_value.py"
elif model_base == "trado":
script_name = "train_trado_value.py"
subprocess.run(
f'accelerate launch '
f'--num_machines 1 '
f'--machine_rank 0 '
f'--main_process_ip 127.0.0.1 '
f'--main_process_port 8888 '
f'--config_file accelerate_configs/{config.experiment.deepspeed_file}.yaml '
f'train/{script_name} '
f'config=configs/{project_name}.yaml '
f'experiment.current_epoch={i} ',
shell=True,
check=True,
)
if config.dataset.data_type == "code":
is_code_task = True
else:
is_code_task = False
if OmegaConf.select(config, "model.process_reward_model", default=MISSING) is not MISSING and config.model.process_reward_model is not None:
is_process_reward = True
else:
is_process_reward = False
i = config.experiment.current_epoch
while i <= config.experiment.total_step:
sample(i, "train")
if is_code_task:
execute(i, "train")
if is_process_reward:
process_reward(i)
else:
reward(i, "train", is_code_task)
if have_value_model:
train(i, target = "value")
train(i, target = "policy")
else:
train(i, target = None)
if i % config.experiment.eval_every == 0:
if model_base == "sdar":
remasking_strategy_list = config.evaluation.remasking_strategy
top_k_list = config.evaluation.top_k
block_size = config.evaluation.block_size
for j in range(len(remasking_strategy_list)):
remasking_strategy = remasking_strategy_list[j]
top_k = top_k_list[j]
sample(i, "evaluation", block_size = block_size, top_k = top_k, remasking_strategy = remasking_strategy)
if is_code_task:
execute(i, "evaluation")
reward(i, "evaluation", is_code_task, block_size = block_size, top_k = top_k, remasking_strategy = remasking_strategy)
else:
block_size_list = config.evaluation.block_size
remasking_strategy_list = config.evaluation.remasking_strategy
if OmegaConf.select(config, "evaluation.top_k", default=MISSING) is not MISSING:
top_k = config.evaluation.top_k
else:
top_k = None
for j in range(len(remasking_strategy_list)):
remasking_strategy = remasking_strategy_list[j]
if model_base == "dream":
block_size = block_size_list[j]
elif model_base == "llada" or model_base == "mmada":
block_size = config.evaluation.block_size
sample(i, "evaluation", block_size = block_size, top_k = top_k, remasking_strategy = remasking_strategy)
if is_code_task:
execute(i, "evaluation")
reward(i, "evaluation", is_code_task, block_size = block_size, top_k = top_k, remasking_strategy = remasking_strategy)
i += 1