• 文件 >
  • 應用程式最佳實務
捷徑

應用程式最佳實務

TorchX 應用程式可以使用任何語言以及任何一組程式庫來撰寫,以實現最大的靈活性。但是,我們確實有一套標準的建議程式庫和實務,可以作為使用者的起點,並在內建元件和應用程式之間提供一致性。

如需如何處理元件管理和 AppDef 的資訊,請參閱 元件最佳實務

資料傳遞和儲存

我們建議使用 fsspec。fsspec 允許使用可插拔的檔案系統,因此只需更改輸入和輸出路徑,即可撰寫一次應用程式並在多數基礎架構上執行。

TorchX 內建元件使用 fsspec 進行所有儲存體存取,以便透過使用不同的 fsspec 後端或新增新的後端,在新的環境中執行。

Pytorch Lightning 原生支援 fsspec,因此在其他地方使用 fsspec 可以與您的訓練器無縫整合。

使用遠端儲存體還可以更輕鬆地將您的應用程式轉換為透過 torch.distributed.elastic 等程式庫以分散式支援執行。

訓練迴圈

建構訓練迴圈的方法有很多種,這在很大程度上取決於您的模型類型和架構,這就是我們沒有提供現成方法的原因。

一些常見的選擇是

如需詳細資訊,請參閱 訓練

指標

對於記錄指標和監控您的作業,我們建議使用獨立的 Tensorboard,因為它由 Pytorch Tensorboard 整合Pytorch Lightning 記錄 原生支援。

由於 Tensorboard 可以記錄到遠端儲存體(如 s3 或 gcs),因此您可以在模型訓練時檢視有關模型的複雜資訊。

如需有關 TorchX 中指標處理的詳細資訊,請參閱 指標

檢查點

定期檢查點允許您的應用程式從失敗中恢復,並且在某些情況下允許您使用不同的參數重新啟動訓練器,而不會遺失訓練進度。

Pytorch Lighting 提供了一種標準化的方式來為您的模型建立檢查點。

微調

為了支援遷移學習、微調和從檢查點繼續等功能,我們建議為您的應用程式提供一個命令列參數,以從檢查點檔案繼續。

這將允許您從暫時性錯誤中恢復,繼續使用新資料進行訓練,或者稍後調整學習率而不會遺失訓練進度。

擁有載入支援可以減少程式碼並提高可維護性,因為您可以使用一個應用程式執行許多類似的任務。

可解譯性

我們建議使用 captum 進行模型可解譯性和分析模型結果。這可以從 Jupyter 筆記本或元件以互動方式使用。

如需詳細資訊,請參閱 解譯

模型封裝

Pytorch 社群尚未針對一種封裝格式達成共識。以下是一些選項,以及您可能需要使用它們的時間。

Python + 已儲存的權重

這是封裝模型最常見的格式。若要使用,您將從 Python 檔案載入模型定義,然後從 .ckpt.pt 檔案載入權重和狀態字典。

這就是 Pytorch Lightning 的 ModelCheckpoint 鉤子的工作原理。

這是最常見的,但會讓重複使用應用程式變得更加困難,因為您的訓練器應用程式需要包含模型定義程式碼。

TorchScript 模型

TorchScript 是一種建立可序列化和最佳化的 Pytorch 模型的方法,可以在沒有 Python 的情況下執行。這可以用於在不依賴 Python 的 GIL 的情況下以高效能的方式進行推論或訓練。

這些模型檔案是完全自我描述的,但並非所有 Pytorch 模型都可以自動轉換為 TorchScript。

請參閱 TorchScript 文件

TorchServe 模型封存器 (.mar)

如果您想使用 TorchServe 進行推論,則需要將模型匯出為此格式。對於推論,通常使用模型的量化版本,因此最好讓您的訓練器匯出完整精度模型以進行微調,以及匯出用於 TorchServe 使用的量化 .mar 檔案。

請參閱 模型封存器文件

torch.package

這是一種新的格式,從 Pytorch 1.9.0 開始,可用於儲存和載入模型定義及其權重,因此您不需要單獨管理模型定義。

請參閱 torch.package 文件

它相當新,尚未被廣泛採用或支援。

服務/推論

對於服務和推論,我們建議在常見用例中使用 TorchServe。我們提供了一個元件,允許您透過管理 API 將模型上傳到 TorchServe。

如需詳細資訊,請參閱 服務 內建元件。

出於更複雜的服務和效能原因,您可能需要撰寫自己的自訂推論邏輯。Torchscript 和 torch::deploy 是一些標準公用程式,您可以使用它們來建構自己的推論伺服器。

測試

由於 TorchX 應用程式通常是標準 Python,因此您可以像使用任何其他 Python 程式碼一樣為它們撰寫單元測試。

import unittest
from your.custom.app import main

class CustomAppTest(unittest.TestCase):
    def test_main(self) -> None:
        main(["--src", "src", "--dst", "dst"])
        self.assertTrue(...)

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得適用於初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得問題解答

檢視資源