Create child process, request/response queues, and do the warm up. Set the environment to make only the provided GPU device visible to the process.
(self)
| 138 | self.process = self.request_queue = self.response_queue = None |
| 139 | |
| 140 | def initialize(self) -> None: |
| 141 | """ |
| 142 | Create child process, request/response queues, and do the warm up. |
| 143 | Set the environment to make only the provided GPU device visible |
| 144 | to the process. |
| 145 | """ |
| 146 | if self.valid(): |
| 147 | return |
| 148 | |
| 149 | # cuda runtime does not work with "fork", use "spawn" to start processes. |
| 150 | ctx = multiprocessing.get_context("spawn") |
| 151 | self.request_queue = ctx.Queue() |
| 152 | self.response_queue = ctx.Queue() |
| 153 | |
| 154 | self.process = ctx.Process( |
| 155 | target=self.process_main, |
| 156 | args=( |
| 157 | self.request_queue, |
| 158 | self.response_queue, |
| 159 | ), |
| 160 | ) |
| 161 | assert self.process is not None |
| 162 | with set_cuda_visible_device(self.device): |
| 163 | self.process.start() |
| 164 | |
| 165 | def put(self, obj: Any) -> None: |
| 166 | """ |