Download src/rollout/rollout_worker.py from Hooshaai/AsyncTensorRLHF: direct link, hf CLI and curl.
- Browser
- Download file 2.19 kB
-
https://huggingface.co/Hooshaai/AsyncTensorRLHF/resolve/main/src/rollout/rollout_worker.py
- Command line
-
hf download hf://Hooshaai/AsyncTensorRLHF/src/rollout/rollout_worker.py
-
curl -L -o rollout_worker.py https://huggingface.co/Hooshaai/AsyncTensorRLHF/resolve/main/src/rollout/rollout_worker.py
2.19 kB
| # Ray actor / standalone worker for rollout workers | |
| """RolloutWorker pulls prompts from a shared PromptQueue, generates responses | |
| asynchronously using AsyncEngine, and writes experiences to a ReplayBuffer. | |
| """ | |
| from typing import Any, List, Optional | |
| try: | |
| import ray | |
| ray_remote = ray.remote(num_gpus=1) | |
| except ImportError: | |
| ray = None | |
| def ray_remote(cls): | |
| return cls | |
| from .async_engine import AsyncEngine | |
| from .version_manager import VersionManager | |
| class RolloutWorker: | |
| def __init__( | |
| self, | |
| model_path: Optional[str] = None, | |
| prompt_queue: Optional[Any] = None, | |
| replay_buffer: Optional[Any] = None, | |
| buffer: Optional[Any] = None, | |
| version_manager: Optional[VersionManager] = None, | |
| engine: Optional[Any] = None, | |
| **engine_kwargs, | |
| ): | |
| self.prompt_queue = prompt_queue | |
| self.replay_buffer = replay_buffer if replay_buffer is not None else buffer | |
| self.version_manager = version_manager or VersionManager() | |
| self.engine = AsyncEngine( | |
| model_path=model_path, | |
| buffer=self.replay_buffer, | |
| version_manager=self.version_manager, | |
| engine=engine, | |
| **engine_kwargs, | |
| ) | |
| async def step(self, prompts: List[dict]): | |
| """Run rollout on an explicit list of prompts.""" | |
| await self.engine.rollout(prompts) | |
| async def run(self, batch_size: int = 8): | |
| """Continuously fetch prompts and perform rollout.""" | |
| while True: | |
| prompts: List[dict] = [] | |
| for _ in range(batch_size): | |
| if self.prompt_queue is not None: | |
| if hasattr(self.prompt_queue, "get_prompt"): | |
| if hasattr(self.prompt_queue.get_prompt, "remote"): | |
| prompt = await self.prompt_queue.get_prompt.remote() | |
| else: | |
| prompt = await self.prompt_queue.get_prompt() | |
| else: | |
| prompt = await self.prompt_queue.get() | |
| prompts.append(prompt) | |
| if prompts: | |
| await self.engine.rollout(prompts) | |