Kompetisi superkomputer siswa diadakan setiap tahun di berbagai belahan dunia, dan ditujukan untuk menarik bakat muda ke bidang komputasi kinerja tinggi dalam industri dan sains. Tahun ini, tim kami mengambil bagian dalam kompetisi Asia, dan artikel ini akan membahas pengalaman dan kesan yang diperoleh di acara ini.

Tugas dan kemajuan tahap kualifikasi
Tahun ini, untuk pertama kalinya, tidak ada tugas yang perlu diselesaikan menggunakan peralatan yang disediakan oleh penyelenggara: semua tugas harus dijalankan pada perangkat keras mereka sendiri. Berkat ketekunan dan kegigihan para profesor, tak lama sebelum dimulainya tahap kualifikasi, tim kami memperoleh akses ke beberapa node dengan kartu video NVIDIA P100 dan P6000, yang banyak membantu kami dalam persiapan. Tugas tidak jauh berbeda dari tahun lalu . Mereka dijelaskan di bawah ini.
- Pasang konfigurasi cluster dan jelaskan mengapa komponen tertentu dipilih.
- Mengukur kinerja cluster dengan Lynpak dan HPCG. Perbedaan dari tahun lalu hanya pada kenyataan bahwa tahun lalu Linpak harus dioptimalkan untuk cluster yang disediakan oleh penyelenggara dengan prosesor Intel Xeon Phi, dan dalam hal ini - untuk setiap cluster yang tersedia.
- Optimize Relion (perangkat lunak untuk pengenalan gambar dari mikroskop cryoelectronic) untuk kartu video.
- Membangun jaringan saraf untuk menanggapi pencarian pengguna menggunakan kerangka kerja CNTK dan dataset MS MARCO .
Lynpack dan HPCG. Berkat munculnya node baru dengan kartu video dan Vadim, yang hanya terlibat dalam tes kinerja, kami telah secara signifikan maju dalam tugas pertama dan kedua. Vadim mampu membuat sebanyak mungkin pengujian berjalan sesuai kebutuhan untuk menyesuaikan parameter dengan sistem tertentu. Juga, menjadi mungkin untuk mengatur konsumsi daya pada node baru, yang memungkinkan untuk memilih konfigurasi cluster dengan mempertimbangkan perubahan dalam frekuensi prosesor dan chip grafis. Munculnya node baru adalah acara terbesar bagi tim.
Relion. Kode yang ditulis oleh ahli kimia kimia tidak dibedakan dengan arsitektur yang dipikirkan dengan matang dan berisi file yang sulit dibaca dari beberapa ribu baris kode. Sinkronisasi disediakan oleh panggilan sistem sleep()
. Ada puluhan gigabyte input, bahkan lebih banyak output, satu iterasi memakan waktu rata-rata empat puluh menit, dan tidak mungkin untuk segera memahami bagaimana mengoptimalkan semua ini. Setelah dua minggu mencari, pengalokasi memori saya sendiri untuk kartu video ditulis; Transformasi Fourier dan beberapa rutinitas lainnya telah porting ke kartu video. Karena kerumitan kode dan waktu yang terbatas, optimasi lainnya dilakukan setelah tahap awal.
CNTK. Seperti biasa, dalam masalah pembelajaran mesin, konfigurasi dasar jaringan saraf diberikan, yang darinya layak untuk dimulai. Kerangka kerja dan jaringan itu sendiri tidak berfungsi di luar kotak. CNTK memerlukan versi khusus OpenMP, dalam utilitas untuk memeriksa hasilnya fungsi memiliki tipe parameter yang tidak kompatibel, dan jumlahnya tidak cocok. Ketika semuanya akhirnya dimulai, mereka mulai berurusan dengan arsitektur jaringan. Sayangnya, jaringan saraf masih menjadi titik lemah tim kami, jadi kami tidak melakukan perubahan yang sangat kompleks. Kami mengubah persentase neuron yang dibuang, kecepatan belajar, nilai awal, dan bereksperimen menggunakan GRU alih-alih LSTM di bagian rekurensi.
Jadi sorak-sorai, kami pergi ke final!
Kali ini, kami segera menulis surat kepada sponsor tahun terakhir kami dan mulai bersiap. Segera dua peristiwa terjadi: sponsor tahun lalu menolak kami, dan universitas mengalokasikan dana untuk menutupi sebagian biaya penerbangan. Berikutnya adalah generasi ide di mana menemukan sisa dana. Akibatnya, perusahaan Devexperts , yang mengembangkan perangkat lunak keuangan untuk bursa, broker dan perusahaan investasi, mengajukan diri untuk membantu kami. Di babak kualifikasi, tim memecahkan masalah pada peralatan yang tersedia untuknya. Kadang-kadang bagian dari tugas diselesaikan pada peralatan yang disediakan oleh penyelenggara. Di final, semuanya persis sama kecuali untuk satu tetapi ... tim belum membuat gugus ini!

