Halo, Habr! Kami melanjutkan serangkaian artikel tentang partisipasi tim dari Universitas Negeri St. Petersburg (kami menyebut diri kami EnterTildeDot) dalam kompetisi superkomputer mahasiswa terbesar di dunia.

Pada artikel ini, kita akan mempertimbangkan jalur menuju ASC'18 menggunakan contoh satu anggota tim, memberikan perhatian khusus pada kartu kunjungan kompetisi dan superkomputer modern secara umum - Linpack. Baiklah, mari kita lihat rahasia untuk mencapai rekor dan kinerja anti-rekor dari sistem komputasi.
Tur singkat kompetisi superkomputer
Informasi umum tentang jenis kompetisi ini dapat ditemukan di artikel kami sebelumnya, termasuk posting panjang tentang kompetisi tahun ini. Meskipun demikian, untuk kelengkapan, beberapa informasi tentang kompetisi secara keseluruhan, kami tetap memberikan di sini.
Asian Supercomputer Challenge adalah salah satu dari tiga acara tim komputasi berkinerja tinggi utama yang menarik lebih banyak tim siswa dari seluruh dunia. ASC, seperti kompetisi serupa lainnya, mengasumsikan adanya babak kualifikasi dan final dengan ketentuan sebagai berikut:
- Aktivitas utama: solusi masalah HPC;
- Tim: 5 siswa + pelatih;
- Tahap kualifikasi: deskripsi absen dari proposal dengan deskripsi solusi dari masalah yang disajikan, atas dasar yang ditentukan daftar 20 finalis.
- Tahap terakhir: kompetisi penuh waktu untuk 20 tim yang berlangsung sekitar 5 hari kompetitif, termasuk perakitan lengkap dan konfigurasi cluster komputasi, penyelesaian masalah, presentasi. Cluster ini dirakit berdasarkan pembatasan daya 3 kW, baik dari besi yang disediakan oleh penyelenggara, atau dari miliknya sendiri. Cluster tidak memiliki akses internet. Tugas-tugas ini sebagian bersamaan dengan tugas-tugas dari tahap kualifikasi, tetapi ada juga tugas yang tidak diketahui - Aplikasi Misteri.
Nah, sekarang dengan retret ke program pendidikan. Tidak seperti anggota tim lain yang sudah mencapai final ASC'17, saya bergabung dengan gerakan kompetitif hanya tahun ini. Saya bergabung dengan tim pada bulan September, tugas tahap kualifikasi dikirim hanya pada bulan Januari, jadi saya punya cukup waktu untuk mempelajari konsep dasar kompetisi, serta mempelajari satu-satunya tugas yang diketahui - HPL & HPCG. Suatu tugas dalam satu bentuk atau lainnya terjadi hampir setiap tahun, namun, tidak selalu diketahui sebelumnya tentang peralatan apa yang perlu dilakukan (kadang-kadang penyelenggara menyediakan akses jarak jauh ke sumber daya mereka sendiri).
HPL
HPL (High Performance Computing Linpack Benchmark) adalah tes kinerja sistem komputasi, berdasarkan pada hasil di mana daftar modern superkomputer terbaik dunia terbentuk. Esensi dari tes ini adalah untuk menyelesaikan sistem persamaan aljabar linier yang padat. Munculnya tolok ukur ini memperkenalkan metrik yang memungkinkan Anda untuk memberi peringkat superkomputer, sementara pada saat yang sama memberikan beberapa "layanan beruang" kepada komunitas HPC. Jika Anda melihat daftar superkomputer terbaik, Anda dapat memahami bahwa rahasia Lynpak diselesaikan dengan sangat cepat - ambil akselerator grafis sebanyak yang Anda bisa dan akan ada di atas. Tentu saja, ada pengecualian, tetapi superkomputer dengan akselerator grafis yang menempati posisi teratas. Apa itu "layanan beruang"? Faktanya adalah bahwa selain mengukur kinerja, Lynpak tidak digunakan di tempat lain dan tidak ada hubungannya dengan tugas komputasi nyata. Akibatnya, ras superkomputer pergi ke sisi mendapatkan efisiensi Linpak yang paling, dan bukan beban kerja nyata, seperti menyelesaikan tugas-tugas USE yang khas alih-alih menguasai kurikulum sekolah.
Pengembang HPL juga telah membuat paket lain - HPCG, atas dasar itu peringkat superkomputer juga terbentuk. Secara umum diterima bahwa tolok ukur ini lebih dekat dengan tugas nyata daripada HPL, dan, dengan cara, perbedaan signifikan antara posisi superkomputer dalam dua daftar ini mencerminkan situasi sebenarnya. Namun, peringkat terakhir (Juni 2018) merupakan pengecualian yang menyenangkan, dan, akhirnya, posisi pertama daftar itu bertepatan.
Dan sekarang tentang HPL asli
Kami kembali ke momen cerita dan kompetisi yang lebih praktis. Linkpak adalah open source, tersedia untuk diunduh di situs web resmi, namun, hampir tidak ada superkomputer di dunia teratas yang kinerjanya diukur oleh versi benchmark ini. Pabrikan Accelerator merilis versi HPL mereka sendiri, yang dioptimalkan untuk perangkat tertentu, yang memungkinkan Anda untuk mendapatkan keuntungan kinerja yang signifikan. Tentu saja, versi khusus HPL harus memenuhi kriteria tertentu dan harus lulus tes khusus dengan sukses.
Setiap vendor memiliki versi HPL masing-masing untuk setiap akselerator, namun, tidak seperti tolok ukur asli, tidak ada pertanyaan tentang open-source di sini. Nvidia merilis versi HPL yang dioptimalkan untuk masing-masing kartu, sementara kode tidak lagi dikirim dalam bentuk sumber, tetapi dalam biner. Selain itu, hanya ada dua cara untuk mengaksesnya:
- Anda memiliki superkomputer dengan kartu Nvidia yang dapat masuk ke atas - Nvidia akan menemukan Anda sendiri. Sayangnya, Anda kemungkinan besar tidak akan menerima binari, sama seperti tidak akan ada kesempatan untuk berpartisipasi dalam optimalisasi parameter HPL. Dengan satu atau lain cara, Anda akan mendapatkan nilai kinerja yang memadai yang diperoleh dari tolok ukur yang dioptimalkan.
- Anda adalah peserta dalam salah satu dari tiga kompetisi superkomputer siswa. Tetapi kami akan kembali ke bagian ini.
Jadi apa esensi dari tugas ini, terutama jika paman pintar dari perusahaan besar telah mengoptimalkan benchmark untuk peralatan Anda?
Dalam hal tahap kualifikasi kompetisi, jelaskan tindakan yang mungkin untuk meningkatkan kinerja sistem. Dalam hal ini, mengejar angka kinerja absolut tidak diperlukan, karena beberapa tim dapat memiliki akses ke 226 node yang besar dan berkelas dengan akselerator modern, sementara yang lain hanya dapat mengakses nomor komputer universitas 226, yang kita sebut cluster.

