Meskipun AI generatif (AI gen) berkembang pesat dalam hal adopsi, masih ada potensi yang belum dimanfaatkan secara maksimal untuk membangun produk dengan menerapkan AI gen pada data yang memiliki persyaratan yang lebih tinggi untuk memastikan data tersebut tetap pribadi dan rahasia.
Sebagai contoh, ini bisa berarti menerapkan AI gen untuk:
Dalam aplikasi tertentu seperti ini, mungkin ada persyaratan yang lebih tinggi sehubungan dengan privasi/kerahasiaan, transparansi, dan verifikasi eksternal pemrosesan data.
Google telah mengembangkan sejumlah teknologi yang bisa Anda gunakan untuk mulai bereksperimen dan mengeksplorasi potensi AI gen untuk memproses data yang perlu dijaga kerahasiaannya. Dalam postingan ini, kami akan menjelaskan bagaimana Anda dapat menggunakan project open source GenC yang baru saja dirilis untuk menggabungkan Confidential Computing, model open source Gemma, dan platform seluler untuk mulai bereksperimen membangun aplikasi berteknologi AI gen Anda sendiri yang bisa menangani data dengan persyaratan yang lebih tinggi terkait privasi/kerahasiaan, transparansi, dan verifikasi eksternal.
Skenario yang akan menjadi fokus kami dalam postingan ini, diilustrasikan di bawah, melibatkan aplikasi seluler yang memiliki akses ke data di perangkat, dan ingin melakukan pemrosesan AI gen pada data ini menggunakan LLM.
Sebagai contoh, bayangkan aplikasi asisten pribadi yang diminta untuk meringkas atau menjawab pertanyaan tentang catatan, dokumen, atau rekaman yang tersimpan di perangkat. Isinya mungkin berisi informasi pribadi, seperti pesan dengan pengguna lain, jadi kami ingin memastikan kerahasiaannya tetap terjaga.
Dalam contoh, kami memilih keluarga model open source Gemma. Perhatikan bahwa meskipun kami fokus pada aplikasi seluler, prinsip yang sama berlaku untuk bisnis yang menghosting data mereka sendiri secara lokal.
Contoh ini menunjukkan penyiapan "hybrid" yang melibatkan dua LLM, satu LLM berjalan secara lokal di perangkat pengguna, dan satu lagi dihosting di Google Cloud Confidential Space Trusted Execution Environments (TEE) yang didukung oleh Confidential Computing. Arsitektur hibrida ini memungkinkan aplikasi seluler memanfaatkan sumber daya di perangkat serta cloud untuk mendapatkan manfaat dari keunggulan unik keduanya:
Dalam contoh kami, kedua model ini bekerja bersama, terhubung ke dalam sebuah kaskade model di mana Gemma 2B yang lebih kecil, murah, dan cepat berfungsi sebagai tingkat pertama, dan menangani kueri yang lebih sederhana, sedangkan Gemma 7B yang lebih besar berfungsi sebagai cadangan untuk kueri yang tidak dapat ditangani oleh Gemma 2B. Sebagai contoh, dalam cuplikan kode di bawah, kami mengatur Gemma 2B agar bertindak sebagai router di perangkat yang pertama-tama menganalisis setiap kueri input untuk memutuskan model yang paling tepat dari kedua model tersebut, kemudian berdasarkan hasil analisis ini, akan melanjutkan untuk menangani kueri secara lokal di perangkat, atau meneruskannya ke Gemma 7B yang berada di TEE berbasis cloud.
Anda bisa mengibaratkan TEE di cloud dalam arsitektur ini sebagai ekstensi logis dari perangkat seluler pengguna, yang didukung oleh transparansi, jaminan kriptografi, dan hardware tepercaya:
Sekilas pengaturan ini mungkin tampak rumit, dan memang akan seperti itu jika kita harus mengatur semuanya dari awal. Kami telah mengembangkan GenC secara akurat untuk membuat prosesnya lebih mudah.
Berikut adalah contoh kode yang harus Anda tulis untuk menyiapkan skenario seperti itu di GenC. Kami secara default menggunakan Python sebagai pilihan populer, meskipun kami juga menawarkan API penulisan Java dan C++. Dalam contoh ini, kami menggunakan kehadiran subjek yang lebih sensitif sebagai sinyal bahwa kueri harus ditangani oleh model yang lebih kuat (yang mampu membuat respons dengan lebih hati-hati). Perlu diingat bahwa contoh ini disederhanakan untuk tujuan ilustrasi. Dalam praktiknya, logika pemilihan rute mungkin saja lebih rumit dan spesifik untuk setiap aplikasi, dan prompt engineering yang cermat sangat penting untuk mencapai performa yang baik, terutama dengan model yang lebih kecil.
@genc.authoring.traced_computation
def cascade(x):
gemma_2b_on_device = genc.interop.llamacpp.model_inference(
'/device/llamacpp', '/gemma-2b-it.gguf', num_threads=16, max_tokens=64)
gemma_7b_in_a_tee = genc.authoring.confidential_computation[
genc.interop.llamacpp.model_inference(
'/device/llamacpp', '/gemma-7b-it.gguf', num_threads=64, max_tokens=64),
{'server_address': /* server address */, 'image_digest': /* image digest */ }]
router = genc.authoring.serial_chain[
genc.authoring.prompt_template[
"""Read the following input carefully: "{x}".
Does it touch on political topics?"""],
gemma_2b_on_device,
genc.authoring.regex_partial_match['does touch|touches']]
return genc.authoring.conditional[
gemma_2b_on_device(x), gemma_7b_in_a_tee(x)](router(x))
Anda bisa melihat penjelasan langkah demi langkah tentang cara membangun dan menjalankan contoh tersebut pada tutorial kami di GitHub. Seperti yang Anda lihat, level abstraksinya sesuai dengan yang dapat Anda temukan di SDK populer seperti LangChain. Panggilan inferensi model ke Gemma 2B dan 7B dicampur di sini dengan template prompt dan parser output, dan digabungkan ke dalam rantai. (Selain itu, kami menawarkan interop LangChain terbatas yang ingin kami luaskan).
Perhatikan bahwa panggilan inferensi model Gemma 2B digunakan secara langsung di dalam rantai yang berjalan di perangkat, sedangkan panggilan Gemma 7B secara eksplisit disematkan di dalam pernyataan confidential_computation
.
Intinya adalah tidak ada kejutan di sini - programmer selalu memegang kontrol penuh atas keputusan pemrosesan yang akan dilakukan di perangkat, dan yang akan didelegasikan dari perangkat ke TEE di cloud. Keputusan ini secara eksplisit tercermin dalam struktur kode. (harap perhatikan bahwa dalam contoh ini, kami hanya mendelegasikan panggilan Gemma 7B ke satu backend tepercaya, mekanisme yang kami sediakan bersifat umum, dan pengguna dapat menggunakannya untuk mendelegasikan bagian pemrosesan yang lebih besar, misalnya, seluruh loop agen, ke sejumlah backend bebas).
Meskipun kode yang ditunjukkan di atas diekspresikan menggunakan sintaksis Python yang familier, di belakang layar, kode tersebut bertransformasi menjadi platform portabel dan bentuk yang tidak bergantung bahasa yang kami sebut sebagai Intermediate Representation (atau disingkat "IR").
Pendekatan ini menawarkan sejumlah keuntungan; di antaranya adalah:
Dalam deployment yang realistis, performa sering kali menjadi faktor sangat penting. Contoh yang kami publikasikan saat ini terbatas pada CPU saja, dan GenC saat ini hanya menawarkan llama.cpp sebagai driver untuk model di TEE. Namun, tim Confidential Computing memperluas dukungan untuk Intel TDX dengan akselerator internal Intel AMX bersama dengan pratinjau mendatang GPU Nvidia H100 yang berjalan dalam mode konfidensial, dan kami secara aktif bekerja guna memperluas jangkauan opsi software dan hardware yang tersedia untuk melepaskan performa terbaik dan mendukung lebih banyak model lainnya - nantikan update mendatang!
Kami harap Anda tertarik, dan postingan ini akan mendorong Anda untuk bereksperimen dengan membangun aplikasi AI gen Anda sendiri menggunakan beberapa teknologi yang telah kami perkenalkan. Dan sebagai catatan, harap diingat bahwa GenC adalah framework eksperimental, yang dikembangkan untuk tujuan eksperimen dan penelitian - kami membangunnya untuk menunjukkan apa yang mungkin dilakukan, dan menginspirasi Anda untuk menjelajahi dunia yang menarik ini bersama kami. Jika Anda ingin berkontribusi - silakan hubungi penulis, atau cukup bergabung dengan kami di GitHub. Kami senang berkolaborasi!