Rumah  >  Artikel  >  Peranti teknologi  >  Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

WBOY
WBOYke hadapan
2023-04-11 16:37:031532semak imbas

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Pengenalan

​ John Ousterhout, seorang profesor Stanford dan pencipta bahasa Tcl, pernah menulis sebuah buku "The Philosophy of Software Design", yang secara sistematik membincangkan perkara umum prinsip reka bentuk perisian dan metodologi, titik teras keseluruhan buku ialah: teras reka bentuk perisian adalah untuk mengurangkan kerumitan.

Malah, sudut pandangan ini juga terpakai pada reka bentuk perisian yang melibatkan penyesuaian perkakasan asas.

Ambil pembangunan model visual sebagai contoh Pada masa lalu, semasa pembangunan model visual, orang ramai secara amnya memberi lebih perhatian kepada pengoptimuman model itu sendiri untuk meningkatkan kelajuan dan kesan. Walau bagaimanapun, orang ramai tidak memberi perhatian kepada peringkat pra-pemprosesan imej (pra-pemprosesan) dan pasca-pemprosesan.

Apabila pengiraan model, iaitu peringkat utama latihan model dan inferens, menjadi lebih cekap, peringkat pra dan pasca pemprosesan imej semakin menjadi kesesakan prestasi tugas pemprosesan imej. ​

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Khususnya, dalam proses pemprosesan imej tradisional, bahagian pra dan pasca pemprosesan biasanya dikendalikan oleh CPU. , ini akan menyebabkan 50% hingga lebih daripada 90% beban kerja dalam keseluruhan proses berkaitan dengan pra dan pasca pemprosesan, dan dengan itu ia akan menjadi kesesakan prestasi keseluruhan proses algoritma.

1 Keterbatasan perpustakaan CV arus perdana

Masalah di atas sedang dalam masalah. pasaran Had utama perpustakaan CV arus perdana dalam senario aplikasi ialah ketidakkonsistenan dalam pergantungan pada perkakasan asas membawa kepada kerumitan dan kesesakan prestasi . Sebagai John Ousterhout merumuskan punca kerumitan: Kerumitan berpunca daripada kebergantungan.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

​Pustaka pemprosesan imej arus perdana OpenCV, senario aplikasinya Ia sangat meluas, tetapi ia juga menghadapi beberapa masalah dalam penggunaan sebenar.

Sebagai contoh, apabila anda menggunakan versi CPU OpenCV untuk melakukan latihan dahulu dan kemudian melakukan inferens, anda mungkin memerlukan versi dengan prestasi yang lebih tinggi semasa fasa inferens.

Oleh kerana dalam senario latihan, pra dan pasca pemprosesan dan inferens model boleh diliputi dalam masa, dengan itu meliputi masa pra-pemprosesan. Walau bagaimanapun, dalam saluran paip inferens, model hanya mengandungi inferens ke hadapan, dan penggunaan masa dikurangkan secara drastik selepas pecutan Tensor RT Pada masa ini, penggunaan masa pra-pemprosesan akan menjadi sangat tinggi, dan sukar untuk dilindungi inferens model.

Untuk mengurangkan masa yang memakan masa dan meningkatkan prestasi senario inferens, versi GPU OpenCV biasanya digunakan untuk pecutan.

Walau bagaimanapun, hasil yang tidak konsisten mungkin berlaku antara versi CPU dan versi GPU OpenCV. Contoh biasa ialah operator ubah saiz, yang mengira perbezaan secara berbeza antara versi CPU dan versi GPU.

OpenCV menggunakan versi operator yang berbeza semasa latihan dan inferens Semasa latihan, CPU biasanya digunakan kerana liputan operator CPUnya secara relatifnya semasa inferens, GPU biasanya digunakan kerana prestasi perbandingan. Oleh itu, ini juga boleh menyebabkan masalah dengan penjajaran hasil. Dalam erti kata lain, apabila menggunakan CPU untuk latihan model dan GPU untuk inferens model, hasil output akhir tidak akan diselaraskan.

Kedua, prestasi sesetengah pengendali GPU akan merosot. Dalam OpenCV, sesetengah pengendali GPU sendiri agak memakan masa, mengakibatkan regresi prestasi keseluruhan operator yang lebih teruk daripada versi CPU.

