Kami menggunakan OpenAI Triton untuk membuat beberapa kernel GPU. Triton memungkinkan pembuatan kernel GPU cepat untuk fusi tertentu, tetapi kita harus menyesuaikan beberapa parameter untuk setiap fusi tersebut.
Proses ini dapat memerlukan waktu yang lama jika ada banyak fusi, jadi kami menyediakan cara untuk memuat hasil penyesuaian otomatis tersebut, sambil tetap menjalankan langkah kompilasi lainnya seperti biasa. Cache autotuning masih berguna jika kita membuat beberapa perubahan: fusi yang ada di cache akan menggunakan cache tersebut, dan fusi lainnya akan otomatis disesuaikan secara normal.
Direkomendasikan: Direktori cache
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
Menggunakan dan mengelola cache autotune perfusi di direktori yang ditentukan. Akan ada satu file per fusi yang berbeda.
Keuntungan utama pendekatan ini adalah Anda dapat menggunakan direktori cache yang sama untuk beberapa operasi XLA (dari model yang berbeda) dan cache Anda akan bertambah dengan setiap fusi baru yang ditemukan - mempercepat operasi berikutnya. Ada juga dukungan dasar untuk menjalankan beberapa instance XLA dengan direktori cache yang sama secara serentak.
XLA akan membaca hasil yang ada saat diperlukan dan menulis hasil baru setelah ditentukan.
- Direktori harus ada sebelum menjalankan XLA dan harus dapat ditulis.
- Pembatalan cache harus ditangani oleh pengguna:
- Gunakan direktori kosong jika Anda ingin memulai dengan cache kosong.
- Pemeriksaan versi XLA harus dilakukan oleh pengguna:
- Jika Anda ingin menggunakan cache terpisah untuk versi XLA yang berbeda, gunakan direktori yang berbeda.
Cache dinonaktifkan secara default (jika Anda tidak memberikan parameter).
Batasan: Metode ini tidak dijamin akan berfungsi baik jika dikombinasikan dengan metode caching lain yang dijelaskan di bawah.
Alternatif: Memuat atau membuang semua hasil dari HLO tertentu ke satu file
Hasil autotuning dapat dihapus/dimuat menggunakan parameter berikut:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
Jika kita menentukan file .txt atau .textproto, cache akan di-dump dalam format textproto, jika tidak, dalam format protobuf biner.
Dalam pengujian
Penyesuaian otomatis yang dipertahankan juga dapat digunakan dalam pengujian. Sebaiknya gunakan jika pengujian sangat besar, terutama jika performa lingkungan pengujian terbatas.
Ini hanya akan berfungsi dengan baik jika cache autotune berisi hasil yang dihasilkan pada jenis GPU yang sama tempat pengujian dijalankan.
Membuat pengujian menggunakan autotuning yang dipertahankan
Untuk saat ini, mari kita asumsikan bahwa pengujian yang dimaksud selalu menggunakan jenis GPU yang sama.
Kita harus mengekspor hasil penyesuaian otomatis dari pengujian, misalnya dengan menentukan parameter ini ke perintah pengujian:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabled
Sharding harus dinonaktifkan untuk mendapatkan satu cache autotune dengan benar untuk semua pengujian.
Kemudian kita harus mengupload cache tersebut ke repositori kode.
Kemudian, kita harus menambahkan cache ke dependensi data target pengujian, dan memuat cache menggunakan variabel lingkungan.
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},
(Anda dapat menggunakan sharding dalam pengujian yang memuat hasil autotune.)
Lihat juga contoh pengujian di xla/service/gpu/tests/BUILD:
- load_autotune_results_using_execpath_test
- load_autotune_results_from_test_workspace_test
- dump_autotune_results_to_test_outputs_test
Cache sudah tidak berlaku
Jika banyak perubahan dilakukan pada model, cache mungkin tidak lagi berisi semua penggabungan, sehingga pengujian akan menjadi lebih lambat. Dalam hal ini, kita harus membuat ulang cache penyesuaian otomatis.
Jika kita mulai menggunakan jenis GPU baru untuk menjalankan pengujian, hal yang sama akan berlaku.
Cache juga dapat menjadi usang jika compiler XLA berkembang dan menghasilkan fusi yang berbeda.