Tahun lalu, tidak ada anggota tim yang memiliki pengalaman mendirikan cluster, itulah sebabnya kami memiliki sedikit waktu untuk memulai tugas kompetitif, jadi tahun ini kami melakukan serangkaian sesi pelatihan pada cluster pelatihan. Pada setiap sesi pelatihan, kami membuat salinan cadangan node, sepenuhnya mengonfigurasi satu node, lalu menyalin gambarnya melalui jaringan ke node lain. Seperti yang telah ditunjukkan oleh praktik, ini adalah cara tercepat dan paling tidak menyakitkan untuk mengonfigurasikan sebuah cluster dari awal, yang tidak memerlukan pengetahuan mendalam tentang teknologi tingkat rendah. Beberapa latihan sudah cukup untuk sepenuhnya debug dan mengotomatiskan proses.

Final: hari pertama dan kedua
Dalam dua hari pertama kompetisi, tim berkumpul dan mengatur sebuah cluster di mana semua aplikasi selanjutnya akan diluncurkan. Sebagai aturan, semakin banyak kartu video di sistem Anda, semakin banyak Anda bisa mendapatkan kinerja pada sebagian besar tugas, dan semakin sedikit node yang dapat Anda pasang di rak karena keterbatasan daya (daya tidak boleh melebihi 3 kW, jika tidak, hasil tugas tidak dihitung). Namun, ada aplikasi di mana kartu video tidak digunakan dengan cara apa pun, dan keberadaan sejumlah besar node dapat bermanfaat.
Tahun ini, sponsor kompetisi menyediakan empat NVIDIA V100 untuk setiap tim. Yang pertama menemukan orang yang tepat dan menerima akselerator yang berharga, kami mengatur tentang pemasangan. Tidak seorang pun di tim (termasuk pelatih) memiliki pengalaman memasang kartu video di server sebelumnya. Setelah mempelajari instruksi yang disediakan oleh panitia, kami mengatasi tugas itu, dan kami bahkan tidak perlu sepenuhnya menarik keluar dan membongkar server, seperti yang dilakukan sebagian besar tim (lihat video).
Selanjutnya, perlu untuk menginstal dan mengkonfigurasi sistem operasi. Sebagai aturan, siswa memiliki kepercayaan diri paling rendah di bidang ini, karena menggunakan teknologi ceruk yang tidak berguna di bidang lain, jadi kami sebelumnya melakukan beberapa pelatihan untuk sepenuhnya mengonfigurasi sistem lima simpul dari awal pada klaster pelatihan menggunakan Clonzilla.
Skrip konfigurasi didebug pada cluster virtual menggunakan Wagrant, karena hanya di dalamnya mudah untuk meningkatkan beberapa mesin virtual yang identik. Karena tingkat perangkat lunak yang kami gunakan rendah, Docker dan teknologi lainnya berdasarkan ruang nama Linux tidak cocok untuk kami. Skrip konfigurasi sama sekali tidak berfungsi.
Berbekal pengalaman yang diperoleh dalam pelatihan, kami menggunakan sistem operasi dan paket lainnya bahkan lebih cepat dari pada pelatihan - kinerja server tidak dapat dibandingkan dengan cluster pelatihan kami. Salah satu fitur dari kontes ini adalah kurangnya akses ke Internet dari server, jadi kami mengunduh repositori dengan paket di muka dan direkam pada dua drive USB yang kami bawa.
Setelah mengatur cluster, setiap anggota tim mengatur tentang pengaturan dan pengujian aplikasinya untuk sistem baru, dan di sini kami memiliki kejutan yang tidak menyenangkan. Versi Linpak, yang tetap ada sejak tahun terakhir kompetisi, menolak untuk bekerja dengan benar pada sistem yang baru. Menginstal berbagai versi CUDA, memilah-milah berbagai opsi dan pengaturan kernel tidak memberikan efek yang diinginkan. Akibatnya, kami memutuskan untuk meluncurkan versi yang tidak dioptimalkan seperti biasa agar tidak kehilangan poin untuk tugas tersebut. (Ini karena sistem penilaian baru tahun ini: bahkan jika hasil Anda adalah yang terbaik dalam kecepatan atau kinerja, tetapi outputnya tidak benar, Anda hanya akan menerima setengah dari poin maksimum yang mungkin. Paruh kedua poin diberi skor untuk kesimpulan yang benar.)
Untuk memahami esensi masalah, ada baiknya mengatakan apa itu Lynpack. Lynpack digunakan untuk mengukur kinerja superkomputer dan untuk menyusun daftar superkomputer TOP500 paling kuat di dunia. Cara termudah untuk mengambil tempat tinggi dalam daftar ini adalah membeli sebuah cluster dengan sejumlah besar kartu video (jumlah prosesor tidak begitu penting, karena 99% tugas diberikan ke kartu video). Untuk setiap akselerator ada versi Lynpak yang dioptimalkan, kode yang, sebagai aturan, ditutup. Biner hanya dapat diperoleh jika Anda memiliki superkomputer yang dapat mengambil tempat dalam daftar TOP500, atau jika Anda berpartisipasi dalam kompetisi superkomputer. Meskipun demikian, penyelenggara kompetisi tidak menyediakan biner, NVIDIA cabang Rusia juga menolak untuk melakukan ini. Di Rusia, tidak ada kluster dengan V100 yang dapat dimasukkan dalam daftar TOP500, oleh karena itu, pencarian oleh kolega yang sudah dikenal juga tidak berhasil. Situasi ini juga tidak dapat dipahami oleh fakta bahwa Linpak tidak digunakan di mana pun kecuali untuk pengujian kinerja: baik dalam sains, maupun dalam teknologi. Jika Anda ingin membantu tim dan mengetahui cara mendapatkan program berharga, Anda dipersilakan di PM. Ya, kami, dengan spontanitas langsung kami, menandai kisah ini dengan slide dalam presentasi terakhir, yang dapat kami lakukan untuk menyenangkan anggota juri.

