Traffine I/O

Bahasa Indonesia

2023-05-05

Bagaimana Memilih Tipe dan Ukuran Pod yang Tepat di Pinecone

Pendahuluan

Memilih tipe dan ukuran pod yang tepat adalah langkah penting dalam merencanakan penggunaan Pinecone Anda. Artikel ini memberikan pemahaman dasar tentang pemilihan pod.

Pod dalam Pinecone

Saya akan menjelaskan konsep pod dalam Pinecone, tipe-tipe pod yang berbeda, ukurannya, dan bagaimana pod tersebut mempengaruhi kinerja layanan Anda.

Pod, Tipe Pod, dan Ukuran Pod

Pod dalam konteks Pinecone adalah unit perangkat keras yang telah dikonfigurasi sebelumnya untuk menjalankan layanan Pinecone. Setiap indeks dalam layanan Anda berjalan pada satu atau lebih pod. Jumlah pod yang digunakan dalam penggunaan Anda secara langsung mempengaruhi kapasitas penyimpanan, latensi, dan throughput layanan Anda. Jumlah pod yang lebih banyak umumnya menghasilkan kapasitas penyimpanan yang lebih besar, latensi yang lebih rendah, dan throughput yang lebih tinggi. Ukuran pod yang berbeda juga tersedia, memberikan fleksibilitas lebih dalam mengoptimalkan kinerja layanan Anda.

Setelah indeks dibuat menggunakan tipe pod tertentu, penting untuk dicatat bahwa tipe pod tidak dapat diubah.

Tipe Pod

Terdapat beberapa tipe pod dalam Pinecone, masing-masing dengan kelebihan dan kasus penggunaan yang berbeda. Tipe pod utama meliputi:

Pod s1

Pod s1 adalah pod yang dioptimalkan untuk penyimpanan dengan kapasitas penyimpanan yang besar dan biaya total yang lebih rendah dengan latensi query sedikit lebih tinggi dibandingkan pod p1. Pod ini ideal untuk indeks yang sangat besar dengan persyaratan latensi yang moderat atau lebih fleksibel.

Setiap pod s1 memiliki kapasitas yang cukup untuk sekitar 5 juta vektor dengan 768 dimensi.

Pod p1

Pod p1 adalah pod yang dioptimalkan untuk kinerja dengan latensi query yang sangat rendah. Namun, pod ini dapat menyimpan lebih sedikit vektor per pod dibandingkan pod s1. Pod p1 sangat cocok untuk aplikasi dengan persyaratan latensi yang ketat (kurang dari 100 ms). Setiap pod p1 dapat dengan nyaman menyimpan sekitar 1 juta vektor dengan 768 dimensi.

Pod p2

Pod p2 menawarkan kombinasi seimbang antara throughput query yang lebih tinggi dan latensi yang lebih rendah. Terutama cocok untuk vektor dengan kurang dari 128 dimensi dan query dengan nilai topK kurang dari 50, pod p2 dapat mendukung hingga 200 Queries Per Second (QPS) per replika dan mengembalikan hasil query dalam waktu kurang dari 10ms. Setiap pod p2 dapat menyimpan sekitar 1 juta vektor dengan 768 dimensi, tetapi kapasitas ini dapat bervariasi tergantung pada dimensionalitas vektor. Namun, laju pemasukan data untuk pod p2 lebih lambat daripada pod p1. Penting untuk dicatat bahwa pod p2 tidak mendukung nilai vektor yang jarang (sparse vector values).

Ukuran Pod

Kinerja sebuah pod tidak hanya bergantung pada tipe podnya, tetapi juga pada ukurannya. Setiap tipe pod mendukung empat ukuran pod:

  • x1
  • x2
  • x4
  • x8

Kapasitas penyimpanan dan komputasi indeks Anda akan dua kali lipat setiap kali ukuran pod ditingkatkan. Ukuran pod default adalah x1, tetapi Anda dapat meningkatkan ukuran pod setelah indeks dibuat.

Memilih Indeks Pinecone yang Tepat

Ada lima pertimbangan utama saat memutuskan cara mengonfigurasi indeks Pinecone Anda:

  • Jumlah vektor
  • Dimensi vektor Anda
  • Ukuran metadata pada setiap vektor
  • Throughput QPS
  • Kardinalitas metadata yang diindeks

Setiap pertimbangan ini memiliki persyaratan untuk ukuran indeks, tipe pod, dan strategi replikasi.

Jumlah Vektor

Pertimbangan pertama dan paling penting dalam penentuan ukuran adalah jumlah vektor yang Anda rencanakan untuk ditangani. Aturan praktis yang kasar adalah bahwa satu pod p1 dapat menyimpan sekitar 1 juta vektor, sedangkan pod s1 dapat menyimpan hingga 5 juta vektor. Namun, kapasitas ini dapat dipengaruhi oleh faktor lain seperti dimensionalitas vektor dan metadata.

Dimensi Vektor

Estimasi kapasitas yang disebutkan di atas diasumsikan bahwa setiap vektor memiliki 768 dimensi. Tergantung pada kasus penggunaan individu Anda, dimensionalitas vektor Anda mungkin bervariasi, dan dengan demikian, ruang yang diperlukan untuk menyimpannya bisa lebih atau kurang.

Setiap dimensi pada satu vektor mengonsumsi 4 byte memori dan penyimpanan per dimensi, jadi jika Anda mengharapkan memiliki 1 juta vektor dengan 768 dimensi masing-masing, itu sekitar 3GB penyimpanan tanpa mempertimbangkan metadata atau overhead lainnya. Tabel di bawah memberikan beberapa contoh ukuran pod yang tipikal dan jumlah yang diperlukan untuk indeks tertentu.

