Rumah > Peranti teknologi > AI > teks badan

Masukkan model Stable Diffusion ke dalam iPhone dan jadikan ia menjadi APP untuk menghasilkan gambar dalam satu minit

WBOY
Lepaskan: 2023-04-13 17:07:03
ke hadapan
1458 orang telah melayarinya

Adakah sukar untuk menjalankan Stable Diffusion pada iPhone? Dalam artikel yang akan kami perkenalkan hari ini, penulis memberikan jawapan: ia tidak sukar, dan iPhone masih mempunyai baki prestasi 50%.

Seperti yang kita sedia maklum, setiap tahun Apple melancarkan iPhone baharu yang mendakwa lebih pantas dan lebih baik dalam setiap cara, terutamanya disebabkan oleh perkembangan pesat model visual dan penderia imej baharu. Ambil fotografi sebagai contoh Jika anda kembali ke 10 tahun yang lalu, bolehkah anda mengambil gambar berkualiti tinggi dengan iPhone Jawapannya tidak, kerana perkembangan teknologi secara beransur-ansur dalam 10 tahun, ia sudah cukup untuk meningkatkan teknologi fotografi telefon bimbit.

Disebabkan corak pembangunan (progresif) teknologi ini, akan tiba masanya sesetengah program akan menjadi hampir tidak boleh digunakan walaupun berjalan pada peralatan pengkomputeran terbaik. Tetapi program baharu dengan senario yang baru didayakan ini menarik perhatian sesetengah pengguna dan orang ramai bersedia untuk mengkajinya.

Pengarang artikel ini adalah salah seorang daripada mereka Dalam tempoh 3 minggu yang lalu, penulis telah membangunkan aplikasi yang boleh menjana (memanggil) imej melalui Stable Diffusion, dan kemudian tekan Edit anda. ia dengan cara yang anda suka. Apl hanya mengambil masa seminit untuk menjana imej pada iPhone 14 Pro terbaharu, menggunakan kira-kira 2GiB memori apl, serta kira-kira 2GiB data awal perlu dimuat turun untuk bermula.

Pautan kedai aplikasi: https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820

Hasil ini menarik banyak perbincangan di kalangan netizen, sesetengah orang mula bimbang tentang penggunaan bateri telefon bimbit, dan bergurau: Ini bagus, tetapi ini nampaknya cara yang baik untuk menggunakan bateri telefon bimbit. .

Masukkan model Stable Diffusion ke dalam iPhone dan jadikan ia menjadi APP untuk menghasilkan gambar dalam satu minit

"Saya tidak pernah begitu gembira merasakan bahang iPhone saya."

" Ini Pada musim sejuk, anda boleh menggunakan telefon bimbit anda sebagai penghangat tangan. penilaian yang sangat tinggi.

"Ini luar biasa. Ia mengambil masa kira-kira 45 saat untuk menjana imej penuh pada iPhone SE3 saya - yang hampir sama kelajuannya dengan versi asal pada macbook M1 Pro saya Cepat! 》

Optimumkan memori dan perkakasan pada masa yang sama

Masukkan model Stable Diffusion ke dalam iPhone dan jadikan ia menjadi APP untuk menghasilkan gambar dalam satu minit

Bagaimana ini dilakukan? Seterusnya, mari kita lihat proses pelaksanaan pengarang:

Untuk menyelesaikan menjalankan Stable Diffusion pada iPhone dan masih menjimatkan 50% prestasi, cabaran utama ialah ia memerlukan 6GiB RAM Jalankan program pada peranti iPhone anda. 6GiB terdengar seperti banyak, tetapi jika anda menggunakan lebih daripada 2.8GiB pada peranti 6GiB atau 2GiB pada peranti 4GiB, iOS akan mematikan apl anda.

Jadi berapa banyak memori yang diperlukan oleh model Resapan Stabil untuk inferens?

Ini juga bermula dengan struktur model. Biasanya model Stable Diffusion mengandungi 4 bahagian: 1. Pengekod teks, yang menghasilkan vektor ciri teks untuk membimbing penjanaan imej; , yang secara perlahan-lahan menolak perwakilan terpendam imej daripada hingar 4. Penyahkod imej, yang menyahkod imej daripada perwakilan terpendam.

Modul 1, 2 dan 4 dijalankan sekali semasa inferens dan memerlukan maksimum kira-kira 1GiB. Model denoiser mengambil kira-kira 3.2GiB (titik terapung penuh) dan perlu dilaksanakan beberapa kali, jadi pengarang ingin mengekalkan modul dalam RAM lebih lama.

Model Resapan Stable asal memerlukan hampir 10GiB untuk melakukan inferens imej tunggal. Antara satu input (2x4x64x64) dan output (2x4x64x64), terdapat banyak lapisan output. Tidak semua output lapisan boleh digunakan semula dengan serta-merta, sesetengah daripadanya mesti mengekalkan beberapa parameter untuk kegunaan seterusnya (rangkaian sisa).

Selama beberapa waktu, penyelidik telah mengoptimumkan PyTorch Stable Diffusion. Mereka telah menempah ruang storan sementara untuk perpustakaan NVIDIA CUDNN dan CUBLAS yang digunakan oleh PyTorch Semuanya untuk mengurangkan penggunaan memori jalankan dengan kad serendah 4GiB.

Tetapi ia masih melebihi jangkaan penulis. Oleh itu, penulis mula memberi tumpuan kepada perkakasan dan pengoptimuman Apple.

