AQIT
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
tab_queue.py
Go to the documentation of this file.
1
# Copyright (c) 2025-present Aquin Labs Private Limited. All Rights Reserved.
2
# This file is part of the Aquin Engine. Unauthorized copying, modification,
3
# distribution, or use of this file, via any medium, is strictly prohibited.
4
# Proprietary and confidential. See LICENSE for terms.
5
6
"""
7
Ingested from inspection-backend/tab_queue.py.
8
FastAPI HTTPException replaced with RuntimeError — CLI has no HTTP layer.
9
"""
10
from
__future__
import
annotations
11
12
import
asyncio
13
import
os
14
15
16
class
TabQueue
:
17
def
__init__(self):
18
self._inference_slots = self._calculate_inference_slots()
19
self.inference = asyncio.Semaphore(self._inference_slots)
20
self.
training
= asyncio.Semaphore(int(os.getenv(
"TRAINING_SLOTS"
,
"1"
)))
21
self.
_inference_waiters
= 0
22
self.
_training_waiters
= 0
23
self.
_training_active
=
False
24
25
def
_calculate_inference_slots
(self) -> int:
26
override = os.getenv(
"INFERENCE_SLOTS"
)
27
if
override:
28
return
int(override)
29
return
1
30
31
async def
inference_request
(self, fn, timeout: float = 30.0):
32
if
self.
_training_active
:
33
raise
RuntimeError(
"Model is busy with a training run — try again when training completes"
)
34
self.
_inference_waiters
+= 1
35
try
:
36
await asyncio.wait_for(self.
inference
.acquire(), timeout=timeout)
37
except
asyncio.TimeoutError:
38
raise
RuntimeError(
"GPU busy, try again shortly"
)
39
finally
:
40
self.
_inference_waiters
-= 1
41
try
:
42
return
await fn()
43
finally
:
44
self.
inference
.release()
45
46
async def
training_request
(self, fn):
47
self.
_training_waiters
+= 1
48
await self.
training
.acquire()
49
self.
_training_waiters
-= 1
50
51
await self.
inference
.acquire()
52
self.
_training_active
=
True
53
try
:
54
return
await fn()
55
finally
:
56
self.
_training_active
=
False
57
self.
inference
.release()
58
self.
training
.release()
59
60
def
status
(self) -> dict:
61
inference_active = self.
_inference_slots
- self.
inference
._value
62
return
{
63
"inference_slots"
: self.
_inference_slots
,
64
"inference_active"
: inference_active,
65
"inference_queued"
: self.
_inference_waiters
,
66
"training_slots"
: int(os.getenv(
"TRAINING_SLOTS"
,
"1"
)),
67
"training_active"
: int(self.
_training_active
),
68
"training_queued"
: self.
_training_waiters
,
69
}
70
71
72
tab_queue: TabQueue |
None
=
None
73
74
75
def
init_tab_queue
() -> TabQueue:
76
global
tab_queue
77
tab_queue =
TabQueue
()
78
return
tab_queue
aquin.compute.tab_queue.TabQueue
Definition
tab_queue.py:20
aquin.compute.tab_queue.TabQueue._inference_slots
int _inference_slots
Definition
tab_queue.py:22
aquin.compute.tab_queue.TabQueue.training
training
Definition
tab_queue.py:24
aquin.compute.tab_queue.TabQueue._inference_waiters
int _inference_waiters
Definition
tab_queue.py:25
aquin.compute.tab_queue.TabQueue.status
dict status(self)
Definition
tab_queue.py:64
aquin.compute.tab_queue.TabQueue.inference
inference
Definition
tab_queue.py:23
aquin.compute.tab_queue.TabQueue._calculate_inference_slots
int _calculate_inference_slots(self)
Definition
tab_queue.py:29
aquin.compute.tab_queue.TabQueue.training_request
training_request(self, fn)
Definition
tab_queue.py:50
aquin.compute.tab_queue.TabQueue._training_active
bool _training_active
Definition
tab_queue.py:27
aquin.compute.tab_queue.TabQueue._training_waiters
int _training_waiters
Definition
tab_queue.py:26
aquin.compute.tab_queue.TabQueue.__init__
__init__(self)
Definition
tab_queue.py:21
aquin.compute.tab_queue.TabQueue.inference_request
inference_request(self, fn, float timeout=30.0)
Definition
tab_queue.py:35
aquin.compute.tab_queue.init_tab_queue
TabQueue init_tab_queue()
Definition
tab_queue.py:79
aquin
compute
tab_queue.py
AQIT · Aquin Labs Private Limited · Apache 2.0 · Generated by
1.18.0