在PyTorch中,.pt
和.pth
文件均用于保存模型,但兩者在設計初衷、存儲內容和使用場景上存在差異。以下是詳細對比:
1. 核心區別
特性 | .pt 文件 | .pth 文件 |
---|---|---|
存儲內容 | 完整模型(結構+參數+優化器狀態等) | 僅模型參數(state_dict ) |
文件大小 | 較大(包含額外元數據) | 較小(僅參數) |
加載方式 | 直接加載,無需定義模型結構 | 需先實例化模型,再加載參數 |
適用場景 | 部署、跨環境遷移 | 訓練中斷恢復、參數共享 |
2. 技術細節
-
.pt
文件- 生成代碼:
torch.save(model, "model.pt")
- 優勢:包含完整的模型信息,適合直接用于推理或遷移到無代碼環境。
- 風險:若模型類定義變更,加載可能失敗(需確保代碼兼容性)。
- 生成代碼:
-
.pth
文件- 生成代碼:
torch.save(model.state_dict(), "model.pth")
- 優勢:靈活性高,可加載到不同結構的模型中(如遷移學習)。
- 限制:需手動重建模型結構,否則無法直接使用。
- 生成代碼:
3. 版本與社區習慣
- 歷史演變:
.pth
曾是早期PyTorch的默認格式,后逐漸被.pt
取代(尤其PyTorch 1.6+)。.pt
現為官方推薦格式,支持更完整的序列化(如TorchScript)。
- 命名慣例:
.pt
多用于完整模型或TorchScript導出。.pth
仍廣泛用于參數保存(如Hugging Face庫)。
4. 安全性與性能
- 安全性:
- 兩者均基于
pickle
序列化,存在代碼注入風險,需確保文件來源可信。 .safetensors
(Hugging Face推出)是更安全的替代方案。
- 兩者均基于
- 加載效率:
.pth
因體積小,加載更快。.pt
支持內存映射(如TorchScript優化后),適合大模型。
5. 如何選擇?
- 選
.pt
:- 需一鍵部署模型(如API服務)。
- 需保留訓練狀態(如優化器、epoch計數)。
- 選
.pth
:- 僅需參數(如遷移學習或模型壓縮)。
- 需跨項目共享權重(避免結構依賴)。
總結
- 本質差異:
.pt
是“完整存檔”,.pth
是“參數快照”。 - 實踐建議:優先使用
.pt
確保兼容性,僅在參數共享時用.pth
。