← back to Exo
always run tinygrad stuff on same thread. tricky because of lazy evaluation
4ece73423ee48c9a9cf649d377c3fa7dddb0c43a · 2024-11-19 15:47:12 +0400 · Alex Cheema
Files touched
M exo/inference/tinygrad/inference.py
Diff
commit 4ece73423ee48c9a9cf649d377c3fa7dddb0c43a
Author: Alex Cheema <alexcheema123@gmail.com>
Date: Tue Nov 19 15:47:12 2024 +0400
always run tinygrad stuff on same thread. tricky because of lazy evaluation
---
exo/inference/tinygrad/inference.py | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/exo/inference/tinygrad/inference.py b/exo/inference/tinygrad/inference.py
index a7b331a0..c256922e 100644
--- a/exo/inference/tinygrad/inference.py
+++ b/exo/inference/tinygrad/inference.py
@@ -7,7 +7,6 @@ from exo.inference.tokenizers import resolve_tokenizer
from tinygrad.nn.state import load_state_dict
from tinygrad import Tensor, nn, Context
from exo.inference.inference_engine import InferenceEngine
-from typing import Optional, Tuple
import numpy as np
from exo.inference.tinygrad.tinygrad_helpers import concat_weights, load
from exo.download.shard_download import ShardDownloader
@@ -68,24 +67,21 @@ class TinygradDynamicShardInferenceEngine(InferenceEngine):
async def sample(self, x: np.ndarray, temp=TEMPERATURE, top_p: float = 0.0) -> np.ndarray:
logits = x[:, -1, :]
def sample_wrapper():
- return sample_logits(Tensor(logits).flatten(), temp, 0, 0.8, top_p, 0.0).realize()
- out = await asyncio.get_running_loop().run_in_executor(self.executor, sample_wrapper)
- return out.numpy().astype(int)
+ return sample_logits(Tensor(logits).flatten(), temp, 0, 0.8, top_p, 0.0).realize().numpy().astype(int)
+ return await asyncio.get_running_loop().run_in_executor(self.executor, sample_wrapper)
async def encode(self, shard: Shard, prompt: str) -> np.ndarray:
await self.ensure_shard(shard)
tokens = await asyncio.get_running_loop().run_in_executor(self.executor, self.tokenizer.encode, prompt)
- return np.array(tokens)
+ return await asyncio.get_running_loop().run_in_executor(self.executor, np.array, tokens)
async def decode(self, shard: Shard, tokens) -> str:
await self.ensure_shard(shard)
- tokens = await asyncio.get_running_loop().run_in_executor(self.executor, self.tokenizer.decode, tokens)
- return tokens
+ return await asyncio.get_running_loop().run_in_executor(self.executor, self.tokenizer.decode, tokens)
async def infer_tensor(self, request_id: str, shard: Shard, input_data: np.ndarray) -> np.ndarray:
await self.ensure_shard(shard)
- output_data = await asyncio.get_running_loop().run_in_executor(self.executor, lambda: self.model(Tensor(input_data), request_id).realize())
- return output_data.numpy()
+ return await asyncio.get_running_loop().run_in_executor(self.executor, lambda: self.model(Tensor(input_data), request_id).realize().numpy())
async def ensure_shard(self, shard: Shard):
if self.shard == shard:
← 74b98fdd update package versions to work on python >= 3.9
·
back to Exo
·
fix shard_specific_patterns 312602fa →