51 lines
1.6 KiB
Python
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()
|