類別:執行階段:程式輸入緩衝區不符
如果 XLA 執行階段偵測到編譯程式預期的記憶體緩衝區大小,與執行階段實際提供的緩衝區大小不符,就會發生這個錯誤。
錯誤訊息示例:
XlaRuntimeError: INVALID_ARGUMENT: Executable(jit_embedding_pipeline_step_fn) expected parameter 2482 of size 5242880 (bf16[16,1280,40]{2,1,0:T(8,128)(2,1)}) but got buffer with incompatible size 1638400 (bf16[16,1280,40]{1,2,0:T(8,128)(2,1)}): while running replica 0 and partition 0 of a replicated computation (other replicas may have failed as well).
XLA 後端:TPU
總覽
錯誤訊息會指出預期和實際大小,以及張量形狀和版面配置。請注意,即使兩個張量的形狀相同,但如果實體版面配置 (資料在硬體上的平鋪和排列方式) 不同,記憶體中的大小也可能不同,因此仍可能發生這些錯誤。
這類錯誤的主要原因如下:
- 查核點和 XLA 設定不符 - 模型經過訓練並儲存查核點。該檢查點中權重的實體版面配置,取決於當時的確切 XLA 版本和設定 (例如 XLA 旗標)。稍後,這個檢查點會在設定已變更的不同環境中載入。新的標記、不同的預設值,或是模型/XLA 程式碼的變更,都可能導致執行階段預期權重的實體版面配置不同。如果將檢查點的舊緩衝區傳遞至新編譯的 XLA 程式,執行階段會擲回錯誤。
- 硬體/拓撲專屬配置 - XLA 編譯器可自由選擇張量的不同實體配置,以最佳化不同硬體的效能。最適合 v4 TPU 的版面配置可能與 v5 TPU 不同,甚至與同一晶片的不同 Pod 配量不同 (例如 4x4x4 與 4x8)。如果編譯模型時,對某個拓撲的版面配置做出假設,但模型在執行階段排定在不同拓撲上,或是編譯器針對特定硬體的版面配置邏輯有錯誤,就會發生這個錯誤。
偵錯
- 確保模型匯出作業與從檢查點重新執行的作業,設定一致:
- 除非確定沒有任何影響版面的變更,否則請避免在新程式碼中使用舊檢查點。
- 重新匯出已儲存的模型:如果懷疑查核點/設定不符,最可靠的解決方法是使用與推論或微調完全相同 (且目前) 的程式碼和設定,重新匯出已儲存的模型。
- 檢查兩次執行之間是否有設定變更 (例如 XLA 旗標)。
- 硬體/拓撲專屬版面配置:
- 如果切換硬體或拓撲,請檢查硬體版本和拓撲是否不符。