Bagaimana untuk meningkatkan kelajuan PyTorch "Alchemy"?
Baru-baru ini, pembelajaran mesin terkenal dan penyelidik AI Sebastian Raschka menunjukkan kepada kami helahnya. Menurutnya, kaedahnya mengurangkan masa pengoptimuman BERT daripada 22.63 minit kepada 3.15 minit dengan menukar hanya beberapa baris kod tanpa menjejaskan ketepatan model, dan kelajuan latihan ditingkatkan sebanyak 7 kali ganda penuh.
Malah penulis menyatakan bahawa jika anda mempunyai 8 GPU tersedia, keseluruhan proses latihan sahaja mengambil masa 2 minit untuk mencapai pecutan prestasi 11.5x.
Mari kita lihat bagaimana dia mencapainya.
Pertama sekali, model tersebut penulis menggunakan model DistilBERT untuk penyelidikan, iaitu versi BERT yang diperkemas dan 40 kali ganda lebih kecil daripada BERT %, tetapi hampir tiada kehilangan prestasi. Yang kedua ialah set data Set data latihan ialah IMDB Large Movie Review, set data semakan filem yang besar, yang mengandungi sejumlah 50,000 ulasan filem. Penulis akan menggunakan kaedah c dalam rajah di bawah untuk meramalkan sentimen ulasan filem dalam set data.
Setelah tugas asas dijelaskan dengan jelas, berikut ialah proses latihan PyTorch. Untuk membolehkan semua orang memahami tugas ini dengan lebih baik, penulis juga memperkenalkan latihan memanaskan badan, iaitu cara melatih model DistilBERT pada set data semakan filem IMDB. Jika anda ingin menjalankan kod itu sendiri, anda boleh menyediakan persekitaran maya menggunakan perpustakaan Python yang berkaitan, seperti berikut:
Versi perisian yang berkaitan adalah seperti berikut:
Kini kami meninggalkan pengenalan pemuatan data yang membosankan, anda hanya perlu faham bahawa artikel ini membahagikan set data kepada 35,000 contoh latihan, 5000 contoh pengesahan dan 10000 contoh ujian. Kod yang diperlukan adalah seperti berikut:
Tangkapan skrin bahagian kod
Alamat kod penuh:
https://github.com/rasbt/faster -pytorch-blog /blob/main/1_pytorch-distilbert.py
Kemudian jalankan kod pada GPU A100 dan dapatkan hasil berikut:
Tangkapan skrin beberapa keputusan
Seperti yang ditunjukkan dalam kod di atas, model bermula dari pusingan 2 ke pusingan 3 Terdapat sedikit overfitting pada permulaan pusingan, dan ketepatan pengesahan menurun daripada 92.89% kepada 92.09%. Selepas memperhalusi model selama 22.63 minit, ketepatan ujian akhir ialah 91.43%.
Gunakan kelas Jurulatih
Langkah seterusnya ialah menambah baik kod di atas balut model PyTorch dalam LightningModule supaya anda boleh menggunakan kelas Jurulatih daripada Lightning. Beberapa tangkapan skrin kod adalah seperti berikut:
Alamat kod penuh: https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch- with-trainer.py
Kod di atas mencipta LightningModule, yang mentakrifkan cara melakukan latihan, pengesahan dan ujian. Berbanding dengan kod yang diberikan sebelum ini, perubahan utama adalah dalam Bahagian 5 (iaitu ### 5 Finetuning), yang memperhalusi model. Tidak seperti sebelum ini, bahagian penalaan halus membalut model PyTorch dalam kelas LightningModel dan menggunakan kelas Jurulatih agar sesuai dengan model.
Kod sebelumnya menunjukkan bahawa ketepatan pengesahan menurun daripada pusingan 2 kepada pusingan 3, tetapi kod yang dipertingkatkan menggunakan ModelCheckpoint untuk memuatkan model terbaik. Pada mesin yang sama, model itu mencapai ketepatan ujian 92% dalam masa 23.09 minit.
Perhatikan bahawa jika checkpointing dilumpuhkan dan PyTorch dibenarkan untuk dijalankan dalam mod bukan deterministik, larian ini akan berakhir dengan masa berjalan yang sama seperti PyTorch biasa (Masa ialah 22.63 minit dan bukannya 23.09 minit).
Latihan ketepatan campuran automatik
Selanjutnya, jika GPU menyokong latihan ketepatan campuran, anda boleh menghidupkan GPU untuk meningkatkan kecekapan pengkomputeran. Penulis menggunakan latihan ketepatan campuran automatik, bertukar antara titik terapung 32-bit dan 16-bit tanpa mengorbankan ketepatan.
Di bawah pengoptimuman ini, menggunakan kelas Jurulatih, automasi boleh dicapai dengan satu baris kod Latihan ketepatan campuran:
Operasi di atas boleh mengurangkan masa latihan daripada 23.09 minit kepada 8.75 minit, iaitu hampir 3 kali ganda lebih pantas. Ketepatan pada set ujian ialah 92.2%, malah bertambah baik sedikit daripada 92.0% sebelumnya.
Menggunakan Obor.Kompil imej statik
Paparan pengumuman PyTorch 2.0 terbaharu , pasukan PyTorch memperkenalkan fungsi toch.compile baharu. Fungsi ini boleh mempercepatkan pelaksanaan kod PyTorch dengan menjana graf statik yang dioptimumkan dan bukannya menggunakan graf dinamik untuk menjalankan kod PyTorch.
Memandangkan PyTorch 2.0 belum dikeluarkan secara rasmi, torchtriton mesti dipasang terlebih dahulu dan dikemas kini kepada Ciri ini hanya tersedia dalam versi terkini PyTorch.
Kemudian ubah suai kod dengan menambah baris ini:
Keselarian data teragih pada 4 GPU
Perkara di atas memperkenalkan latihan ketepatan campuran kod dipercepatkan pada satu GPU Seterusnya, kami memperkenalkan strategi latihan berbilang GPU. Rajah di bawah meringkaskan beberapa teknik latihan berbilang GPU yang berbeza.
Jika anda ingin mencapai keselarian data teragih, anda boleh mencapainya melalui DistributedDataParallel, hanya ubah suainya Jurulatih boleh digunakan dengan hanya satu baris kod.
Selepas langkah pengoptimuman ini, pada 4 GPU A100, kod ini berjalan selama 3.52 minit dan mencapai 93.1 % ketepatan ujian .
DeepSpeed
Akhir sekali, penulis meneroka hasil penggunaan perpustakaan pengoptimuman pembelajaran mendalam DeepSpeed dan strategi berbilang GPU dalam Trainer. Mula-mula anda mesti memasang perpustakaan DeepSpeed :
Kemudian anda hanya perlu menukar satu baris kod untuk membolehkan perpustakaan:
Selepas gelombang ini, ia mengambil masa 3.15 minit untuk mencapai ketepatan ujian 92.6%. Walau bagaimanapun, PyTorch juga mempunyai alternatif kepada DeepSpeed: fully-sharded DataParallel, called with strategy="fsdp", yang akhirnya mengambil masa 3.62 minit untuk disiapkan.
Di atas adalah kaedah penulis untuk meningkatkan kelajuan latihan model PyTorch boleh Follow blog asal dan cuba, saya percaya anda akan mendapat hasil yang anda inginkan.
Atas ialah kandungan terperinci Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!