Final: hari ketiga
Pada hari ketiga kompetisi, Linpak, HPCG, Relion dan aplikasi rahasia sedang menunggu kami, dan hari ini adalah yang tersulit bagi tim. Setelah dengan cepat menangani Lynpak (lihat bagian sebelumnya) dan HPCG, kami mendapat tugas kerja (input data) untuk aplikasi rahasia. Ternyata menjadi program untuk menghitung dinamika molekul Siesta . Kekecewaan pertama adalah bahwa pada bagian tugas, Siesta memberikan kesalahan di alamatnya (meskipun faktanya ditulis dalam Fortran, di mana tidak mudah untuk mendapatkan kesalahan seperti itu), dan tidak mungkin untuk men-debug itu. Namun demikian, tugas-tugas yang tersisa diperoleh dan pada akhirnya kami berhasil melewatinya.
Sejalan dengan Siesta, kami harus meluncurkan Relion yang disiapkan sebelumnya. Semua node tanpa kartu video diberikan kepada Siesta, dan node dengan kartu video diberikan kepada Relion, sehingga program tidak saling mengganggu.
Pada tahap awal, kami sangat mengubah kode Relion sehingga berfungsi secara efektif pada kartu video. Di antara hal-hal lain, kami memparalelkan banyak fungsi, menulis ulang pengalokasi memori pada kartu video, mentransfer rutinitas yang paling intensif sumber daya ke kartu video dan menambahkan kemampuan untuk menggunakan node dengan dan tanpa kartu video secara bersamaan. Ini sangat mempercepat program, dan ini bekerja sangat baik pada teknologi universitas. Namun, pada kompetisi kami mendapat kartu video dengan memori lebih sedikit, itulah sebabnya Relion mengalami kesalahan. Analisis kesalahan yang lebih dalam menunjukkan bahwa kode hanya akan berfungsi jika ditulis ulang untuk sistem yang baru. Kami tidak punya waktu untuk ini, dan ini adalah kekecewaan kedua hari ketiga.
Final: hari keempat
Pada hari keempat kompetisi, CFL3D dan MSMARCO tetap, dan hari ini jauh lebih tenang. Dibebaskan dari aplikasi yang ditugaskan kepada mereka, anggota tim mulai saling membantu. Untuk CFL3D, yang memiliki format file input yang sangat kompleks, Ruslan menulis skrip yang menghasilkannya. Karena kami memiliki banyak node dibandingkan dengan tim dengan sejumlah besar kartu video, kami meluncurkan beberapa tugas secara paralel dan setelah beberapa permulaan dari setiap tugas kami dapat memilih parameter yang optimal.
Peluncuran MSMARCO yang telah disiapkan sebelumnya juga tidak menyebabkan masalah serius. Pra-pemrosesan data memakan waktu beberapa jam, karena itu tidak ada waktu untuk pelatihan yang lama, tetapi berkat kartu video yang lebih kuat, dimungkinkan untuk menyelesaikannya, meskipun dengan era yang lebih sedikit. Kami masih memiliki model yang dilatih di lebih banyak era dari tahap kualifikasi (di final, data input berubah, tetapi tidak ada file baru untuk verifikasi), tetapi menurut aturan kami membutuhkan model yang dilatih selama final, dan kami memutuskan untuk lulus model yang dilatih dengan jujur. Terlepas dari pekerjaan yang terkoordinasi dengan baik dan tidak ada kejutan, kami menggunakan semua waktu yang diberikan dan selesai di malam hari.
Final: hari kelima
Hari berikutnya, sebuah presentasi menunggu kami. Pada malam hari hari keempat, kami memasukkan hasil yang diperoleh ke dalam templat yang disiapkan dan menulis pidato. Presentasinya mudah, kami tidak ditanyai pertanyaan menarik, tetapi karena alasan tertentu hanya pembicara dan slide yang diizinkan untuk mengambil gambar.
Beberapa jam kemudian, upacara penghargaan dimulai. Perasaan campur aduk: di satu sisi, kami tampil jauh lebih baik dari tahun lalu, di sisi lain - kami bisa tampil lebih baik jika bukan karena kesalahan yang mengganggu dengan aplikasi. Akibatnya, terlepas dari fakta bahwa klaster kami tidak berbeda dalam jumlah besar kartu video, karena jumlah node dan ketekunan yang lebih besar, kami mengalahkan tim lain di CFL3D, di mana kami diberikan hadiah terpisah dalam kompetisi. Dalam keseluruhan klasemen, kami mengambil tempat kesebelas dari dua puluh tim yang mencapai final (dan dari tiga ratus tim yang berpartisipasi dalam tahap awal). Juara dalam klasifikasi keseluruhan, seperti tahun lalu, adalah Universitas Xinhua. Bagi tim kami, ini adalah kemenangan atas diri kami sendiri: kami tampil lebih baik dari sebelumnya, mendapat pengalaman yang tak ternilai, yang akan kami gunakan tahun depan, dan mengalahkan yang lain dalam salah satu tugas.

