Kategori: Derleme Zamanı: Donanımda Desteklenmeyen RHS Veri Türü
Bu hata, matris çarpımında (ör. jax.lax.dot_general, jax.lax.conv, jax.numpy.matmul veya @ operatörü) sağ taraftaki işlenen için kullanılan veri türü, kullanılan belirli TPU nesli tarafından doğal olarak desteklenmediğinde oluşur.
Örnek hata mesajları:
INTERNAL: Mosaic failed to compile TPU kernel: Unsupported matmul RHS type on target: 'vector<256x256xi8>'
...
The MLIR operation involved:
%13440 = "tpu.matmul"(%13435, %13437, %13439) <dimension_numbers = #tpu.dot_dimension_numbers<...>
XLA arka uçları: TPU
Genel Bakış
TPU'nun Matris Çarpma Birimi (MXU), tüm donanım nesillerinde Float32 işlemlerini doğal olarak destekler.
Ancak BFloat16 ve diğer nicelenmiş veri türleri (ör. Int4, Int8 veya Float8) için yerel destek, donanım nesline göre değişir. Bu hata, çekirdeğiniz belirli TPU neslinizin yürütmek için fiziksel devreye sahip olmadığı bir veri türünü kullanarak matris çarpımını MXU'ya eşlemeye çalıştığında tetiklenir.
Bu hata genellikle derleyicinin Canonicalization geçişinin (desteklenmeyen türleri otomatik olarak desteklenen türlere dönüştürmeye çalışır, örneğin yazılım emülasyonu aracılığıyla) geçerli bir dönüştürme kuralı bulamadığını veya uyumluluk modu devre dışı bırakıldığı için bunu yapmasının engellendiğini gösterir.
Hata ayıklama
Bu hatayı çözmek için veri türlerinizi donanımınızın özellikleriyle uyumlu hale getirmeniz gerekir. Şu seçeneklerden birini tercih edebilirsiniz:
1. Yerel türlere yayınlama
En güvenilir düzeltme, matmul işleminden önce çekirdeğinizdeki işlenenlerinizi donanım tarafından desteklenen bir veri türüne (TPU v4+ üzerinde Float32 veya BFloat16 gibi) manuel olarak yayınlamaktır.
- Neden:
Float32, tüm TPU nesillerinde MXU tarafından yerel olarak desteklenen evrensel veri türüdür. - Değişim: Bu işlem, yayın yapılması için gereken döngüler olan VPU (Vektör İşleme Birimi) maliyetiyle birlikte gelir ancak çekirdeğinizin mevcut donanımda çalışacağını garanti eder.
2. Uyumluluk Modu'nu kontrol etme
Derleyici genellikle varsayılan olarak etkinleştirilen Uyumluluk Modu'nda bu tür tür uyuşmazlığı sorunlarını otomatik olarak işleyebilir. --xla_mosaic_compat_mode değerinin yanlış olarak ayarlanmadığından emin olmak için XLA yapılandırmalarını tekrar kontrol edin.
Bu, donanımınızın yerel olarak desteklemediği işlemler için yazılım emülasyon dizileri ekleyen bir "polyfill" görevi görür.
Uyumluluk Modu'nun etkinleştirdiği özellikler:
- Karma duyarlıklı MatMul'lar: Yayın işlemleri otomatik olarak eklenerek (ör. matmul'dan önce tamsayıları
Float32'ye genişletme) tamsayı işlenenlerinin Float toplayıcılarla karıştırılmasına olanak tanır. - Düşük hassasiyetli emülasyon: Belirli donanım nesillerinde, yürütülmeden önce
4-bitkayan nokta (4E2M1FN) veya8-bitkayan nokta (8E4M3FN) gibi desteklenmeyen türleriBFloat16veyaFloat32gibi desteklenen türlere genişleterek emüle eder.
Bu modda, emülasyonun MXU'nun veriler üzerinde çalışabilmesi için veri biçimlerini dönüştürmek üzere ek talimatlar gerektirmesi nedeniyle en yüksek performans yerine uyumluluğa öncelik verildiğini unutmayın.
3. Donanımı yükseltme veya destek isteğinde bulunma
Algoritmanız, Int4 veya Float8 gibi türler için yayınlama ya da emülasyon ek yükü olmadan kesinlikle yerel performans gerektiriyorsa yerel destek sunan daha yeni bir TPU neslinde çalıştırmanız gerekir.
Özellik isteği: Donanımınızın bu işlemi desteklediğini düşünüyorsanız veya derleyicide Uyumluluk Modu'nda bile geçerli bir emülasyon yolu eksikse lütfen özellik isteği gönderin. Genellikle işlemlerin ileriye dönük uyumlu olduğunu garanti ederiz. Bu nedenle, çekirdeğiniz bir TPU neslinde çalışıyorsa gelecekteki tüm nesillerde çalışması gerekir ancak eski nesiller için emülasyon garantisi verilmez (bazı nesillerde yayınlar çok pahalı olabilir).