Pembelajaran mendalam (DL) adalah bidang yang berkembang pesat, dan para praktisi terus berinovasi model DL dan menemukan cara untuk mempercepatnya. Operator khusus adalah salah satu mekanisme yang digunakan pengembang untuk mendorong batas inovasi DL dengan memperluas fungsionalitas kerangka pembelajaran mesin (ML) yang ada seperti PyTorch. Secara umum, sebuah operator menjelaskan fungsi matematika dari lapisan dalam model pembelajaran yang mendalam. A operator kustom memungkinkan pengembang membangun fungsi matematika mereka sendiri untuk lapisan dalam model pembelajaran mendalam.
Pelatihan AWS dan AWS Inferensia2, yang dibuat khusus untuk pelatihan dan inferensi DL, memperluas fungsionalitas dan kinerjanya dengan mendukung operator khusus (atau disingkat CustomOps). Neuron AWS, SDK yang mendukung akselerator ini, menggunakan antarmuka standar PyTorch untuk CustomOps. Pengembang dapat dengan mudah memulai dengan kode yang ada saat menggunakan berbasis Trainium Instans Amazon EC2 Trn1 atau berbasis Inferensia2 Contoh Amazon EC2 Inf2. Dalam postingan ini, kami membahas manfaat CustomOps, penerapannya yang efisien di Trainium, dan contoh untuk membantu Anda memulai CustomOps di instans Trn1 yang didukung Trainium.
Untuk mengikuti, keakraban dengan layanan inti AWS seperti Cloud komputasi elastis Amazon (Amazon EC2) tersirat, dan pengenalan dasar dengan deep learning, PyTorch, dan C++ akan sangat membantu.
Operator khusus di PyTorch dan manfaatnya
CustomOps untuk PyTorch berasal dari versi 1.10, disebut PyTorch C++ Frontend, dan menyediakan mekanisme yang mudah digunakan untuk mendaftarkan CustomOps yang ditulis dalam C++. Berikut beberapa keuntungan yang diberikan CustomOps:
- Optimalisasi kinerja โ CustomOps dapat dioptimalkan untuk kasus penggunaan tertentu, yang mengarah ke model yang berjalan lebih cepat dan peningkatan kinerja.
- Peningkatan ekspresi model โ Dengan CustomOps, Anda dapat mengekspresikan perhitungan kompleks yang tidak mudah diungkapkan menggunakan operator bawaan yang disediakan oleh PyTorch.
- Peningkatan modularitas โ Anda dapat menggunakan CustomOps sebagai blok penyusun untuk membuat model yang lebih kompleks dengan membuat pustaka C++ dari komponen yang dapat digunakan kembali. Ini membuat proses pengembangan lebih mudah dan lebih modular, dan memfasilitasi eksperimen yang cepat.
- Peningkatan fleksibilitas โ CustomOps memungkinkan operasi di luar operator bawaanโyaitu, mereka menyediakan cara yang fleksibel untuk menentukan operasi kompleks yang tidak diimplementasikan menggunakan yang standar.
Dukungan Trainium untuk operator khusus
Trainium (dan AWS Inferentia2) mendukung CustomOps dalam perangkat lunak melalui Neuron SDK dan mempercepatnya dalam perangkat keras menggunakan mesin GPSIMD (mesin General Purpose Single Instruction Multiple Data). Mari kita lihat bagaimana ini memungkinkan penerapan CustomOps yang efisien dan memberikan peningkatan fleksibilitas dan kinerja saat mengembangkan dan berinovasi model DL.
SDK Neuron
Neuron SDK membantu pengembang melatih model di Trainium dan menerapkan model di akselerator AWS Inferentia. Ini terintegrasi secara native dengan kerangka kerja, seperti PyTorch dan TensorFlow, sehingga Anda dapat terus menggunakan alur kerja dan kode aplikasi yang ada untuk melatih model pada instans Trn1.
Neuron SDK menggunakan antarmuka PyTorch standar untuk CustomOps. Pengembang dapat menggunakan antarmuka pemrograman standar di PyTorch untuk menulis CustomOps di C++ dan memperluas dukungan operator resmi Neuron. Neuron kemudian mengkompilasi CustomOps ini untuk berjalan secara efisien di mesin GPSIMD, yang dijelaskan lebih detail di bagian berikut. Hal ini memudahkan untuk mengimplementasikan CustomOps eksperimental baru dan mempercepatnya pada perangkat keras yang dibuat khusus, tanpa pengetahuan yang mendalam tentang perangkat keras yang mendasarinya.
Tujuan Umum Single Instruction Multiple Data engine
Pada inti pengoptimalan Trainium terdapat arsitektur NeuronCore, unit komputasi heterogen yang sepenuhnya independen dengan empat mesin utama: tensor, vektor, skalar, dan mesin GPSIMD. Mesin skalar dan vektor sangat diparalelkan dan dioptimalkan untuk operasi floating-point. Mesin tensor didasarkan pada larik sistolik yang dioptimalkan daya yang mendukung perhitungan presisi campuran.
Mesin GPSIMD adalah mesin Single Instruction Multiple Data (SIMD) tujuan umum yang dirancang untuk menjalankan dan mempercepat CustomOps. Mesin ini terdiri dari delapan prosesor tujuan umum selebar 512-bit yang dapat diprogram sepenuhnya, yang dapat menjalankan kode-C garis lurus dan memiliki akses inline langsung ke mesin NeuronCore-v2 lainnya, serta memori SRAM dan HBM yang disematkan. Bersama-sama, kemampuan ini membantu menjalankan CustomOps secara efisien di Trainium.
Ambil contoh operator seperti TopK, LayerNorm, atau ZeroCompression, yang membaca data dari memori dan hanya menggunakannya untuk perhitungan ALU dalam jumlah minimal. Sistem CPU reguler sepenuhnya terikat memori untuk perhitungan ini, dan kinerja dibatasi oleh waktu yang diperlukan untuk memindahkan data ke dalam CPU. Di Trainium, mesin GP-SIMD digabungkan erat dengan cache on-chip menggunakan antarmuka streaming bandwidth tinggi, yang dapat mempertahankan bandwidth memori 2 TB/dtk. Oleh karena itu, CustomOps seperti ini dapat dijalankan dengan sangat cepat di Trainium.
Operator kustom Neuron SDK dalam praktiknya
Untuk posting ini, kami menganggap DLAMI (lihat petunjuk untuk keduanya Ubuntu or Linux Amazon) sedang digunakan untuk membuat instance EC2 Trn1 (baik 2x.large atau 32x.large). Perhatikan bahwa semua perangkat lunak, driver, dan alat yang diperlukan telah diinstal pada DLAMI, dan hanya aktivasi lingkungan Python yang diperlukan untuk mulai mengerjakan tutorial. Kami mereferensikan fungsionalitas CustomOps yang tersedia di Neuron sebagai โNeuron CustomOps.โ
Mirip dengan proses integrasi PyTorch dengan kode C++, Neuron CustomOps memerlukan implementasi C++ dari operator melalui subset yang diporting NeuronCore dari API C++ Torch. Implementasi C++ dari operator disebut fungsi kernel, dan port C++ API berisi semua yang diperlukan untuk pengembangan CustomOps dan integrasi model, khususnya kelas tensor dan skalar di c10 (ruang nama yang digunakan untuk kode C++ tingkat rendah di berbagai pustaka PyTorch), dan subset operator ATen (atau Tensor Otomatis, pustaka C++ yang menyediakan operasi inti tensor yang digunakan di PyTorch).
Grafik torch.h
header perlu disertakan saat mendefinisikan kernel agar Anda memiliki akses ke subset porting NeuronCore dari API Pytorch C++:
Neuron CustomOps juga membutuhkan a fungsi bentuk. Fungsi bentuk memiliki tanda tangan fungsi yang sama dengan fungsi kernel, tetapi tidak melakukan perhitungan apa pun. Ini hanya menentukan bentuk tensor keluaran tetapi bukan nilai sebenarnya.
Neuron CustomOps dikelompokkan ke dalam pustaka, dan makro digunakan untuk mendaftarkannya ke NEURON_LIBRARY
ruang lingkup dari dalam fungsi bentuk. Fungsi akan dijalankan di host pada waktu kompilasi dan akan membutuhkan register.h
tajuk dari perpustakaan torchneuron:
Terakhir, pustaka khusus dibuat dengan memanggil API beban. Jika memasok build_directory
parameter, file perpustakaan akan disimpan di direktori yang ditunjukkan:
Untuk menggunakan CustomOp dari model PyTorch, cukup muat pustaka dengan memanggil load_library
API dan panggil Neuron CustomOp dengan cara yang sama seperti CustomOps dipanggil di PyTorch melalui ruang nama torch.ops. Formatnya biasanya torch.ops.<library_name>.<operator_name>
. Lihat kode berikut:
Perhatikan bahwa custom_op.load
API membangun pustaka C++, sedangkan custom_op.load_library
API memuat file pustaka yang sudah dibuat.
Contoh: Neuron CustomOps dalam pelatihan MLP
Untuk memulai, lakukan langkah-langkah berikut:
- Buat dan luncurkan instans EC2 Trn1 Anda. Pastikan Anda menggunakan gambar DLAMI (baik Ubuntu or Linux Amazon, pra-instal dengan semua perangkat lunak Neuron yang diperlukan) dan Anda telah menentukan ukuran volume root sebesar 512 GB.
- Setelah instans Anda aktif dan berjalan, SSH ke instans Anda.
- Instal PyTorch Neuron (torch-neuronx) pada instance Trn1 Anda yang sedang berjalan. Untuk instruksi, lihat Neuron Custom C++ Operator dalam Pelatihan MLP.
- Unduh kode sampel dari Repositori GitHub.
Sekarang setelah lingkungan Anda siap, lanjutkan melalui posting ini saat kami menjelaskan implementasi C++ CustomOp tipikal di Neuron dalam bentuk fungsi maju dan mundur Relu untuk digunakan pada model multilayer perceptron (MLP) sederhana. Langkah-langkahnya dijelaskan dalam Dokumentasi Neuron AWS.
Kode contoh dari repositori menunjukkan dua folder:
- ./customop_mlp/PyTorch โ Berisi kode Relu yang akan dikompilasi untuk sebuah CPU
- ./customop_mlp/neuron โ Berisi kode Relu yang akan dikompilasi untuk Trainium
Kembangkan Neuron CustomOp: Fungsi kernel
Lingkungan host atau dev untuk pengembangan fungsi kernel (Neuron CustomOp) dapat menjalankan PyTorch 1.13 dan kompiler yang kompatibel dengan C++ 17 di lingkungan Linux. Ini sama dengan mengembangkan fungsi C++ apa pun untuk PyTorch, dan satu-satunya pustaka yang perlu ada di lingkungan pengembangan adalah untuk PyTorch dan C++. Dalam contoh berikut, kami membuat file relu.cpp dengan fungsi maju dan mundur Relu khusus:
Saat mengembangkan Neuron CustomOp untuk Neuron, pastikan Anda mempertimbangkan fitur dan API yang saat ini didukung. Untuk informasi lebih lanjut, lihat Panduan Referensi API Operator Kustom [Eksperimental].
Bangun dan daftarkan Neuron CustomOp: Fungsi bentuk
Build untuk lingkungan Neuron CustomOp dan runtime adalah instans Trn1 tempat pelatihan akan berlangsung, dan Neuron CustomOp akan dikompilasi dan didaftarkan sebagai pustaka neuronx-cc dan diinterpretasikan oleh Neuron runtime untuk dijalankan pada GP-SIMD yang sangat dioptimalkan mesin.
Untuk membuat dan mendaftarkan Neuron CustomOp, kita perlu membuat fungsi bentuk (shape.cpp
) yang akan menentukan tensor input dan output dan mendaftarkan operator: the relu_fwd_shape
dan relu_bwd_shape
fungsi. Lihat kode berikut:
Grafik relu_fwd_shape
dan relu_bwd_shape
fungsi menentukan bentuk tensor keluaran (agar berukuran sama dengan tensor masukan). Kemudian kami mendaftarkan fungsi di NEURON_LIBRARY
cakupan.
Dalam majalah ./customop_ml/
contoh repositori neuron, kami memiliki skrip build.py untuk menjalankan build dan registrasi CustomOp, cukup dengan memanggil fungsi load dari torch_neuronx.xla_impl
paket:
Dalam majalah build_directory
, kita harus menemukan librelu.so
perpustakaan siap untuk dimuat dan digunakan dalam melatih model kami.
Bangun model MLP dengan Neuron CustomOp
Di bagian ini, kita melalui langkah-langkah untuk membangun model MLP dengan Neuron CustomOp.
Tentukan kelas Relu
Untuk penjelasan mendetail tentang cara melatih model MLP, lihat Tutorial Pelatihan Perceptron Multi-Lapisan.
Setelah kami membangun CustomOp, kami membuat paket Python bernama my_ops.py
, tempat kami mendefinisikan kelas Relu PyTorch, yang diwarisi dari fungsi torch autograd. Fungsi autograd mengimplementasikan diferensiasi otomatis, sehingga dapat digunakan dalam loop pelatihan.
Pertama kita memuat pustaka librelu.so, lalu kita mendefinisikan kelas baru dengan fungsi maju dan mundur yang ditentukan dengan dekorator metode statis. Dengan cara ini, metode dapat dipanggil secara langsung saat kita mendefinisikan model. Lihat kode berikut:
Periksa model MLP
Sekarang kami siap untuk menulis model perceptron multilayer kami dengan Neuron CustomOp kami dengan mengimpor file my_ops
paket tempat kami mendefinisikan kelas Relu:
Jalankan skrip pelatihan
Sekarang kita bisa melatih model kita dengan menggunakan train.py
skrip yang disediakan:
Dengan mengirimkan model ke perangkat xla, model dan operator kustom Relu dikompilasi untuk dijalankan oleh runtime Neuron menggunakan perangkat keras Trainium yang dioptimalkan.
Dalam contoh ini, kami menunjukkan cara membuat operator Relu khusus yang memanfaatkan mesin perangkat keras (GP-SIMD) yang tersedia di chip akselerator Trainium ML. Hasilnya adalah model PyTorch terlatih yang sekarang dapat diterapkan untuk inferensi.
Kesimpulan
Arsitektur model modern yang canggih membutuhkan lebih banyak sumber daya dari staf teknik (ilmuwan data, insinyur ML, insinyur MLOps, dan lainnya) hingga infrastruktur aktual termasuk penyimpanan, komputasi, memori, dan akselerator. Persyaratan ini meningkatkan biaya dan kerumitan pengembangan dan penerapan model pembelajaran mendalam. Akselerator Trainium menghadirkan solusi berperforma tinggi dan berbiaya rendah untuk pelatihan DL di cloud. Penggunaan Trainium difasilitasi oleh Neuron SDK, yang mencakup kompiler pembelajaran mendalam, runtime, dan alat yang terintegrasi secara native ke dalam kerangka kerja populer seperti PyTorch dan TensorFlow. (Perhatikan bahwa pada saat penulisan, Neuron SDK 2.9 hanya mendukung PyTorch untuk pengembangan operator khusus.)
Seperti yang didemonstrasikan dalam postingan ini, Trainium tidak hanya menyediakan sarana untuk melatih model Anda secara berkinerja dan efisien, tetapi juga menawarkan kemampuan untuk menyesuaikan operator Anda guna menambahkan fleksibilitas dan ekspresif pada pelatihan dan eksperimen.
Untuk informasi lebih lanjut, lihat GitHub repo.
Tentang Penulis
Lorea Arrizabalaga adalah Arsitek Solusi yang selaras dengan Sektor Publik Inggris Raya, di mana dia membantu pelanggan merancang solusi ML dengan Amazon SageMaker. Dia juga merupakan bagian dari Komunitas Lapangan Teknis yang didedikasikan untuk akselerasi perangkat keras dan membantu pengujian dan pembandingan beban kerja AWS Inferentia dan AWS Trainium.
Shruti Koparkar adalah Manajer Pemasaran Produk Senior di AWS. Dia membantu pelanggan menjelajahi, mengevaluasi, dan mengadopsi infrastruktur komputasi terakselerasi Amazon EC2 untuk kebutuhan pembelajaran mesin mereka.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoAiStream. Kecerdasan Data Web3. Pengetahuan Diperkuat. Akses Di Sini.
- Mencetak Masa Depan bersama Adryenn Ashley. Akses Di Sini.
- Sumber: https://aws.amazon.com/blogs/machine-learning/how-to-extend-the-functionality-of-aws-trainium-with-custom-operators/
- :memiliki
- :adalah
- :bukan
- :Di mana
- $NAIK
- 1
- 10
- 100
- 102
- 11
- 13
- 20
- 28
- 7
- 8
- 84
- 9
- a
- kemampuan
- mempercepat
- dipercepat
- mempercepat
- mempercepat
- percepatan
- akselerator
- akselerator
- mengakses
- Akun
- di seluruh
- Activation
- menambahkan
- mengambil
- Keuntungan
- selaras
- Semua
- memungkinkan
- sepanjang
- sudah
- juga
- Amazon
- Amazon EC2
- Amazon SageMaker
- an
- dan
- Apa pun
- api
- Lebah
- Aplikasi
- arsitektur
- ADALAH
- AS
- At
- mobil
- secara otomatis
- tersedia
- AWS
- Inferensi AWS
- kembali
- Bandwidth
- berdasarkan
- dasar
- BE
- menjadi
- makhluk
- Manfaat
- Luar
- Blok
- kedua
- terikat
- batas-batas
- membangun
- Bangunan
- membangun
- dibangun di
- built-in
- tapi
- by
- C + +
- panggilan
- bernama
- panggilan
- CAN
- kemampuan
- kasus
- keping
- kelas
- kelas-kelas
- awan
- kode
- mengumpulkan
- masyarakat
- cocok
- sama sekali
- kompleks
- kompleksitas
- komponen
- komputasi
- perhitungan
- menghitung
- komputasi
- terus-menerus
- mengandung
- terus
- Core
- Biaya
- ditambah
- menutupi
- CPU
- membuat
- membuat
- Sekarang
- adat
- pelanggan
- menyesuaikan
- data
- kumpulan data
- dedicated
- mendalam
- belajar mendalam
- default
- didefinisikan
- Mendefinisikan
- mendefinisikan
- menyampaikan
- menunjukkan
- menyebarkan
- dikerahkan
- penggelaran
- menggambarkan
- dijelaskan
- Mendesain
- dirancang
- rinci
- terperinci
- dev
- pengembang
- berkembang
- Pengembangan
- alat
- berbeda
- langsung
- langsung
- Tidak
- driver
- e
- mudah
- mudah
- Mudah
- mudah digunakan
- efisien
- efisien
- antara
- tertanam
- aktif
- memungkinkan
- akhir
- Mesin
- Teknik
- Insinyur
- Mesin
- memastikan
- Lingkungan Hidup
- masa
- zaman
- Eter (ETH)
- mengevaluasi
- evaluasi
- segala sesuatu
- contoh
- contoh
- eksekusi
- ada
- penjelasan
- menyelidiki
- ekspres
- memperpanjang
- memperpanjang
- f1
- difasilitasi
- memfasilitasi
- Keakraban
- FAST
- lebih cepat
- Fitur
- bidang
- File
- terakhir
- Menemukan
- Memperbaiki
- keluwesan
- fleksibel
- Mengapung
- mengikuti
- berikut
- Untuk
- bentuk
- format
- Depan
- ditemukan
- empat
- kerangka
- dari
- Frontend
- sepenuhnya
- fungsi
- fungsionil
- fungsi
- fungsi
- Umum
- tujuan umum
- generator
- mendapatkan
- Aksi
- Go
- membimbing
- menangani
- Perangkat keras
- Memiliki
- membantu
- bermanfaat
- membantu
- High
- kinerja tinggi
- sangat
- tuan rumah
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- HTML
- http
- HTTPS
- i
- BEI
- if
- gambar
- melaksanakan
- implementasi
- diimplementasikan
- mengimplementasikan
- tersirat
- mengimpor
- pengimporan
- impor
- ditingkatkan
- in
- termasuk
- termasuk
- Termasuk
- Meningkatkan
- Pada meningkat
- meningkatkan
- independen
- menunjukkan
- informasi
- Infrastruktur
- berinovasi
- Innovation
- memasukkan
- diinstal
- contoh
- sebagai gantinya
- instruksi
- terpadu
- Terintegrasi
- integrasi
- Antarmuka
- intim
- ke
- IT
- iterasi
- jpg
- pengetahuan
- besar
- Terakhir
- jalankan
- lapisan
- lapisan
- terkemuka
- pengetahuan
- perpustakaan
- Perpustakaan
- 'like'
- Terbatas
- linux
- memuat
- pemuat
- beban
- melihat
- lepas
- murah
- mesin
- Mesin belajar
- Macro
- Utama
- membuat
- MEMBUAT
- manajer
- cara
- Marketing
- matematis
- cara
- mekanisme
- mekanisme
- kenangan
- Memori
- metode
- metode
- minimal
- campur aduk
- ML
- MLOps
- model
- model
- modular
- modul
- lebih
- pindah
- beberapa
- nama
- perlu
- Perlu
- dibutuhkan
- kebutuhan
- New
- mencatat
- sekarang
- jumlah
- of
- Penawaran
- resmi
- on
- ONE
- hanya
- Operasi
- operator
- operator
- dioptimalkan
- or
- berasal
- OS
- Lainnya
- Lainnya
- kami
- keluaran
- sendiri
- paket
- parameter
- bagian
- melakukan
- prestasi
- Tempat
- plato
- Kecerdasan Data Plato
- Data Plato
- Populer
- Pos
- Ketelitian
- Mempersiapkan
- menyajikan
- mencegah
- proses
- prosesor
- Produk
- Pemrograman
- memberikan
- disediakan
- menyediakan
- publik
- tujuan
- Dorong
- Ular sanca
- pytorch
- r2
- acak
- cepat
- Baca
- siap
- benar-benar
- daftar
- terdaftar
- Pendaftaran
- reguler
- gudang
- membutuhkan
- wajib
- Persyaratan
- membutuhkan
- Sumber
- mengakibatkan
- kembali
- dapat digunakan kembali
- akar
- Run
- berjalan
- berjalan
- pembuat bijak
- sama
- Save
- ilmuwan
- cakupan
- SDK
- Bagian
- sektor
- melihat
- biji
- DIRI
- mengirim
- senior
- Layanan
- set
- Bentuknya
- dia
- Pendek
- harus
- Pertunjukkan
- tanda tangan
- Sederhana
- hanya
- tunggal
- Ukuran
- So
- Perangkat lunak
- larutan
- Solusi
- beberapa
- tertentu
- Secara khusus
- ditentukan
- kecepatan
- Staf
- standar
- awal
- mulai
- state-of-the-art
- Negara
- statistika
- Tangga
- penyimpanan
- tersimpan
- Streaming
- seperti itu
- memasok
- mendukung
- Didukung
- pendukung
- Mendukung
- yakin
- sistem
- Mengambil
- Dibutuhkan
- Teknis
- tensorflow
- uji
- pengujian
- bahwa
- Grafik
- Inggris
- mereka
- Mereka
- kemudian
- karena itu
- Ini
- mereka
- ini
- itu
- Melalui
- keluaran
- rapat
- waktu
- untuk
- bersama
- alat
- obor
- Penglihatan obor
- Pelatihan VE
- terlatih
- Pelatihan
- tutorial
- dua
- khas
- Uk
- pokok
- menggunakan
- bekas
- menggunakan
- biasanya
- Nilai - Nilai
- versi
- melalui
- volume
- Cara..
- cara
- we
- BAIK
- ketika
- yang
- lebar
- akan
- dengan
- dalam
- tanpa
- Alur kerja
- kerja
- akan
- menulis
- penulisan
- tertulis
- X
- XM
- kamu
- Anda
- zephyrnet.dll