Kesimpulan dan kesan umum
Konfigurasi cluster di mana ada lebih banyak kartu video daripada prosesor menguntungkan dalam banyak kasus, tetapi tidak universal. Ada lebih sedikit node, dan tidak setiap aplikasi dapat, pada prinsipnya, berjalan pada kartu video. Aplikasi tersebut termasuk program Fortran, yang, karena usianya yang terhormat, tidak dapat ditulis ulang untuk kartu video, dan paling sering mereka bahkan tidak menggunakan semua core prosesor. Untuk aplikasi semacam itu, keberadaan sejumlah besar node memungkinkan Anda untuk menjalankan lebih banyak tugas paralel, yang berarti lebih mengoptimalkan aplikasi.
Tim mungkin tidak tahu semua seluk-beluk menginstal sistem operasi dan menampilkan gambar, tetapi celah ini mudah diganti dengan pelatihan. Tentu saja, para peserta tidak akan mengenali semua seluk-beluk, tetapi mereka akan dengan percaya diri melakukan instalasi poin demi poin. Skrip untuk instalasi mudah didebug di mesin virtual.
Selama kompetisi, Anda dapat bertemu dengan program open source yang paling indah. Program yang dikumpulkan oleh skrip tertulis yang tidak terbaca, program yang menggunakan fungsi pustaka yang ditulis ulang dengan kesalahan, program yang ditulis dalam Fortran dengan sisipan C, program dengan dependensi hard-kode dan bendera kompilasi. Saya tidak dapat mengingat satu program yang akan dirakit pertama kali atau yang menghasilkan kesalahan yang dapat dimengerti selama perakitan. (Contoh baru: versi lama OpenMPI pada sistem baru mencoba untuk menghubungkan pustaka dengan nama kosong. Masalahnya hanya dapat diselesaikan dengan andal dengan penggantian otomatis dalam file-file yang dibuat.) Kompetisi mengajarkan kita untuk tidak terkejut pada apa pun dan mengatasi kesulitan. Saya ingin percaya bahwa seseorang yang telah bekerja dengan perangkat lunak seperti itu tidak akan pernah menciptakan sesuatu seperti ini dalam hidupnya.
Di kompetisi, Anda tidak pernah berhenti terkejut pada kecerdikan Cina. Tahun ini, Cina mendesain ulang ruang konferensi berbentuk persegi dengan sudut-sudut yang pas untuk tempat kompetisi. Itu membawa rak dengan server dan sistem pendingin dengan outlet cairan ke kamar mandi terdekat (saya bukan ahli dalam hal ini dan saya tidak tahu nama persis dari peralatan). Ketika mereka menyadari bahwa suhu di ruangan itu tidak turun di bawah tiga puluh derajat Celcius, mereka membawa balok-balok es besar di bak. Tentu saja, ini tidak mengubah situasi, tetapi memberikan minuman dingin kepada tim.

Ucapan Terima Kasih
Partisipasi dalam kompetisi tidak akan mungkin terjadi tanpa sponsor kami, Devexperts ( http://devexperts.com/ ). Perusahaan mengeluarkan biaya perjalanan udara ke Cina.

Tayangan dari Cina
Beberapa anggota tim berada di China untuk pertama kalinya, yang menyebabkan sedikit kejutan budaya. Memberitahu Anton.
Berkenalan dengan negeri matahari terbit bermula dengan fakta bahwa sebagian dari kita melepas baterai untuk pengisian daya, karena baterai tidak memiliki tanda listrik. Terlepas dari konspirasi ini, semuanya berjalan secara damai. Kami disambut oleh dua relawan dengan tanda universitas kami, setelah itu kami dibawa ke hotel dengan bus. Perlu dicatat bahwa setelah Peter, di mana salju akan mencair, di Cina cuaca cukup panas (walaupun penduduk Volgograd yang sebenarnya, tentu saja, tidak merasakan ini). Setibanya kami ditampung di kamar. Setelah penerbangan setiap hari saya memutuskan untuk duduk di atas kasur besar dengan kelelahan.
Sulit adalah kasur.
Samurai yang tertekan.
Waktu itu sekitar jam sepuluh pagi, jadi satu jam kemudian kami pergi mengunjungi universitas setempat. Mengatakan bahwa dia besar berarti tidak mengatakan apa-apa. Jika kita membandingkan wilayah kampus lokal dan Universitas Negeri St. Petersburg, maka Universitas Nanchang lima kali lebih banyak. Kami ditunjukkan ruang makan lokal, di mana selama lima hari berikutnya kami makan mie dan nasi. Sebagian besar, komunikasi pertama dengan orang Cina biasa, yang pengetahuan bahasa Inggrisnya tidak begitu baik, dimulai di sini.
Ruang makan diatur sedemikian rupa sehingga setiap jendela adalah outlet ritel mini di mana Anda dapat membeli sesuatu. Pembayaran dilakukan oleh kartu khusus, yang Anda, seperti kartu NFC, lampirkan pada pembaca. Semuanya terjadi dengan cepat, dan tidak perlu antri untuk waktu yang lama. Memahami dengan tepat apa yang Anda ambil itu bermasalah. Anda harus menggunakan metode kakek tua dan mengarahkan jari Anda pada hidangan yang diinginkan. Pada hari ketiga di rak mie, mereka mulai mengenali kami, yang sangat menyederhanakan hidup kami. Beberapa bahkan belajar berhitung hingga sepuluh agar tidak menunjukkan jari dan menunjukkan rasa hormat kepada penduduk. Jika kita berbicara tentang makanan itu sendiri, maka ada pangsit yang baik dan sehat. Dengan bantuan seorang sukarelawan, saya berhasil mendapatkan sup yang lezat, tetapi karena ini membutuhkan interaksi dengan penjual secara lisan, ini hanya sekali. Karena bumbu, semua daging sangat pedas, dengan rasa tertentu.
Pada hari kedua, kami bertemu dengan sukarelawan ketiga, yang bernama Ksenia. (Orang Cina, biasanya, membuat nama-nama yang mudah diucapkan untuk berkomunikasi dengan orang asing.) Dia telah belajar bahasa Rusia selama dua tahun, jadi dia ditugaskan kepada kami, semacam pengalaman yang bermanfaat.

Kompetisi itu sendiri telah dijelaskan secara rinci di bagian lain, tetapi saya ingin mencatat bahwa hanya ada dua kursi untuk tim, jadi saya harus duduk di lantai, setelah itu kaki saya hanya meminta belas kasihan, karena saya harus duduk seperti ini selama sepuluh jam selama empat hari kompetisi. .