diff --git a/areal/api/cli_args.py b/areal/api/cli_args.py index f81c8cdfe4..fe1fd2bcde 100644 --- a/areal/api/cli_args.py +++ b/areal/api/cli_args.py @@ -665,7 +665,7 @@ class SchedulingStrategy: @dataclass class SchedulingSpec: cpu: int = field( - default=4, metadata={"help": "Number of CPU cores required per GPU"} + default=8, metadata={"help": "Number of CPU cores required per GPU"} ) gpu: int = field( default=0, diff --git a/areal/launcher/local.py b/areal/launcher/local.py index e9f85978c2..69aa389d90 100644 --- a/areal/launcher/local.py +++ b/areal/launcher/local.py @@ -26,6 +26,8 @@ JobException, JobInfo, JobState, + get_scheduling_spec, + get_thread_env_vars, validate_config_for_launcher, wait_llm_server_addrs, ) @@ -325,11 +327,13 @@ def local_main(config, run_id: int = 0): ) # Launch inference servers. - try: - rollout_env_vars = config.rollout.scheduling_spec[0].env_vars - except AttributeError: - # In case `scheduling_spec` or `env_vars` is missing - rollout_env_vars = {} + rollout_spec = get_scheduling_spec(config.rollout) + rollout_env_vars = rollout_spec.env_vars + rollout_cpus_per_task = rollout_spec.cpu + thread_env = get_thread_env_vars( + cpus_per_task=rollout_cpus_per_task, + existing_env_vars=rollout_env_vars, + ) launcher.submit_array( job_name="llm_server", cmd=server_cmd, @@ -337,7 +341,7 @@ def local_main(config, run_id: int = 0): gpu=alloc_mode.gen.pp_size * alloc_mode.gen.tp_size * alloc_mode.gen.dp_size, - env_vars={**BASE_ENVIRONS, **rollout_env_vars}, + env_vars={**BASE_ENVIRONS, **thread_env, **rollout_env_vars}, ) # Get llm server addresses by name resolve @@ -374,17 +378,20 @@ def local_main(config, run_id: int = 0): _env_vars["NCCL_CUMEM_ENABLE"] = "0" _env_vars["NCCL_NVLS_ENABLE"] = "0" # All experiment configs should have the `actor` field. - try: - actor_env_vars = config.actor.scheduling_spec[0].env_vars - except AttributeError: - # in case `scheduling_spec` or `env_vars` is missing - actor_env_vars = {} + actor_spec = get_scheduling_spec(config.actor) + actor_env_vars = actor_spec.env_vars + actor_cpus_per_task = actor_spec.cpu + thread_env = get_thread_env_vars( + cpus_per_task=actor_cpus_per_task, + existing_env_vars=actor_env_vars, + ) launcher.submit( job_name="trainer", cmd=f"torchrun --nnodes 1 --nproc-per-node {nprocs} --master-addr localhost --master-port {find_free_ports(1, (10000, 50000))[0]} {' '.join(sys.argv[1:])}", gpu=gpu, env_vars={ **BASE_ENVIRONS, + **thread_env, **actor_env_vars, **_env_vars, **tms_env_vars, diff --git a/areal/launcher/ray.py b/areal/launcher/ray.py index 6c45a734ab..fab9067863 100644 --- a/areal/launcher/ray.py +++ b/areal/launcher/ray.py @@ -17,7 +17,6 @@ from areal.api.cli_args import ( ClusterSpecConfig, RecoverConfig, - SchedulingSpec, SGLangConfig, parse_cli_args, to_structured_cfg, @@ -30,6 +29,8 @@ BASE_ENVIRONS, JobException, JobState, + get_scheduling_spec, + get_thread_env_vars, validate_config_for_distributed_launcher, wait_llm_server_addrs, ) @@ -372,18 +373,10 @@ def ray_main(config, run_id: int = 0): allocation_mode = config.allocation_mode allocation_mode = AllocationMode.from_str(allocation_mode) - try: - actor_spec = to_structured_cfg(config.actor.scheduling_spec[0], SchedulingSpec) - except AttributeError: - actor_spec = SchedulingSpec() + actor_spec = get_scheduling_spec(config.actor) if allocation_mode.gen_backend in ("sglang", "vllm"): - try: - rollout_spec = to_structured_cfg( - config.rollout.scheduling_spec[0], SchedulingSpec - ) - except AttributeError: - rollout_spec = SchedulingSpec() + rollout_spec = get_scheduling_spec(config.rollout) if not is_recover_run: metadata_file = save_experiment_metadata( @@ -446,7 +439,14 @@ def sglang_env_hook( return env_vars - # launch a task to start all sglang servers in one node + # Launch a task to start all sglang servers in one node. + # Use full-node CPU allocation for llm_server since one Ray task manages + # all GPUs on a node. Thread env vars are set per-node (not per-GPU). + sglang_cpus_per_task = rollout_spec.cpu * n_gpus_per_node + thread_env = get_thread_env_vars( + cpus_per_task=sglang_cpus_per_task, + existing_env_vars=rollout_spec.env_vars, + ) launcher.submit_array( job_name="llm_server", file_path=sglang_entry_point, @@ -455,9 +455,9 @@ def sglang_env_hook( nodes=n_sglang_nodes, list_args=sglang_args_list, gpus_per_task=n_gpus_per_node, - cpus_per_task=rollout_spec.cpu * n_gpus_per_node, + cpus_per_task=sglang_cpus_per_task, mem_per_task=rollout_spec.mem * 1024 * n_gpus_per_node, - env_vars={**BASE_ENVIRONS, **rollout_spec.env_vars}, + env_vars={**BASE_ENVIRONS, **thread_env, **rollout_spec.env_vars}, env_hook=( partial(sglang_env_hook, n_sglang_nodes, node_group_size) if cross_nodes @@ -491,6 +491,11 @@ def sglang_env_hook( vllm_entry_point = str( pathlib.Path(__file__).resolve().parent.joinpath("vllm_server.py") ) + vllm_cpus_per_task = rollout_spec.cpu * vllm_tp_size + thread_env = get_thread_env_vars( + cpus_per_task=vllm_cpus_per_task, + existing_env_vars=rollout_spec.env_vars, + ) launcher.submit_array( job_name="llm_server", file_path=vllm_entry_point, @@ -499,9 +504,9 @@ def sglang_env_hook( nodes=n_vllm_nodes, list_args=vllm_args_list, gpus_per_task=vllm_tp_size, - cpus_per_task=rollout_spec.cpu * vllm_tp_size, + cpus_per_task=vllm_cpus_per_task, mem_per_task=rollout_spec.mem * 1024 * vllm_tp_size, - env_vars={**BASE_ENVIRONS, **rollout_spec.env_vars}, + env_vars={**BASE_ENVIRONS, **thread_env, **rollout_spec.env_vars}, ) # Get vllm server addresses via name_resolve try: @@ -570,6 +575,13 @@ def torch_env_hook(n_tasks: int, placement_group: PlacementGroup) -> list[dict]: _env_vars["NCCL_CUMEM_ENABLE"] = "0" _env_vars["NCCL_NVLS_ENABLE"] = "0" + # Use per-GPU CPU count for thread env vars since Ray spawns individual + # tasks per GPU, each inheriting these env vars. This differs from + # llm_server which uses full-node allocation. + thread_env = get_thread_env_vars( + cpus_per_task=actor_spec.cpu, + existing_env_vars=actor_spec.env_vars, + ) launcher.submit_array( job_name="trainer", file_path=trainer_entry_point, @@ -582,6 +594,7 @@ def torch_env_hook(n_tasks: int, placement_group: PlacementGroup) -> list[dict]: mem_per_task=actor_spec.mem * 1024, env_vars={ **BASE_ENVIRONS, + **thread_env, **actor_spec.env_vars, **_env_vars, **tms_env_vars, diff --git a/areal/launcher/sglang_server.py b/areal/launcher/sglang_server.py index cb12b48851..1e4133b719 100644 --- a/areal/launcher/sglang_server.py +++ b/areal/launcher/sglang_server.py @@ -19,16 +19,26 @@ ) from areal.platforms import current_platform from areal.utils import logging, name_resolve, names -from areal.utils.launcher import TRITON_CACHE_PATH, apply_sglang_patch +from areal.utils.launcher import ( + TRITON_CACHE_PATH, + apply_sglang_patch, + get_scheduling_spec, +) from areal.utils.network import find_free_ports, gethostip from areal.utils.proc import kill_process_tree logger = logging.getLogger("SGLangWrapper") -def launch_server_cmd(command: list[str]) -> subprocess.Popen: +def launch_server_cmd( + command: list[str], custom_env: dict[str, str] | None = None +) -> subprocess.Popen: """ Launch inference server in a new process and return its process handle. + + Args: + command: The command to execute. + custom_env: Custom environment variables to set for the subprocess. """ # Replace newline continuations and split the command string. logger.info(f"Launch command: {' '.join(command)}") @@ -37,6 +47,10 @@ def launch_server_cmd(command: list[str]) -> subprocess.Popen: triton_cache_path = _env.get("TRITON_CACHE_PATH", TRITON_CACHE_PATH) unique_triton_cache_path = os.path.join(triton_cache_path, str(uuid.uuid4())) _env["TRITON_CACHE_PATH"] = unique_triton_cache_path + + if custom_env is not None: + _env.update(custom_env) + return subprocess.Popen( command, env=_env, @@ -77,6 +91,7 @@ def __init__( sglang_config: SGLangConfig, allocation_mode: AllocationMode, n_gpus_per_node: int, + cpu_per_gpu: int | None = None, ): self.experiment_name = experiment_name self.trial_name = trial_name @@ -84,6 +99,7 @@ def __init__( self.allocation_mode = allocation_mode self.server_processes = [] # List to store multiple server processes self.n_gpus_per_node = n_gpus_per_node + self.cpu_per_gpu = cpu_per_gpu if self.config.enable_fast_load or self.config.enable_multithread_load: apply_sglang_patch() @@ -208,12 +224,16 @@ def launch_sglang_server(argv): allocation_mode = AllocationMode.from_str(allocation_mode) assert allocation_mode.gen_backend == "sglang" + # Get CPU per GPU from rollout scheduling spec + rollout_spec = get_scheduling_spec(config.rollout) + sglang_server = SGLangServerWrapper( config.experiment_name, config.trial_name, config.sglang, allocation_mode, n_gpus_per_node=config.cluster.n_gpus_per_node, + cpu_per_gpu=rollout_spec.cpu, ) sglang_server.run() diff --git a/areal/launcher/slurm.py b/areal/launcher/slurm.py index f4d5a2e9b2..8ed22fa1cd 100644 --- a/areal/launcher/slurm.py +++ b/areal/launcher/slurm.py @@ -11,7 +11,6 @@ from areal.api.cli_args import ( ClusterSpecConfig, RecoverConfig, - SchedulingSpec, SGLangConfig, parse_cli_args, to_structured_cfg, @@ -25,6 +24,8 @@ JobException, JobInfo, JobState, + get_scheduling_spec, + get_thread_env_vars, validate_config_for_distributed_launcher, wait_llm_server_addrs, ) @@ -414,10 +415,7 @@ def slurm_main(config, run_id: int = 0): ) # Get scheduling specs from actor config - try: - actor_spec = to_structured_cfg(config.actor.scheduling_spec[0], SchedulingSpec) - except AttributeError: - actor_spec = SchedulingSpec() + actor_spec = get_scheduling_spec(config.actor) launcher = SlurmLauncher( experiment_name=config.experiment_name, @@ -459,12 +457,7 @@ def slurm_main(config, run_id: int = 0): random_seed = config.vllm.seed # Get rollout scheduling spec - try: - rollout_spec = to_structured_cfg( - config.rollout.scheduling_spec[0], SchedulingSpec - ) - except AttributeError: - rollout_spec = SchedulingSpec() + rollout_spec = get_scheduling_spec(config.rollout) backend_spec = { "sglang": { @@ -497,7 +490,12 @@ def _build_llm_server_plan(backend: str, spec: dict): n_servers_per_node = max(n_backend_servers // n_backend_nodes, 1) cross_nodes = allocation_mode.gen_instance_size > n_gpus_per_node - base_env_vars = {**BASE_ENVIRONS, **rollout_spec.env_vars} + rollout_cpus_per_task = rollout_spec.cpu * n_gpus_per_node + thread_env = get_thread_env_vars( + cpus_per_task=rollout_cpus_per_task, + existing_env_vars=rollout_spec.env_vars, + ) + base_env_vars = {**BASE_ENVIRONS, **thread_env, **rollout_spec.env_vars} if spec["set_device_env"]: base_env_vars[current_platform.device_control_env_var] = ",".join( list(map(str, range(n_gpus_per_node))) @@ -622,6 +620,14 @@ def _build_trainer_cmds( _env_vars["NCCL_CUMEM_ENABLE"] = "0" _env_vars["NCCL_NVLS_ENABLE"] = "0" + trainer_cpus_per_task = actor_spec.cpu * config.cluster.n_gpus_per_node + # Use per-GPU CPU count for thread env vars since torchrun spawns + # n_gpus_per_node processes, each inheriting these env vars. + # This matches Local and Ray launcher behavior. + thread_env = get_thread_env_vars( + cpus_per_task=actor_spec.cpu, + existing_env_vars=actor_spec.env_vars, + ) launcher.submit_array( job_name="trainer", cmd=_build_trainer_cmds( @@ -632,13 +638,14 @@ def _build_trainer_cmds( count=trainer_n_nodes, nodes=trainer_n_nodes, n_gpus_per_node=gpus_per_node, - cpus_per_task=actor_spec.cpu * config.cluster.n_gpus_per_node, + cpus_per_task=trainer_cpus_per_task, mem_per_task=actor_spec.mem * 1024 * config.cluster.n_gpus_per_node, container_image=actor_spec.image, srun_additional_args=actor_spec.srun_additional_args, container_mounts=actor_spec.mount, env_vars={ **BASE_ENVIRONS, + **thread_env, **actor_spec.env_vars, **_env_vars, **tms_env_vars, diff --git a/areal/launcher/vllm_server.py b/areal/launcher/vllm_server.py index be02712088..c9d3b279c4 100644 --- a/areal/launcher/vllm_server.py +++ b/areal/launcher/vllm_server.py @@ -20,7 +20,7 @@ from areal.api.io_struct import AllocationMode from areal.platforms import current_platform from areal.utils import logging, name_resolve, names -from areal.utils.launcher import TRITON_CACHE_PATH +from areal.utils.launcher import TRITON_CACHE_PATH, get_scheduling_spec from areal.utils.network import find_free_ports, gethostip from areal.utils.proc import kill_process_tree @@ -28,7 +28,7 @@ def launch_server_cmd( - command: list[str], custom_env: dict | None = None + command: list[str], custom_env: dict[str, str] | None = None ) -> subprocess.Popen: """ Launch inference server in a new process and return its process handle. @@ -44,8 +44,10 @@ def launch_server_cmd( vllm_cache_path = _env.get("VLLM_CACHE_ROOT") if vllm_cache_path: _env["VLLM_CACHE_ROOT"] = os.path.join(vllm_cache_path, str(uuid.uuid4())) + if custom_env is not None: _env.update(custom_env) + return subprocess.Popen( command, env=_env, @@ -86,6 +88,7 @@ def __init__( vllm_config: vLLMConfig, allocation_mode: AllocationMode, n_gpus_per_node: int, + cpu_per_gpu: int | None = None, ): self.experiment_name = experiment_name self.trial_name = trial_name @@ -93,6 +96,7 @@ def __init__( self.allocation_mode = allocation_mode self.server_processes = [] self.n_gpus_per_node = n_gpus_per_node + self.cpu_per_gpu = cpu_per_gpu self._shutdown_requested = False self._is_shutting_down = False @@ -176,7 +180,7 @@ def run(self): custom_env = { device_control_env_var: ",".join( visible[j * gpus_per_server : (j + 1) * gpus_per_server] - ) + ), } config = deepcopy(self.config) config.seed = base_random_seed + server_local_idx @@ -226,9 +230,13 @@ def run(self): raise def launch_one_server( - self, cmd: str, host_ip: str, server_port: int, custom_env: dict | None = None + self, + cmd: str, + host_ip: str, + server_port: int, + custom_env: dict[str, str] | None = None, ): - server_process = launch_server_cmd(cmd, custom_env) + server_process = launch_server_cmd(cmd, custom_env=custom_env) wait_for_server(f"http://{host_ip}:{server_port}") name = names.gen_servers(self.experiment_name, self.trial_name) name_resolve.add_subentry(name, f"{host_ip}:{server_port}") @@ -249,12 +257,16 @@ def launch_vllm_server(argv): allocation_mode = AllocationMode.from_str(allocation_mode) assert allocation_mode.gen_backend == "vllm" + # Get CPU per GPU from rollout scheduling spec + rollout_spec = get_scheduling_spec(config.rollout) + vllm_server = vLLMServerWrapper( config.experiment_name, config.trial_name, config.vllm, allocation_mode, n_gpus_per_node=config.cluster.n_gpus_per_node, + cpu_per_gpu=rollout_spec.cpu, ) vllm_server.run() diff --git a/areal/scheduler/local.py b/areal/scheduler/local.py index f175cb2f6a..1602c8e8d4 100644 --- a/areal/scheduler/local.py +++ b/areal/scheduler/local.py @@ -40,6 +40,7 @@ from areal.utils.http import get_default_connector from areal.utils.launcher import ( get_env_vars, + get_thread_env_vars, ) from areal.utils.network import find_free_ports, gethostip from areal.utils.proc import kill_process_tree, run_with_streaming_logs @@ -624,6 +625,12 @@ def create_workers(self, job: Job, *args, **kwargs) -> list[str]: map(str, gpu_devices) ) + thread_env = get_thread_env_vars( + cpus_per_task=scheduling.cpu, + existing_env_vars=scheduling.env_vars, + ) + env.update(thread_env) + if scheduling.env_vars: env.update(scheduling.env_vars) diff --git a/areal/scheduler/ray.py b/areal/scheduler/ray.py index 29d8176577..97d88b1b58 100644 --- a/areal/scheduler/ray.py +++ b/areal/scheduler/ray.py @@ -31,7 +31,7 @@ ) from areal.scheduler.rpc.ray_rpc_server import RayRPCServer from areal.utils import logging -from areal.utils.launcher import get_env_vars +from areal.utils.launcher import get_env_vars, get_thread_env_vars from areal.utils.ray import get_placement_group_master_ip_and_port logger = logging.getLogger("RayScheduler") @@ -235,10 +235,16 @@ def _build_env_vars(self, spec: SchedulingSpec) -> dict[str, str]: additional_envs_str = None if spec.env_vars: additional_envs_str = ",".join(f"{k}={v}" for k, v in spec.env_vars.items()) - return get_env_vars( + env = get_env_vars( self.exp_config.cluster.cluster_name if self.exp_config else "", additional_envs_str, ) + thread_env = get_thread_env_vars( + cpus_per_task=spec.cpu, + existing_env_vars=spec.env_vars, + ) + env.update(thread_env) + return env def _create_ray_workers( self, role: str, schedulings: list[SchedulingSpec] diff --git a/areal/scheduler/slurm.py b/areal/scheduler/slurm.py index e50af830c5..0612f8ba05 100644 --- a/areal/scheduler/slurm.py +++ b/areal/scheduler/slurm.py @@ -37,6 +37,7 @@ from areal.utils.launcher import ( JobState, get_env_vars, + get_thread_env_vars, ) from areal.utils.offload import get_tms_env_vars from areal.utils.proc import build_streaming_log_cmd @@ -405,6 +406,11 @@ def _prepare_worker_specs( if self.enable_tms_offload: sch.env_vars.update(get_tms_env_vars()) sch.env_vars.update(get_env_vars(self.cluster_name)) + thread_env = get_thread_env_vars( + cpus_per_task=sch.cpu, + existing_env_vars=sch.env_vars, + ) + sch.env_vars.update(thread_env) if len(schedulings) == 1: # Expand single spec to all workers diff --git a/areal/utils/launcher.py b/areal/utils/launcher.py index 57522b88f3..be353f6042 100644 --- a/areal/utils/launcher.py +++ b/areal/utils/launcher.py @@ -41,6 +41,85 @@ "PYTHONPATH": PYTHONPATH, } +# Thread control environment variables for OpenMP/MKL/etc. +THREAD_ENV_VARS = ( + "OMP_NUM_THREADS", + "MKL_NUM_THREADS", + "OPENBLAS_NUM_THREADS", + "VECLIB_MAXIMUM_THREADS", + "NUMEXPR_NUM_THREADS", +) + +# Default thread count when cpus_per_task cannot be determined +THREAD_NUM_DEFAULT_WHEN_UNKNOWN = 8 + + +def get_thread_env_vars( + cpus_per_task: int | None = None, + existing_env_vars: dict[str, str] | None = None, +) -> dict[str, str]: + """Get thread control environment variables. + + Priority (from highest to lowest): + 1. existing_env_vars settings (user-configured via SchedulingSpec.env_vars) + 2. os.environ settings (user pre-set in script/shell) + 3. cpus_per_task dynamically computed value + 4. THREAD_NUM_DEFAULT_WHEN_UNKNOWN fallback value + + Args: + cpus_per_task: Number of CPU cores allocated per task. + existing_env_vars: Existing environment variable dict (e.g., SchedulingSpec.env_vars) + + Returns: + Thread environment variable dict + """ + if existing_env_vars is None: + existing_env_vars = {} + + # Determine thread count + if cpus_per_task is not None and cpus_per_task > 0: + num_threads = cpus_per_task + else: + num_threads = THREAD_NUM_DEFAULT_WHEN_UNKNOWN + + thread_env = {} + for var in THREAD_ENV_VARS: + # Priority: existing_env_vars > os.environ > computed value + if var in existing_env_vars: + thread_env[var] = existing_env_vars[var] + elif var in os.environ: + thread_env[var] = os.environ[var] + else: + thread_env[var] = str(num_threads) + + # Log auto-set variables + newly_set = [ + v for v in THREAD_ENV_VARS if v not in existing_env_vars and v not in os.environ + ] + if newly_set: + logger.info( + f"Auto-setting thread env vars to {num_threads}: {', '.join(newly_set)}" + ) + + return thread_env + + +def get_scheduling_spec(config_part): + """Safely retrieve SchedulingSpec from config. + + Args: + config_part: Config object (e.g., config.actor or config.rollout) + + Returns: + SchedulingSpec instance (default if not configured) + """ + from areal.api.cli_args import SchedulingSpec, to_structured_cfg + + try: + return to_structured_cfg(config_part.scheduling_spec[0], SchedulingSpec) + except AttributeError: + return SchedulingSpec() + def get_env_vars( cluster_name: str, additional_env_vars: str | None = None diff --git a/docs/cli_reference.md b/docs/cli_reference.md index c185554361..4e0be0e248 100644 --- a/docs/cli_reference.md +++ b/docs/cli_reference.md @@ -936,7 +936,7 @@ Configuration class: SchedulingSpec | Parameter | Type | Default | Description | | ---------------------- | ---------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `cpu` | integer | `4` | Number of CPU cores required per GPU | +| `cpu` | integer | `8` | Number of CPU cores required per GPU | | `gpu` | integer | `0` | Number of GPU units required. Used only when allocating pods. | | `mem` | integer | `32` | Amount of memory (GB) required per GPU | | `port_count` | integer | `2` | Number of ports to expose | diff --git a/examples/alignment/hhrlhf_rw.yaml b/examples/alignment/hhrlhf_rw.yaml index 0615e21329..f76e949597 100644 --- a/examples/alignment/hhrlhf_rw.yaml +++ b/examples/alignment/hhrlhf_rw.yaml @@ -41,7 +41,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/camel/config.yaml b/examples/camel/config.yaml index bc6bfb7d1a..5d377fd393 100644 --- a/examples/camel/config.yaml +++ b/examples/camel/config.yaml @@ -79,7 +79,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/countdown/train_config.yaml b/examples/countdown/train_config.yaml index bae53eac4b..4afc208bbd 100644 --- a/examples/countdown/train_config.yaml +++ b/examples/countdown/train_config.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/experimental/prox_approx/gsm8k_grpo_prox_approx.yaml b/examples/experimental/prox_approx/gsm8k_grpo_prox_approx.yaml index b57df6f062..347620e90a 100644 --- a/examples/experimental/prox_approx/gsm8k_grpo_prox_approx.yaml +++ b/examples/experimental/prox_approx/gsm8k_grpo_prox_approx.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/experimental/prox_approx/gsm8k_grpo_prox_approx_eval.yaml b/examples/experimental/prox_approx/gsm8k_grpo_prox_approx_eval.yaml index 92bd1a59eb..b974d10376 100644 --- a/examples/experimental/prox_approx/gsm8k_grpo_prox_approx_eval.yaml +++ b/examples/experimental/prox_approx/gsm8k_grpo_prox_approx_eval.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/lora/gsm8k_grpo_lora.yaml b/examples/lora/gsm8k_grpo_lora.yaml index fe164dcb7f..0086bf7df8 100644 --- a/examples/lora/gsm8k_grpo_lora.yaml +++ b/examples/lora/gsm8k_grpo_lora.yaml @@ -87,7 +87,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/lora/gsm8k_grpo_lora_vllm.yaml b/examples/lora/gsm8k_grpo_lora_vllm.yaml index 66d6b308cc..00a6534094 100644 --- a/examples/lora/gsm8k_grpo_lora_vllm.yaml +++ b/examples/lora/gsm8k_grpo_lora_vllm.yaml @@ -91,7 +91,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server diff --git a/examples/math/boba_grpo.yaml b/examples/math/boba_grpo.yaml index c1e23e0b09..5e815f3b52 100644 --- a/examples/math/boba_grpo.yaml +++ b/examples/math/boba_grpo.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: diff --git a/examples/math/gsm8k_dapo_dynamic_bs.yaml b/examples/math/gsm8k_dapo_dynamic_bs.yaml index 832f44d5b4..5f52c23f05 100644 --- a/examples/math/gsm8k_dapo_dynamic_bs.yaml +++ b/examples/math/gsm8k_dapo_dynamic_bs.yaml @@ -85,7 +85,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_drgrpo.yaml b/examples/math/gsm8k_drgrpo.yaml index 4064af4042..5e81953c56 100644 --- a/examples/math/gsm8k_drgrpo.yaml +++ b/examples/math/gsm8k_drgrpo.yaml @@ -79,7 +79,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_grpo.yaml b/examples/math/gsm8k_grpo.yaml index ab9eb9d7df..b9120b75ce 100644 --- a/examples/math/gsm8k_grpo.yaml +++ b/examples/math/gsm8k_grpo.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_grpo_lora.yaml b/examples/math/gsm8k_grpo_lora.yaml index e52eb50f0f..c7493f1515 100644 --- a/examples/math/gsm8k_grpo_lora.yaml +++ b/examples/math/gsm8k_grpo_lora.yaml @@ -87,7 +87,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_grpo_megatron.yaml b/examples/math/gsm8k_grpo_megatron.yaml index 6a2a04a1fa..157b218466 100644 --- a/examples/math/gsm8k_grpo_megatron.yaml +++ b/examples/math/gsm8k_grpo_megatron.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_grpo_npu.yaml b/examples/math/gsm8k_grpo_npu.yaml index 22aa04b933..c7fe75fb18 100644 --- a/examples/math/gsm8k_grpo_npu.yaml +++ b/examples/math/gsm8k_grpo_npu.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: diff --git a/examples/math/gsm8k_gspo.yaml b/examples/math/gsm8k_gspo.yaml index 5ece417c63..a39b833e26 100644 --- a/examples/math/gsm8k_gspo.yaml +++ b/examples/math/gsm8k_gspo.yaml @@ -82,7 +82,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_liteppo.yaml b/examples/math/gsm8k_liteppo.yaml index 4545a8b093..8d3d54e862 100644 --- a/examples/math/gsm8k_liteppo.yaml +++ b/examples/math/gsm8k_liteppo.yaml @@ -79,7 +79,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_m2po.yaml b/examples/math/gsm8k_m2po.yaml index 82d84c96cb..8853982336 100644 --- a/examples/math/gsm8k_m2po.yaml +++ b/examples/math/gsm8k_m2po.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_ppo.yaml b/examples/math/gsm8k_ppo.yaml index 00f7aa9ab6..7f3f1df928 100644 --- a/examples/math/gsm8k_ppo.yaml +++ b/examples/math/gsm8k_ppo.yaml @@ -76,7 +76,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_ppo_megatron.yaml b/examples/math/gsm8k_ppo_megatron.yaml index b2f0c0b37f..d7867381b4 100644 --- a/examples/math/gsm8k_ppo_megatron.yaml +++ b/examples/math/gsm8k_ppo_megatron.yaml @@ -76,7 +76,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_reinforce.yaml b/examples/math/gsm8k_reinforce.yaml index 56ebaabf52..6d7bdda96e 100644 --- a/examples/math/gsm8k_reinforce.yaml +++ b/examples/math/gsm8k_reinforce.yaml @@ -77,7 +77,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_reinforce_baseline.yaml b/examples/math/gsm8k_reinforce_baseline.yaml index 3cbe7206b8..d3a0729353 100644 --- a/examples/math/gsm8k_reinforce_baseline.yaml +++ b/examples/math/gsm8k_reinforce_baseline.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_rloo.yaml b/examples/math/gsm8k_rloo.yaml index c2c4224fda..d28a6a250a 100644 --- a/examples/math/gsm8k_rloo.yaml +++ b/examples/math/gsm8k_rloo.yaml @@ -81,7 +81,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_sapo.yaml b/examples/math/gsm8k_sapo.yaml index 3b88309177..6ac2414370 100644 --- a/examples/math/gsm8k_sapo.yaml +++ b/examples/math/gsm8k_sapo.yaml @@ -85,7 +85,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/math/gsm8k_sft.yaml b/examples/math/gsm8k_sft.yaml index 7151c47cd9..11bedca053 100644 --- a/examples/math/gsm8k_sft.yaml +++ b/examples/math/gsm8k_sft.yaml @@ -41,7 +41,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/multi_turn_math/gsm8k_grpo_mt.yaml b/examples/multi_turn_math/gsm8k_grpo_mt.yaml index 86e531903d..356796d3ae 100644 --- a/examples/multi_turn_math/gsm8k_grpo_mt.yaml +++ b/examples/multi_turn_math/gsm8k_grpo_mt.yaml @@ -84,7 +84,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/openai_agents/config.yaml b/examples/openai_agents/config.yaml index 9fac54223a..f93e54e65e 100644 --- a/examples/openai_agents/config.yaml +++ b/examples/openai_agents/config.yaml @@ -79,7 +79,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/search_agent/local_1.5b_example.yaml b/examples/search_agent/local_1.5b_example.yaml index a78c51d2f8..23b30fa109 100644 --- a/examples/search_agent/local_1.5b_example.yaml +++ b/examples/search_agent/local_1.5b_example.yaml @@ -94,7 +94,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/search_agent/tongyi_deepresearch/config.yaml b/examples/search_agent/tongyi_deepresearch/config.yaml index ae61665edb..67180b2c99 100644 --- a/examples/search_agent/tongyi_deepresearch/config.yaml +++ b/examples/search_agent/tongyi_deepresearch/config.yaml @@ -82,7 +82,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/skypilot/gsm8k_grpo_ray.yaml b/examples/skypilot/gsm8k_grpo_ray.yaml index 962e224641..74303d574f 100644 --- a/examples/skypilot/gsm8k_grpo_ray.yaml +++ b/examples/skypilot/gsm8k_grpo_ray.yaml @@ -77,7 +77,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/tir/tir_math_config.yaml b/examples/tir/tir_math_config.yaml index 916179b63f..7072d008a1 100644 --- a/examples/tir/tir_math_config.yaml +++ b/examples/tir/tir_math_config.yaml @@ -74,7 +74,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/vlm/clevr_count_70k_grpo.yaml b/examples/vlm/clevr_count_70k_grpo.yaml index 811f252ba6..37d2e06a99 100644 --- a/examples/vlm/clevr_count_70k_grpo.yaml +++ b/examples/vlm/clevr_count_70k_grpo.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/vlm/clevr_count_70k_sft.yaml b/examples/vlm/clevr_count_70k_sft.yaml index 18a9f78625..97ec196458 100644 --- a/examples/vlm/clevr_count_70k_sft.yaml +++ b/examples/vlm/clevr_count_70k_sft.yaml @@ -38,7 +38,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/vlm/geometry3k_grpo.yaml b/examples/vlm/geometry3k_grpo.yaml index 4a5f9e1207..b100e5e143 100644 --- a/examples/vlm/geometry3k_grpo.yaml +++ b/examples/vlm/geometry3k_grpo.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {} diff --git a/examples/vlm_npu/geometry3k_grpo.yaml b/examples/vlm_npu/geometry3k_grpo.yaml index 4a5f9e1207..b100e5e143 100644 --- a/examples/vlm_npu/geometry3k_grpo.yaml +++ b/examples/vlm_npu/geometry3k_grpo.yaml @@ -80,7 +80,6 @@ actor: - task_type: worker port_count: 2 gpu: 1 - cpu: 4 mem: 32 cmd: python3 -m areal.scheduler.rpc.rpc_server env_vars: {}