Ketiga, liputan operator GPU OpenCV adalah terhad dan sesetengah pengendali hanya mempunyai versi CPU. Terdapat juga beberapa pengendali GPU yang liputan parameter, jenis data, dsb. tidak setinggi versi CPU, yang membawa had penggunaan.

Akhir sekali, jika pengendali CPU dan pengendali GPU digunakan secara interaktif semasa penggunaan, sejumlah besar salinan data dan operasi penyegerakan antara CPU dan GPU akan berlaku, mengakibatkan prestasi pecutan keseluruhan tidak mencukupi.

Satu lagi perpustakaan pemprosesan imej yang biasa digunakan ialah TorchVision.

​Apabila TorchVision melakukan inferens model, sesetengah pengendali kekurangan antara muka C++, mengakibatkan kekurangan fleksibiliti semasa membuat panggilan. Jika anda ingin menjana versi C++, anda mesti menjananya melalui TorchScript. Ini akan menyebabkan banyak kesulitan dalam penggunaan, kerana memasukkan operator daripada perpustakaan lain di tengah-tengah proses untuk kegunaan interaktif akan membawa overhed dan beban kerja tambahan. Satu lagi kelemahan TorchVision ialah liputan operator tidak tinggi.

Di atas adalah had perpustakaan CV arus perdana semasa. ​

2. Saluran CV bersatu

Memandangkan kesesakan prestasi pra dan pasca pemprosesan terutamanya terletak pada penggunaan pengiraan CPU, dan model Teknologi penggunaan GPU dalam peringkat pengkomputeran telah menjadi semakin matang.

Kemudian, penyelesaian semula jadi ialah menggunakan GPU untuk mempercepatkan pra dan pasca pemprosesan, yang akan meningkatkan prestasi keseluruhan saluran paip algoritma.

​Untuk tujuan ini, NVIDIA dan ByteDance bersama-sama membuka sumber pustaka operator prapemprosesan imej CV-CUDA. CV-CUDA boleh berjalan dengan cekap pada GPU, dan kelajuan pengendali boleh mencapai kira-kira seratus kali ganda daripada OpenCV.

Pada 15 Januari 2023, dari 9:30 hingga 11:30, "Kelas Terbuka Pertama CV-CUDA" yang dihoskan oleh NVIDIA menjemput 3 pelajar daripada pakar Teknikal NVIDIA, ByteDance dan Sina Weibo (Zhang Yi, Sheng Yiyao, Pang Feng) berkongsi secara mendalam mengenai topik berkaitan Artikel ini meringkaskan intipati ucapan tiga pakar. ​Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

​Terdapat banyak faedah menggunakan GPU dan bukannya CPU. Pertama sekali, selepas operator pra dan pasca pemprosesan dipindahkan ke GPU, kecekapan pengiraan pengendali boleh dipertingkatkan.

Kedua, memandangkan semua proses dilakukan pada GPU, penyalinan data antara CPU dan GPU boleh dikurangkan.

Akhir sekali, dengan memindahkan beban CPU ke GPU, beban CPU boleh dikurangkan dan CPU boleh digunakan untuk mengendalikan tugas lain yang memerlukan logik yang kompleks. ​

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Selepas memindahkan keseluruhan proses ke GPU, keseluruhan saluran paip boleh dipertingkatkan sebanyak hampir 30 kali ganda, oleh itu Simpan pengiraan overhed dan mengurangkan kos operasi.

Seperti yang anda boleh lihat daripada perbandingan data dalam rajah, di bawah konfigurasi pelayan dan parameter yang sama, OpenCV boleh membuka sehingga 2-3 strim video 30fps 1080p . Untuk aliran selari, PyTorch (CPU) boleh membuka sehingga 1.5 aliran selari, manakala CV-CUDA boleh membuka sehingga 60 aliran selari. Dapat dilihat bahawa prestasi keseluruhan telah dipertingkatkan dengan banyak Operator pra-pemprosesan yang terlibat termasuk mengubah saiz, padding, normalize, dsb., dan operator pasca pemprosesan termasuk memotong, mengubah saiz, mengarang, dsb.

3 Asynchronous

Mengapa GPU boleh menyesuaikan diri dengan keperluan pecutan pra- dan pasca pemprosesan? Manfaat daripada tak segerak antara pengiraan model dan pra dan pasca pemprosesan, serta menyesuaikan diri dengan keupayaan pengkomputeran selari GPU.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

