Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x)
Ab SQL Server 2025 (17.x) können Sie den zugrunde liegenden Basistyp für den Vektordatentyp angeben. Standardmäßig wird der Vektor als Basistyp verwendet float32 .
float16 (Halbgenauigkeit) ist ein alternativer Typ für Szenarien, in denen eine geringere Genauigkeit akzeptabel ist. Es bietet eine kompaktere Alternative, indem der Speicher reduziert und die Leistung verbessert wird.
Ein Gleitkommavektor mit halber Präzision ist ein Array oder eine Sammlung von Zahlen, wobei jede Zahl im 16-Bit Gleitkommaformat mit halber Präzision (float16) dargestellt wird. Diese Darstellung verbraucht die Hälfte des Arbeitsspeichers eines standardmäßigen 32-Bit-Gleitkommawerts mit einfacher Genauigkeit. Verwenden Sie diese Vektortypen, um Speicher und Bandbreite zu sparen, insbesondere in Deep Learning- und Vektordatenbanken, indem Sie eine gewisse Genauigkeit für Effizienz abhandeln.
Während float16 es erhebliche Speicher- und Leistungsvorteile bietet, bietet es eine reduzierte numerische Genauigkeit im Vergleich zu float32. Dieser Kompromiss eignet sich gut für ungefähre Ähnlichkeitsszenarien, z. B. die semantische Suche, aber weniger geeignet für Arbeitslasten, die eine präzise Arithmetik oder genaue numerische Genauigkeit erfordern.
Wichtige Vorteile der Float16-Unterstützung
Unterstützung für erhöhte Dimensionalität
SQL Server unterstützt Vektoren mit bis zu 3.996 Dimensionen (
1998 × 2) bei Verwendungfloat16. Dieses Feature verdoppelt die Beschränkung auf 1.998 Dimensionen fürfloat32. Diese Funktion ermöglicht ausdrucksstärkere Einbettungen und Kompatibilität mit größeren Modellen, zum Beispieltext-embedding-large.Reduzierter Speicher- und Speicherbedarf
Durch das Speichern von Vektoren im 16-Bit-Format wird die erforderliche Speichermenge im Vergleich zu Vektoren mit voller Genauigkeit erheblich verringert. Dadurch ist es möglich, hochdimensionale Vektoren im Maßstab zu speichern und abzufragen. Diese Optimierung verbessert auch die Datendichte, wodurch die Abfrageleistung in Vektorsuchszenarien verbessert werden kann.
Speichereffizienz und präzise Steuerung
Wählen Sie den am besten geeigneten Basistyp aus:
-
float16für kompakten Speicher -
float32für allgemeine Verwendungsaufgaben und höhere Genauigkeitsaufgaben
Durch diese Flexibilität wird eine optimale Ressourcenauslastung gewährleistet, ohne die Anwendungsgenauigkeit zu beeinträchtigen.
-
Beispielsyntax
Die Verwendungssyntax ähnelt dem Vektordatentyp . Geben Sie für die Verwendung float16jedoch explizit den Basistyp an.
column_name VECTOR ( <dimensions> [, <base_type>] ) [ NOT NULL | NULL ]
Verfügbarkeit von Funktionen
float16 Vektor ist zurzeit für die Vorschau verfügbar. Aktivieren Sie zum Testen die Konfigurationsoption für den PREVIEW_FEATURES Datenbankbereich. Details erhalten Sie unter PREVIEW_FEATURES = { ON | OFF }.
float16 Vektoren werden derzeit als varchar(max) (JSON-Array) über TDS übertragen. Die Unterstützung des binären Transports für float16 den binären Transport ist derzeit nicht verfügbar.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Examples
Definieren Sie eine Vektorspalte in einer CREATE TABLE Anweisung entweder mithilfe des Standardbasistyps oder eines expliziten.
Standardmäßig ist float32der Basistyp .
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3)
);
Wenn Sie eine halbe Genauigkeit verwenden möchten, geben Sie explizit an float16 .
-- Explicit float16
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
Im folgenden Beispiel wird eine Tabelle mit halber Genauigkeit float-Vektorspalte erstellt und Daten in die Tabelle eingefügt.
-- Step 0: Enable Preview Features
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
-- Step 1: Create a Table with a VECTOR(5, float16) Column
CREATE TABLE dbo.Articles
(
id INT PRIMARY KEY,
title NVARCHAR(100),
content NVARCHAR(MAX),
embedding VECTOR(5, float16)
);
-- Step 2: Insert Sample Data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
-- Step 3: Perform a Vector Similarity Search Using VECTOR_DISTANCE function
DECLARE @v AS VECTOR(5, float16) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP (3)
id,
title,
VECTOR_DISTANCE('cosine', @v, embedding) AS distance
FROM dbo.Articles
ORDER BY distance;
-- Step 4: Optionally Create a Vector Index
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (
metric = 'cosine',
type = 'diskANN'
);
-- Step 5: Perform a Vector Similarity Search
DECLARE @qv AS VECTOR(5, float16) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
t.id,
t.title,
t.content,
s.distance
FROM
VECTOR_SEARCH(
table = Articles AS t,
column = embedding,
similar_to = @qv,
metric = 'cosine',
top_n = 3
) AS s
ORDER BY s.distance, t.title;
Überprüfen der Metadaten des Vektorbasistyps
Die folgende Abfrage bestätigt den tatsächlichen Basistyp und die Abmessungen einer Vektorspalte :
--Inspect Vector Base type Metadata in sys.columns
SELECT name AS column_name,
system_type_id,
user_type_id,
vector_dimensions,
vector_base_type,
vector_base_type_desc
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.Articles');
Ausgabespalten:
vector_dimensions: Anzahl der dimensionen, die für den Vektor definiert sind.vector_base_type: Interner numerischer Code für den Basistyp:0=float321=float16
vector_base_type_desc: Lesbare Beschreibung des Basistyps.
Unterstützte implizite und explizite Konvertierung
SQL Server unterstützt sowohl implizite als auch explizite Konvertierungen von varchar-, nvarchar- und json-Zeichenfolgen in VECTOR(<dimension_count>, float16), solange der Vektor mit einer expliziten Dimensionsanzahl deklariert wird.
DECLARE @j AS JSON = '[1.0, 2.0, 3.0]';
DECLARE @v AS VECTOR(3, float16);
SET @v = CAST (@j AS VECTOR(3, float16)); -- Explicit conversion from JSON to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from VARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from NVARCHAR to float16
Implizite Konvertierung wird nur unterstützt, wenn der Zielvektortyp vollständig deklariert wird.
-- Implicit conversion from VARCHAR to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
-- Implicit conversion from NVARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
--From JSON_ARRAY to VECTOR
DECLARE @v3 AS VECTOR(3, float16) = JSON_ARRAY(1.0, 2.0, 3.0);
Nicht unterstützte oder fehleranfällige Szenarien
In den folgenden Beispielen werden häufige Fehler und Einschränkungen beim Arbeiten mit dem Gleitkommavektortyp mit halber Genauigkeit in SQL Server hervorgehoben.
Explizite und implizite Konvertierung zwischen Basistypen float32 und float16
SQL Server unterstützt derzeit keine implizite Konvertierung zwischen VECTOR(float32) und VECTOR(float16).
Darüber hinaus wird die explizite Konvertierung mit CAST oder CONVERT zurzeit blockiert.
DECLARE @v1 AS VECTOR(3, float16);
DECLARE @v2 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
SET @v1 = CAST (@v2 AS VECTOR(3, float16)); -- Explicit conversion from float32 to float16
Der folgende Fehler wird zurückgegeben:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Nichtübereinstimmung von Dimensionen
Die Konvertierung zwischen Vektoren mit nicht übereinstimmenden Dimensionen ist nicht zulässig und löst einen Dimensionsfehler aus.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Der folgende Fehler wird zurückgegeben:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Nullbehandlung
Wenn ein Vektor ohne Bemaßungsanzahl deklariert wird, löst das Zuweisen eines Werts einen Fehler aus.
Dieses Beispiel funktioniert:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Wenn die Dimensionsanzahl jedoch nicht angegeben ist, wird ein Fehler ausgelöst:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
außerhalb der zulässigen Werte
Out-of-Range-Werte für float16 (z. B. über 65504,0) lösen einen Fehler während der Zuordnung aus.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Der folgende Fehler wird zurückgegeben:
Input JSON contains out-of-range values for float16
Gemischte Basistypen in Funktionen
Gemischte Basistypen in Funktionen wie VECTOR_DISTANCE werden nicht unterstützt und löst einen Typfehler aus.
DECLARE @v1 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Der folgende Fehler wird zurückgegeben:
VECTOR_DISTANCE does not support different base types
Nicht unterstützte Architektur
float16 wird für Arm64-Architekturen nicht unterstützt, und die Verwendung löst einen Laufzeitfehler aus.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, int) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Der folgende Fehler wird zurückgegeben:
float16 is not supported on ARM64 architecture
SIMD-Überlauf
Einzelne Anweisungen für mehrere Daten (SIMD), wie AVX2 oder SSE4.2, können Überlauffehler erzeugen, wenn die Werte über die darstellbaren Bereiche hinausgehen.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Das Verhalten hängt von der ARITHABORT Einstellung ab:
-
ARITHABORT ONführt zu einem Fehler. -
ARITHABORT OFFergibtNULL
Unterstützung von Tools
SQL Server Management Studio (SSMS) unterscheidet derzeit nicht zwischen float32 und float16 in der Benutzeroberfläche. Wird sys.columns verwendet, um den tatsächlichen Basistyp zu bestätigen, der in einem Schema verwendet wird.
Unterstützung des binären Transports für float16-Vektoren noch nicht verfügbar
float16 Vektoren werden derzeit als varchar(max) (JSON-Array) über TDS übertragen. Die Unterstützung für den binären Transport von float16 in Treibern wie ODBC, JDBC und .NET ist noch nicht verfügbar.
Hinweis
Alle Einschränkungen, die für den Standardvektortyp gelten (mit float32) gelten auch für VECTOR(float16).