GPU çekirdeklerinin bazılarını oluşturmak için OpenAI Triton kullanıyoruz. Triton, belirli birleştirme işlemleri için hızlı GPU çekirdekleri oluşturmanıza olanak tanır ancak bu tür her birleştirme işlemi için bazı parametreleri ayarlamamız gerekir.
Çok sayıda füzyon varsa bu işlem uzun sürebilir. Bu nedenle, diğer derleme adımlarını normal şekilde çalıştırmaya devam ederken bu otomatik ayar sonuçlarını yüklemek için bir yöntem sunarız. Birkaç değişiklik yaparsak otomatik ayarlama önbellekleri yine de faydalıdır: Önbellekte bulunan birleştirme işlemleri önbelleği kullanır, diğer birleştirme işlemleri ise normal şekilde otomatik olarak ayarlanır.
Önerilen: Önbellek dizini
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
Belirtilen dizinde birleştirme başına otomatik ayar önbelleği kullanın ve bu önbelleği yönetin. Her bir farklı birleştirme için bir dosya oluşturulur.
Bu yaklaşımın temel avantajı, farklı modellerde birden fazla XLA çalıştırması için aynı önbellek dizinini kullanabilmeniz ve önbelleğiniz, karşılaşılan her yeni füzyonla birlikte büyüyerek sonraki çalıştırmaların hızlanmasıdır. Aynı önbelleğe diziniyle birden fazla XLA örneğini aynı anda çalıştırmak için temel destek de vardır.
XLA, gerektiğinde mevcut sonuçları okur ve belirlendikten sonra yeni sonuçlar yazar.
- Dizin, XLA çalıştırılmadan önce mevcut olmalı ve yazılabilir olmalıdır.
- Önbelleğin geçersiz kılınması kullanıcı tarafından yapılmalıdır:
- Boş bir önbelleğe başlamak istiyorsanız lütfen boş bir dizin kullanın.
- XLA sürümü kontrolleri kullanıcı tarafından yapılmalıdır:
- XLA'nın farklı sürümleri için ayrı önbellekler kullanmak istiyorsanız lütfen farklı dizinler kullanın.
Önbellek varsayılan olarak kapalıdır (parametreyi sağlamadığınızda).
Sınırlama: Bunun, aşağıda açıklanan diğer önbelleğe alma yöntemiyle birlikte iyi çalışacağı garanti edilmez.
Alternatif: Belirli bir HLO'daki tüm sonuçları tek bir dosyaya yükleme veya döküm
Otomatik ayarlama sonuçları aşağıdaki parametreler kullanılarak dökülebilir/yüklenebilir:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
.txt veya .textproto dosyası belirtirsek önbellek, textproto biçiminde, aksi takdirde ikili protobuf biçiminde döküm halinde oluşturulur.
Testlerde
Kalıcı otomatik ayarlama da testlerde kullanılabilir. Testler çok büyükse, özellikle de test ortamının performansı sınırlıysa bu özelliği kullanmanız önerilir.
Yalnızca otomatik ayar önbelleği, testlerin çalıştırıldığı GPU türünde oluşturulan sonuçları içeriyorsa iyi çalışır.
Bir testin kalıcı otomatik ayarlama kullanmasını sağlama
Şimdilik söz konusu testin her zaman aynı GPU türünü kullandığını varsayalım.
Örneğin, test komutuna şu parametreleri belirterek testten otomatik ayar sonuçlarını dışa aktarmamız gerekir:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabled
Tüm testlerde tek bir otomatik ayar önbelleğinin doğru şekilde alınması için parçalama devre dışı bırakılmalıdır.
Ardından bu önbelleği kod depomuza yüklememiz gerekir.
Ardından, önbelleği test hedefimizin veri bağımlılıklarına eklememiz ve bir ortam değişkeni kullanarak yüklememiz gerekir.
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},
(Otomatik ayar sonuçlarını yükleyen testlerde bölümleme kullanılabilir.)
Lütfen xla/service/gpu/tests/BUILD içindeki örnek testlere de bakın:
- load_autotune_results_using_execpath_test
- load_autotune_results_from_test_workspace_test
- dump_autotune_results_to_test_outputs_test
Önbelleğin kullanımdan kaldırılması
Bir modelde çok sayıda değişiklik yapılırsa önbelleğin artık tüm birleştirme işlemlerini içermemesi ve testin yavaşlaması mümkündür. Bu durumda, otomatik ayarlama önbelleğini yeniden oluşturmamız gerekir.
Testleri çalıştırmak için yeni bir GPU türü kullanmaya başlarsak da aynı durum geçerli olur.
XLA derleyicisi gelişip farklı birleştirme işlemleri oluşturursa önbellek de geçersiz hale gelebilir.