Pada mulanya, pengarang menganggap 3.2GiB atau 1.6GiB separuh nombor titik terapung jika dia tidak mahu mencetuskan OOM Apple (Out of Memory, yang merujuk kepada memori yang diduduki oleh. Apl mencapai had sistem iOS untuk satu-satu Selepas apl menduduki had memori atas dan dibunuh secara paksa oleh sistem), pengarang mempunyai kira-kira 500MiB ruang untuk digunakan.

Soalan pertama, apakah saiz setiap output perantaraan?

Ternyata kebanyakannya agak kecil, di bawah 6MiB setiap satu (2x320x64x64). Rangka kerja yang digunakan oleh pengarang (s4nnc) boleh membungkusnya dengan munasabah ke dalam kurang daripada 50MiB untuk digunakan semula.

Perlu dinyatakan bahawa denoiser mempunyai mekanisme perhatian kendiri yang mengambil representasi terpendam imejnya sendiri sebagai input. Semasa pengiraan perhatian sendiri, terdapat matriks kelompok bersaiz 16x4096x4096, yang selepas menggunakan softmax adalah kira-kira 500MiB dalam FP16 dan boleh dilakukan "inplace", yang bermaksud ia boleh menulis semula inputnya dengan selamat tanpa Tidak akan rosak. Nasib baik, kedua-dua perpustakaan peringkat rendah Apple dan NVIDIA menyediakan pelaksanaan softmax di tempat, manakala perpustakaan peringkat tinggi seperti PyTorch tidak.

Jadi bolehkah ia benar-benar dilakukan menggunakan kira-kira 550MiB + 1.6GiB memori?

Pada perkakasan Apple, pilihan biasa untuk melaksanakan hujung belakang rangkaian saraf ialah menggunakan rangka kerja MPSGraph. Jadi penulis cuba terlebih dahulu menggunakan MPSGraph untuk melaksanakan semua operasi rangkaian saraf. Penggunaan memori puncak pada ketepatan FP16 adalah kira-kira 6GiB, yang jelas lebih banyak daripada penggunaan memori yang dijangkakan.

Pengarang menganalisis sebab secara terperinci Pertama, dia tidak menggunakan MPSGraph dengan cara TensorFlow yang biasa. MPSGraph memerlukan pengekodan keseluruhan graf pengiraan, kemudian menggunakan tensor input/output, mengendalikan peruntukan dalaman dan membenarkan pengguna menyerahkan keseluruhan graf untuk pelaksanaan.

Pengarang menggunakan MPSGraph sama seperti PyTorch - sebagai enjin pelaksanaan operasi. Untuk melaksanakan tugas inferens, banyak MPSGraphExecutables yang dikompilasi dilaksanakan pada baris gilir perintah Metal, setiap satunya mungkin memegang beberapa memori yang diperuntukkan perantaraan. Jika diserahkan sekali gus, semua arahan ini menyimpan memori yang diperuntukkan sehingga ia menyelesaikan pelaksanaan.

Cara mudah untuk menyelesaikan masalah ini ialah dengan melaraskan kelajuan penghantaran Tidak perlu menyerahkan semua arahan sekaligus. Malah, Metal mempunyai had 64 penyerahan serentak bagi setiap baris gilir. Penulis cuba menukar untuk menyerahkan 8 operasi pada satu masa, dan memori puncak telah dikurangkan kepada 4GiB.

Walau bagaimanapun, itu masih 2 GiB lebih daripada yang boleh dikendalikan oleh iPhone.

Untuk mengira perhatian diri menggunakan CUDA, terdapat helah biasa dalam pelaksanaan kod Stable Diffusion asal: gunakan pilih atur dan bukannya transpose. Silap mata ini berfungsi kerana CUBLAS boleh mengendalikan tensor berjalur permuted secara langsung, mengelakkan keperluan untuk menggunakan memori khusus untuk menukar tensor.

Tetapi MPSGraph tidak mempunyai sokongan tensor berperingkat, tensor yang diubah suai akan ditukar secara dalaman pula, yang memerlukan peruntukan memori perantaraan. Dengan mengalihkan secara eksplisit, peruntukan akan dikendalikan oleh lapisan peringkat lebih tinggi, mengelakkan ketidakcekapan dalaman MPSGraph. Menggunakan helah ini, penggunaan memori akan hampir kepada 3GiB.

Ternyata setakat iOS 16.0, MPSGraph tidak lagi boleh membuat keputusan peruntukan optimum untuk softmax. Walaupun tensor input dan output kedua-duanya menghala ke data yang sama, MPSGraph memperuntukkan tensor keluaran tambahan dan kemudian menyalin hasilnya ke lokasi yang ditunjukkan.

Pengarang mendapati bahawa menggunakan alternatif Metal Performance Shaders sesuai dengan bil dengan sempurna dan mengurangkan penggunaan memori kepada 2.5GiB tanpa sebarang prestasi.

Sebaliknya, inti GEMM MPSGraph memerlukan transposisi dalaman. Transpose eksplisit juga tidak akan membantu di sini, kerana transpose ini bukan operasi "inplace" pada lapisan peringkat lebih tinggi, dan untuk tensor saiz 500MiB tertentu, peruntukan tambahan ini tidak dapat dielakkan. Dengan bertukar kepada Metal Performance Shaders, pengarang projek menuntut semula 500MiB lagi dengan penalti prestasi kira-kira 1%, akhirnya mengurangkan penggunaan memori kepada 2GiB yang ideal.

Atas ialah kandungan terperinci Masukkan model Stable Diffusion ke dalam iPhone dan jadikan ia menjadi APP untuk menghasilkan gambar dalam satu minit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan