Hata kodu: E2001

Kategori: Derleme Zamanı: Donanımda Desteklenmeyen RHS Veri Türü

Bu hata, matris çarpımında sağ taraftaki işlenen için kullanılan veri türü (ör. jax.lax.dot_general, jax.lax.conv, jax.numpy.matmul veya @ operatörü) kullanılan TPU nesli tarafından doğal olarak desteklenmiyor.

Ö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) 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'te 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ınlama işlemini gerçekleştirmek 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ı MatMuls: 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-bit kayan nokta (4E2M1FN) veya 8-bit kayan nokta (8E4M3FN) gibi desteklenmeyen türleri BFloat16 veya Float32 gibi desteklenen türlere genişleterek emüle eder.

Bu modda, emülasyon için MXU'nun veriler üzerinde işlem yapabilmesinden önce veri biçimlerinin dönüştürülmesi için ek talimatlar gerektiğinden, en yüksek performans yerine uyumluluğa öncelik verildiğini unutmayın.

3. Donanımı Yükseltme veya Destek İsteğ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 olacağını garanti ederiz. Bu nedenle, çekirdeğiniz bir TPU neslinde çalışıyorsa gelecekteki tüm nesillerde de çalışır. Ancak eski nesiller için emülasyon olacağı garanti edilmez (bazı nesillerde yayınlar çok pahalı olabilir).