Joshua Alexander Heriyanto, Sarah Hasna Azzara

Pada bulan April tahun ini, HUAWEI CLOUD merilis seri pre-training large model Pangu, diantaranya: Natural Language Processing (NLP) large model, Computer Vision (CV) large model, multimodal large model, dan scientific computing large model.

Namun, “Pangu” sebenarnya merupakan sebuah eksplorasi: menggunakan framework open source MindSpore, hardware Ascend, dan software platform untuk mendapatkan super-large pre-training model.

Jadi bagaimana model Pangu dengan skala besar dilatih?

Mari kita lihat teknologi kunci di balik Pangu.

Sebuah model dengan ratusan miliar parameter dan TB-level memory

Ambil Pangu 200 miliar sebagai contoh. Jika standar format data FP32 dipakai untuk weights selama training, weights akan memakan 750 GB, dan memori overhead meningkat berkali-kali lipat selama pelatihan. Parameter 750 GB tidak disimpan pada hard disk atau dimuat ke memori, tetapi perlu dipindahkan ke high bandwidth memory (HBM) dari server Ascend Atlas untuk menggunakan training model dari training server Ascend Atlas.

Large models berarti data besar, dan harus merupakan data yang berkualitas tinggi. Untuk memenuhi persyaratan ini, tim R&D mengambil 80 TB teks dari Internet dan kemudian melakukan data cleansing hingga mencapai 1 TB Chinese dataset.

Model dan data tersebut tidak dapat lagi dimuat dan dilatih oleh server biasa.

Bisa dikatakan bahwa Pangu adalah Chinese pre-training NLP large model pertama dalam industri ini, dengan jumlah maksimum parameter mencapai 200 miliar.

Hyperscale Automatic Parallelism: Kitab para Algorithm Engineers

Pertama, pertimbangkan pertanyaan berikut, bagaimana cara melakukan training pada large model tersebut?

Jika diberi kekuatan komputasi yang cukup, bagaimana cara melakukannya? Data parallelism adalah metode pelatihan terdistribusi yang paling umum, dan ini saja sudah pasti tidak terjadi, karena tidak ada perangkat keras komputasi yang dapat menampung 800 GB parameter. “Bagaimana dengan model parallelism?” muncul pertanyaan baru. Bagaimana kita harus membagi “Pangu” yang sangat besar itu? Bagaimana alur gradient dan data antar hardware-nya (seperti NPU dan GPU)?

Sudah jelas, melatih sebuah large model jauh lebih rumit dari yang kita duga, membutuhkan banyak operasi, dan harus memastikan bahwa operasi ini tidak atau jarang mempengaruhi hasil akhir model.

Apakah Pangu benar-benar harus mengandalkan optimasi paralel manual?

Jika logika pelatihan terdistribusi ditulis secara manual, maka perlu pertimbangan yang komprehensif akan banyak hal kompleks seperti jumlah perhitungan dan tipenya, cluster bandwidth, struktur topologi, kuantitas sampel, dan sebagainya. Kemudian,  perlu juga merancang strategi segmentasi paralel dengan kinerja yang sangat baik dan menulis banyak kode segmentasi paralel dan komunikasi antara node. Jika system environment berubah, hampir mustahil untuk merancang ulang dan memodifikasi algoritma.

Jika menggunakan framework TensorFlow atau lainnya yang serupa, MirroredStrategy tidak akan berguna sama sekali, dan sepertinya menyusun strategi parallel sendiri adalah pekerjaan sangat esensial. Namun pada kenyataannya, training Pangu dilakukan dengan mode kolaborasi software-hardware yang terdiri dari: MindSpore computing framework, CANN heterogeneous computing architecture, dan Ascend basic hardware dan software platform. MindSpore menyediakan kapabilitas paralel otomatis yang sangat kritis.

Konvergensi dari lima dimensi dan paralelisme otomatis yang kuat

MindSpore secara otomatis melakukan paralel lima dimensi berikut: data parallelism, operator-level model parallelism, pipeline model parallelism, optimizer model parallelism, dan komputasi ulang. Dalam fase kompilasi grafik, paralelisme lima dimensi terintegrasi. Gabungan paralelisme lima dimensi ini untuk membentuk strategi paralel dari Pangu.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/1936369i3lkvccglkgk3ae.png

a. Data parallelism

Data parallelism adalah paralelisme yang paling dasar dan banyak digunakan. Data parallelism membagi training data menjadi mini-batch dan setiap perangkat mendapatkan satu. Setiap perangkat memiliki model lengkap yang sama. Selama training, setelah perhitungan gradien untuk setiap perangkat, sinkronisasi gradien antar perangkat diperlukan sebelum parameter model dapat diperbarui.

b. Operator-level model parallelism

Operator-level model parallelism membagi tensor pada setiap operator dalam model. MindSpore mengkonfigurasi setiap operator secara terpisah dan setiap operator dapat memiliki pengaturan segmentasi yang berbeda.

