ctm-dqn/run_all_training.py

51 lines
1.6 KiB
Python

"""一键异步启动全部训练。"""
import os
import subprocess
import sys
from datetime import datetime
AGENTS = ["ppo", "appo", "mappo", "dqn", "ddpg", "td3"]
def main():
run_timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
processes = {}
for agent in AGENTS:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 启动 {agent.upper()} 训练...")
log_dir = os.path.join("logs", "multi-model", run_timestamp, agent)
checkpoint_dir = os.path.join("checkpoints", "multi-model", run_timestamp, agent)
os.makedirs(log_dir, exist_ok=True)
os.makedirs(checkpoint_dir, exist_ok=True)
stdout_path = os.path.join(log_dir, "stdout.txt")
process = subprocess.Popen(
[
sys.executable,
"-m",
f"training.train_{agent}",
"--log-dir",
log_dir,
"--checkpoint-dir",
checkpoint_dir,
"--run-timestamp",
run_timestamp,
],
stdout=open(stdout_path, "w", encoding="utf-8"),
stderr=subprocess.STDOUT,
)
processes[agent] = process
print(f" PID: {process.pid}")
print(f"\n全部 {len(AGENTS)} 个训练已启动,等待完成...")
print(f"本次多模型时间戳: {run_timestamp}\n")
for agent, process in processes.items():
process.wait()
status = "完成" if process.returncode == 0 else f"失败(code={process.returncode})"
print(f"[{agent.upper()}] {status}")
if __name__ == "__main__":
main()