Freigeben über


Entfernen optionaler Vektorinstanzen aus dem Speicher

Die Azure KI-Suche speichert mehrere Kopien von Vektorfeldern, die in bestimmten Workloads verwendet werden. Wenn Sie kein bestimmtes Verhalten unterstützen müssen, z. B. das Zurückgeben von unformatierten Vektoren in einer Abfrageantwort, können Sie Eigenschaften im Index festlegen, die den Speicher für diese Workload auslassen.

Voraussetzungen

  • Vektorfelder in einem Suchindex mit einer vectorSearch-Konfiguration unter Verwendung der Algorithmen „Hierarchical Navigable Small Worlds (HNSW)“ oder „Exhaustive K-Nearest Neighbor (eKNN)“ und eines neuen Vektorprofils.

So werden Vektorfelder gespeichert

Für jedes Vektorfeld gibt es drei Kopien der Vektoren:

Instanz Verbrauch
Quellvektoren (in JSON), die von einem Einbettungsmodell oder einer Pushanforderung an den Index empfangen werden Diese werden für die inkrementelle Datenaktualisierung verwendet, und wenn Sie in der Abfrageantwort „abrufbare“ Vektoren zurückgeben möchten.
Originale Vektoren mit vollständiger Genauigkeit Diese werden für die Bewertung verwendet, wenn Vektoren nicht komprimiert sind, oder optional für die Neubewertung, wenn Abfrageergebnisse über komprimierte Vektoren abgerufen wurden. Die Neubewertung gilt nur, wenn Vektorfelder eine skalare oder binäre Quantisierung durchlaufen.
Vektoren im HNSW-Graphen für die Suche nach den ungefähren nächsten Nachbarn (Approximate Nearest Neighbors, ANNs) Diese werden für die Abfrageausführung verwendet.

Sie können Eigenschaften festlegen, die die ersten beiden Instanzen endgültig aus dem Vektorspeicher verwerfen.

Die letzte Instanz (Vektoren und Graphen) ist für die Ausführung von ANN-Vektorabfragen erforderlich. Techniken der verlustbehafteten Komprimierung wie skalare oder binäre Quantisierung werden auf diese Vektorinstanz angewendet. Wenn Sie die verlustbehaftete Komprimierung ausgleichen möchten, sollten Sie die zweite Instanz für die Zwecke der Neubewertung beibehalten.

Festlegen der stored-Eigenschaft

Die stored-Eigenschaft ist ein boolescher Wert für eine Vektorfelddefinition, der bestimmt, ob Speicher für abrufbare Vektorfeldinhalte (die Quellinstanz) zugeordnet wird. Die stored-Eigenschaft ist standardmäßig „true“. Wenn Sie in einer Abfrageantwort keine Inhalte unformatierter Vektoren benötigen, können Sie bis zu 50 Prozent Speicherplatz pro Feld sparen, indem Sie stored in FALSE ändern.

Überlegungen zum Festlegen von stored auf „false“:

  • Da Vektoren nicht für Menschen lesbar sind, können Sie sie aus den Ergebnissen, die in RAG-Szenarien an LLMs gesendet werden, und aus den Ergebnissen, die auf einer Suchseite angezeigt werden, weglassen. Behalten Sie sie jedoch bei, wenn Sie Vektoren in nachgelagerten Prozessen verwenden, die Vektorinhalte nutzen.

  • Wenn Ihre Indizierungsstrategie jedoch partielle Dokumentaktualisierungen enthält, z. B. „merge“ oder „mergeOrUpload“ für ein vorhandenes Dokument, wird durch Festlegen von stored=false verhindert, dass während der Zusammenführung Inhaltsaktualisierungen für diese Felder ausgeführt werden. Bei jedem „merge“- oder „mergeOrUpload“-Vorgang für ein Suchdokument müssen Sie die Vektorfelder vollständig zusammen mit den Nichtvektorfeldern, die Sie aktualisieren, bereitstellen, da der Vektor andernfalls gelöscht wird.

Das Festlegen der stored=false-Zuordnung kann nicht rückgängig gemacht werden. Sie wird während der Indexerstellung für Vektorfelder festgelegt, wenn physische Datenstrukturen erstellt werden. Wenn Sie später abrufbare Vektorinhalte benötigen, müssen Sie den Index löschen und neu erstellen oder ein neues Feld mit der neuen Zuordnung erstellen und laden.

