Kategoria: Runtime: Program Input Buffer Mismatch
Ten błąd występuje, gdy środowisko wykonawcze XLA wykryje niezgodność między rozmiarem bufora pamięci oczekiwanym przez skompilowany program a rozmiarem bufora, który jest faktycznie udostępniany w czasie wykonywania.
Przykładowy komunikat o błędzie:
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).
Backendy XLA: TPU
Przegląd
Komunikat o błędzie zawiera oczekiwany i rzeczywisty rozmiar, a także kształty i układy tensorów. Pamiętaj, że te błędy mogą wystąpić nawet wtedy, gdy 2 tensory mają ten sam kształt, ale ich rozmiar w pamięci może się różnić, jeśli ich fizyczny układ (sposób kafelkowania i rozmieszczenia danych na sprzęcie) jest inny.
Przyczyny tych błędów to głównie:
- Niezgodność konfiguracji punktu kontrolnego i XLA – model jest trenowany i zapisywany jest punkt kontrolny. Fizyczny układ wag w tym punkcie kontrolnym jest określany przez dokładną wersję i konfigurację XLA (np. flagi XLA) w danym momencie. Później ten punkt kontrolny jest wczytywany w innym środowisku, w którym konfiguracja uległa zmianie. Nowe oznaczenie, inna wartość domyślna lub zmiana w kodzie modelu/XLA mogą spowodować, że środowisko wykonawcze będzie oczekiwać innego fizycznego układu wag. Gdy stary bufor z punktu kontrolnego zostanie przekazany do nowego skompilowanego programu XLA, środowisko wykonawcze zgłosi błąd.
- Układy dostosowane do sprzętu i topologii – kompilator XLA może wybierać różne układy fizyczne tensorów, aby optymalizować wydajność na różnych urządzeniach. Układ optymalny dla TPU w wersji 4 może się różnić od układu optymalnego dla TPU w wersji 5, a nawet dla różnych wycinków poda tego samego układu (np. 4x4x4 vs 4x8). Błąd występuje, gdy model jest kompilowany z założeniem dotyczącym układu jednej topologii, ale w czasie działania jest planowany w innej topologii lub w logice układu kompilatora występuje błąd dotyczący konkretnego sprzętu.
Debugowanie
- Zapewnij spójność konfiguracji między eksportem modelu a ponownymi uruchomieniami z punktów kontrolnych:
- Unikaj używania starych punktów kontrolnych z nowym kodem, chyba że masz pewność, że nie wprowadzono żadnych zmian wpływających na układ.
- Ponownie wyeksportuj zapisany model: jeśli podejrzewasz, że występuje niezgodność punktu kontrolnego lub konfiguracji, najbardziej niezawodnym rozwiązaniem jest ponowne wyeksportowanie zapisanego modelu przy użyciu dokładnie tego samego (i aktualnego) kodu i konfiguracji, których używasz do wnioskowania lub dostrajania.
- Sprawdź, czy między tymi 2 uruchomieniami nie doszło do zmian w konfiguracji (np. flag XLA).
- Układy dostosowane do sprzętu lub topologii:
- Jeśli zmieniasz sprzęt lub topologie, sprawdź, czy nie ma niezgodności wersji sprzętu i topologii.