Dalam hal tahap akhir, sudah masuk akal untuk membandingkan nilai absolut kinerja. Bukan untuk mengatakan bahwa di sini setiap orang berada pada pijakan yang sama, tetapi setidaknya ada batasan pada kekuatan maksimum yang diizinkan dari sistem.
Hasil eksekusi benchmark terutama tergantung pada dua komponen: konfigurasi cluster dan pengaturan parameter benchmark secara langsung. Perlu juga dicatat pengaruh pilihan kompiler dan perpustakaan untuk komputasi matriks dan vektor, tetapi di sini semuanya sangat membosankan, semua orang menggunakan kompiler dari Intel + MKL. Dan dalam kasus binari, Anda tidak harus memilih sama sekali, karena mereka sudah berkumpul. Hasil HPL adalah nilai numerik yang menunjukkan berapa banyak operasi floating point per detik yang dilakukan sistem komputasi ini. Unit utama pengukuran adalah FLOPS (Operasi Titik-FLoating Per Detik) dengan awalan yang sesuai. Dalam kasus tahap akhir kompetisi, hampir selalu kita berbicara tentang sistem skala Tera.
Optimalisasi Hasil
Pengaturan parameter benchmark terdiri dari pemilihan input data dari tugas yang dihitung oleh Lynpak (file HPL.dat). Dalam hal ini, dimensi masalah ini memiliki pengaruh terbesar - ukuran matriks, ukuran blok tempat matriks dibagi, dalam hubungan apa untuk mendistribusikan blok, dll. Secara total, ada beberapa puluhan parameter, ribuan kemungkinan nilai. Bruteforce bukanlah pilihan terbaik, terutama jika pengujian pada sistem yang relatif kecil dilakukan dari beberapa menit hingga beberapa jam, tergantung pada konfigurasi (untuk GPU, pengujiannya jauh lebih cepat).
Saya punya cukup waktu untuk mempelajari bagaimana pola sudah dijelaskan dalam sumber lain yang berkontribusi untuk mengoptimalkan hasil tolok ukur, dan untuk mengidentifikasi yang baru. Saya mulai menjalankan pengujian berkali-kali, mulai banyak tag Google, mencoba mengakses sistem dengan konfigurasi yang sebelumnya belum dicoba untuk menjalankan benchmark juga. Akibatnya, bahkan sebelum dimulainya tahap kualifikasi, sejumlah sistem telah diuji, baik CPU dan GPU, termasuk bahkan Nvidia Quadro P5000 yang sama sekali tidak cocok. Pada saat tahap kualifikasi dimulai, kami memiliki akses ke beberapa node dengan P100 dan P6000, yang sangat membantu kami dalam persiapan. Konfigurasi sistem ini dalam banyak hal mirip dengan yang kami rencanakan untuk berkumpul sebagai bagian dari tahap akhir kompetisi, dan juga, kami akhirnya mendapatkan akses ke pengaturan tingkat rendah, termasuk mengubah frekuensi.
Sedangkan untuk konfigurasi, keberadaan dan jumlah akselerator memiliki dampak terbesar. Dalam hal menguji sistem dengan GPU, opsi yang paling optimal adalah ketika bagian komputasi utama dari tugas tersebut didelegasikan ke komponen GPU. Komponen CPU juga akan dimuat dengan tugas-tugas tambahan, namun, itu tidak akan memberikan kontribusi pada kinerja sistem. Tetapi pada saat yang sama, kinerja puncak CPU harus diperhitungkan dalam kinerja puncak sistem secara keseluruhan, yang dapat terlihat sangat tidak menguntungkan dalam hal rasio kinerja maksimum terhadap puncak (teoritis). Saat menjalankan HPL pada GPU, sistem dengan 2 akselerator GPU dan dua prosesor setidaknya tidak akan kalah dengan sistem dengan 2 GPU dan 20 CPU.
Setelah menggambarkan proposal untuk kemungkinan optimasi hasil HPL, saya selesai dengan bagian saya dari proposal untuk tahap kualifikasi, dan, melewati ke final kompetisi, tahap baru kompetisi dimulai - pencarian sponsor. Di satu sisi, kami membutuhkan sponsor yang akan menanggung biaya penerbangan tim ke Cina, dan di sisi lain, sponsor yang dengan ramah setuju untuk memberikan akselerator grafis kepada tim. Dengan yang pertama, kami akhirnya beruntung, universitas mengalokasikan sebagian uang, dan Devexperts membantu menutupi tiket sepenuhnya . Dengan para sponsor, yang kami rencanakan untuk meminjamkan kartu, kami kurang beruntung, dan sekarang kami kembali terbang ke final dengan konfigurasi dasar cluster tanpa ada peluang daya saing dalam HPL. Yah, tidak ada, memeras maksimal dari apa yang mereka berikan, kami pikir.
Final ASC'18
Dan di sini kita berada di Cina, di kota kecil dengan standar Cina - Nanchang, di final. Kami merakit cluster selama dua hari, dan kemudian tugas.