We The prapemprosesan penyegerakan latihan model dan inferens model dijelaskan secara berasingan.

1 Prapemprosesan penyegerakan latihan model

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Latihan model boleh dibahagikan kepada dua bahagian, pertama ialah penyediaan data, dan kedua ialah pengiraan model.

Rangka kerja pembelajaran mesin arus perdana semasa, seperti PyTorch dan TensorFlow, adalah tidak segerak antara penyediaan data dan pengiraan model. Mengambil PyTorch sebagai contoh, ia akan memulakan beberapa sub-proses untuk penyediaan data.

Seperti yang ditunjukkan dalam rajah, ia mengandungi dua keadaan iaitu pengiraan model dan penyediaan data Terdapat hubungan jujukan masa antara keduanya D0 selesai, Anda boleh meneruskan ke B0, dan seterusnya.

Dari sudut prestasi, kami menjangkakan kelajuan penyediaan data untuk bersaing dengan kelajuan pengiraan model. Walau bagaimanapun, dalam situasi sebenar, sesetengah proses pembacaan data dan prapemprosesan data mengambil masa yang lama, menyebabkan tempoh tetingkap tertentu sebelum pengiraan model yang sepadan boleh dilakukan, mengakibatkan pengurangan penggunaan GPU.

Penyediaan data boleh dibahagikan kepada pembacaan data dan prapemprosesan data Kedua-dua peringkat ini boleh dilaksanakan secara bersiri atau selari, seperti di bawah rangka kerja PyTorch Ia dilaksanakan. secara bersiri.

Terdapat banyak faktor yang mempengaruhi prestasi pembacaan data, seperti media storan data, format storan, selari, bilangan proses pelaksanaan, dsb.

Sebaliknya, Faktor yang mempengaruhi prestasi prapemprosesan data adalah agak mudah, iaitu tahap selari. Semakin tinggi tahap paralelisme, semakin baik prestasi prapemprosesan data. Dengan kata lain, menjadikan prapemprosesan data dan pengiraan model tidak segerak dan meningkatkan keselarian prapemprosesan data boleh meningkatkan prestasi prapemprosesan data.

2 Prapemprosesan penyegerakan inferens model

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

​Dalam Dalam fasa inferens model, prestasinya mempunyai dua penunjuk, yang pertama ialah daya tampung, dan yang kedua ialah kelewatan. Pada tahap tertentu, kedua-dua penunjuk ini adalah saling eksklusif.

Untuk satu pertanyaan, selepas pelayan menerima data, ia akan mempraproses data dan kemudian melakukan inferens model. Jadi untuk satu pertanyaan, ia adalah proses bersiri pada tahap tertentu.

Tetapi ini sangat tidak cekap dan akan membazirkan banyak sumber pengkomputeran. Untuk meningkatkan daya pemprosesan, banyak enjin inferens akan menggunakan strategi yang sama seperti fasa latihan untuk menyediakan data dan pengiraan model secara tidak segerak. Dalam fasa penyediaan data, sejumlah pertanyaan akan terkumpul dan digabungkan menjadi satu kelompok, dan kemudian pengiraan seterusnya akan dilakukan untuk meningkatkan daya pemprosesan keseluruhan.

Dari segi daya pemprosesan, inferens model dan latihan model adalah agak serupa. Dengan mengalihkan peringkat prapemprosesan data daripada CPU ke GPU, keuntungan pemprosesan boleh dicapai.

Pada masa yang sama, dari perspektif kelewatan, untuk setiap pernyataan pertanyaan, jika masa yang diluangkan dalam proses prapemprosesan dapat dikurangkan, kelewatan untuk setiap pertanyaan akan dipendekkan sewajarnya.

Satu lagi ciri penaakulan model ialah jumlah pengiraan modelnya agak kecil, kerana ia hanya melibatkan pengiraan hadapan dan bukan pengiraan ke belakang. Ini bermakna inferens model memerlukan prapemprosesan data yang lebih tinggi. ​

3. Isu teras: Persaingan sumber CPU

Dengan mengandaikan sumber CPU mencukupi untuk pengiraan, secara teorinya prapemprosesan tidak akan menjadi hambatan Prestasi. Kerana sebaik sahaja anda mendapati prestasi tidak dapat bersaing, anda hanya perlu menambah proses untuk melakukan operasi prapemprosesan ​.

Oleh itu, prapemprosesan data mungkin menjadi hambatan prestasi hanya apabila terdapat persaingan untuk sumber CPU.

Dalam perniagaan sebenar, persaingan untuk sumber CPU adalah sangat biasa, yang akan membawa kepada pengurangan penggunaan GPU dalam latihan dan peringkat inferens seterusnya, dan dengan itu mengurangkan kelajuan latihan.

Memandangkan kuasa pengkomputeran GPU terus meningkat, adalah dijangka bahawa keperluan kelajuan untuk fasa penyediaan data akan menjadi lebih tinggi dan lebih tinggi.

Atas sebab ini, adalah satu pilihan semula jadi untuk mengalihkan bahagian prapemprosesan ke GPU untuk mengurangkan masalah persaingan sumber CPU dan meningkatkan penggunaan GPU.

Secara keseluruhannya, reka bentuk ini mengurangkan kerumitan sistem dan secara langsung menyesuaikan badan utama saluran paip model kepada GPU, yang boleh membawa bantuan besar untuk meningkatkan penggunaan kedua-dua GPU dan CPU. Pada masa yang sama, ia juga mengelakkan masalah penjajaran hasil antara versi yang berbeza, mengurangkan kebergantungan, dan mematuhi prinsip reka bentuk perisian yang dicadangkan oleh John Ousterhout. ​

4. CV-CUDA

Mengalih proses pra-pemprosesan dan pasca-pemprosesan kepada keperluan GPU untuk memenuhi pelbagai syarat syarat.

Pertama ialah prestasinya hendaklah sekurang-kurangnya lebih baik daripada CPU. Ini terutamanya berdasarkan keupayaan pengkomputeran serentak tinggi GPU.

Yang kedua ialah untuk mempercepatkan prapemprosesan dan tidak memberi kesan negatif kepada proses lain seperti inferens model. Untuk keperluan kedua, setiap pengendali CV-CUDA mempunyai antara muka antara aliran dan memori CUDA, supaya sumber GPU boleh diperuntukkan dengan lebih munasabah, supaya apabila menjalankan operator prapemprosesan ini pada GPU, ia tidak akan mempunyai terlalu banyak impak. kepada pengiraan model itu sendiri.

Ketiga, syarikat Internet mempunyai keperluan perniagaan yang sangat pelbagai, melibatkan pelbagai jenis model, dan logik prapemprosesan yang sepadan Oleh itu, pengiraan prapemprosesan perlu dibangunkan disesuaikan, membolehkan lebih fleksibiliti untuk melaksanakan logik yang kompleks.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Secara umumnya, CV-CUDA menganalisis saluran paip model daripada aspek perkakasan, perisian, algoritma, bahasa, dsb. Peringkat pra dan pasca pemprosesan dipercepatkan dan keseluruhan saluran paip disatukan.

1. Perkakasan

​Dari segi perkakasan, CV-CUDA adalah berdasarkan keupayaan pengkomputeran selari GPU, yang boleh meningkatkan kelajuan dan daya pemprosesan pra dan pasca pemprosesan, dan kurangkan bilangan model Kira masa menunggu dan tingkatkan penggunaan GPU.

CV-CUDA menyokong mod Kelompok dan Bentuk Boleh Ubah. Mod kelompok menyokong pemprosesan kelompok dan boleh memanfaatkan sepenuhnya ciri selari GPU Walau bagaimanapun, OpenCV hanya boleh memanggil imej tunggal tanpa mengira sama ada versi CPU atau GPU.

Mod Bentuk Boleh Ubah bermakna dalam satu kelompok, panjang dan lebar setiap gambar boleh berbeza. Panjang dan lebar imej di Internet biasanya tidak konsisten Kaedah rangka kerja arus perdana adalah untuk mengubah saiz panjang dan lebar kepada saiz yang sama, kemudian membungkus imej dengan panjang dan lebar yang sama ke dalam satu kelompok, dan kemudian memproses kumpulan. CV-CUDA boleh terus meletakkan imej dengan panjang dan lebar yang berbeza ke dalam satu kelompok untuk diproses, yang bukan sahaja meningkatkan kecekapan, tetapi juga sangat mudah untuk digunakan.

Satu lagi makna Bentuk Pembolehubah ialah apabila memproses imej, anda boleh menentukan parameter tertentu bagi setiap imej, seperti putar Untuk sekumpulan imej, anda boleh menentukan sudut putaran setiap imej. ​

2. Perisian

Dari segi perisian, CV-CUDA telah membangunkan sejumlah besar kaedah pengoptimuman perisian untuk pengoptimuman selanjutnya, termasuk pengoptimuman prestasi (seperti pengoptimuman akses memori) dan pengoptimuman penggunaan sumber (seperti pra-peruntukan memori video), supaya ia boleh berjalan dengan cekap dalam latihan awan dan senario inferens.

Yang pertama ialah tetapan pra-peruntukan memori video. Apabila OpenCV memanggil versi GPU, sesetengah pengendali akan melaksanakan cudaMalloc secara dalaman, yang akan menyebabkan peningkatan ketara dalam penggunaan masa. Dalam CV-CUDA, semua pra-peruntukan memori video dilakukan semasa fasa permulaan, manakala semasa fasa latihan dan inferens, tiada operasi peruntukan memori video dilakukan, dengan itu meningkatkan kecekapan.

Kedua, semua pengendali beroperasi secara tidak segerak. CV-CUDA menyepadukan sejumlah besar kernel, dengan itu mengurangkan bilangan kernel, dengan itu mengurangkan masa permulaan kernel dan penyalinan dan pemadaman data, dan meningkatkan kecekapan operasi keseluruhan.

Ketiga, CV-CUDA juga mengoptimumkan capaian memori, seperti penggabungan capaian memori, pembacaan dan penulisan vektor, dsb., untuk meningkatkan penggunaan lebar jalur dan juga Gunakan perkongsian ingatan untuk meningkatkan capaian memori, kecekapan membaca dan menulis.

Akhirnya, CV-CUDA juga telah membuat banyak pengoptimuman dalam pengiraan, seperti matematik pantas, pengurangan meledingkan/mengurangkan blok, dsb.

3. Algoritma

​Dari segi algoritma, pengendali CV-CUDA direka dan disesuaikan secara bebas untuk menyokong pelaksanaan logik yang sangat kompleks dan mudah untuk digunakan dan nyahpepijat.

Bagaimana untuk memahami reka bentuk bebas? Terdapat dua bentuk panggilan pengendali dalam perpustakaan pemprosesan imej Satu ialah bentuk saluran paip keseluruhan, yang hanya boleh mendapatkan hasil saluran paip, seperti DALI, dan satu lagi ialah bentuk pengendali bebas modular, yang boleh mendapatkan setiap operator. Keputusan individu, seperti OpenCV. CV-CUDA menggunakan borang panggilan yang sama seperti OpenCV, yang lebih mudah digunakan dan nyahpepijat. ​

4. Bahasa

Dari segi bahasa, CV-CUDA menyokong API yang kaya, yang boleh menyambung dengan lancar sebelum dan selepas pemprosesan kepada latihan dan senario inferens.

API ini termasuk antara muka C, C++, Python, dll. yang biasa digunakan, yang membolehkan kami menyokong senario latihan dan inferens juga menyokong PyTorch dan TensorRT . Antara muka, pada masa hadapan, CV-CUDA juga akan menyokong antara muka seperti Triton, TensorFlow dan JAX.

Dalam fasa inferens, anda boleh terus menggunakan antara muka Python atau C++ untuk inferens, selagi anda memastikan bahawa model pra dan pasca pemprosesan , dan GPU diletakkan pada strim yang sama semasa inferens.

5 Kes Permohonan

Dengan menunjukkan CV-CUDA dalam NVIDIA, NVIDIA Daripada kes aplikasi Jiedong dan Sina Weibo, kita dapat menyedari betapa pentingnya peningkatan prestasi yang dibawa oleh CV-CUDA.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Yang pertama ialah kes pengelasan imej yang ditunjukkan oleh NVIDIA.

