Pemimpin pemikiran
Menghindari Bahaya Tersembunyi: Navigasi Pitfall Tidak Terlihat dalam ML di iOS

Apakah Anda Membutuhkan ML?
Pembelajaran mesin sangat baik dalam mendeteksi pola. Jika Anda berhasil mengumpulkan dataset yang bersih untuk tugas Anda, biasanya hanya masalah waktu sebelum Anda dapat membangun model ML dengan kinerja superhuman. Ini terutama benar dalam tugas klasik seperti klasifikasi, regresi, dan deteksi anomali.
Ketika Anda siap untuk memecahkan beberapa masalah bisnis dengan ML, Anda harus mempertimbangkan di mana model ML Anda akan berjalan. Untuk beberapa, itu masuk akal untuk menjalankan infrastruktur server. Ini memiliki keuntungan menjaga model ML Anda tetap pribadi, sehingga lebih sulit bagi pesaing untuk mengejar. Di atas itu, server dapat menjalankan berbagai model. Misalnya, model GPT (yang terkenal dengan ChatGPT) saat ini memerlukan GPU modern, sehingga perangkat konsumen tidak masuk pertanyaan. Di sisi lain, memelihara infrastruktur Anda cukup mahal, dan jika perangkat konsumen dapat menjalankan model Anda, mengapa membayar lebih? Selain itu, mungkin juga ada kekhawatiran privasi di mana Anda tidak dapat mengirimkan data pengguna ke server jarak jauh untuk diproses.
Namun, mari kita asumsikan bahwa menggunakan perangkat iOS pelanggan Anda untuk menjalankan model ML masuk akal. Apa yang bisa salah?
Batas Platform
Batas Memori
Perangkat iOS memiliki memori video yang jauh lebih sedikit daripada desktop. Misalnya, Nvidia RTX 4080 Ti baru-baru ini memiliki 20 GB memori yang tersedia. iPhone, di sisi lain, memiliki memori video yang dibagi dengan RAM di apa yang mereka sebut “memori terpadu.” Sebagai referensi, iPhone 14 Pro memiliki 6 GB RAM. Selain itu, jika Anda mengalokasikan lebih dari setengah memori, iOS sangat mungkin membunuh aplikasi untuk memastikan sistem operasi tetap responsif. Ini berarti Anda hanya dapat mengandalkan memiliki 2-3 GB memori yang tersedia untuk inferensi jaringan saraf.
Peneliti biasanya melatih model mereka untuk mengoptimalkan akurasi daripada penggunaan memori. Namun, ada juga penelitian yang tersedia tentang cara mengoptimalkan kecepatan dan jejak memori, sehingga Anda dapat mencari model yang kurang menuntut atau melatih salah satu sendiri.
Dukungan Lapisan Jaringan (Operasi)
Sebagian besar ML dan jaringan saraf berasal dari kerangka kerja pembelajaran dalam yang terkenal dan kemudian diubah menjadi model CoreML dengan Core ML Tools. CoreML adalah mesin inferensi yang ditulis oleh Apple (AAPL ) yang dapat menjalankan berbagai model pada perangkat Apple. Lapisan tersebut dioptimalkan dengan baik untuk perangkat keras dan daftar lapisan yang didukung cukup panjang, sehingga ini adalah titik awal yang sangat baik. Namun, opsi lain seperti Tensorflow Lite juga tersedia.
Cara terbaik untuk melihat apa yang mungkin dilakukan dengan CoreML adalah dengan melihat beberapa model yang sudah diubah menggunakan viewer seperti Netron. Apple menyebutkan beberapa model yang didukung secara resmi, tetapi ada juga zoo model yang didorong oleh komunitas. Daftar operasi yang didukung selalu berubah, sehingga melihat kode sumber Core ML Tools dapat membantu sebagai titik awal. Misalnya, jika Anda ingin mengubah model PyTorch, Anda dapat mencoba menemukan lapisan yang diperlukan di sini.
Selain itu, beberapa arsitektur baru mungkin berisi kode CUDA yang ditulis tangan untuk beberapa lapisan. Dalam situasi seperti itu, Anda tidak dapat mengharapkan CoreML untuk menyediakan lapisan yang telah ditentukan sebelumnya. Namun, Anda dapat menyediakan implementasi Anda sendiri jika Anda memiliki insinyur yang terampil yang familiar dengan menulis kode GPU.
Secara keseluruhan, saran terbaik di sini adalah mencoba mengubah model Anda ke CoreML lebih awal, bahkan sebelum melatihnya. Jika Anda memiliki model yang tidak diubah segera, memungkinkan untuk memodifikasi definisi jaringan saraf di kerangka kerja DL Anda atau kode sumber Core ML Tools untuk menghasilkan model CoreML yang valid tanpa perlu menulis lapisan kustom untuk inferensi CoreML.
Validasi
Bugs Mesin Inferensi
Tidak ada cara untuk menguji setiap kombinasi lapisan yang mungkin, sehingga mesin inferensi akan selalu memiliki beberapa bug. Misalnya, umum untuk melihat konvolusi yang diperluas menggunakan terlalu banyak memori dengan CoreML, kemungkinan menunjukkan implementasi yang buruk dengan kernel yang besar yang diisi dengan nol. Bug lain yang umum adalah output model yang salah untuk beberapa arsitektur model.
Dalam hal ini, urutan operasi mungkin menjadi faktor. Memungkinkan untuk mendapatkan hasil yang salah tergantung pada apakah aktivasi dengan konvolusi atau koneksi residu datang lebih dulu. Satu-satunya cara untuk memastikan bahwa semuanya berfungsi dengan baik adalah dengan mengambil model Anda, menjalankannya pada perangkat yang dimaksud dan membandingkan hasilnya dengan versi desktop. Untuk tes ini, berguna untuk memiliki setidaknya model yang setengah dilatih tersedia, jika tidak, kesalahan numerik dapat menumpuk untuk model yang diinisialisasi dengan buruk. Meskipun model yang dilatih akhir akan berfungsi dengan baik, hasilnya dapat sangat berbeda antara perangkat dan desktop untuk model yang diinisialisasi dengan buruk.
Kehilangan Presisi
iPhone menggunakan akurasi setengah-presisi secara ekstensif untuk inferensi. Sementara beberapa model tidak memiliki degradasi akurasi yang terlihat karena representasi titik mengambang dengan lebih sedikit bit, model lain mungkin menderita. Anda dapat mengapproximasi kehilangan presisi dengan mengevaluasi model Anda di desktop dengan setengah-presisi dan menghitung metrik tes untuk model Anda. Metode yang lebih baik adalah menjalankannya pada perangkat yang sebenarnya untuk mengetahui apakah model tersebut seakurat yang diharapkan.
Profiling
Berbagai model iPhone memiliki kemampuan perangkat keras yang bervariasi. Yang terbaru memiliki unit pemrosesan Neural Engine yang ditingkatkan yang dapat meningkatkan kinerja secara signifikan. Mereka dioptimalkan untuk operasi tertentu, dan CoreML dapat mendistribusikan pekerjaan secara cerdas antara CPU, GPU, dan Neural Engine. GPU Apple juga telah ditingkatkan seiring waktu, sehingga normal untuk melihat kinerja yang berfluktuasi di seluruh model iPhone yang berbeda. Ini ide yang baik untuk menguji model Anda pada perangkat yang didukung minimal untuk memastikan kompatibilitas maksimum dan kinerja yang dapat diterima untuk perangkat yang lebih lama.
Juga layak disebutkan bahwa CoreML dapat mengoptimalkan beberapa lapisan dan perhitungan antara dan menghapusnya, yang dapat meningkatkan kinerja secara signifikan. Faktor lain yang perlu dipertimbangkan adalah bahwa terkadang, model yang berkinerja lebih buruk di desktop sebenarnya dapat melakukan inferensi lebih cepat di iOS. Ini berarti bahwa layak untuk menghabiskan waktu untuk bereksperimen dengan arsitektur yang berbeda.
Untuk optimasi lebih lanjut, Xcode memiliki alat Instruments yang bagus dengan template khusus untuk model CoreML yang dapat memberikan wawasan yang lebih mendalam tentang apa yang memperlambat inferensi model Anda.
Kesimpulan
Tidak ada yang dapat memprediksi semua kemungkinan jebakan ketika mengembangkan model ML untuk iOS. Namun, ada beberapa kesalahan yang dapat dihindari jika Anda tahu apa yang harus dicari. Mulailah mengubah, memvalidasi, dan memprofiling model ML Anda lebih awal untuk memastikan bahwa model Anda akan berfungsi dengan benar dan sesuai dengan kebutuhan bisnis Anda, dan ikuti tips yang diberikan di atas untuk memastikan kesuksesan secepat mungkin.












