推論中、モデルはトークンごとに出力します。このシンプルなキャッシュを使ってキーと値のアテンションレイヤーを格納するので、以前のトークンでそれらを再計算する必要がありません
。15from typing import Any18class Cache:26 def __init__(self):
27 self._cache = {}29 def clear_all(self):33 self._cache = {}35 def push(self, name: str, value: Any):存在しない場合は空のキューを作成
44 if name not in self._cache:
45 self._cache[name] = []キューにプッシュ
48 self._cache[name].append(value)50 def q_size(self, name):58 if name not in self._cache:
59 return None
60
61 if type(self._cache[name]) != list:
62 return None
63
64 return len(self._cache[name])66 def pop(self, name: str):73 return self._cache[name].pop(0)75 def set(self, key: str, value: Any):82 self._cache[key] = value84 def get(self, key: str, default: Any = None):92 return self._cache.get(key, default)94 def clear(self, key: str):100 del self._cache[key]キャッシュ用シングルトン
104_INSTANCE = None107def get_cache() -> Cache:113 global _INSTANCE
114
115 if _INSTANCE is None:
116 _INSTANCE = Cache()
117
118 return _INSTANCE