Penyimpanan Data yang mendukung MMap
Dalam Milvus, file yang dipetakan memori memungkinkan pemetaan langsung konten file ke dalam memori. Fitur ini meningkatkan efisiensi memori, khususnya dalam situasi di mana memori yang tersedia terbatas tetapi pemuatan data secara lengkap tidak memungkinkan. Mekanisme pengoptimalan ini dapat meningkatkan kapasitas data sekaligus memastikan kinerja hingga batas tertentu; namun, ketika jumlah data melebihi memori terlalu banyak, kinerja pencarian dan kueri dapat mengalami penurunan yang serius, jadi pilihlah untuk mengaktifkan atau menonaktifkan fitur ini sebagaimana mestinya.
Mengonfigurasi pemetaan memori
Dimulai dengan Milvus 2.4, Anda memiliki fleksibilitas untuk menyesuaikan file konfigurasi statis untuk mengonfigurasi pengaturan pemetaan memori default untuk seluruh cluster sebelum penerapan. Selain itu, ada opsi bagi Anda untuk mengubah parameter secara dinamis untuk menyempurnakan pengaturan pemetaan memori di tingkat cluster dan indeks. Ke depannya, pembaruan di masa mendatang akan memperluas kemampuan pemetaan memori untuk menyertakan konfigurasi tingkat bidang.
Sebelum penerapan cluster: konfigurasi global
Sebelum Anda menerapkan cluster, pengaturan tingkat cluster menerapkan pemetaan memori di seluruh cluster. Hal ini memastikan semua objek baru akan secara otomatis mematuhi konfigurasi ini. Penting untuk diperhatikan bahwa memodifikasi pengaturan ini memerlukan pengaktifan ulang cluster agar efektif.
Untuk menyesuaikan pengaturan pemetaan memori cluster Anda, edit file configs/milvus.yaml
. Di dalam berkas ini, Anda dapat menentukan apakah akan mengaktifkan pemetaan memori secara default dan menentukan jalur direktori untuk menyimpan berkas yang dipetakan memori. Jika jalur (mmapDirPath
) tidak ditentukan, sistem secara default akan menyimpan file yang dipetakan memori di {localStorage.path}/mmap
. Untuk informasi lebih lanjut, lihat Konfigurasi terkait Penyimpanan Lokal.
# This parameter was set in configs/milvus.yaml
...
queryNode:
mmap:
# Set memory mapping property for whole cluster
mmapEnabled: false | true
# Set memory-mapped directory path, if you leave mmapDirPath unspecified, the memory-mapped files will be stored in {localStorage.path}/ mmap by default.
mmapDirPath: any/valid/path
....
Setelah 2.4.10
, konfigurasi queryNode.mmap.mmapEnabled
dibagi menjadi empat bidang terpisah di bawah ini, dan semua defaultnya adalah false
:
queryNode.mmap.vectorField
, mengontrol apakah data vektor adalah mmap;queryNode.mmap.vectorIndex
, mengontrol apakah indeks vektor adalah mmap;queryNode.mmap.scalarField
, mengontrol apakah data skalar adalah mmap;queryNode.mmap.scalarIndex
, mengontrol apakah indeks skalar adalah mmap;
# This parameter was set in configs/milvus.yaml
...
queryNode:
mmap:
vectorField: false # Enable mmap for loading vector data
vectorIndex: false # Enable mmap for loading vector index
scalarField: false # Enable mmap for loading scalar data
scalarIndex: false # Enable mmap for loading scalar index
....
Selain itu, hanya indeks vektor dan data vektor mmap yang dapat diaktifkan dan dinonaktifkan untuk sebuah koleksi secara terpisah, tetapi tidak untuk koleksi lainnya.
Kompatibilitas: Jika konfigurasi asli queryNode.mmap.mmapEnabled
diatur ke true
, konfigurasi yang baru ditambahkan akan diatur ke true
saat ini. Jika queryNode.mmap.mmapEnabled
diatur ke false
, jika konfigurasi baru diatur ke true
, nilai akhir akan menjadi true
.
Selama operasi cluster: konfigurasi dinamis
Selama waktu kerja cluster, Anda dapat menyesuaikan pengaturan pemetaan memori secara dinamis pada tingkat koleksi atau indeks.
Pada tingkat koleksi, pemetaan memori diterapkan pada semua data mentah yang tidak diindeks di dalam koleksi, tidak termasuk kunci utama, stempel waktu, dan ID baris. Pendekatan ini sangat cocok untuk manajemen komprehensif kumpulan data yang besar.
Untuk penyesuaian dinamis pada pengaturan pemetaan memori dalam koleksi, gunakan metode set_properties()
. Di sini, Anda dapat mengalihkan mmap.enabled
antara True
atau False
sesuai kebutuhan.
# Get existing collection
collection = Collection("test_collection") # Replace with your collection name
# Set memory mapping property to True or Flase
collection.set_properties({'mmap.enabled': True})
Setelah 2.4.10
, pengaturan pemetaan memori dalam koleksi, gunakan metode add_field
. Di sini, Anda dapat mengganti mmap_enabled
antara True
atau False
sesuai kebutuhan.
schema = MilvusClient.create_schema()
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=768, mmap_enabled=True)
Untuk pengaturan tingkat indeks, pemetaan memori dapat diterapkan secara khusus pada indeks vektor tanpa mempengaruhi tipe data lainnya. Fitur ini sangat berharga untuk koleksi yang memerlukan kinerja yang dioptimalkan untuk pencarian vektor.
Untuk mengaktifkan atau menonaktifkan pemetaan memori untuk indeks dalam koleksi, panggil metode alter_index()
, tentukan nama indeks target di index_name
dan atur mmap.enabled
ke True
atau False
.
collection.alter_index(
index_name="vector_index", # Replace with your vector index name
extra_params={"mmap.enabled": True} # Enable memory mapping for index
)
Menyesuaikan jalur penyimpanan dalam penerapan yang berbeda
File yang dipetakan secara default ke direktori /mmap
di dalam localStorage.path
. Berikut ini cara menyesuaikan pengaturan ini di berbagai metode penyebaran:
- Untuk Milvus yang diinstal menggunakan Helm Chart:
# new-values.yaml
extraConfigFiles:
user.yaml: |+
queryNode:
mmap:
mmapEnabled: true
mmapDirPath: any/valid/path
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
- Untuk Milvus yang diinstal menggunakan Milvus Operator:
# patch.yaml
spec:
config:
queryNode:
mmap:
mmapEnabled: true
mmapDirPath: any/valid/path
kubectl patch milvus <milvus-name> --patch-file patch.yaml
- Untuk Milvus yang diinstal menggunakan Docker:
# A new installation script is provided to enable mmap-related settings.
Batas
Pemetaan memori tidak dapat diaktifkan untuk koleksi yang dimuat, pastikan koleksi telah dirilis sebelum mengaktifkan pemetaan memori.
Pemetaan memori tidak didukung untuk indeks DiskANN atau indeks kelas GPU.
PERTANYAAN UMUM
Dalam skenario apa saja yang disarankan untuk mengaktifkan pemetaan memori? Apa saja trade-off setelah mengaktifkan fitur ini?
Pemetaan memori direkomendasikan ketika memori terbatas atau ketika persyaratan kinerja sedang. Mengaktifkan fitur ini akan meningkatkan kapasitas pemuatan data. Misalnya, dengan konfigurasi 2 CPU dan memori 8 GB, mengaktifkan pemetaan memori dapat memungkinkan pemuatan data hingga 4 kali lebih banyak dibandingkan dengan tidak mengaktifkannya. Dampaknya pada performa bervariasi:
Dengan memori yang cukup, performa yang diharapkan serupa dengan performa yang hanya menggunakan memori.
Dengan memori yang tidak mencukupi, kinerja yang diharapkan dapat menurun.
Apa hubungan antara konfigurasi tingkat koleksi dan tingkat indeks?
Collection-level dan index-level bukanlah hubungan yang inklusif, collection-level mengontrol apakah data asli diaktifkan mmap atau tidak, sedangkan index-level hanya untuk indeks vektor.
Apakah ada jenis indeks yang direkomendasikan untuk pemetaan memori?
Ya, HNSW direkomendasikan untuk mengaktifkan mmap. Kami telah menguji indeks seri HNSW, IVF_FLAT, IVF_PQ/SQ sebelumnya, kinerja indeks seri IVF menurun drastis, sedangkan penurunan kinerja dengan mengaktifkan mmap untuk indeks HNSW masih sesuai dengan ekspektasi.
Jenis penyimpanan lokal seperti apa yang diperlukan untuk pemetaan memori?
Disk berkualitas tinggi akan meningkatkan performa, dengan drive NVMe sebagai opsi yang lebih disukai.
Apakah data skalar dapat dipetakan ke dalam memori?
Pemetaan memori dapat diterapkan pada data skalar, tetapi tidak dapat diterapkan pada indeks yang dibangun di atas bidang skalar.
Bagaimana prioritas ditentukan untuk konfigurasi pemetaan memori di berbagai level?
Dalam Milvus, ketika konfigurasi pemetaan memori secara eksplisit ditentukan di berbagai tingkat, konfigurasi tingkat indeks dan tingkat koleksi memiliki prioritas tertinggi, yang kemudian diikuti oleh konfigurasi tingkat kluster.
Jika saya meng-upgrade dari Milvus 2.3 dan telah mengonfigurasi jalur direktori pemetaan memori, apa yang akan terjadi?
Jika Anda mengupgrade dari Milvus 2.3 dan telah mengkonfigurasi jalur direktori pemetaan memori (
mmapDirPath
), konfigurasi Anda akan dipertahankan, dan pengaturan default untuk pemetaan memori yang diaktifkan (mmapEnabled
) adalahtrue
. Penting untuk memigrasikan metadata untuk menyinkronkan konfigurasi file pemetaan memori yang ada. Untuk detail lebih lanjut, lihat Memigrasi metadata.