Sebagai contoh operator perkalian matriks MatMul(x, w), dimana x adalah training data, w adalah parameter model, keduanya merupakan matriks 2 dimensi. Kemudian kebijakan parallel yang diterapkan misal (4,1),(1,1) yang berarti x dipotong menjadi empat bagian per baris dan w tidak dipotong. Jika total ada empat perangkat, masing-masing perangkat memiliki satu bagian x dan w utuh.

c. Parallel pipeline model

Parallel pipeline membagi model dalam beberapa tahap dan membaginya ke setiap perangkat. Untuk meningkatkan pemanfaatan sumber daya perangkat, mini-batch akan dibagi lagi menjadi beberapa micro-batch. Hal ini bertujuan agar perangkat berbeda dapat memproses data dari micro-batch berbeda pada saat yang sama.

Parallel pipeline model (Gpipe) mengharuskan forward calculation pada semua perangkat selesai terlebih dahulu sebelum melakukan backward calculation. Backward calculation sangat bergantung pada output dari forward calculation. Akibatnya, kebutuhan memori juga sangat tinggi untuk menampung semua output forward calculation. Dengan kata lain aktivasi memori proporsional dengan jumlah micro-batch. Ini membuat jumlah micro-batch menjadi terbatas. Pada parallel pipeline milik MindSpore, proses backward calculation dimajukan. Setelah kalkulasi pada setiap micro-batch selesai, backward calculation akan segera dilakukan tanpa menunggu semua micro-batches selesai. Dengan begitu dapat mengurangi waktu aktivasi memori secara efisien dan meningkatkan efisiensi parallel secara keseluruhan.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/1937174u3n7rotv6h774ft.png

d. Optimizer model parallelism

Optimizer model parallelism memisahkan parameter dan gradien dalam optimizer ke beberapa perangkat secara paralel. Sebagai contoh, pada optimizer Adam ada beberapa “momentum” dengan weights yang sama yang perlu dikalkulasi. Dalam kasus data parallelism, setiap perangkat akan memiliki “momentum” lengkap dan akan mengulangi komputasi yang sama pada setiap perangkat. Ini sangat tidak efisien baik dalam segi memori ataupun komputasi. Dengan memperkenalkan optimizer parallelism, setiap perangkat hanya akan menyimpan sebagian dari weight dan momentum sehingga mengurangi memori static yang dibutuhkan pada setiap perangkat dan meningkatkan efisiensi komputasi.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/193750h848o4nfrlwlsihb.png

e. Komputasi ulang

Komputasi ulang yaitu menghilangkan beberapa output dari forward calculation dan melakukan penghitungan ulang jika diperlukan dalam fase backward calculation. Cara ini dapat menyelesaikan masalah kebutuhan memori puncak pada saat training. Seperti yang ditunjukkan dalam gambar di bawah ini, puncak kebutuhan memori pertama diatasi dengan komputasi ulang sedangkan untuk puncak kedua diatasi dengan optimizer parallelism yang telah dijelaskan sebelumnya.

Dengan lima dimensi parallel ini, bagaimana menggabungkannya dan bagaimana cara mendistribusikan modelnya pada setiap perangkat masih menjadi masalah yang sulit. MindSpore secara otomatis melakukan paralelisasi lima dimensi ini untuk mengimplementasi training large models terdistribusi dengan sangat efisien.

Gambar (b) di bawah ini menunjukkan topologi hardware berbentuk pohon. Bandwidth akan menurun seiring bertambahnya cabang dan akan timbul permasalah traffic. Oleh karena itu, MindSpore akan memaksimalkan rasio komunikasi dan komputasi dengan memberikan jalur besar (operator-level parallel) untuk komunikasi antar perangkat-perangkat dalam 1 server, memberikan jalur komunikasi kecil (parallel pipeline) untuk komunikasi antar server di 1 rak yang sama, serta sebagian kecil (optimizer parallel) dialokasikan pada jalur komunikasi antar rak karena komunikasi dapat berjalan bersamaan dengan komputasi.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/1939542kudifqlpl8cwtcs.png

Dalam model Pangu 200 miliar, MindSpore membagi 64 lapisan menjadi 16 tahap, masing-masing berisi empat lapisan. Dalam setiap lapisan, tensor dibagi berdasarkan tingkat operator secara paralel.

Dalam gambar berikut parameter Q, K, dan V dibagi menjadi 8 bagian (kolom), input tensor (baris) dibagi menjadi 16 bagian, dan output tensor dibagi menjadi 128 bagian (8 x 16). Konfigurasi komputasi ulang diatur di setiap lapis sehingga jumlah pengulangan kalkulasi yang dilakukan tidak melebihi jumlah layer kalkulasi. MindSpore menggunakan total 2.048 prosesor Ascend untuk melatih Pangu.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/194030zli6kbrj6c8ooyec.png

MindSpore menangani penerapan paralel yang kompleks dengan baik sehingga membuatnya sesederhana membuat model untuk 1 mesin saja. Dengan skrip untuk single-node, pengguna dapat menerapkan paralelisme hybrid multi-dimensi hanya dengan menambahkan beberapa kode saja. Gambar berikut ini menampilkan versi yang disederhanakan dari Pangu, dimana font merah tebal mengindikasikan kebijakan paralel dalam MindSpore. Bila karakter merah tebal dihapus, skrip ini untuk single-node.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/194105eyj2aol8nhilnup9.png