Tahun ini, semua tim diberi 4 kartu Nvidia V100, ini tidak memberi kita keunggulan dibandingkan tim lain, tetapi memungkinkan untuk meluncurkan HPL bukan pada CPU. Node awalnya memberi setiap orang 10, tetapi yang ekstra (ingat tentang batas 3 kW) harus dikembalikan sebelum tahap tugas kompetitif utama dimulai. Ada beberapa trik di sini - mengurangi frekuensi CPU dan GPU, kinerjanya menurun, namun, Anda dapat memilih nilai-nilai tersebut untuk frekuensi sehingga kami mendapatkan lebih banyak kinerja per unit energi yang dikonsumsi. Dengan menurunkan frekuensi, kami mendapat kesempatan untuk menambahkan lebih banyak akselerator, yang pada akhirnya akan memengaruhi kinerja menjadi lebih baik. Sayangnya, trik ini akan jauh lebih bermanfaat bagi kita jika kita datang ke kompetisi dengan koper akselerator, seperti peserta lainnya. Namun demikian, kami mampu untuk meninggalkan jumlah maksimum CPU. Karena tidak semua tugas dari kompetisi membutuhkan GPU, ada kecurigaan bahwa dalam beberapa hal ini mungkin bermain ke tangan kita.
Jadi, konfigurasi cluster yang paling umum di final kompetisi adalah minimum node, maksimum kartu.

