Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2025 (17.x)
Dimulai dengan SQL Server 2025 (17.x), Anda dapat menentukan jenis dasar yang mendasar untuk jenis data vektor . Secara default, vektor menggunakan float32 sebagai jenis dasarnya.
float16 (setengah presisi) adalah jenis alternatif untuk skenario di mana presisi yang dikurangi dapat diterima. Ini menawarkan alternatif yang lebih ringkas dengan mengurangi penyimpanan dan meningkatkan performa.
Vektor titik float setengah presisi adalah array atau kumpulan angka, di mana setiap angka diwakili menggunakan format titik mengambang setengah presisi 16-bit (float16). Representasi ini mengonsumsi setengah memori float presisi tunggal standar 32-bit. Gunakan jenis-jenis vektor ini untuk menghemat memori dan bandwidth, terutama dalam pembelajaran mendalam dan database vektor, dengan mengorbankan sedikit presisi demi efisiensi.
Meskipun float16 menawarkan keuntungan penyimpanan dan performa yang signifikan, ini memberikan presisi numerik yang berkurang dibandingkan dengan float32. Tradeoff ini membuatnya sangat cocok untuk skenario kemiripan perkiraan, seperti pencarian semantik, tetapi kurang sesuai untuk tugas yang membutuhkan aritmetika presisi tinggi atau akurasi numerik yang tepat.
Manfaat utama dukungan float16
Peningkatan dukungan kedimensi-an
SQL Server mendukung vektor dengan hingga 3.996 dimensi (
1998 × 2) saat menggunakanfloat16. Fitur ini menggandakan batasan 1.998 dimensi untukfloat32. Kemampuan ini memungkinkan penyematan dan kompatibilitas yang lebih ekspresif dengan model yang lebih besar, misalnyatext-embedding-large.Mengurangi penyimpanan dan jejak memori
Menyimpan vektor dalam format 16-bit secara signifikan mengurangi jumlah penyimpanan yang diperlukan dibandingkan dengan vektor presisi penuh. Ini membuatnya layak untuk menyimpan dan mengkueri vektor dimensi tinggi dalam skala besar. Pengoptimalan ini juga meningkatkan kepadatan data, yang dapat meningkatkan performa kueri dalam skenario pencarian vektor.
Efisiensi penyimpanan dan kontrol presisi
Pilih jenis dasar yang paling sesuai:
-
float16untuk Penyimpanan ringkas -
float32untuk penggunaan umum dan tugas presisi yang lebih tinggi
Fleksibilitas ini memastikan penggunaan sumber daya yang optimal tanpa mengorbankan akurasi aplikasi.
-
Sintaksis sampel
Sintaks penggunaan mirip dengan jenis data vektor . Namun, untuk menggunakan float16, tentukan jenis dasar secara eksplisit.
column_name VECTOR ( <dimensions> [, <base_type>] ) [ NOT NULL | NULL ]
Ketersediaan fitur
float16 vektor saat ini tersedia untuk pratinjau. Untuk menguji, aktifkan PREVIEW_FEATURES opsi konfigurasi terlingkup database. Untuk detailnya, tinjau PREVIEW_FEATURES = { ON | NONAKTIF }.
float16 vektor saat ini ditransmisikan sebagai varchar(max) (array JSON) melalui TDS. Dukungan transportasi biner untuk float16 saat ini tidak tersedia.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Examples
Tentukan kolom vektor dalam CREATE TABLE pernyataan menggunakan jenis dasar default atau yang eksplisit.
Secara default, jenis dasarnya adalah float32.
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3)
);
Untuk menggunakan setengah presisi, tentukan float16 secara eksplisit.
-- Explicit float16
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
Contoh berikut membuat tabel dengan kolom vektor float setengah presisi dan menyisipkan data ke dalamnya.
-- 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;
Memeriksa metadata jenis dasar vektor
Kueri berikut mengonfirmasi jenis dasar aktual dan dimensi kolom vektor :
--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');
Kolom keluaran:
vector_dimensions: Jumlah dimensi yang ditentukan untuk vektor.vector_base_type: Kode numerik internal untuk tipe dasar:0=float321=float16
vector_base_type_desc: Deskripsi tipe dasar yang dapat dibaca oleh manusia.
Konversi implisit & eksplisit yang didukung
SQL Server mendukung konversi implisit dan eksplisit dari string varchar, nvarchar, dan json ke VECTOR(<dimension_count>, float16), selama vektor dideklarasikan dengan jumlah dimensi eksplisit.
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
Konversi Implisit hanya didukung ketika jenis vektor target dinyatakan sepenuhnya.
-- 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);
Skenario yang tidak didukung atau rawan kesalahan
Contoh berikut menyoroti kesalahan dan batasan umum saat bekerja dengan jenis data vektor float setengah presisi di SQL Server.
Konversi eksplisit dan implisit antara jenis dasar float32 dan float16
SQL Server saat ini tidak mendukung konversi implisit antara VECTOR(float32) dan VECTOR(float16).
Selain itu, konversi eksplisit menggunakan CAST atau CONVERT saat ini diblokir.
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
Kesalahan berikut dikembalikan:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Ketidakcocokan dimensi
Konversi antara vektor dengan dimensi yang tidak cocok tidak diizinkan dan menimbulkan kesalahan ketidakcocokan dimensi.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Kesalahan berikut dikembalikan:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Penanganan nilai null
Jika vektor dinyatakan tanpa jumlah dimensi, menetapkan nilai ke vektor akan menimbulkan kesalahan.
Contoh ini berfungsi:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Namun, jika jumlah dimensi tidak ditentukan, maka akan menimbulkan kesalahan.
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Nilai di luar rentang
Nilai di luar rentang untuk float16 (misalnya, di atas 65504.0) menimbulkan kesalahan selama penugasan.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Kesalahan berikut dikembalikan:
Input JSON contains out-of-range values for float16
Jenis dasar campuran dalam fungsi
Jenis dasar campuran dalam fungsi seperti VECTOR_DISTANCE tidak didukung dan menimbulkan kesalahan jenis.
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);
Kesalahan berikut dikembalikan:
VECTOR_DISTANCE does not support different base types
Arsitektur yang tidak didukung
float16 tidak didukung pada arsitektur Arm64, dan menggunakannya menimbulkan kesalahan runtime
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);
Kesalahan berikut dikembalikan:
float16 is not supported on ARM64 architecture
Luapan SIMD
Instruksi tunggal, beberapa operasi berbasis data (SIMD), seperti AVX2 atau SSE4.2, dapat menghasilkan kesalahan luapan jika nilai melebihi rentang yang dapat diwakili.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Perilaku tergantung pada ARITHABORT pengaturan:
-
ARITHABORT ONmenghasilkan kesalahan -
ARITHABORT OFFmenghasilkanNULL
Dukungan alat
SQL Server Management Studio (SSMS) saat ini tidak membedakan antara float32 dan float16 di UI. Gunakan sys.columns untuk mengonfirmasi jenis dasar aktual yang digunakan dalam skema.
Dukungan transportasi biner untuk vektor float16 belum tersedia
float16 vektor saat ini ditransmisikan sebagai varchar(max) (array JSON) melalui TDS. Dukungan transportasi biner untuk float16 belum tersedia di driver seperti ODBC, JDBC, dan .NET.
Nota
Semua batasan yang berlaku untuk jenis vektor default (dengan float32) juga berlaku untuk VECTOR(float16).