Optimisasi gabungan grafik dan komputasi lintas layer memaksimalkan kinerja hardware

Selain otomatisasi skala besar lintas nodes, MindSpore memanfaatkan kemampuan kalkulasi Ascend lebih jauh lagi melalui optimisasi gabungan lintas layer dan operator dalam satu node.
Dalam jaringan CNN tradisional, operator yang berbeda memiliki kompleksitas komputasional dan kompleksitas komputasional yang berbeda, contohnya pada inLayerNorm yang terdiri dari 11 operator dasar sedangkan Add hanya memiliki satu operator dasar. Definisi operator dari manual pengguna biasanya tidak dapat sepenuhnya memanfaatkan kemampuan komputasi dari hardware. Karena perhitungannya terlalu besar dan rumit, sulit untuk menghasilkan operator berkinerja tinggi dengan segmentasi yang baik sehingga hanya dapat memanfaatkan sebagian kecil dari kemampuan hardware yang sesungguhnya. Namun, perhitungan sangat kecil juga dapat menimbulkan data transfer overhead dimana akan berakibat adanya delay sehingga pada akhirnya juga menurunkan tingkat pemanfaatan perangkat.

Untuk meningkatkan pemanfaatan hardware, MindSpore menggunakan teknologi optimisasi gabungan grafik-dan-komputasi yang telah dioptimalkan bersama oleh layer dan operator layer, merangkai kembali dan menggabungkan operator dari pengguna, dan kemudian mengubah operator menjadi operator berkinerja tinggi dengan sudut pandang eksekusi pada hardware. Dengan begitu, pemanfaatan sumber daya hardware dan kinerja eksekusi dari seluruh jaringan dapat ditingkatkan. Gambar berikut menunjukkan proses optimisasi yang dilakukan.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/194140uaoqn8zf1n08aofm.png

Sebagai contoh pada LayerNorm, 11 operator kecil dibagi dan dikombinasikan lagi untuk membentuk satu operator tunggal dan dua operator gabungan. Operator-operator hasil rekombinasi ini dapat menghasilkan operator dengan kinerja yang lebih tinggi yang dapat mengurangi waktu yang diperlukan secara signifikan.

https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/27/194221iejsps6bxwsuvlye.png

Di dalam Pangu large model, penggabungan grafik-kalkulasi dapat mengurangi waktu latihan secara keseluruhan hingga 20%. Sebagai tambahan, untuk tugas-tugas lain seperti NLP, CV, dan sebagainya. Gabungan grafik-kalkulasi ini sangat baik dalam optimisasi kinerja.


Ringkasan: Representasi sempurna dari training megamodel
Bahkan jika kita diberi kekuatan komputasi yang cukup, pelatihan dari large model itu sangat kompleks dan jauh lebih sulit dari yang kita duga. Bagi kami para algorithm engineer, ratusan juta parameter untuk sebuah tugas cukup besar, tetapi tidak sulit untuk dilatih karena setiap deep learning framework secara langsung dapat memanggil data parallel interface.
Namun, jika model ini terus tumbuh hingga 10 milyar, ratusan milyar, atau bahkan triliunan, kompleksitas dari strategi paralelisme dan optimisasi meningkat tajam, dan para algorithm engineer hanya dapat menulis dan mengoptimalkan kode sedikit demi sedikit. MindSpore memisahkan logika komputasi dari logika paralel melalui paralelisasi otomatis, dan mengimplementasi paralelisme terdistribusi secara otomatis dengan kode serial tunggal, sehingga membebaskan para peneliti untuk fokus hanya pada modelnya saja.

Untuk mendapatkan pengetahuan lebih dari pre-training, model seperti GPT-3 dan Pangu akan menjadi lebih besar lagi, bagaimanapun, kita belum melihat batas efek pre-training dari large models. Model-model ini akan memiliki persyaratan infrastruktur yang lebih besar dan strategi paralelisme, dan optimisasi yang lebih kompleks. Large-scale pre-training hanya bisa lebih baik jika infrastruktur juga tersedia. Dengan begitu, hal ini dapat memainkan peran yang lebih besar dalam skenario seperti knowledge Q&A, knowledge retrieval, knowledge reasoning, dan pemahaman bacaan kemudian dapat mencapai nilai-nilai bisnis seperti pelayanan pelanggan yang cerdas, pemasaran, dan penduplikatan.

Cluster komputasi besar serta optimisasi kolaborasi software-hardware kolaborasi secara sempurna ditunjukkan dalam pelatihan Pangu. Tentu saja, seperti yang disebutkan di atas, pangu hanyalah eksplorasi pelatihan distribusi dan pre-training model skala besar dan masih membutuhkan lebih banyak peneliti untuk mengembangkannya.

Link referensi:

https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha-Evolution

https://pangu-alpha.openi.org.cn/