Skip to content

Conversation

@rxdaozhang
Copy link
Collaborator

📑 Description

改进 train_ppo.sh 脚本中 AgentGym 后台服务器的管理和启动验证逻辑。

主要变更:

  • 服务器清理: 之前存在问题,在脚本退出时,env server 进程未能正确退出,成为孤儿进程。修改:使用 setsid 在独立的进程组中启动 AgentGym 服务器,以便统一管理。修改 trap EXIT 清理逻辑,改为使用 kill -- -PGID 来终止整个进程组,确保所有子进程(包括实际的服务器)都被可靠关闭。相应的进程 ID 存储变量也从 PIDS 改为 PGIDS。
  • 服务器启动检查: 新增了基于网络端口的服务器启动检查。脚本现在会使用 nc 命令尝试连接每个服务器的端口,并包含重试逻辑。如果任何服务器在多次尝试后仍无法连接,脚本将中止执行并尝试清理已启动的进程,防止在服务器未就绪的情况下开始训练。这替代了原先基于 PID 的不可靠检查。

此系列更改提高了脚本管理的健壮性,解决了脚本退出时服务器清理不彻底的问题,并确保训练只在所有服务器都成功启动并响应后才开始。

✅ Checks

  • My pull request adheres to the code style of this project
  • My code requires changes to the documentation
  • I have updated the documentation as required
  • All the tests have passed
  • Branch name follows type/descript (e.g. feature/add-llm-agents)
  • Ready for code review

ℹ Additional Information

TODO,后续需检查 train_grpo.sh 实现类似逻辑
仍然存在corner case,当端口被占用时,基于访问的启动检查会返回成功

chenzp15 added 2 commits April 27, 2025 00:22
- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。
@Kunlun-Zhu Kunlun-Zhu merged commit cd671d8 into main Apr 27, 2025
1 of 5 checks passed
Kunlun-Zhu pushed a commit that referenced this pull request Apr 27, 2025
* fix(train_ppo): 使用 setsid 和 kill PGID 改进后台服务器清理

- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。

* fix(train_ppo): 改进 AgentGym 服务器管理和启动检查
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。

---------

Co-authored-by: chenzp15 <[email protected]>
Kunlun-Zhu added a commit that referenced this pull request Apr 27, 2025
* adding new reward & delete unused modules

* Fix/agentgym server cleanup (#53)

* fix(train_ppo): 使用 setsid 和 kill PGID 改进后台服务器清理

- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。

* fix(train_ppo): 改进 AgentGym 服务器管理和启动检查
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。

---------

Co-authored-by: chenzp15 <[email protected]>

* fix config bugs

* .

* .

---------

Co-authored-by: rxdaozhang <[email protected]>
Co-authored-by: chenzp15 <[email protected]>
realtmxi pushed a commit that referenced this pull request May 23, 2025
* fix(train_ppo): 使用 setsid 和 kill PGID 改进后台服务器清理

- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。

* fix(train_ppo): 改进 AgentGym 服务器管理和启动检查
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。

---------

Co-authored-by: chenzp15 <[email protected]>
realtmxi pushed a commit that referenced this pull request May 23, 2025
* fix(train_ppo): 使用 setsid 和 kill PGID 改进后台服务器清理

- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。

* fix(train_ppo): 改进 AgentGym 服务器管理和启动检查
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。

---------

Co-authored-by: chenzp15 <[email protected]>
realtmxi pushed a commit that referenced this pull request May 23, 2025
* adding new reward & delete unused modules

* Fix/agentgym server cleanup (#53)

* fix(train_ppo): 使用 setsid 和 kill PGID 改进后台服务器清理

- 使用 `setsid` 在独立的进程组中启动 AgentGym 服务器。这确保了由 `conda run` 启动的所有子进程都属于同一个组。
- 修改 `trap EXIT` 清理逻辑,使用 `kill -- -PGID` 杀死整个进程组,而不是仅杀死初始的 `conda run` PID。这样可以更可靠地终止服务器及其所有潜在的子进程。
- 将存储的 ID 从 PID 改为 PGID。
- 移除了之前检查服务器进程是否存在的逻辑,因为 `setsid` 很快退出,该检查不再可靠。

此更改解决了主脚本退出时 AgentGym 服务器可能由于信号未通过 `conda run` 正确传播而无法正确终止的问题。

TODO: 检查 train_grpo.sh 并应用类似的服务端清理逻辑。

* fix(train_ppo): 改进 AgentGym 服务器管理和启动检查
- **新增基于网络端口 (`nc`) 的服务器启动检查逻辑,替代原先不可靠的 PID 检查。**
- 实现端口检查的重试机制,并在检查失败时触发清理并退出。

---------

Co-authored-by: chenzp15 <[email protected]>

* fix config bugs

* .

* .

---------

Co-authored-by: rxdaozhang <[email protected]>
Co-authored-by: chenzp15 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants