SafeTensor Dosya Formatı Uzerine

Bu makale, Büyük Dil Modelleri konusunda Safetensor adını verdiğimiz dosya formatının öneminden bahsetmekte ve neden mümkün olduğu durumlarda orijinal safetensor ağırlıklarının indirilmesinin tercih edilmesi gerektiğini anlatmaktadır. Makale Türkçe dilinde yazılmış olup, makine çevirisi ile İngilizce diline çevrilmiştir.

SafeTensor Dosya Formatı Uzerine

Introduction

Büyük Dil Modellerini yerel olarak çalıştıran insanlar genellikle bir trend den çok bir felsefe takip ederler; sonuçta genel kanıya göre bedava veya ucuz olan ChatGPT, Claude, Gemini (Gemma değil) gibi modeller internetten erişilebilirken ve yerelden çok daha iyi çalışabilirken, neden yakın bir seviye ve/veya kaliteye ulaşmak için ciddi yatırımlar kim nasıl mantıklı bir sebep bulabilir?

Bu soruya verilebilecek birçok cevap vardır, ister kişisel gizlilik, ister sansürsüzlük, ister kontrol sahibi olma felsefesi, kişiselleştirme, kısıtlamalar, vb. Bunlar, birbirinden farklı görünsede bir noktada birleşir,; dosya. Bunların hepsinin temelinde, dosyaya erişimi sahibi olmak gerektirir. Ama birçok dosya biçimi bulunur, ister safetensor, ister GGUF, ister MLX, onnx, ve liste uzadıkça uzar, hangi dosya biçimi seçilmeli, ve nasıl ilerlenilmeli? Orijinal ağırlıklar neyse onun kaynağından indirilmesi, eğer bu durum mümkünse, en ideal ve optimal olandır. Bu format Büyük Dil Modellerinde 2025 yılı itibari ile çok büyük çoğunlukla (90% diyebiliriz) SafeTensor dosya formatıdır.

Safe (Güvenli) Tensor (Tensör), nedir?

Makalenin kolayca anlaşılması için önce Tensörlerden bahsedelim. Bu bazı bireyler için çok açık bir bilgi olarak gözükse de benim gibi Matematiği en son Lisede görmüş ve daha matrisler düzgünce söz konusu dahi edilmemiş, yani hiç bu terimlere maruz kalmamış bir birey olarak, hiç bilinmedik terimler aslında.

Tensor, sayıları tutan bir veri kabı olarak düşünülebilir. Bu kap, farklı boyutlarda olabilir, örneğin Skaler 0 boyutlu, Vektör 1 boyutlu, Matris 2 boyutlu tensör oluşturur.

3 Boyutlu tensör kavramını anlamak için bir fotoğraf düşünebiliriz, siyah-beyaz bir fotoğraf 2D bir tensör iken renkli bir resim kırmızı, yeşil, ve mavi pikselleri temsil eden 2D bir tensör serisinden oluştuğu için 3D bir tensör oluşturur.

Büyük Dil Modelleri (ve diğer birçok yapay zeka modeli) ağırlık belirten sayılardan oluştuğu için, belirli bir tensör belirtir ve tensor olarak saklanır.

SafeTensor dosyaları da, kısaca özetlemek gerekirse içinde sadece tensor dosyalarını bir arada bulunduran dosya formatıdır, yani içinde çalıştırılabilen bir kod bulunduramaz. Python’da tehlikeli bir sorun olan “Pickle” (Pickle dosyaları, verilerin yanı sıra nasıl “bu veri nasıl birleştirilir” adı altında küçük kod parçacıkları bulundurabilir. Kötü niyetli biri bu yöntemle zararlı kod saklayabilir ve dosya yüklendiğinde de kod otomatik olarak çalışır) ve .bin dosyalarının bu açıdan zayıf olması durumundan dolayı popülarite kazanmış ve yayılmış, bir standard haline gelmiştir.

Oldukça basit bir mimarisi vardır, dosyanın ilk 8 baytık kısmı bize safetensor dosyasının içindekiler bölümünün uzunluğunu, JSON (içindekiler) kısmı ise her tensör için bir tanım kartın bulundurur, bu tanım kartı dtype (veri tipi, F16 (16-bit ondalıklı sayı) örnek verilebilir), shape (tensörün şekli), offsets: [BEGIN, END] (tensörün başlangıç ve sonlanma noktası)) değerlerini bulundurur. Geri kalan kısım asıl verileri ve ağırlıkları bulundurur.

SafeTensor Formatının Pratik Olarak Önemi

SafeTensor dosyası, önceki bölümdeki teknik açıklamanın yanı sıra (ve dolayısı ile) endüstri standardı haline gelmiş, her modelin baz formatı olarak karşımıza çıkmaya başlamıştır.

