Skip to content

Conversation

kunling-anyscale
Copy link

What does this PR do?

Respect Ray Job runtime_env in PPO runs by fixing get_ppo_ray_runtime_env():

  • Do not inject working_dir=None (omit key entirely if absent).
  • Pass through working_dir from RAY_JOB_CONFIG_JSON_ENV_VAR when provided.
  • Avoid overriding env vars already present in os.environ.

This prevents VERL from clobbering a valid job working_dir and stabilizes env-var merge semantics when users submit via Ray Jobs.

Checklist Before Starting

  • Search for similar PRs. Paste at least one query link here: ...
  • Format the PR title as [{modules}] {type}: {description} (This will be checked by the CI)
    • {modules} include fsdp, megatron, sglang, vllm, rollout, trainer, ci, training_utils, recipe, hardware, deployment, ray, worker, single_controller, misc, perf, model, algo, env, tool, ckpt, doc, data
    • If this PR involves multiple modules, separate them with , like [megatron, fsdp, doc]
    • {type} is in feat, fix, refactor, chore, test
    • If this PR breaks any API (CLI arguments, config, function signature, etc.), add [BREAKING] to the beginning of the title.
    • Example: [BREAKING][fsdp, megatron] feat: dynamic batching

Test

For changes that can not be tested by CI (e.g., algorithm implementation, new model support), validate by experiment(s) and show results like training curve plots, evaluation results, etc.

API and Usage Example

Demonstrate how the API changes if any, and provide usage example(s) if possible.

# Add code snippet or script demonstrating how to use this

Design & Code Changes

Demonstrate the high-level design if this PR is complex, and list the specific changes.

Checklist Before Submitting

Important

Please check all the following items before requesting a review, otherwise the reviewer might deprioritize this PR for review.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request addresses a bug in get_ppo_ray_runtime_env that caused the working_dir in Ray's runtime environment to be handled incorrectly. The changes ensure that an existing working_dir from the job configuration is respected and passed through, and that the key is omitted if not present, which fixes the issue of it being clobbered. The JSON parsing is also made more robust. I've added one comment to further improve the exception handling by making it more specific.

job_cfg_raw = os.environ.get(RAY_JOB_CONFIG_JSON_ENV_VAR, "{}")
try:
job_cfg = json.loads(job_cfg_raw)
except Exception:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

It's a good practice to catch specific exceptions rather than the generic Exception. This prevents masking other unexpected errors and makes the code more robust. In this case, json.loads will raise a json.JSONDecodeError if the string is not valid JSON.

Suggested change
except Exception:
except json.JSONDecodeError:

@wuxibin89
Copy link
Collaborator

wuxibin89 commented Oct 9, 2025

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.

2 participants