快捷方式

常見 PyTorch 錯誤及解決方案

我的訓練太慢 [新手 / 中級]

  • 在某些情況下,強化學習以 CPU 密集型著稱。即使在並行執行少量環境時,透過為群集請求比正在處理的環境數量更多的核心(例如,兩倍),也可以看到顯著的速度提升。對於渲染的環境(即使在 GPU 上渲染)尤其如此。

  • 訓練速度取決於多種因素,沒有一種萬能的解決方案。常見的瓶頸是

    • 資料收集:模擬器的速度以及隨後的資料轉換可能會影響效能。加速環境互動通常透過向量化(如果模擬器支援,例如 Brax 和其他基於 Jax 的模擬器)或並行化(在 gym 和其他庫中被不恰當地稱為向量化環境)來實現。在 TorchRL 中,轉換通常可以在裝置上執行。

    • 回放緩衝區儲存和取樣:將項儲存在回放緩衝區中可能需要時間,如果底層操作需要繁重的記憶體操作或繁瑣的索引(例如,使用優先回放緩衝區)。如果資料不是連續儲存的,或者執行了代價高昂的堆疊或連線操作,取樣也可能花費相當多的時間。TorchRL 在這些情況下提供了高效的連續儲存解決方案以及高效的寫入和取樣解決方案。

    • 優勢計算:優勢函式的計算也可能構成計算瓶頸,因為它們通常使用純粹的 for 迴圈進行編碼。如果效能分析表明此操作花費了大量時間,請考慮使用我們完全向量化的解決方案。

    • 損失計算:損失計算和最佳化步驟經常佔compute time 的重要份額。一些技術可以加速。例如,如果使用了多個目標網路,使用向量化對映和函數語言程式設計(透過 functorch)而不是遍歷模型配置可以提供顯著的加速。

常見錯誤

  • 對於與 mujoco(包括 DeepMind Control suite 和其他庫)相關的錯誤,請參閱 MUJOCO_INSTALLATION 檔案。

  • ValueError: bad value(s) in fds_to_keep:這可能有多種原因。在 torchrl 中常見的一種原因是,您試圖在程序之間傳送一個張量的檢視。例如,當在程序之間傳送張量 b = tensor.expand(new_shape) 時,將丟失對原始內容的引用(因為 expand 操作會保留對原始張量的引用)。要除錯此問題,請查詢此類操作(viewpermuteexpand 等)並在呼叫函式後呼叫 clone()contiguous()

文件

訪問全面的 PyTorch 開發者文件

檢視文件

教程

為初學者和高階開發者提供深入的教程

檢視教程

資源

查詢開發資源並讓您的問題得到解答

檢視資源