Bu aslında bize safetensor dosyasını neden diğer türlere tercih etmemiz gerektiğinin ilk sebebini gösterir; Modelin, orijinal kaynağında bir safetensor dosyası veye birçok safetensor dosyası olarak sunulması.

Buna rağmen en önemli sebep bu değildir, sonuçta gemma 3n e4b, başta .task dosya formatında çıkarılmıştı, ama kimse safetensor formatı da yayınlanana kadar, düzgün bir şekilde kullanamadı, bu durum sıradaki bölümün ve ikinci sebebin öneminin de önizlemesi olarak düşünülebilir.

Sonuçta, Bir Büyük Dil Modeli ile kurcalama yapmak istiyorsak, her kurcalanan bir varlık gibi, bir fikrimiz, bir bilgimiz, ve bir temelimiz olması gerekir. Safetensor, bir standart olarak, bize bunları direk sunar, ve dolayısı ile safetensor formatında ağırlık dosyalarının elimizde olması, modeli gelecekte nasıl kullanabileceğimizi ve seçenekleri çok açık ve geniş tutacaktır. Bu da bizi ikinci sebebe yöneltir;

SafeTensor Formatının Uyum Olarak Önemi

SafeTensor dosya formatının ikinci ve en önemli özelliği toplum tarafından makine öğreniminde standart olarak belirlenmiş olması ve geniş uyum yelpazesidir.

SafeTensor dosyası herhangi bir donanımda kolayca üzerinde oynama yapılabilen bir formattır, standard olduğu için destek, yöntem, ve kütüphane geniştir. GGUF ve MLX gibi formatlar ise çoğu zaman safetensor un arkasındadır ve bazı önemli makine öğrenimi görevleri tam ve anlamlı olarak gerçekleştirilemez (Ön Eğitim ve bir noktadan sonra İnce Ayar gibi). Bu iki format üzerinden devam edelim;

Bir GGUF dosyası, günümüzde pretraining ile elde edilen birşeye değildir, llama.cpp ile safetensor’ün gguf haline getirilmiş halidir. GGUF formatında etkili bir ince ayar’da yapılamaz ve bir noktada llama.cpp’da bu özellik kaldırılmış olsada son zamanlarda geri getirilmeye çalışılmaktadır.

MLX dosyasıda aynı şekilde, safetensor dosyasının MLX uyumlu bir Safetensor dosyasına çevrilmesi sonucu oluşur, bu çevrilen dosyaya ince ayar ve benzeri işlemler yapılabilir, ama safetensor gibi bir çeşitlilik ve uyumdan bahsedilemeyecektir.

SafeTensor Formatının Donanımsal ve Felsefi Olarak Önemi

Safetensor formatı, önceki bölümlerde bahsedilen 'toplum bunu kabul etmiş' görüşünden farklı olarak donanımsal bir anlam da taşır; Safetensor dosyası, GGUF ve MLX ten farklı olarak ağırlıkları ihtiyacımıza göre düzenlememize ve dönüşüm/düzenleme sonucu çeşitli niceleme (quantization) seviyelerine erişmemizi sağlar.

Felsefi açıdan burada, ilk bölümde bahsedilen “sahip olma”, “kontrol”, “gizlilik” gibi ilkeler ile direk ilişki görürüz. Dosyanın aslına sahip olarak, kullanabileceğimiz bir niceleme seviyesine getirir, koşullar değişince basit tekrar bir niceleştirme çalışması ile gerektiği kadar istediğimiz bir şekilde kullanabilir, önceki bölümlerde bahsedilen kişiselleştirme (ince ayar) gibi teknikler uygulayabilir ve istediğimiz felsefeyi özgür bir şekilde başka birine bağlı olmadan (birinin dosyaları GGUF haline getirip yayınlaması gibi) takip edebiliriz.

Sonuç

Safetensor formatı, bize, genellikle ters görülen özgürlük ve güvenlik ilkelerini birlikte verir, Fakat genellikle BF16/FP16 gibi yüksek bir boyutta gelirler, bu çoğu son kullanıcı için bir sorun oluşturabilir.

Bu yüzden depolama alanımız sorun olmadığında, bu iş hakkında ciddiysek, sunulan esneklikleri ve orijinal ham dosya olduklarından dolayı tercih edilmesi gerekir, sonuçta niceleştirme ile istediğimiz ve çalıştırabileceğimiz gerçekçi boyutu elde edebilir, koşul değiştirdikçe ihtiyacımıza göre adapte edebilir, takip ettiğimiz felsefeyi doğru ve düzgünce yaşayabiliriz.