Dalam saluran paip pengelasan imej, yang pertama ialah penyahkod JPEG, yang menyahkod imej adalah langkah pra-pemprosesan, termasuk mengubah saiz, menukar data taip, normalkan dan format semula; bahagian biru ialah proses penaakulan ke hadapan menggunakan PyTorch, dan akhirnya keputusan klasifikasi diberi markah dan diisih.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Membandingkan prestasi versi CPU dan versi GPU CV-CUDA dan OpenCV boleh didapati , versi GPU OpenCV boleh mencapai peningkatan prestasi yang lebih besar berbanding dengan versi CPU, dan dengan menggunakan CV-CUDA, prestasi boleh digandakan. Sebagai contoh, bilangan imej yang diproses oleh pengendali CPU OpenCV setiap milisaat ialah 22 dan bilangan imej yang diproses oleh pengendali GPU setiap milisaat adalah lebih daripada 200. CV-CUDA boleh memproses lebih daripada 500 imej setiap milisaat, dan daya pemprosesannya ialah CPU OpenCV Ia adalah lebih daripada 20 kali ganda daripada versi GPU dan dua kali ganda daripada versi GPU.

Yang kedua ialah tiga kes OCR1, OCR2 dan pelbagai mod video yang ditunjukkan oleh ByteDance.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Dalam latihan model, anda boleh melihat OCR1, OCR2 dan video berbilang mod Dihidupkan tiga tugasan, peningkatan prestasi sebanyak 50% hingga 100% diperolehi selepas menggunakan CV-CUDA.

Mengapa terdapat peningkatan prestasi yang begitu besar? Malah, satu perkara yang sama dengan ketiga-tiga tugas ini ialah logik prapemprosesan imej mereka sangat kompleks, seperti menyahkod, mengubah saiz, memangkas, dsb., dan ini masih merupakan kategori yang besar, mungkin terdapat banyak kategori yang lebih kecil dalam setiap satu kategori operator. Prapemprosesan kelas atau subkelas. Untuk tiga tugasan ini, mungkin terdapat lebih daripada sedozen jenis peningkatan data pada pautan prapemprosesan, jadi tekanan pengiraan pada CPU adalah sangat tinggi Jika bahagian pengiraan ini boleh dialihkan ke GPU, persaingan Sumber CPU akan dikurangkan dengan ketara, dan daya pengeluaran keseluruhan akan bertambah baik.

Akhir sekali, terdapat kes pemprosesan video yang ditunjukkan di Sina Weibo.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Untuk proses pemprosesan video, pendekatan tradisional ialah meletakkan bingkai video terlebih dahulu Penyahkodan persekitaran CPU: menyahkod aliran bait asal ke dalam data imej, kemudian lakukan beberapa operasi biasa, seperti mengubah saiz, memangkas, dsb., dan kemudian memuat naik data ke GPU untuk pengiraan model tertentu.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Kaedah pemprosesan CV-CUDA adalah untuk menyahkod CPU dan meletakkannya di dalam memori. Strim bait dimuat naik ke GPU, dan prapemprosesan juga terletak pada GPU, supaya ia boleh disambungkan dengan lancar dengan pengiraan model tanpa memerlukan operasi penyalinan antara memori video dan memori.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Rajah menunjukkan penggunaan OpenCV (nombor ganjil) dan CV-CUDA (genap nombor) Masa pemprosesan masing-masing, biru merujuk kepada masa penggunaan model, oren merujuk kepada masa penggunaan penyahkodan, dan hijau merujuk kepada masa penggunaan prapemprosesan.

OpenCV boleh dibahagikan kepada dua mod: penyahkod CPU dan penyahkodan GPU CV-CUDA hanya menggunakan mod penyahkod GPU.

Seperti yang anda lihat, untuk OpenCV yang dinyahkod CPU, penyahkodan dan prapemprosesan OpenCV adalah lebih memakan masa berbanding CV-CUDA.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Melihat OpenCV menggunakan penyahkod GPU, kita dapat melihat bahawa OpenCV dan CV- Masa penggunaan CUDA dalam model dan bahagian penyahkodan adalah hampir, tetapi masih terdapat jurang yang besar dalam prapemprosesan.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

Dari segi perbandingan saluran paip secara keseluruhan, CV-CUDA juga mempunyai kelebihan yang jelas satu tangan CV-CUDA menjimatkan lebih banyak sumber CPU, iaitu, apabila penggunaan GPU penuh, CV-CUDA hanya memerlukan 10% daripada konfigurasi CPU OpenCV pada masa yang sama, CV-CUDA juga menjimatkan lebih banyak sumber GPU saluran paip keseluruhan, kecekapan CV- CUDA meningkat sebanyak 70%.

6 Tinjauan Masa Depan

​CV-CUDA secara berkesan boleh menyelesaikan masalah CPU dalam kedua-dua latihan model dan peringkat inferens. Masalah persaingan sumber boleh meningkatkan kecekapan latihan model dan inferens.

Tetapi bagaimana untuk memahami dengan betul kelebihan CV-CUDA? Ia adalah perlu untuk memahami premis asas untuk fungsinya, dan kelebihannya berbanding CPU dan OpenCV bukanlah mutlak.

Pertama sekali, CV-CUDA sebenarnya bukanlah ubat penawar. Sebagai contoh, dalam fasa latihan model, jika kesesakan bukan dalam prapemprosesan, tetapi dalam pembacaan data dan inferens model. Pada masa ini, jika anda menggunakan CV-CUDA untuk menggantikan penyelesaian prapemprosesan asal, ia sebenarnya tidak berguna.

Selain itu, dalam proses menggunakan CV-CUDA, jika beban kerja CPU dan GPU diperuntukkan secara munasabah kepada logik pra-pemprosesan, kadangkala hasil prestasi yang lebih baik boleh dicapai.

Sebagai contoh, CPU masih boleh menyahkod dan mengubah saiz imej, kemudian mengubah saiznya pada GPU untuk diproses.

Mengapa meletakkan penyahkodan dan saiz semula pada CPU? Pertama sekali, untuk penyahkodan imej, unit penyahkodan keras GPU sebenarnya terhad. Kedua, untuk resize, biasanya resize akan menukar gambar yang lebih besar kepada gambar yang lebih kecil.

Jika data disalin ke GPU sebelum mengubah saiz, ia mungkin menduduki banyak lebar jalur untuk pemindahan data memori video.

Sudah tentu, cara memperuntukkan beban kerja antara CPU dan GPU masih perlu dinilai berdasarkan situasi sebenar.

Prinsip yang paling penting ialah tidak melakukan pengiraan silih berganti antara CP​U dan GPU, kerana terdapat overhed dalam menghantar data merentas peranti. Jika selang-seli terlalu kerap, faedah yang dibawa oleh pengiraan itu sendiri mungkin diratakan, mengakibatkan penurunan prestasi dan bukannya peningkatan.

Pada Disember 2022, CV-CUDA mengeluarkan versi alfa, yang mengandungi lebih daripada 20 pengendali, seperti Flip, Rotate, Perspective, Resize, dll yang biasa digunakan .

Pada masa ini OpenCV mempunyai lebih banyak pengendali, dengan beribu-ribu pengendali pada masa ini hanya mempercepatkan pengendali yang lebih biasa digunakan, dan akan terus berbuat demikian pada masa hadapan Tambah operator baharu.

CV-CUDA juga akan mengeluarkan versi beta pada bulan Mac tahun ini, yang akan menambah lebih daripada 20 pengendali kepada lebih daripada 50 pengendali. Versi beta akan termasuk beberapa pengendali yang sangat biasa digunakan, seperti ConvexHull, FindContours, dll.

Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh

7 Epilog

Kembali. Melihat kembali pelan reka bentuk CV-CUDA, kita dapati bahawa tidak ada prinsip yang terlalu rumit di sebaliknya, malah ia boleh dikatakan jelas sekali imbas.

Dari sudut kerumitan, ini boleh dikatakan kelebihan CV-CUDA. "The Philosophy of Software Design" menyebut prinsip untuk menilai kerumitan perisian - jika sistem perisian sukar difahami dan diubah suai, ia adalah sangat kompleks jika ia mudah difahami dan diubah suai, ia adalah sangat mudah;

Keberkesanan CV-CUDA boleh difahami sebagai kebolehsuaian peringkat pengiraan model kepada GPU, yang memacu kebolehsuaian pra dan pasca- peringkat pemprosesan kepada GPU. Dan trend ini sebenarnya baru sahaja bermula.

Atas ialah kandungan terperinci Daya tampung meningkat sebanyak 30 kali ganda: Saluran paip CV bergerak ke arah selari tindanan penuh. 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