Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2025 (17.x)
SQL Server 2025(17.x) sürümünden başlayarak , vektör veri türü için temel alınan temel türü belirtebilirsiniz. Varsayılan olarak vektör, temel türü olarak float32 kullanır.
float16 (yarı hassasiyet), azaltılmış hassasiyetin kabul edilebilir olduğu durumlar için alternatif bir türdür. Depolamayı azaltarak ve performansı artırarak daha kompakt bir alternatif sunar.
Yarım duyarlıklı kayan nokta vektör, her sayının 16 bit yarım duyarlık (float16) kayan nokta biçimi kullanılarak temsil edildiği bir dizi veya sayı koleksiyonudur. Bu gösterim, standart 32 bit tek duyarlıklı float'ın belleğinin yarısını tüketir. Bellek ve bant genişliğinden tasarruf etmek için, hassasiyeti biraz feda ederek verimlilik sağlamak amacıyla bu vektör türlerini kullanın; özellikle derin öğrenme ve vektör veritabanlarında.
önemli depolama ve performans avantajları sunarken float16 , ile karşılaştırıldığında float32daha az sayısal duyarlık sağlar. Bu denge, semantik arama gibi yaklaşık benzerlik senaryoları için uygundur, ancak yüksek hassasiyetli aritmetik veya kesin sayısal doğruluk gerektiren iş yükleri için daha az uygundur.
float16 desteğinin temel avantajları
Artan boyutsallık desteği
SQL Server, kullanırken
1998 × 2kadar vektörleri destekler (float16). Bu özellik, içinfloat321.998 boyut sınırlamasını ikiye katlar. Bu özellik, daha ifadeli gömülümler ve daha büyük modellerle uyumluluk sağlar, örneğintext-embedding-large.Azaltılmış depolama ve bellek ayak izi
Vektörlerin 16 bit biçiminde depolanması, tam duyarlıklı vektörlere kıyasla gereken depolama miktarını önemli ölçüde azaltır. Bu, yüksek boyutlu vektörleri büyük ölçekte depolamayı ve sorgulamayı mümkün kılar. Bu iyileştirme ayrıca veri yoğunluğunun iyileştirilmesini de sağlar ve bu da vektör arama senaryolarında sorgu performansını geliştirebilir.
Depolama verimliliği ve duyarlık denetimi
En uygun temel türü seçin:
-
float16kompakt Depolama için -
float32genel kullanım ve daha yüksek duyarlıklı görevler için
Bu esneklik, uygulama doğruluğundan ödün vermeden en iyi kaynak kullanımını sağlar.
-
Örnek söz dizimi
Kullanım söz dizimi vektör veri türüne benzer. Ancak, float16 kullanmak için taban türünü açıkça belirtin.
column_name VECTOR ( <dimensions> [, <base_type>] ) [ NOT NULL | NULL ]
Özellik kullanılabilirliği
float16 vektör şu anda önizleme için kullanılabilir. Test etmek için veritabanı kapsamlı yapılandırma seçeneğini etkinleştirin PREVIEW_FEATURES . Ayrıntılar için PREVIEW_FEATURES = { AÇIK | KAPALI } kısmını gözden geçirin.
float16 vektörleri şu anda TDS üzerinden varchar(max) (JSON dizisi) olarak iletilir. için float16 ikili aktarım desteği şu anda kullanılamıyor.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Örnekler
Varsayılan temel türü veya açık bir türü kullanarak bir deyimde CREATE TABLE sütunu tanımlayın.
Varsayılan olarak, temel tür şeklindedir float32.
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3)
);
Yarı hassasiyet kullanmak için float16 açıkça belirtin.
-- Explicit float16
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
Aşağıdaki örnek yarım duyarlıklı kayan vektör sütununa sahip bir tablo oluşturur ve içine veri ekler.
-- 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;
Vektör temel türü meta verilerini inceleme
Aşağıdaki sorgu, bir vektör sütununun gerçek temel türünü ve boyutlarını onaylar:
--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');
Çıkış sütunları:
vector_dimensions: Vektör için tanımlanan boyut sayısı.vector_base_type: Temel tür için iç sayısal kod:0=float321=float16
vector_base_type_desc: Temel türün insan tarafından okunabilen açıklaması.
Desteklenen örtük ve açık dönüştürme
SQL Server, vektör açık bir boyut sayısıyla bildirilirse örtük ve açık dönüştürmeyi varchar, nvarchar ve json dizelerinden VECTOR(<dimension_count>, float16)öğesine destekler.
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
Örtük Dönüştürme yalnızca hedef vektör türü tam olarak bildirildiğinde desteklenir.
-- 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);
Desteklenmeyen veya hataya açık senaryolar
Aşağıdaki örneklerde, SQL Server'da yarı duyarlıklı kayan vektör veri türüyle çalışırken karşılaşılan yaygın hatalar ve sınırlamalar vurgulanır.
Float32 ve float16 temel türleri arasında açık ve örtük dönüştürme
SQL Server şu anda ve VECTOR(float32) arasında örtük dönüşümü desteklememektedir.
Ayrıca, veya CAST kullanılarak yapılan CONVERT şu anda engellenmiştir.
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
Aşağıdaki hata döndürülür:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Boyut uyuşmazlığı
Eşleşmeyen boyutlara sahip vektörler arasında dönüştürmeye izin verilmez ve boyut uyuşmazlığı hatası oluşturur.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Aşağıdaki hata döndürülür:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Null işleme
Bir vektör boyut sayısı olmadan bildirilirse, buna bir değer atamak hataya neden olur.
Bu örnek çalışır:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Ancak boyut sayısı belirtilmezse bir hata oluşur:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Aralık dışı değerler
için aralık dışı değerler float16 (örneğin, 65504.0'ın üzerinde) atama sırasında bir hata oluşturur.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Aşağıdaki hata döndürülür:
Input JSON contains out-of-range values for float16
İşlevlerdeki karma veri türleri
gibi VECTOR_DISTANCE işlevlerdeki karma temel türler desteklenmez ve tür hatası oluşturur.
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);
Aşağıdaki hata döndürülür:
VECTOR_DISTANCE does not support different base types
Desteklenmeyen mimari
float16 Arm64 mimarilerinde desteklenmez ve bunu kullanmak çalışma zamanı hatasına neden olur
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);
Aşağıdaki hata döndürülür:
float16 is not supported on ARM64 architecture
SIMD taşması
Tek talimatla, çoklu veri (SIMD) tabanlı işlemler, örneğin AVX2 veya SSE4.2 gibi, değerler temsil edilebilir aralıkları aşarsa taşma hataları üretebilir.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Davranış şu ayara ARITHABORT bağlıdır:
-
ARITHABORT ONhatayla sonuçlanır -
ARITHABORT OFFsonuç verirNULL
Araçlar desteği
SQL Server Management Studio (SSMS) şu anda kullanıcı arabiriminde float32 ile float16 arasındaki farkı ayırt etmez. Şemada kullanılan gerçek temel türü onaylamak için kullanın sys.columns .
Float16 vektörleri için ikili aktarım desteği henüz mevcut değil
float16 vektörleri şu anda TDS üzerinden varchar(max) (JSON dizisi) olarak iletilir. için float16 ikili aktarım desteği henüz ODBC, JDBC ve .NET gibi sürücülerde sağlanmamıştır.
Uyarı
Varsayılan vektör türüne (ile float32) uygulanan tüm sınırlamalar için VECTOR(float16)de geçerlidir.