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