Yapay zeka ve makine öğreniminin büyümesi, modelleri verimli, güvenli ve farklı sistemlerle uyumlu bir şekilde depolamak ve dağıtmak için yöntemlere yönelik kritik bir ihtiyaç yaratmıştır. Modeller daha karmaşık hale geldikçe ve daha çeşitli ortamlarda kullanıldıkça, serileştirme formatı seçimi kilit bir karar haline gelmektedir. Bu seçim, yapay zeka sistemlerinin performansını, kaynak kullanımını ve güvenliğini etkiler.
Bu rapor, Safetensors, CKPT, ONNX ve GGUF dahil olmak üzere önde gelen model serileştirme formatlarını incelemektedir. Bu formatların benzersiz özelliklerini, yaygın kullanım alanlarını ve birbirleriyle karşılaştırmalarını vurgulamaktadır.
1. YZ/MÖ'de Model Serileştirmeye Giriş
Model serileştirme, eğitilmiş bir makine öğrenimi modelini bir dosyaya kaydetme işlemidir. Bu dosya daha sonra tahmin yapmak, eğitime devam etmek veya analiz yapmak gibi amaçlarla saklanabilir, paylaşılabilir veya yeniden yüklenebilir. Bu yetenek, araştırma ve geliştirmeden büyük ölçekli dağıtıma kadar tüm YZ/MÖ yaşam döngüsü için esastır.
YZ/MÖ Yaşam Döngüsünde Model Formatlarının Kritik Rolü
Modelleri standart bir formatta kaydetmek birkaç nedenle çok önemlidir:
- Tekrarlanabilirlik: Araştırma deneylerinin hassas bir şekilde tekrarlanmasını ve doğrulanmasını sağlar.
- İşbirliği: Standart formatlar, ekiplerin modelleri kolayca paylaşmasını sağlayarak birlikte çalışmalarına ve modelleri daha büyük sistemlere entegre etmelerine olanak tanır.
- Dağıtım: Serileştirme, eğitilmiş bir modeli bulut sunucularından uç cihazlara kadar çeşitli ortamlarda yüklenebilen ve çalıştırılabilen taşınabilir bir dosyaya dönüştürür.
- Transfer Öğrenimi: Önceden eğitilmiş modellerin yeni görevler için bir temel olarak kullanılmasını sağlar, bu da önemli ölçüde eğitim süresi ve veri tasarrufu sağlar.
Modern Formatların Ele Aldığı Zorluklara Genel Bakış
Makine öğrenimi ilerledikçe, modern serileştirme formatları birkaç temel zorluğu çözmek için evrimleşmiştir:
- Güvenlik: Özellikle Python'ın pickle modülünü kullanan geleneksel yöntemlerdeki güvenlik riski büyük bir endişe kaynağıdır. Bu yöntemler, bir model yüklendiğinde kötü amaçlı kodun çalışmasına izin verebilir ve model güvenilmeyen bir kaynaktan geliyorsa ciddi bir güvenlik tehdidi oluşturur.
- Performans: Günümüzün büyük ve karmaşık modelleri çok hızlı yükleme ve verimli bellek yönetimi gerektirir. Bu, cep telefonları gibi sınırlı kaynaklara sahip cihazlar ve anında yanıt gerektiren uygulamalar için özellikle önemlidir.
- Taşınabilirlik ve Birlikte Çalışabilirlik: Makine öğrenimi dünyası (PyTorch, TensorFlow ve JAX gibi) birçok farklı çerçeve kullanır. Modellerin bu çerçeveler arasında kolayca hareket etmesini ve farklı donanımlarda (GPU'lar, TPU'lar) büyük bir yeniden çalışma olmadan çalışmasını sağlayan formatlara ihtiyaç vardır.
Son yıllarda, yapay zeka topluluğu, bu sorunları çözmeye yönelik kolektif bir çabayı yansıtarak, GGUF ve Safetensors gibi daha verimli ve güvenli formatlara yönelmiştir.
PyTorch'un .pt ve .pth dosyaları için Python pickle modülünü kullanması gibi makine öğrenimi modellerini kaydetmek için kullanılan ilk yöntemler, kullanım kolaylıkları nedeniyle seçilmişti. Hem modelin tasarımını hem de eğitim durumunu (optimizatör gibi) içeren karmaşık Python nesnelerini kolayca kaydedebiliyorlardı. Bu, Python ortamında araştırma için uygun olsa da, büyük bir güvenlik açığı yarattı. Pickle modülü, bir dosya yüklenirken içinde gömülü olan herhangi bir kodu çalıştıracak şekilde tasarlanmıştır. Bu, görünüşte zararsız bir modeli güvenilmeyen bir kaynaktan yüklemenin tüm sistemi tehlikeye atabileceği anlamına gelir.
Safetensors gibi formatların yaratılması ve ONNX ile GGUF'nin artan kullanımı, bu güvenlik riskinin yanı sıra daha iyi performans ve taşınabilirlik ihtiyacına doğrudan bir yanıttır. Örneğin Safetensors, kötü amaçlı kodun çalışmasını önlemek için özel olarak oluşturulmuştur. Bu, makine öğrenimi alanı olgunlaştıkça ve yapay zeka araştırmadan gerçek dünya uygulamalarına geçtikçe, güvenlik ve verimliliğin artık sonradan düşünülen şeyler değil, yeni formatların tasarımında temel ilkeler olduğunu göstermektedir. Bu değişiklik, araştırma odaklı esneklikten üretim düzeyinde güvenlik ve sağlamlığa doğru gerekli bir geçişi temsil eder ve eski, daha müsamahakar yöntemlerin "teknik borcunu" düzeltir.
PyTorch için .pt/.pth ve TensorFlow/Keras için .ckpt/.h5 gibi çerçeveye özgü formatlar, kendi özel çerçeveleriyle sıkı bir şekilde entegre edilmiştir. Bu, onları tek bir ekosistem içinde verimli kılsa da, birlikte çalışabilirlik konusunda önemli sorunlara neden olur. Bir çerçevede eğitilmiş bir model, karmaşık dönüştürmeler veya her çerçeve için ayrı sistemler sürdürmeden başka bir çerçevede kolayca kullanılamaz. Bu, birbirinden kopuk geliştirme ve dağıtım iş akışlarına yol açar.
Open Neural Network Exchange (ONNX) formatı, bu engelleri yıkmak için oluşturulmuştur. Modeller için "platformlar arası" ve "satıcıdan bağımsız" bir standart sağlar. Bunu, modelin yapısını (hesaplama grafiğini) tek bir çerçeveden bağımsız, soyut bir şekilde tanımlayarak başarır. Benzer şekilde, GGUF, başlangıçta llama.cpp projesi için yapılmış olsa da, büyük dil modelleri (LLM'ler) için farklı platformlarda uyumluluğu artırmaya odaklanır.
Günümüzdeki format çeşitliliği, makine öğrenimi endüstrisindeki temel bir gerilimi yansıtmaktadır: geliştirme sırasında çerçeveye özgü özelliklere duyulan arzu (örneğin, PyTorch'un araştırma esnekliği için dinamik grafiği) ile evrensel, verimli ve güvenli dağıtım ihtiyacı. Bu gerilim, birden fazla formatın var olmaya devam edeceği ve model geliştirmeyi dağıtımla birleştirmek için dönüştürme araçlarının ve gelişmiş MLOps boru hatlarının giderek daha hayati hale geleceği anlamına gelir. Farklı formatlar, benzersiz güçlerine dayanarak makine öğrenimi yaşam döngüsünün belirli aşamaları için kullanılmaya devam edecektir.
2. Safetensors'ı Anlamak
Safetensors, geleneksel model depolama yöntemlerinin güvenlik ve verimlilik sorunlarını çözmek için özel olarak tasarlanmış, model serileştirmede önemli bir ileri adımdır.
Tanım ve Temel Tasarım İlkeleri
Safetensors, Hugging Face tarafından oluşturulan, derin öğrenme modelleri için modern, güvenli ve hızlı bir serileştirme formatıdır. Ana hedefi, makine öğreniminin temel veri yapı taşları olan çok boyutlu diziler yani tensörleri depolamak ve paylaşmak için güvenli bir yol sağlamaktır. Format, pickle gibi eski formatlardan daha güvenli ve hızlı olacak şekilde tasarlanmıştır.
Safetensors'ın temel bir ilkesi, model ağırlıklarını (tensörleri) çalıştırılabilir herhangi bir koddan kesin olarak ayırmasıdır. Bu tasarım, eski serileştirme yöntemlerinde bulunan güvenlik açıklarını doğrudan ele alır.
Anahtar Özellikler
- Sıfır Kopya ve Tembel Yükleme: Safetensors'ın performansının anahtarı "sıfır kopya" yeteneğidir. Bu, model verilerinin diskten belleğe ek kopyalar oluşturmadan doğrudan eşlenmesini sağlar, bu da bellekten tasarruf sağlar ve yüklemeyi hızlandırır. Ayrıca "tembel yükleme"yi destekler, yani büyük bir modelin yalnızca gerekli kısımları gerektiğinde RAM'e yüklenir. Bu, çok büyük modeller veya sınırlı belleğe sahip sistemler için çok kullanışlıdır.
- Yapılandırılmış Metadata İşleme: Her Safetensors dosyası, JSON formatında ayrı bir metadata bölümü içerir. Bu bölüm, modeldeki tüm tensörleri şekil, veri türü ve ad gibi ayrıntılarla listeler. Metadata, gerçek tensör verilerinin dosyada ayrı olarak nerede saklandığına işaret eder, bu da hem okunabilirliği hem de güvenliği artırır.
- Yalnızca Tensör Veri Depolama: Safetensors'ın en önemli güvenlik özelliği, "yalnızca ham tensör verileri ve ilişkili metadata" içerecek şekilde tasarlanmış olmasıdır. Mimarisi gereği, "keyfi Python kodunun serileştirilmesine izin vermez." Bu temel tasarım tercihi, bir model yüklenirken kötü amaçlı kod çalıştırma riskini ortadan kaldırır.
- Kuantizasyon Desteği: Safetensors, modelleri daha küçük hale getirmeye ve daha az bellek kullanmaya yardımcı olan kuantize edilmiş tensörleri işleyebilir. Ancak, kuantizasyon desteği, PyTorch çerçevesinin sağladığı özelliklere bağlı olduğu için "GGUF kadar esnek değildir".
Başlıca Faydaları
- Geliştirilmiş Güvenlik (Keyfi Kod Yürütmeyi Azaltma): Bu, Safetensors'ın en büyük avantajıdır. Tasarımı gereği, Python kodunun dosyaya kaydedilmesini tamamen engeller. Bu, pickle tabanlı formatlarda bulunan en ciddi güvenlik riskini ortadan kaldırır: bir model yüklendiğinde kötü amaçlı kod çalıştırma. Bu, Safetensors'ı genel veya güvenilmeyen kaynaklardan gelen modelleri paylaşmak ve kullanmak için en iyi seçenek haline getirir. Format ayrıca veri kurcalamasını önlemek için "gelişmiş şifreleme teknikleri" ve erişim kontrolleri gibi diğer güvenlik özelliklerini de içerir.
- Performans Optimizasyonu: Sıfır kopya ve tembel yükleme kullanımı, "daha hızlı yükleme süreleri ve daha düşük bellek kullanımı" ile sonuçlanır. Karşılaştırmalar, pickle'dan çok daha "hızlı" olduğunu ve geleneksel PyTorch kaydetme yöntemine kıyasla "CPU'da 76.6 kat, GPU'da 2 kat daha hızlı" olabildiğini göstermektedir.
- Taşınabilirlik: Format, farklı programlama dillerinde çalışacak şekilde taşınabilir olarak tasarlanmıştır. Bu, modellerin çeşitli yazılım sistemlerinde paylaşılmasını ve kullanılmasını kolaylaştırır.
- Sorunsuz Entegrasyon: Safetensors, "mevcut makine öğrenimi çerçeveleri ve kütüphaneleriyle sorunsuz bir şekilde entegre olur." Bu, geliştiricilerin mevcut iş akışlarında büyük değişiklikler yapmadan bu daha güvenli formatı kolayca benimsemelerine olanak tanır.
Geleneksel Serileştirme (ör. Pickle) ile Karşılaştırma
PyTorch'un .pt ve .pth dosyaları için kullanılan Python'ın pickle modülü, doğası gereği güvensizdir. Herhangi bir kodun serileştirilmiş bir dosyanın içine gizlenmesine ve dosya yüklendiğinde otomatik olarak çalışmasına izin verir. Bu, özellikle halka açık web sitelerinden indirilen modelleri kullanırken iyi bilinen ve ciddi bir güvenlik açığıdır. picklescan gibi araçlar bazı kötü amaçlı kalıpları tespit edebilse de, kusursuz değildirler ve güvenliği garanti edemezler.
Safetensors, bu güvenlik sorununu çözmek için özel olarak oluşturulmuştur. Dosyada yalnızca ham tensör verilerine ve yapılandırılmış metadataya izin vererek, kötü amaçlı kod yürütme olasılığını ortadan kaldırır. Güvenliğin ötesinde, Safetensors çok daha iyi performans sunar. Bellek eşleme ve tembel yükleme için tasarımı, genellikle tüm modeli bir kerede belleğe yükleyen pickle'a kıyasla önemli ölçüde daha hızlı yükleme ve daha verimli bellek kullanımı sağlar.
Python'ın pickle'ındaki güvenlik açığı, güvenilmeyen bir kaynaktan .pt veya .pth dosyası indirmenin yalnızca veri indirmek olmadığı, potansiyel olarak zararlı bir program çalıştırmak gibi olduğu anlamına gelir. "Bir pickle dosyasının güvenliğini yürütmeden doğrulamanın %100 kusursuz bir çözümü olmadığı" bilinmektedir. Bu, dosyanın güvenliğini kontrol etme yükünü kullanıcıya bırakır ki bu zor ve güvenilmez bir iştir.
Safetensors, zararlı kodun en başta dahil edilmesini önlemek için formatın kendisini yeniden tasarlayarak bu dinamiği değiştirir. Güvenlik sorumluluğunu, kullanıcının zorlu doğrulama sürecinden formatın yerleşik güvenliğine kaydırır. Bu, açık kaynaklı yapay zeka topluluğunda "doğrula, sonra güven" yaklaşımından "tasarım gereği güven" modeline doğru büyük bir değişime işaret eder. Bu değişiklik, karmaşık dosyalardaki olası her tehdidi taramanın neredeyse imkansız olduğunu kabul eder. Saldırı vektörünü (keyfi kod yürütme) engelleyerek, Safetensors modellerin yaygın olarak paylaşılmasını daha güvenli hale getirir, işbirliğini teşvik eder ve daha fazla insanın önceden eğitilmiş modelleri kullanmasını kolaylaştırır. Bu "tasarım gereği güven" ilkesi, tüm yapay zeka ekosisteminin büyümesi ve güvenliği için esastır.
Safetensors, esas olarak güvenlik nedenleriyle (pickle'ın güvenlik açıklarını düzeltmek için) oluşturulmuş olsa da, daha hızlı yükleme, daha düşük bellek kullanımı ve sıfır kopya işlemleri gibi büyük performans artışları da sağlar. Bu performans kazanımları sadece bir yan etki değildir; bellek eşleme ve tembel yükleme kullanarak verileri verimli bir şekilde işleyen Safetensors'ın optimize edilmiş tasarımının doğrudan bir sonucudur. Bu, onu doğal olarak büyük modeller için daha verimli hale getirir.
Bu gelişmiş güvenlik ve önemli performans iyileştirmelerinin birleşimi, yaygın olarak benimsenmesinin temel itici gücü olmuştur. Safetensors yalnızca daha iyi güvenlik sunsaydı, özellikle güvenliğe hemen odaklanmayan kullanıcılar arasında benimsenmesi daha yavaş olabilirdi. Ancak, net ve ölçülebilir performans faydaları, herkesin geçiş yapması için güçlü bir neden sunarak, Hugging Face gibi büyük platformlara entegrasyonunu hızlandırır. Bu, yapay zeka mühendisliğinde, bir teknolojinin endüstri tarafından hızla ve yaygın olarak kabul edilmesi için genellikle hem güvenlik hem de performans avantajları sunması gerektiğini göstermektedir.
3. Önemli Model Formatlarına Genel Bakış
Safetensors'ın yanı sıra, makine öğrenimi dünyasında her biri kendi özelliklerine ve kullanım durumlarına sahip birkaç başka format da önemlidir.
3.1. CKPT (Kontrol Noktaları)
Bir yapay zeka kontrol noktası (checkpoint), tek bir dosya türü değil, daha ziyade bir modelin eğitim sırasında belirli bir noktada kaydedilmiş durumunun bir anlık görüntüsüdür. Kontrol noktaları, uzun eğitim işleri sırasında ilerlemeyi kaydetmek için esastır.
Özellikler ve Tipik Kullanım Durumları
Bir kontrol noktası genellikle bir modelin ağırlıkları ve sapmaları gibi öğrenilmiş parametrelerini içerir. Ayrıca, optimizatörün durumu, mevcut epoch numarası ve öğrenme oranı takvimi gibi eğitime devam etmek için gereken diğer önemli bilgileri de saklayabilir. Kontrol noktaları için dosya uzantıları çerçeveye göre değişir. PyTorch için genellikle .pt veya .pth iken, TensorFlow/Keras için .ckpt veya .h5'tir.
CKPT dosyalarının temel faydaları şunlardır:
- Tekrarlanabilirlik: Bir modelin yeniden yüklendiğinde tutarlı davranmasını sağlarlar, bu da araştırmayı doğrulamak ve güvenilir performansı sürdürmek için hayati önem taşır.
- İşbirliği: Paylaşmaları kolaydır, geliştiricilerin sonuçları tekrarlamasına veya mevcut çalışmalar üzerine inşa etmesine olanak tanır.
- Esneklik: PyTorch'un
.pt/.pthformatları özellikle esnektir, bu da araştırma amacıyla modelleri kaydetmeyi ve yüklemeyi basit hale getirir.
CKPT dosyaları için yaygın kullanım durumları şunlardır:
- Eğitime Devam Etme: Kesintiye uğrayan bir eğitim oturumuna devam etmek, bu da önemli ölçüde zaman ve hesaplama kaynağı tasarrufu sağlar.
- İnce Ayar (Fine-Tuning): Önceden eğitilmiş bir modeli, yeni ve daha spesifik bir veri kümesi üzerinde eğitim için bir başlangıç noktası olarak kullanmak.
- Model Değerlendirme: Bir modelin performansını eğitimin farklı aşamalarında yeniden eğitmek zorunda kalmadan test etmek.
- Çıkarım (Inference): Tahmin yapmak için tamamen eğitilmiş bir modeli bir üretim sistemine yüklemek.
- Araştırma ve Deney: Bir modelin zamanla nasıl geliştiğini analiz etmek ve parametrelerini sistematik olarak ayarlamak.
- Transfer Öğrenimi: İlgili görevler için güçlü bir başlangıç noktası olarak hizmet eder, bu da eğitim süresini ve veri ihtiyacını azaltır.
- Felaket Kurtarma: Uzun bir eğitim sürecindeki bir başarısızlıktan sonra işe devam etmek için bir yedek olarak hareket eder.
Güvenlik Hususları
CKPT dosyalarıyla, özellikle de PyTorch'un .pt ve .pth formatlarıyla ilgili en büyük güvenlik riski, Python'ın pickle modülüne dayanmalarından kaynaklanır. Bu, bu dosyaların yüklendiğinde (torch.load fonksiyonu weights_only=True ayarı olmadan kullanıldığında) kötü amaçlı Python kodu içerecek ve çalıştıracak şekilde tasarlanabileceği anlamına gelir. Bu güvenlik açığı (CWE-502: Güvenilmeyen Verilerin Serileştirilmesinin Geri Alınması) veri hırsızlığı, model davranışının değiştirilmesi veya hatta tam bir sistem ele geçirme gibi ciddi sonuçlara yol açabilir.
Endüstri bu riski kabul etmiştir ve Safetensors daha güvenli bir seçenek olarak ortaya çıkmıştır. Belirtildiği gibi, "Çoğu Stable Diffusion AI kontrol noktası .ckpt veya .safetensors gibi formatlarda kaydedilir... .safetensors, kötü amaçlı kod yürütülmesini önlemek için tasarlanmış daha güvenli bir alternatiftir." Bu, modelleri paylaşmak için daha güvenli formatlara doğru net bir eğilimi göstermektedir.
CKPT'ler, özellikle PyTorch'un .pt/.pth formatında, "son derece esnek" olmalarıyla bilinir. Bu esneklik, sadece model ağırlıklarını değil, aynı zamanda optimizatör durumunu ve hatta özel Python sınıflarını kaydetmelerine olanak tanır, bu da eğitime hassas bir şekilde devam etmek için çok kullanışlıdır.
Ancak, güvenlik açığını yaratan da bu esnekliktir. Format herhangi bir Python nesnesini kaydedebildiği için, bir saldırgan kötü amaçlı kodu bir model dosyasının içine gizleyebilir. Dosya uygun önlemler alınmadan yüklendiğinde, bu kod çalışır. Bu, sistem tasarımında temel bir ödünleşmeyi göstermektedir: daha fazla esneklik genellikle daha büyük bir saldırı yüzeyine ve daha büyük güvenlik risklerine yol açar.
Endüstrinin çözümü, daha esnek .pt/.pth formatları kontrollü ortamlarda eğitim için hala kullanılsa bile, modelleri dağıtmak için Safetensors gibi formatları benimsemektir. Bu, makine öğrenimi yaşam döngüsünün farklı aşamalarının farklı güvenlik seviyeleri gerektirdiğine dair artan bir anlayışı göstermektedir. Tam eğitim durumunu kaydetme gücü en iyi güvenilir bir geliştirme ortamında tutulurken, paylaşım ve dağıtım yerleşik güvenlik garantilerine sahip formatlar gerektirir.
3.2. ONNX (Open Neural Network Exchange)
ONNX, Açık Nöral Ağ Değişimi anlamına gelen, makine öğrenimi modelleri için açık standart bir formattır. Modellerin farklı derin öğrenme çerçevelerinde çalışmasına izin vermek için tasarlanmıştır.
Özellikler ve Başlıca Kullanım Durumları
Bir ONNX dosyası, bir modelin işlem dizisi (hesaplama grafiği), öğrenilmiş ağırlıkları ve diğer metadata dahil olmak üzere tam yapısını içerir. ONNX'in büyük bir gücü, evrensel bir çevirmen olarak hareket etmesidir. PyTorch, TensorFlow veya scikit-learn gibi çerçevelerde eğitilen modeller ONNX formatına dönüştürülebilir, bu da "bir kez eğit, her yerde dağıt" yaklaşımını mümkün kılar.
Sadece model ağırlıklarını depolayan formatların (Safetensors veya GGUF gibi) aksine, ONNX modelin hesaplama grafiğini içerir. Bu grafik tabanlı yapı, "modelleri farklı çerçeveler arasında dönüştürürken daha fazla esneklik sağlar." ONNX, birçok platform, cihaz ve donanım hızlandırıcı (CPU'lar, GPU'lar, AI çipleri) arasında mükemmel taşınabilirlik sunar. Modeller, yapılandırılmış verileri kaydetmenin verimli, platformdan bağımsız bir yolu olan Protobuf formatında saklanır.
ONNX için başlıca kullanım durumları şunlardır:
- Çerçeveler Arası Dağıtım: Bir modeli, eğitildiği çerçeveden veya ortamdan farklı bir çerçevede veya ortamda çalıştırmak.
- Yüksek Performanslı Çıkarım: ONNX Runtime, modelleri belirli donanımlar için otomatik olarak optimize eden bir çıkarım motorudur ve genellikle daha hızlı performansa yol açar.
- Uç ve Mobil Dağıtım: Küçük ayak izi ve optimize edilmiş çalışma zamanı, ONNX'i kaynakları sınırlı cihazlarda modelleri çalıştırmak için iyi bir seçenek haline getirir.
- Üretim Sistemleri: Sağlamlığı ve taşınabilirliği, onu zorlu üretim ortamlarında modelleri dağıtmak için popüler kılar.
Güvenlik Hususları
ONNX modelleriyle ilgili gizli ama ciddi bir güvenlik riski, mimari arka kapı potansiyelidir. Bir saldırgan, bir modelin hesaplama grafiğini yalnızca belirli girdilerle tetiklenen gizli bir yol içerecek şekilde değiştirebilir. Etkinleştirildiğinde, bu arka kapı modelin kötü amaçlı veya beklenmedik çıktılar üretmesine neden olabilirken, standart girdilerde normal davranarak tespit edilmesini zorlaştırır. Diğer riskler arasında model tersine çevirme saldırıları (hassas eğitim verilerini çıkarma) ve düşmanca saldırılar (modeli kandırmak için kötü amaçlı girdiler kullanma) bulunur.
Bu tehditleri azaltmak için birkaç uygulama önerilir:
- ONNX modellerini kurcalanmadıklarından emin olmak için dijital olarak imzalayın.
- Modelleri, güçlü ağ güvenliğine sahip Docker konteynerleri gibi yalıtılmış ortamlarda dağıtın.
- Model davranışını izlemek ve anormallikleri tespit etmek için izleme araçları kullanın.
- Girdileri temizleme ve yazılımı güncel tutma gibi genel güvenlik en iyi uygulamalarını takip edin.
ONNX, yüklendiğinde keyfi kod çalıştırmadığı için genellikle pickle tabanlı formatlardan daha güvenlidir. Ancak, bir ONNX modeli harici olarak uygulanan özel katmanlar kullanıyorsa, bu katmanlar dikkatli yönetilmezse potansiyel olarak kötü amaçlı Python kodu içerebilir.
Dezavantajları
ONNX kuantize edilmiş modelleri desteklese de, GGUF kadar sorunsuz bir şekilde "kuantize edilmiş tensörleri yerel olarak desteklemez". Onları ayrı tamsayı ve ölçek faktörü tensörlerine ayırır, bu da "kalitenin düşmesine neden olabilir". ONNX'te standart olmayan karmaşık veya özel katmanlara sahip modelleri dönüştürmek de zor olabilir ve performansı yavaşlatabilecek özel çalışma gerektirebilir.
Python'ın pickle'ına dayalı geleneksel formatlar (.pt dosyaları gibi), çalıştırılabilir kod içerebilen Python nesnelerini kaydeder. Bu, modeli bir program olarak ele alır. Buna karşılık, ONNX, belirli bir kod uygulamasından ziyade, modelin işlemlerinin ve veri akışının daha soyut bir temsili olan "hesaplama grafiğini" kaydetmeye odaklanır.
Bu grafik merkezli yaklaşım, ONNX'e mükemmel çerçeveler arası taşınabilirliğini veren ve farklı donanımlar için optimize edilmesini sağlayan şeydir. Modelin mantığını daha yüksek bir seviyede tanımlayarak, eğitildiği çerçeveden bağımsız hale gelir. Bu, çerçeveye özgü bir uygulamadan taşınabilir bir hesaplama temsiline geçişte önemli bir kavramsal değişimdir. Bu, dağıtım esnekliğini büyük ölçüde artırırken, mimari arka kapılar gibi yeni güvenlik endişeleri de yaratır ve bunlar pickle tabanlı formatlar için kullanılanlardan farklı güvenlik stratejileri gerektirir.
3.3. GGUF (GPT-Generated Unified Format)
GGUF (GPT-Generated Unified Format), büyük dil modellerini (LLM'ler) verimli bir şekilde depolamak ve çalıştırmak için özel olarak tasarlanmış bir dosya formatıdır. Öncüsü GGML'nin geliştirilmiş bir versiyonudur ve LLM'leri özellikle kişisel bilgisayarlarda kullanmayı kolaylaştırmayı amaçlar.
Özellikler ve Başlıca Kullanım Durumları
GGUF, LLM'leri daha küçük ve çok daha hızlı yüklenebilir hale getirmek için tasarlanmıştır. Bu, depolama alanı ve RAM'in genellikle sınırlı olduğu yerel olarak modelleri çalıştırmak için çok önemlidir. Format, bunu başarmak için "gelişmiş sıkıştırma teknikleri" kullanır. Ayrıca, bir modelin ağırlıklarını, mimarisini ve metadatasını paketlemek için standart bir yol sunarak, özellikle llama.cpp tabanlı çıkarım motorlarıyla farklı yazılımlarda tutarlı bir şekilde çalışmasını sağlar.
GGUF'nin temel bir özelliği, kuantizasyon için mükemmel desteğidir. Kuantizasyon, bir modelin ağırlıklarının sayısal hassasiyetini düşürür (örneğin, 16 bit'ten 4 bit'e), bu da dosya boyutunu ve onu çalıştırmak için gereken hesaplamayı önemli ölçüde azaltır. GGUF modelleri, boyut ve kalite arasında bir dizi ödünleşim sunan çeşitli kuantizasyon seviyelerinde (Q2'den Q8'e kadar) mevcuttur.
- Daha düşük kuantizasyon seviyeleri (Q2 veya Q3 gibi), daha az RAM'e sahip donanımda çalışabilen çok küçük dosyalarla sonuçlanır, ancak model kalitesinde hafif bir düşüş olabilir.
- Daha yüksek kuantizasyon seviyeleri (Q6 veya Q8 gibi), daha iyi kaliteyi korur ancak daha fazla depolama ve RAM gerektirir.
GGUF için başlıca kullanım durumları şunlardır:
- Yerel LLM Dağıtımı: Ollama gibi araçlar, kullanıcıların kendi bilgisayarlarında güçlü LLM'leri çalıştırmasını kolaylaştırmak için GGUF kullanır.
- Çevrimdışı Yapay Zeka Asistanları: Birçok uygulama, bulut tabanlı yapay zeka araçlarına yerel, özel alternatifler sağlamak için GGUF modellerini kullanır.
- Kod Yardımı: IDE'ler ve kod düzenleyicileri, akıllı kod tamamlama için GGUF modellerini kullanmaya başlıyor.
- Yerel Sohbet Botları: GGUF modelleri genellikle özel ve duyarlı konuşma yapay zeka sistemleri için kullanılır.
- Yapay Zeka Araştırması: Esnekliği ve kuantizasyon desteği, araştırmacılar arasında erişilebilir donanımda LLM'lerle deney yapmak için popüler hale getirir.
Güvenlik Hususları
Yaygın kanının aksine, temel alınan GGML kütüphanesi (GGUF'nin dayandığı), "girdi dosyasında yetersiz doğrulama" ile ilgili belgelenmiş güvenlik açıklarına sahiptir. Bu kusurlar, "ayrıştırma sırasında potansiyel olarak istismar edilebilir bellek bozulması güvenlik açıklarına" yol açabilir. Kontrol edilmeyen kullanıcı girdisinin yığın taşmalarına neden olabileceği ve potansiyel olarak bir saldırganın kötü amaçlı kod çalıştırmasına izin verebileceği belirli güvenlik sorunları tespit edilmiştir.
Bir GGUF dosyasının "kod içeremeyeceği" ve "sadece bir model dosyası" olduğu yönünde yaygın bir yanılgı vardır. Ancak, Databricks'ten bir güvenlik raporu, GGUF dosyasının kendisi yürütülebilir Python kodu içermese de, özel olarak hazırlanmış bir dosyanın ayrıştırıcıdaki (dosyayı okuyan yazılım) kusurları istismar ederek bellek bozulmasına ve kod yürütülmesine neden olabileceğini göstermiştir.
Bu riskleri azaltmak için en iyisi şunlardır:
- Tanınmış, saygın kaynaklardan (Koboldcpp gibi) modeller ve araçlar kullanın.
- LLM'leri yalıtılmış ortamlarda (Docker konteynerleri gibi) çalıştırın.
- Çok hassas görevler için, internet erişimi olmayan özel bir makine kullanmayı düşünün.
Dezavantajları
GGUF'nin büyük bir dezavantajı, çoğu modelin önce diğer çerçevelerde (PyTorch gibi) geliştirilmesi ve GGUF formatına dönüştürülmesi gerektiğidir. Bu dönüştürme süreci her zaman kolay değildir ve bazı modeller GGUF uyumlu araçlar tarafından tam olarak desteklenmeyebilir. Ek olarak, GGUF formatına girdikten sonra bir modeli değiştirmek veya ince ayar yapmak genellikle "kolay değildir".
GGUF hızlı yükleme ve verimli VRAM kullanımı için tasarlanmış olsa da, gerçek çıkarım hızı (modelin ne kadar hızlı yanıt ürettiği) bazen kuantize edilmemiş modellerden daha yavaş olabilir. Bu, çıkarım sırasında ağırlıkları dekuantize etmek için gereken ek iş nedeniyle daha düşük kuantizasyon seviyelerinde meydana gelebilir. GGUF'nin ana performans faydası, büyük modellerin VRAM tasarrufu sağlayarak tüketici donanımında çalışmasını sağlamasıdır, onları ille de daha hızlı yapması değil.
GGUF'nin tanımlayıcı özelliği, güçlü LLM'lerin sınırlı VRAM'e sahip "tüketici sınıfı donanımda" çalışmasını sağlayan kuantizasyon ile derin entegrasyonudur. Bu, yapay zekaya erişimi demokratikleştirmeye yardımcı olur. Ancak bu verimlilik ödünleşimler içerir. Kuantizasyon modelleri daha küçük yaparken, daha düşük seviyeler model kalitesini biraz düşürebilir. Ayrıca, çıkarım hızı bazen kuantize edilmemiş modellerden daha yavaş olabilir, özellikle de kuantize edilmemiş sürüm tamamen VRAM'e sığıyorsa.
GGUF'nin "hız" faydası genellikle daha hızlı yüklemeyi ve sınırlı donanımda daha büyük bir modeli çalıştırma yeteneğini ifade eder, ham performansı değil. GGUF, gelişmiş modelleri daha fazla insan için erişilebilir hale getirerek "yapay zekanın demokratikleşmesi" eğilimini mükemmel bir şekilde yakalar. Bu, kullanıcıların model kalitesini donanımlarının sınırlamalarıyla dengelemelerini gerektirir. Birden fazla kuantizasyon seviyesinin mevcudiyeti, kullanıcıların modelleri kendi özel ihtiyaçlarına göre uyarlamalarına olanak tanır, bu da formatın yerel yapay zeka topluluğundaki popülaritesinin anahtarıdır.
4. Formatların Karşılaştırmalı Analizi
Uygun bir model serileştirme formatının seçimi; güvenlik, performans, kaynak verimliliği, birlikte çalışabilirlik ve özel uygulama bağlamı gibi çeşitli faktörleri dengelemeye dayanan stratejik bir karardır. Aşağıdaki tablo, Safetensors, CKPT, ONNX ve GGUF'nin bu kritik boyutlar genelinde karşılaştırmalı bir özetini sunmaktadır.
| Özellik / Format | Safetensors | CKPT (.pt/.pth) | ONNX | GGUF |
|---|---|---|---|---|
| Birincil Amaç | Derin öğrenme modelleri için güvenli, hızlı tensör depolama | Eğitim kontrol noktaları, model parametreleri, durum koruma | Çerçeveler arası birlikte çalışabilirlik, çeşitli donanımlarda dağıtım | Verimli LLM depolama, tüketici donanımında optimize edilmiş yerel çıkarım |
| Güvenlik Profili | Yüksek (tasarım gereği keyfi kod yürütme yok) | Düşük (Pickle serileştirme geri alma yoluyla keyfi kod yürütme) | Orta (keyfi kod yürütme yok, ancak mimari arka kapılar mümkün) | Orta (temel kütüphane güvenlik açıkları, ancak dosyanın kendisi yürütülebilir Python kodu değil) |
| Yükleme Hızı | Çok Hızlı (sıfır kopya, tembel yükleme) | Değişken (tam yükleme nedeniyle Safetensors'tan daha yavaş olabilir) | Hızlı (optimize edilmiş çalışma zamanı, grafik optimizasyonları) | Hızlı (mmap, LLM'ler için verimli) |
| Bellek Kullanımı | Verimli (tembel yükleme, kısmi yükleme) | Yüksek olabilir (tüm nesne grafiğini yükler) | Verimli (çalışma zamanı optimizasyonları) | Çok Verimli (kuantizasyon, VRAM tasarrufu) |
| Disk Alanı | Verimli (sıkıştırma, yalnızca tensör) | Değişken (büyük olabilir, tam durumu içerir) | Verimli (Protobuf formatı) | Çok Verimli (kuantizasyon, gelişmiş sıkıştırma) |
| Kuantizasyon Desteği | Evet, ancak GGUF'den daha az esnek (PyTorch'a bağlı) | Evet (çerçeveye bağlı) | Sınırlı yerel destek (tensörleri ayrıştırır) | Sağlam (çoklu seviyeler, Q2-Q8, özel varyantlar) |
| Taşınabilirlik | Yüksek (farklı programlama dilleri arasında) | Düşük (belirli çerçevelere sıkı sıkıya bağlı) | Çok Yüksek (çerçeveler arası, platformlar arası, çeşitli donanımlar) | Yüksek (özellikle llama.cpp ekosistemi için) |
| Birincil Uygulamalar | Güvenli model paylaşımı, Hugging Face varsayılanı | Eğitim, ince ayar, araştırma, model kaydetme | Üretim dağıtımı, mobil/uç, birlikte çalışabilirlik | Yerel LLM çıkarımı, tüketici donanımı, sohbet uygulamaları |
| Temel Avantaj | Tasarım gereği güvenlik, hızlı yükleme, düşük bellek ayak izi | Eğitim durumunu koruma, ayrıntılı tekrarlanabilirlik | Evrensel dağıtım, çalışma zamanı optimizasyonu, çerçeveden bağımsızlık | Tüketici donanımında LLM verimliliği, esnek kuantizasyon |
| Temel Dezavantaj | C++'ta metadata için JSON ayrıştırıcısı gerekli | Keyfi kod yürütme riski, büyük dosya boyutları | Özel katmanlar için karmaşıklık, sınırlı yerel kuantizasyon | Genellikle dönüştürme gerekir, daha düşük kuantizasyonlarla potansiyel çıkarım yavaşlaması |
5. Sonuç
Makine öğrenimi model formatları dünyası, daha iyi güvenlik, performans ve birlikte çalışabilirlik ihtiyacıyla sürekli olarak gelişmektedir. Pickle tabanlı CKPT dosyaları gibi geleneksel formatlar, araştırma için esnek olsalar da keyfi kod yürütülmesine izin vererek ciddi güvenlik riskleri oluşturmuşlardır. Bu durum, daha yeni ve daha güvenli formatların geliştirilmesine ve benimsenmesine yol açmıştır.
Safetensors, bu değişimin önde gelen bir örneğidir. Veriyi koddan ayırarak ve verimli yükleme teknikleri kullanarak, özellikle Hugging Face ekosisteminde derin öğrenme modellerini paylaşmak için güvenli ve yüksek performanslı bir alternatif sunar. Güvenlik ve hız gibi ikili faydaları, onu modern yapay zeka iş akışlarında popüler bir seçenek haline getirmiştir.
ONNX, çerçeve uyumsuzluğunun büyük sorununu çözer. Modelleri soyut hesaplama grafikleri olarak temsil ederek, farklı donanım ve yazılımlarda dağıtılmalarını sağlar. ONNX, pickle'da görülen keyfi kod yürütmeyi engellese de, mimari arka kapılar gibi farklı koruyucu önlemler gerektiren kendi güvenlik endişelerine sahiptir.
GGUF, büyük dil modellerini tüketici donanımında çalıştırmak için özel bir çözümdür. Güçlü kuantizasyon özellikleri, model boyutunu ve bellek kullanımını önemli ölçüde azaltarak güçlü LLM'leri daha fazla insan için erişilebilir kılar. Ancak, bu verimlilik bazen daha yavaş çıkarım hızlarına neden olabilir ve temel kütüphaneleri kullanıcıların dikkatli olmasını gerektiren güvenlik açıkları göstermiştir.
Sonuç olarak, en iyi format belirli bağlama bağlıdır.
- Safetensors, derin öğrenme modellerini güvenli ve verimli bir şekilde paylaşmak için en iyi seçimdir.
- ONNX, modelleri farklı çerçeveler ve donanımlar arasında dağıtmak için idealdir.
- GGUF, büyük dil modellerini yerel, kaynakları sınırlı cihazlarda çalıştırmak için eşsiz bir verimlilik sunar.
Geleneksel CKPT formatları, kontrollü ortamlarda eğitim ilerlemesini kaydetmek için hala kullanışlı olsa da, halka açık dağıtım için yerlerini daha güvenli alternatiflere bırakmaktadır. Yapay zeka alanı olgunlaştıkça, bu özel formatların sürekli gelişimi, makine öğreniminin gücünü ve erişimini ilerletmek için gerekli olacaktır.