Linkpack akhir dan sedikit tentang catatan
Tugas-tugas di kompetisi terikat pada hari-hari kompetitif tertentu, dan HPL adalah yang pertama dari mereka, tentu saja, setelah cluster berkumpul. Batas waktu pengiriman hasil HPL adalah makan siang dari hari kompetitif ketiga, di samping itu, akses ke tugas-tugas yang tersisa dari hari kompetitif ini dibuka segera setelah selesainya Linpak. Namun, Lynpak mulai mengemudi di awal-awal. Pertama, untuk memastikan bahwa cluster sudah terpasang dengan benar, dan kedua, pengaturan Linpak tidak cepat, dan karena tidak ada input tambahan yang diperlukan, mengapa tidak.
Kami mengumpulkan kluster kami dengan cepat dan mulai termasuk Lynpak. Untuk konfigurasi kami, kami menerima nilai yang cukup memadai - dari urutan 20 TFlops, dan semuanya akan baik-baik saja, tetapi setelah output, ada garis dengan kesalahan. Sebelumnya, saya menerima kesalahan seperti itu hanya ketika saya sengaja menunjukkan ukuran blok yang salah di mana matriks tugas dibagi. Kejutan yang sangat tidak menyenangkan menunggu kami di sini. Sebelumnya, saya katakan bahwa kami diberi 4 kartu V100, yah, jadi ... kami tidak menerima binari HPL untuk mereka dan tidak ada yang bisa membantu kami dengan ini. Sudah beberapa bulan, tetapi bagi saya itu masih misteri apa yang terjadi di akhir dengan Linpak kami. Kami mengubah versi kompiler dan perpustakaan lain dengan harapan menyingkirkan kesalahan, berulang kali memeriksa apakah kami menginstal akselerator dengan benar (sejak kami melakukannya pertama kali), tetapi kami masih gagal memperbaiki kesalahan.

Pada malam sebelum penyerahan Linpak, kami kembali dengan hati-hati memeriksa kriteria untuk mengevaluasi tugas, dan, untuk Linpak, formula terdiri dari dua komponen - nilai tertentu tergantung pada hasil tim yang memenangkan Linpak, dan koefisien untuk keberhasilan penyelesaian tugas. Ternyata koefisien ini sangat besar sehingga sama sekali tidak menguntungkan untuk melewatkan nilai Lynpak yang memadai, tetapi dengan kesalahan yang tidak dapat dipahami, dibandingkan dengan meneruskan nilai apa pun, tetapi tanpa kesalahan. Dengan hati-hati mempertimbangkan segalanya, mengingat bahwa banyak waktu dihabiskan untuk mencari solusi untuk kesalahan dan bahwa mendapatkan dataset dari tugas-tugas berikut ini sepenuhnya tergantung pada waktu penyelesaian Linpak, kami memutuskan untuk secara taktis menggabungkan tugas ini. Jadi, "catatan" absolut dibuat dalam sejarah kompetisi superkomputer di antara nilai-nilai yang benar. Lynpak kami meledak dengan nilai 0,01 TFlops. Tentu saja, mengoptimalkan benchmark untuk CPU yang ada, kami akan mendapatkan nilai kinerja yang sedikit lebih tinggi, namun, ini tidak akan banyak mempengaruhi poin, dan waktu akan dihabiskan secara signifikan lebih banyak. Ingat bahwa Lynpak telah bekerja lebih lama pada CPU. Hasil terbaik ditunjukkan oleh Universitas Nasional Tsing Hua - 43 TFlops. Setelah satu atau dua hari, Jack Dongarra (pencipta Lynpac), seorang anggota panitia penyelenggara kompetisi, dengan santai bertanya kepada kami, bagaimana cara Lynpak? Rupanya, pada saat itu dia belum melihat papan hasil: reaksi WHAAAT-nya bernilai setiap jam kami habiskan untuk HPL.