Tipe Pod Dimensi Jumlah maksimum perkiraan vektor per pod
p1 512 1,250,000
768 1,000,000
1024 675,000
p2 512 1,250,000
768 1,100,000
1024 1,000,000
s1 512 8,000,000
768 5,000,000
1024 4,000,000

Queries Per Second (QPS)

Kecepatan query, diukur dalam QPS, ditentukan oleh kombinasi tipe pod, jumlah replika, dan nilai top_k dari query. Karena tipe pod yang berbeda dioptimalkan untuk kasus penggunaan yang berbeda, tipe pod menjadi faktor utama dalam QPS.

Sebagai aturan umum, satu pod p1 dengan 1 juta vektor dengan 768 dimensi masing-masing dan tanpa replika dapat menangani sekitar 20 QPS. Kecepatan yang lebih tinggi atau lebih rendah mungkin tergantung pada ukuran metadata, jumlah vektor, dimensionalitas vektor, dan nilai top_K untuk pencarian Anda.

Tipe Pod top_k 10 top_k 250 top_k 1000
p1 30 25 20
p2 150 50 20
s1 10 10 10

Nilai QPS dalam tabel di atas merupakan nilai QPS dasar dengan 1 juta vektor dan 768 dimensi.

Menambahkan replika adalah cara yang sederhana untuk meningkatkan QPS Anda. Setiap replika meningkatkan potensi throughput sekitar QPS yang sama, jadi jika Anda menginginkan 150 QPS menggunakan pod p1, itu berarti menggunakan pod utama dan 5 replika. Penggunaan threading atau multiprocessing dalam aplikasi Anda juga penting, karena menerbitkan query tunggal secara berurutan masih mempengaruhi keterlambatan dari latensi yang mendasarinya. Klien gRPC Pinecone juga dapat digunakan untuk meningkatkan throughput upsert.

Kardinalitas dan Ukuran Metadata

Pertimbangan terakhir saat merencanakan indeks Anda adalah kardinalitas dan ukuran metadata Anda. Meskipun peningkatan kebutuhan penyimpanan mungkin terlihat kecil untuk beberapa juta vektor, mereka dapat memiliki dampak nyata saat aplikasi Anda berkembang untuk menangani ratusan juta atau bahkan miliaran vektor.

Indeks dengan kardinalitas tinggi, seperti yang menyimpan ID pengguna unik pada setiap vektor, dapat memiliki persyaratan memori yang substansial. Hal ini dapat mengakibatkan jumlah vektor yang lebih sedikit yang dapat muat per pod. Selain itu, jika ukuran metadata per vektor lebih besar, indeks membutuhkan lebih banyak penyimpanan.

Contoh Aplikasi dan Pengukuran

Saya akan mengilustrasikan bagaimana panduan dan prinsip yang telah dibahas dapat diterapkan dalam skenario dunia nyata. Saya akan merujuk dua contoh aplikasi dalam dokumen resmi untuk menunjukkan cara memilih tipe, ukuran, dan jumlah pod yang tepat untuk indeks Anda.

Contoh 1: Pencarian Semantik Artikel Berita

Misalkan kita bekerja dengan kumpulan data 204.135 vektor, dengan setiap vektor menggunakan 300 dimensi untuk pencarian semantik artikel berita. Jumlah dimensi ini jauh di bawah ukuran umum 768 dimensi. Mengingat aturan praktis yang menyatakan bahwa satu pod p1 dapat menampung hingga 1 juta vektor, kita dapat dengan nyaman menjalankan aplikasi ini menggunakan satu pod p1.x1. Meskipun penggunaan kapasitas pod lebih rendah, permintaan akan latensi rendah dan respons cepat dalam aplikasi pencarian semantik membuat tipe pod p1 menjadi pilihan yang paling tepat.

Contoh 2: Pengenalan Wajah

Mari kita pertimbangkan kasus yang lebih kompleks dari aplikasi pengenalan wajah. Misalkan Anda sedang membangun aplikasi untuk mengidentifikasi pelanggan menggunakan pengenalan wajah dalam aplikasi perbankan yang aman. Vektor yang digunakan untuk pengenalan wajah dapat bekerja dengan hanya 128 dimensi, tetapi dalam kasus ini, kita ingin mencapai presisi yang lebih tinggi karena penggunaannya dalam keamanan keuangan, sehingga memilih 2048 dimensi per vektor. Selain itu, kita berencana untuk melayani 100 juta pelanggan.

Untuk memperkirakan jumlah pod yang diperlukan, mari pertimbangkan konfigurasi tipikal yang muat 1 juta vektor dengan 768 dimensi dalam pod p1.x1. Dengan menggunakan ini sebagai dasar, kita dapat membagi konfigurasi yang diinginkan untuk mendapatkan perkiraan pod:

100 juta / 1 juta = 100 pod p1 dasar
2048 / 768 = 2.667 rasio vektor
2.667 * 100 = 267 (pembulatan ke atas)

Perhitungan tersebut menghasilkan kebutuhan sebanyak 267 pod p1.x1. Namun, kita dapat mengurangi jumlah ini dengan beralih ke pod s1, yang mengutamakan kapasitas penyimpanan daripada latensi. Pod ini memiliki kapasitas penyimpanan lima kali lipat dari pod p1.x1, sehingga perhitungan baru akan menjadi:

267 / 5 = 54 (pembulatan ke atas)

Dengan demikian, perkiraan kita menunjukkan bahwa kita membutuhkan 54 pod s1.x1 untuk menyimpan data dengan dimensionalitas yang sangat tinggi untuk wajah dari setiap pelanggan bank.

Referensi

https://docs.pinecone.io/docs/choosing-index-type-and-size
https://docs.pinecone.io/docs/indexes

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!