Das folgende Beispiel zeigt die Fields-Auflistung eines Suchindexes. Legen Sie stored diesen Wert auf "false" fest, um den abrufbaren Speicher für das Vektorfeld dauerhaft zu entfernen.

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
  Content-Type: application/json  
  api-key: [admin key]  

    { 
      "name": "demo-index", 
      "fields": [ 
        { 
          "name": "vectorContent", 
          "type": "Collection(Edm.Single)", 
          "retrievable": false, 
          "stored": false, 
          "dimensions": 1536, 
          "vectorSearchProfile": "vectorProfile" 
        } 
      ] 
    } 

Zusammenfassung der wichtigsten Punkte

  • Dies gilt für Felder mit einem Vektordatentyp.

  • Wirkt sich auf den Speicher auf dem Datenträger, nicht auf den Arbeitsspeicher aus, und hat keine Auswirkungen auf Abfragen. Die Abfrageausführung verwendet einen separaten Vektorindex, der von der Eigenschaft stored nicht betroffen ist, da diese Kopie des Vektors immer gespeichert wird.

  • Die stored Eigenschaft wird während der Indexerstellung für Vektorfelder festgelegt und ist unumkehrbar. Wenn Sie später abrufbare Inhalte abrufen möchten, müssen Sie den Index ablegen und neu erstellen oder ein neues Feld erstellen und laden, das über die neue Zuordnung verfügt.

  • Standardwerte sind stored auf "true" festgelegt und retrievable auf "false" festgelegt. In einer Standardkonfiguration wird eine abrufbare Kopie gespeichert, aber sie wird nicht automatisch in Ergebnissen zurückgegeben. Wenn stored dies der Fall ist, können Sie jederzeit zwischen "true" und "false" umschalten retrievable, ohne einen Index neu erstellen zu müssen. Ist stored "false", retrievable muss "false" sein und kann nicht geändert werden.

Festlegen der rescoreStorageMethod-Eigenschaft

Hinweis

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschau wird ohne Vereinbarung zum Servicelevel bereitgestellt und nicht für Produktionsworkloads empfohlen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Die rescoreStorageMethod-Eigenschaft einer Vektorfelddefinition bestimmt, ob Speicher für originale Vektoren mit vollständiger Genauigkeit zugeordnet wird. Standardmäßig ist die rescoreStorageMethod-Eigenschaft auf preserveOriginals festgelegt. Wenn Sie die für die Abfrage komprimierter Vektoren bereitgestellten Entschärfungen für die Überquotierung und Neubewertung nicht verwenden, können Sie den Vektorspeicher speichern, indem Sie rescoreStorageMethod in discardOriginals ändern.

Wenn Sie eine skalare oder binäre Quantisierung verwenden möchten, empfehlen wir, rescoreStorageMethod auf preserveOriginals festgelegt zu lassen.

So legen Sie diese Eigenschaft fest:

  1. Verwenden Sie die REST-APIs Index erstellen oder Index „2024-11-01-preview“ erstellen oder aktualisieren oder ein Azure SDK-Betapaket, das das Feature bereitstellt.

  2. Fügen Sie Ihrem Index einen vectorSearch-Abschnitt mit Profilen, Algorithmen und Komprimierungen hinzu.

  3. Fügen Sie unter Komprimierungen rescoringOptions hinzu, wobei enableRescoring auf TRUE, defaultOversampling auf eine positive ganze Zahl und rescoreStorageMethod auf preserveOriginals festgelegt ist.

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-11-01-preview
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                }
            ],
            "algorithms": [
              {
                "name": "myHnsw",
                "kind": "hnsw",
                "hnswParameters": {
                  "metric": "cosine",
                  "m": 4,
                  "efConstruction": 400,
                  "efSearch": 500
                },
                "exhaustiveKnnParameters": null
              }
            ],
            "compressions": [
                {
                    "name": "myScalarQuantization",
                    "kind": "scalarQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "preserveOriginals"
                    },
                    "scalarQuantizationParameters": {
                        "quantizedDataType": "int8"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }