Rumah  >  Artikel  >  Peranti teknologi  >  Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

WBOY
WBOYke hadapan
2023-04-11 12:16:031099semak imbas

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Malah penulis menyatakan bahawa jika anda mempunyai 8 GPU tersedia, keseluruhan proses latihan sahaja mengambil masa 2 minit untuk mencapai pecutan prestasi 11.5x.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Mari kita lihat bagaimana dia mencapainya.

Jadikan latihan model PyTorch dengan lebih pantas

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Di bawah pengoptimuman ini, menggunakan kelas Jurulatih, automasi boleh dicapai dengan satu baris kod Latihan ketepatan campuran:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.


Kemudian ubah suai kod dengan menambah baris ini:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Jika anda ingin mencapai keselarian data teragih, anda boleh mencapainya melalui DistributedDataParallel, hanya ubah suainya Jurulatih boleh digunakan dengan hanya satu baris kod.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Selepas langkah pengoptimuman ini, pada 4 GPU A100, kod ini berjalan selama 3.52 minit dan mencapai 93.1 % ketepatan ujian .

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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 ​​​​:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

Kemudian anda hanya perlu menukar satu baris kod untuk membolehkan perpustakaan:

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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.

Dengan menukar beberapa baris kod, kelajuan alkimia PyTorch meningkat dan masa pengoptimuman model dikurangkan dengan banyak.

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam