Isi kandungan:
Video: Computational Linguistics, by Lucas Freitas 2024
Kebanyakan komputer hari ini adalah multicore (dua atau lebih pemproses dalam pakej tunggal), beberapa dengan pelbagai CPU fizikal. Salah satu batasan Python yang paling penting ialah ia menggunakan teras tunggal secara lalai. (Ia dicipta dalam satu masa apabila teras tunggal adalah norma.)
Projek sains data memerlukan banyak perhitungan. Khususnya, sebahagian aspek saintifik sains data bergantung pada ujian berulang dan eksperimen pada matriks data yang berlainan. Jangan lupa bahawa bekerja dengan kuantiti data yang besar bermakna bahawa kebanyakan perubahan masa memantau pemerhatian selepas pemerhatian (contohnya, operasi yang sama dan tidak berkaitan di bahagian berlainan matriks).
Menggunakan lebih banyak teras CPU mempercepat pengiraan dengan faktor yang hampir sepadan dengan bilangan teras. Sebagai contoh, mempunyai empat teras akan berfungsi paling baik empat kali lebih cepat. Anda tidak menerima peningkatan empat kali ganda penuh kerana terdapat overhead apabila memulakan proses selari - contoh Python yang baru perlu disiapkan dengan maklumat ing memori yang betul dan dilancarkan; Oleh itu, penambahbaikan akan kurang daripada berpotensi dicapai tetapi masih penting.
Mengetahui bagaimana menggunakan lebih daripada satu CPU adalah kemahiran maju tetapi sangat berguna untuk meningkatkan bilangan analisis yang telah siap, dan untuk mempercepatkan operasi anda semasa membuat dan apabila menggunakan produk data anda.
Multiprocessing berfungsi dengan mereplikasi kod dan kandungan memori yang sama dalam pelbagai contoh Python baru (pekerja), menghitung hasil untuk masing-masing, dan mengembalikan hasil yang dikumpulkan ke konsol asal utama. Jika contoh asal anda sudah menduduki banyak memori RAM yang ada, tidak mungkin untuk membuat contoh baru, dan mesin anda mungkin kehabisan memori.
Melakukan paralelisme multicore
Untuk melakukan pelbagai paralelisme dengan Python, anda mengintegrasikan pakej belajar Scikit dengan pakej joblib untuk operasi memakan masa, seperti model replika untuk mengesahkan keputusan atau untuk mencari parameter hiper yang terbaik. Secara khusus, Scikit-learning membolehkan multiprocessing apabila
-
Cross-validating: Menguji hasil hipotesis pembelajaran komputer menggunakan data latihan dan pengujian yang berlainan
-
Grid-searching: daripada hipotesis mesin pembelajaran dan menguji keputusan yang berlaku
-
Ramalan multilabel: Menjalankan algoritma berbilang kali berbanding pelbagai sasaran apabila terdapat banyak hasil sasaran yang berbeza untuk meramalkan pada masa yang sama
-
Ensemble kaedah pembelajaran komputer: Memodelkan kumpulan pengelas yang besar, masing-masing bebas daripada yang lain, seperti apabila menggunakan pemodelan berdasarkan RandomForest
Anda tidak perlu melakukan apa-apa yang khusus untuk memanfaatkan pengiraan selari - anda boleh mengaktifkan parallelism dengan menetapkan n_jobs -parameter ke beberapa teras lebih daripada 1 atau dengan menetapkan nilai ke -1, yang bermaksud anda ingin menggunakan semua contoh CPU yang tersedia.
Jika anda tidak menjalankan kod anda dari konsol atau dari Notebook IPython, sangat penting untuk anda memisahkan kod anda daripada sebarang import pakej atau tugasan pembolehubah global dalam skrip anda dengan menggunakan jika __name __ == '__ main__': perintah pada permulaan mana-mana kod yang melaksanakan multicore parallelism. Pernyataan jika menyemak sama ada program itu dijalankan secara langsung atau dipanggil oleh konsol Python yang sudah berjalan, mengelakkan sebarang kekeliruan atau kesilapan oleh proses multiparall (seperti rekursif memanggil paralelisme).
Menunjukkan multiprocessing
Adalah idea yang baik untuk menggunakan IPython apabila anda menjalankan demonstrasi bagaimana multiprocessing benar-benar boleh menjimatkan masa anda semasa projek sains data. Menggunakan IPython memberikan kelebihan menggunakan perintah% magic timeit untuk pelaksanaan masa. Anda bermula dengan memuatkan dataset multiclass, algoritma mesin pembelajaran yang rumit (Vector Classifier Support, atau SVC), dan prosedur silang-pengesahan untuk menganggarkan skor hasil yang boleh dipercayai dari semua prosedur.
Perkara yang paling penting untuk diketahui ialah prosedur menjadi agak besar kerana SVC menghasilkan 10 model, yang mana ia mengulang 10 kali setiap kali menggunakan silang silang, untuk sejumlah 100 model.
dari sklearn. dataset import load_digits digit = load_digits () X, y = digit. data, digit. sasaran dari sklearn. svm import SVC dari sklearn. cross_validation import cross_val_score% timeit single_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = 1) Keluar [1]: 1 gelung, terbaik 3: 17. 9 s per gelung
anda perlu mengaktifkan paralelisme multicore dan masa keputusan menggunakan perintah berikut:
% timeit multi_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = -1) Out [2]: 1 gelung, terbaik dari 3: 11. 7 s per gelung
Mesin contoh menunjukkan kelebihan positif menggunakan pemproses multicore, walaupun menggunakan dataset kecil di mana Python membelanjakan sebahagian besar konsol permulaan masa dan menjalankan sebahagian kod dalam setiap satu. Overhed ini, beberapa saat, masih penting memandangkan jumlah pelaksanaan meluas selama beberapa saat. Bayangkan apa yang akan berlaku jika anda bekerja dengan set data yang lebih besar - masa pelaksanaan anda boleh dengan mudah dipotong dua atau tiga kali.
Walaupun kod ini berfungsi dengan baik dengan IPython, meletakkannya dalam skrip dan meminta Python untuk menjalankannya dalam konsol atau menggunakan IDE boleh menyebabkan ralat kerana operasi dalaman tugas multicore. Penyelesaiannya adalah untuk meletakkan semua kod di bawah pernyataan jika, yang menyemak sama ada program itu bermula secara langsung dan tidak dipanggil selepasnya. Inilah skrip contoh:
dari sklearn. dataset import load_digits dari sklearn. svm import SVC dari sklearn. cross_validation import cross_val_score if __name__ == '__main__': digit = load_digits () X, y = digits. data, digit. target multi_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = -1)