疑難排解
本頁聚焦在 TinyLoop 工作流程中實際常見的失敗模式。
建置問題
Failed to find nvcc
意義:
- 目前環境找不到 CUDA Toolkit
請檢查:
nvcc存在- CUDA 二進位路徑已加入
PATH CUDAToolkit_ROOT設定正確
Python 模組沒有建出來
意義:
- 可能找不到
pybind11 - 或缺少
Python3 Development.Module
請在 CMake configure 輸出確認:
pybind11_FOUNDPython3_Development.Module_FOUND
模型載入問題
Invalid magic 或 unsupported version
意義:
- 該檔案不是有效
.tinyloopartifact - 或 artifact 版本超出 runtime 支援範圍
第一步:
- 執行
inspect - 確認 converter 輸出預期版本
dim must be divisible by n_heads
意義:
- artifact header 不一致或已損毀
請檢查:
- 來源 checkpoint 設定
- converter 邏輯
- 寫入的 header 欄位
Unsupported n_pre_blocks
意義:
- 目前 runtime 假設的是它所設計的狹窄 looped-transformer 家族
這不是一行補丁能解決,而是刻意的 runtime 擴充任務。
Runtime 問題
CUDA 配置失敗
常見原因:
max_seq_len設太大- 模型對該裝置太大
- 在記憶體不足 GPU 上啟用了 FP16 body cache 模式
可嘗試:
- 降低
max_seq_len - 載入前先跑
inspect - 改用較低記憶體模式
- 停用
TINYLOOP_EXPERIMENTAL_FP16_BODY=1
生成輸出看起來不對
先隔離來源:
- 用
TINYLOOP_DISABLE_KV_CACHE=1比較 cached 與 uncached - 用
TINYLOOP_DISABLE_FLASH2_PREFILL=1比較新 prefill 與參考路徑 - 若你使用 CLI,記得它會把 prompt 文字當 raw bytes tokenization
若 Python/tokenizer 路徑正常但 CLI 不正常,問題可能在文字前處理而非 runtime 本身。
Benchmark 數字不一致
請檢查:
- 測試是冷啟動還是暖機後
TINYLOOP_CUDA_PROFILE=1是否改變 warmup 行為- 是否啟用
TINYLOOP_EXPERIMENTAL_FP16_BODY=1 - 是否有其他程序同時使用該 GPU
測試問題
模型相依測試被跳過
請設定:
TINYLOOP_TEST_MODEL_PATH=/absolute/path/to/model.tinyloop
Tokenizer-aware 測試被跳過
請檢查:
- Python 綁定是否已建置
numpy是否已安裝transformers是否已安裝
Python regression 無法匯入 tinyloop_py
請設定:
TINYLOOP_TEST_BUILD_DIR=/path/to/tinyloop/build
或把 build 目錄加入 PYTHONPATH。
什麼時候該停止猜測
若 bug 不明顯:
- 以最小命令重現
- 與最接近的參考路徑比較
- 保存完整環境旗標
- 執行最小相關測試或 microbenchmark
TinyLoop 仍在快速演進,模糊式除錯通常只會浪費時間。