Mengaktifkan AI generatif yang lebih pribadi

JUL 09, 2024
Krzysztof Ostrowski Research Scientist
Rene Kolga Senior Product Manager

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:

  • Pemrosesan data yang memungkinkan asisten pribadi yang lebih terintegrasi dan peka terhadap berbagai hal yang terjadi dalam hidup kita, sehingga dapat membantu kita dalam berbagai keadaan sehari-hari.

  • Informasi bisnis yang bersifat rahasia, misalnya, untuk mengotomatiskan tugas-tugas yang berulang, seperti memproses faktur atau menangani pertanyaan dukungan pelanggan untuk meningkatkan produktivitas dan menurunkan biaya operasional.

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.


Perangkat pengguna akhir dan cloud, bekerja bersama

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.

A model cascade that spans from a mobile device to a trusted enclave in cloud.

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:

  • Instance Gemma 2B terkuantisasi yang lebih kecil yang hadir dalam paket ~1,5GB dan cocok untuk perangkat seluler modern (seperti Pixel 7), di sini ia dapat memberi waktu respons yang lebih cepat (tanpa menimbulkan latensi jaringan atau transfer data), kemampuan untuk mendukung kueri meskipun tanpa koneksi jaringan, dan efisiensi biaya yang lebih baik karena bisa memanfaatkan sumber daya hardware di perangkat lokal (sehingga dapat menjangkau audience yang lebih luas dengan biaya yang sama di sisi cloud).

  • Instance Gemma 7B tidak terkuantisasi yang lebih besar yang berukuran ~35GB yang tidak bisa muat bahkan pada perangkat berkekuatan tinggi. Karena dihosting di cloud, ia tergantung pada koneksi jaringan, dan memiliki biaya yang lebih tinggi, tetapi menawarkan kualitas yang lebih baik dan kemampuan untuk menangani kueri yang lebih kompleks atau berbiaya tinggi (dengan lebih banyak sumber daya yang tersedia untuk pemrosesan), selain manfaat lainnya (seperti meminimalkan konsumsi baterai perangkat seluler karena mengurangi beban kalkulasi ke cloud, dll.).

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.


TEE sebagai ekstensi logis dari perangkat

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:

  • Container pribadi dengan Gemma 7B dan runtime GenC yang dihosting di TEE berjalan dengan memori terenkripsi, komunikasi antara perangkat dan TEE juga terenkripsi, dan tidak ada data yang ditahan (tetapi jika dibutuhkan, data tersebut juga bisa dienkripsi pada saat tidak digunakan).

  • Sebelum terjadi interaksi apa pun, perangkat memverifikasi identitas dan integritas kode dalam TEE yang akan menangani kueri yang didelegasikan dari perangkat dengan meminta laporan pengesahan, yang mencakup image container digest SHA256 yang berjalan di TEE. Perangkat membandingkan digest ini dengan digest yang dipaket dengan aplikasi oleh developer. (Perhatikan bahwa dalam skenario sederhana ini, pengguna masih mempercayai developer aplikasi, seperti halnya dengan aplikasi bawaan di perangkat; pengaturan yang lebih kompleks bisa saja dilakukan, tetapi di luar cakupan artikel ini).

  • Semua kode yang berjalan di dalam image container dalam skenario ini 100% open source. Dengan demikian, developer, atau pihak eksternal lainnya bisa secara independen memeriksa kode yang masuk ke dalam image untuk memverifikasi bahwa kode tersebut menangani data secara benar sesuai dengan ekspektasi pengguna atau pemilik data, peraturan atau kewajiban kontrak, dll., lalu melanjutkan untuk membangun image sendiri, dan mengonfirmasi bahwa digest image yang dibuat sesuai dengan digest yang dipaketkan dalam aplikasi dan yang diharapkan oleh aplikasi di dalam laporan pengesahan yang kemudian ditampilkan oleh TEE.

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.


Menyederhanakan pengalaman developer

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).


Dari pembuatan prototipe hingga deployment yang fleksibel

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:

  • Ini memungkinkan Anda untuk membuat prototipe dan menguji logika AI gen Anda dalam lingkungan pengembangan cepat yang mudah digunakan yang mendukung iterasi cepat, seperti notebook Jupyter, dan kemudian men-deploy kode AI gen yang sama dengan sedikit atau tanpa perubahan untuk menjalankannya, misalnya, dalam aplikasi Java di perangkat seluler. Dalam tutorial kami, prosesnya semudah menyalin file yang berisi IR ke perangkat seluler Anda dan memuatnya ke dalam aplikasi.

  • Ini memungkinkan Anda untuk men-deploy dan menjalankan logika yang sama, dengan perilaku yang konsisten di seluruh bahasa dan platform (misalnya, dari platform berbasis Linux ke platform seluler, dari Python ke Java dan C++). Ini menguntungkan jika Anda berencana untuk menargetkan sejumlah platform produk yang berbeda.

  • Ini memungkinkan Anda untuk mendelegasikan secara dinamis setiap bagian logika AI gen melintasi batasan proses dan mesin. Secara implisit inilah yang terjadi dalam skenario kami, dengan perangkat seluler yang didelegasikan ke TEE di cloud. Secara kebetulan dalam contoh sederhana ini, kami hanya mendelegasikan satu operasi (panggilan inferensi Gemma 7B). Mekanisme yang kami tawarkan jauh lebih umum.

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 ingin mendengar kisah Anda!

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!