Aplikasi misteri
Setelah menyerahkan tolok ukur, sesuai dengan rencana yang disiapkan sebelumnya, saya bergabung dengan bagian dari tim yang seharusnya berurusan dengan Aplikasi Misteri. Tidak ada yang tahu apa tugas ini di muka, jadi mereka bersiap untuk yang terburuk - mereka sebelumnya telah menginstal semua yang bisa berguna dari flash drive pada sebuah cluster. Sebagai aturan, kesulitan utama tugas dari bagian ini adalah mengumpulkannya. Kali ini semuanya ternyata sedikit berbeda. Aplikasi dikumpulkan hampir pertama kali, tanpa masalah. Masalah dimulai ketika kami mendapatkan kesalahan di sebagian besar dataset yang disajikan di alamat, meskipun itu adalah aplikasi fortran. Dilihat oleh papan hasil, tidak hanya tugas ini yang menyebabkan masalah bagi kami.
Senjata rahasia: CPU
Nah, tugas terakhir di mana saya ambil bagian sudah direncanakan untuk hari kompetisi berikutnya. Tidak seperti Aplikasi Misteri, kami sudah melihat paket yang harus digunakan - itu cfl3d. Ketika kami mengetahui bahwa ini adalah produk NASA, untuk beberapa alasan semua orang senang, berpikir bahwa semuanya akan baik-baik saja di sana baik dengan perakitan dan dengan optimasi. Ketika kami menguji paket di rumah, tidak ada masalah dengan perakitan, tetapi kasus penggunaannya sangat menarik. Sebagian besar contoh memiliki ketergantungan pada pemasangan alat tambahan, dan kebetulan bahwa dalam upaya untuk google salah satu alat tersebut - alat XX, kami menemukan sebuah artikel tahun 1995 di mana dikatakan bahwa sekarang alat XX sudah usang dan menggunakan YY. Situs produk berasal dari waktu yang sama - dokumentasi sering mengirim pengguna ke halaman situs, tetapi hanya situs di bingkai dan di luar halaman utama tidak akan berfungsi. Relevansi dari contoh-contoh meninggalkan banyak yang harus diinginkan.
Jika itu cukup sederhana, maka esensi dari tugas ini adalah pemisahan rumit dari grid multi-level sambil mempertahankan tingkat akurasi tertentu. Tentu saja, metrik utama di sini adalah waktu. Entah bagaimana, pada hari ini kami sesantai mungkin dan melakukan apa yang harus kami lakukan. Tugasnya adalah untuk CPU, dan inilah yang kami punya banyak. File input tugas memiliki bentuk yang sangat spesifik dan, seringkali, ukuran besar - hingga ratusan baris. Seorang anggota tim kami menulis naskah yang mengotomatiskan proses menghasilkan file input, yang mempercepat proses, mungkin ratusan kali. Pada akhirnya, semua dataset berhasil diselesaikan dan dioptimalkan, bahkan ada waktu untuk mencoba membangun kembali paket dengan beberapa opsi menarik, tetapi kami tidak mendapatkan banyak akselerasi. Kami menyelesaikan tugas ini lebih baik daripada yang lain, setelah menerima hadiah khusus Inovasi Aplikasi, serta tempat ke-11 dalam acara tim (dari 20 di final, dari 300+ di antara semua peserta dalam kompetisi).

Tabel dengan konfigurasi sistem komputer, serta foto utama, diambil dari situs http://www.hpcwire.com/ .