🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Panduan Administrasi
    • Optimalisasi Penyimpanan
  • Home
  • Docs
  • Panduan Administrasi

  • Optimalisasi Penyimpanan

  • Gunakan mmap

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) adalah true. Penting untuk memigrasikan metadata untuk menyinkronkan konfigurasi file pemetaan memori yang ada. Untuk detail lebih lanjut, lihat Memigrasi metadata.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?