Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan SageMaker Processing untuk rekayasa fitur terdistribusi dari kumpulan data ML skala terabyte
Chris Boomhower, Amazon Web Services
Ringkasan
Banyak kumpulan data skala terabyte atau lebih besar sering terdiri dari struktur folder hierarkis, dan file dalam kumpulan data terkadang berbagi saling ketergantungan. Untuk alasan ini, insinyur pembelajaran mesin (ML) dan ilmuwan data harus membuat keputusan desain yang bijaksana untuk menyiapkan data tersebut untuk pelatihan model dan inferensi. Pola ini menunjukkan bagaimana Anda dapat menggunakan teknik macrosharding dan microsharding manual dalam kombinasi dengan Amazon SageMaker Processing dan paralelisasi CPU virtual (vCPU) untuk menskalakan proses rekayasa fitur secara efisien untuk kumpulan data BIG data MLyang rumit.
Pola ini mendefinisikan macrosharding sebagai pemisahan direktori data di beberapa mesin untuk diproses, dan microsharding sebagai pemisahan data pada setiap mesin di beberapa thread pemrosesan. Pola menunjukkan teknik ini dengan menggunakan Amazon SageMaker dengan contoh catatan bentuk gelombang deret waktu dari kumpulan data MIMIC-III. PhysioNet
Prasyarat dan batasan
Prasyarat
Akses ke instance SageMaker notebook atau SageMaker Studio, jika Anda ingin menerapkan pola ini untuk kumpulan data Anda sendiri. Jika Anda menggunakan Amazon SageMaker untuk pertama kalinya, lihat Memulai Amazon SageMaker di dokumentasi AWS.
SageMaker Studio, jika Anda ingin menerapkan pola ini dengan data sampel PhysioNet MIMIC-III
. Pola menggunakan SageMaker Processing, tetapi tidak memerlukan pengalaman menjalankan pekerjaan SageMaker Processing.
Batasan
Pola ini sangat cocok untuk kumpulan data ML yang menyertakan file yang saling bergantung. Interdependensi ini paling diuntungkan dari macrosharding manual dan menjalankan beberapa pekerjaan Pemrosesan instance SageMaker tunggal secara paralel. Untuk kumpulan data di mana saling ketergantungan seperti itu tidak ada,
ShardedByS3Keyfitur dalam SageMaker Processing mungkin merupakan alternatif yang lebih baik untuk macrosharding, karena mengirimkan data sharded ke beberapa instance yang dikelola oleh pekerjaan Pemrosesan yang sama. Namun, Anda dapat menerapkan strategi microsharding pola ini di kedua skenario untuk memanfaatkan instance v. CPUs
Versi produk
Amazon SageMaker Python SDK versi 2
Arsitektur
Tumpukan teknologi target
Amazon Simple Storage Service (Amazon S3)
Amazon SageMaker
Arsitektur target
Macrosharding dan instance terdistribusi EC2
10 proses paralel yang diwakili dalam arsitektur ini mencerminkan struktur dataset MIMIC-III. (Proses diwakili oleh elips untuk penyederhanaan diagram.) Arsitektur serupa berlaku untuk kumpulan data apa pun saat Anda menggunakan macrosharding manual. Dalam kasus MIMIC-III, Anda dapat menggunakan struktur mentah kumpulan data untuk keuntungan Anda dengan memproses setiap folder grup pasien secara terpisah, dengan sedikit usaha. Dalam diagram berikut, blok grup rekaman muncul di sebelah kiri (1). Mengingat sifat data yang terdistribusi, masuk akal untuk membelah oleh kelompok pasien.

Namun, sharding secara manual oleh kelompok pasien berarti bahwa pekerjaan Pemrosesan terpisah diperlukan untuk setiap folder grup pasien, seperti yang Anda lihat di bagian tengah diagram (2), alih-alih satu pekerjaan Pemrosesan dengan beberapa EC2 instance. Karena data MIMIC-III mencakup file bentuk gelombang biner dan file header berbasis teks yang cocok, dan ada ketergantungan yang diperlukan pada pustaka wfdbs3_data_distribution_type='FullyReplicated' kapan Anda menentukan input pekerjaan Pemrosesan. Atau, jika semua data tersedia dalam satu direktori dan tidak ada dependensi di antara file, opsi yang lebih cocok mungkin meluncurkan pekerjaan Pemrosesan tunggal dengan beberapa EC2 instance dan ditentukan. s3_data_distribution_type='ShardedByS3Key' Menentukan ShardedByS3Key sebagai tipe distribusi data Amazon S3 SageMaker mengarahkan untuk mengelola pembagian data secara otomatis di seluruh instance.
Meluncurkan pekerjaan Pemrosesan untuk setiap folder adalah cara hemat biaya untuk memproses data sebelumnya, karena menjalankan beberapa instance secara bersamaan menghemat waktu. Untuk penghematan biaya dan waktu tambahan, Anda dapat menggunakan microsharding dalam setiap pekerjaan Pemrosesan.
Microsharding dan parallel v CPUs
Dalam setiap pekerjaan Pemrosesan, data yang dikelompokkan dibagi lagi untuk memaksimalkan penggunaan semua v yang tersedia CPUs pada EC2 instance yang dikelola SageMaker sepenuhnya. Blok di bagian tengah diagram (2) menggambarkan apa yang terjadi dalam setiap pekerjaan Pemrosesan utama. Isi folder catatan pasien diratakan dan dibagi rata berdasarkan jumlah v yang tersedia CPUs pada instance. Setelah isi folder dibagi, kumpulan file berukuran merata didistribusikan di semua v CPUs untuk diproses. Saat pemrosesan selesai, hasil dari setiap vCPU digabungkan menjadi satu file data untuk setiap pekerjaan Pemrosesan.
Dalam kode terlampir, konsep-konsep ini diwakili di bagian src/feature-engineering-pass1/preprocessing.py file berikut.
def chunks(lst, n): """ Yield successive n-sized chunks from lst. :param lst: list of elements to be divided :param n: number of elements per chunk :type lst: list :type n: int :return: generator comprising evenly sized chunks :rtype: class 'generator' """ for i in range(0, len(lst), n): yield lst[i:i + n] # Generate list of data files on machine data_dir = input_dir d_subs = next(os.walk(os.path.join(data_dir, '.')))[1] file_list = [] for ds in d_subs: file_list.extend(os.listdir(os.path.join(data_dir, ds, '.'))) dat_list = [os.path.join(re.split('_|\.', f)[0].replace('n', ''), f[:-4]) for f in file_list if f[-4:] == '.dat'] # Split list of files into sub-lists cpu_count = multiprocessing.cpu_count() splits = int(len(dat_list) / cpu_count) if splits == 0: splits = 1 dat_chunks = list(chunks(dat_list, splits)) # Parallelize processing of sub-lists across CPUs ws_df_list = Parallel(n_jobs=-1, verbose=0)(delayed(run_process)(dc) for dc in dat_chunks) # Compile and pickle patient group dataframe ws_df_group = pd.concat(ws_df_list) ws_df_group = ws_df_group.reset_index().rename(columns={'index': 'signal'}) ws_df_group.to_json(os.path.join(output_dir, group_data_out))
Sebuah fungsichunks, pertama kali didefinisikan untuk mengkonsumsi daftar yang diberikan dengan membaginya menjadi potongan-potongan panjang yang berukuran sama n dan dengan mengembalikan hasil ini sebagai generator. Selanjutnya, data diratakan di seluruh folder pasien dengan menyusun daftar semua file bentuk gelombang biner yang ada. Setelah ini selesai, jumlah v CPUs yang tersedia pada EC2 instance diperoleh. Daftar file bentuk gelombang biner dibagi secara merata di v ini CPUs dengan memanggilchunks, dan kemudian setiap sublis bentuk gelombang diproses pada vCPU-nya sendiri dengan menggunakan kelas Paralel joblib.
Ketika semua pekerjaan Pemrosesan awal selesai, pekerjaan Pemrosesan sekunder, yang ditampilkan di blok di sebelah kanan diagram (3) menggabungkan file output yang dihasilkan oleh setiap pekerjaan Pemrosesan utama dan menulis output gabungan ke Amazon S3 (4).
Alat
Alat
Python
- Contoh kode yang digunakan untuk pola ini adalah Python (versi 3). SageMaker Studio — Amazon SageMaker Studio adalah lingkungan pengembangan terintegrasi (IDE) berbasis web untuk pembelajaran mesin yang memungkinkan Anda membuat, melatih, men-debug, menerapkan, dan memantau model pembelajaran mesin Anda. Anda menjalankan pekerjaan SageMaker Pemrosesan dengan menggunakan notebook Jupyter di dalam Studio. SageMaker
SageMaker Pemrosesan - Amazon SageMaker Processing menyediakan cara yang disederhanakan untuk menjalankan beban kerja pemrosesan data Anda. Dalam pola ini, kode rekayasa fitur diimplementasikan dalam skala besar dengan menggunakan pekerjaan SageMaker Pemrosesan.
Kode
File zip terlampir menyediakan kode lengkap untuk pola ini. Bagian berikut menjelaskan langkah-langkah untuk membangun arsitektur untuk pola ini. Setiap langkah diilustrasikan dengan kode sampel dari lampiran.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
| Akses Amazon SageMaker Studio. | Onboard ke SageMaker Studio di akun AWS Anda dengan mengikuti petunjuk yang disediakan dalam SageMaker dokumentasi Amazon. | Ilmuwan data, insinyur ML |
| Instal utilitas wget. | Instal wget jika Anda onboard dengan konfigurasi SageMaker Studio baru atau jika Anda belum pernah menggunakan utilitas ini di SageMaker Studio sebelumnya. Untuk menginstal, buka jendela terminal di konsol SageMaker Studio dan jalankan perintah berikut:
| Ilmuwan data, insinyur ML |
| Unduh dan unzip kode sampel. | Unduh
Arahkan ke folder tempat Anda mengekstrak file.zip, dan ekstrak konten file.
| Ilmuwan data, insinyur ML |
| Unduh kumpulan data sampel dari physionet.org dan unggah ke Amazon S3. | Jalankan | Ilmuwan data, insinyur ML |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
| Ratakan hierarki file di semua subdirektori. | Dalam kumpulan data besar seperti MIMIC-III, file sering didistribusikan di beberapa subdirektori bahkan dalam kelompok induk logis. Skrip Anda harus dikonfigurasi untuk meratakan semua file grup di semua subdirektori, seperti yang ditunjukkan oleh kode berikut.
catatan Contoh cuplikan kode dalam epik ini berasal dari | Ilmuwan data, insinyur ML |
| Bagilah file menjadi subkelompok berdasarkan jumlah vCPU. | File harus dibagi menjadi subkelompok berukuran merata, atau potongan, tergantung pada jumlah v yang CPUs ada pada instance yang menjalankan skrip. Untuk langkah ini, Anda dapat menerapkan kode yang mirip dengan berikut ini.
| Ilmuwan data, insinyur ML |
| Paralelisasi pemrosesan subkelompok di seluruh v. CPUs | Logika skrip harus dikonfigurasi untuk memproses semua subkelompok secara paralel. Untuk melakukan ini, gunakan
| Ilmuwan data, insinyur ML |
| Simpan output grup file tunggal ke Amazon S3. | Ketika pemrosesan vCPU paralel selesai, hasil dari setiap vCPU harus digabungkan dan diunggah ke jalur bucket S3 grup file. Untuk langkah ini, Anda dapat menggunakan kode yang mirip dengan berikut ini.
| Ilmuwan data, insinyur ML |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
| Gabungkan file data yang dihasilkan di semua pekerjaan Pemrosesan yang menjalankan skrip pertama. | Script sebelumnya mengeluarkan satu file untuk setiap pekerjaan SageMaker Processing yang memproses sekelompok file dari dataset. Selanjutnya, Anda perlu menggabungkan file output ini menjadi satu objek dan menulis satu set data output ke Amazon S3. Ini ditunjukkan dalam
| Ilmuwan data, insinyur ML |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
| Jalankan pekerjaan Processing pertama. | Untuk melakukan macrosharding, jalankan pekerjaan Pemrosesan terpisah untuk setiap grup file. Microsharding dilakukan di dalam setiap pekerjaan Pemrosesan, karena setiap pekerjaan menjalankan skrip pertama Anda. Kode berikut menunjukkan cara meluncurkan pekerjaan Processing untuk setiap direktori grup file dalam cuplikan berikut (termasuk dalam).
| Ilmuwan data, insinyur ML |
| Jalankan pekerjaan Pemrosesan kedua. | Untuk menggabungkan output yang dihasilkan oleh set pertama pekerjaan pemrosesan dan melakukan perhitungan tambahan untuk preprocessing, Anda menjalankan skrip kedua Anda dengan menggunakan satu pekerjaan Processing. SageMaker Kode berikut menunjukkan ini (termasuk dalam
| Ilmuwan data, insinyur ML |
Sumber daya terkait
Onboard ke Amazon SageMaker Studio Menggunakan Mulai Cepat (SageMaker dokumentasi)
Data Proses (SageMaker dokumentasi)
Pemrosesan Data dengan scikit-learn (dokumentasi) SageMaker
Moody, B., Moody, G., Villarroel, M., Clifford, GD, & Silva, I. (2020). Database Bentuk Gelombang MIMIC-III (
versi 1.0). PhysioNet. Johnson, A.E. W., Pollard, TJ, Shen, L., Lehman, LH, Feng, M., Ghassemi, M., Moody, B., Szolovits, P., Celi, LA, & Mark, RG (2016). MIMIC-III, database perawatan kritis yang dapat diakses secara bebas
. Data Ilmiah, 3, 160035.
Lampiran
Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip