Model
Model 是 Python 介面的核心入口。通常一個 .tinyloop artifact 建立一個實例,長時間重用;釋放 VRAM 時可呼叫 close() 或使用 with。
tinyloop_py.Model(path, max_seq_len=2048)
import tinyloop_py
model = tinyloop_py.Model("model.tinyloop", max_seq_len=2048)
等價 alias:
model = tinyloop_py.load("model.tinyloop", max_seq_len=2048)
參數
| 名稱 | 型別 | 預設 | 說明 |
|---|---|---|---|
path | str | — | .tinyloop 檔案路徑。參考 Model format。 |
max_seq_len | int | 2048 | 序列長度上限(prompt + generated)。建立時會依此配置 KV 相關 buffer,過大會直接增加 VRAM。需 > 0。 |
回傳
回傳可用的 tinyloop_py.Model 實例。建構期間會完成:
- 讀取並驗證 artifact header
- 上傳權重至 GPU
- 建立 runtime buffer
- 執行 tile sizing
例外
RuntimeError:路徑不存在、artifact 無效、GPU 記憶體不足等。ValueError:max_seq_len <= 0。
Model.close() 與 context manager
with tinyloop_py.Model("model.tinyloop") as model:
logits = model.score_last(tokens, loops=8)
# 離開 with 後資源釋放
close()為同步釋放,且 idempotent。- close 後所有公開方法都會丟
RuntimeError。
Model.config()
cfg = model.config()
回傳模型靜態架構資訊(來自 header,不需 forward):
| Key | 意義 |
|---|---|
dim | hidden dimension D |
n_heads | 注意力頭數 |
ffn_dim | FFN 維度 |
vocab_size | 詞彙表大小 |
embed_factor_dim | 因式分解 embedding 維度(0 表示 full-rank) |
n_pre_blocks | pre-loop blocks 數量 |
default_loops | 預設 loop 深度 |
Model.vram_usage_mb()
vram_mb = model.vram_usage_mb()
回傳目前 Model 持有的 VRAM(MB):權重、runtime buffers、可選 FP16 body cache、仍存活的 prefix/resume 相關物件。nvidia-smi 仍會顯示額外程序級開銷(CUDA context 等)。
分詞與輸入型別
TinyLoop 本身不提供 tokenizer。請使用外部 tokenizer,並以 np.ndarray[int32] 提供 token ids。
import numpy as np
from transformers import GPT2TokenizerFast
import tinyloop_py
tok = GPT2TokenizerFast.from_pretrained("gpt2")
model = tinyloop_py.Model("model.tinyloop", max_seq_len=2048)
prompt_ids = np.asarray(tok.encode("Looped transformers are", add_special_tokens=False), dtype=np.int32)
out_ids = model.generate(prompt_ids, max_tokens=32, loops=8, temperature=0.0, top_k=50)
執行緒安全
單一 Model 實例不是並行推論安全,因為其 CUDA stream 與 scratch buffers 會共享。建議:
- 每個
Model外層加鎖。 - 每個 worker 建立獨立
Model。 - 多程序部署(避開 GIL)。
決定性
在 greedy (temperature=0.0) 下,相同輸入可得到可重現輸出。非零溫度取樣會引入隨機性。