Transformer’ları Cebe Sığdırmak: Modelleri Optimize Edip Uç Cihazlarda Çalıştırma
Giriş
Mobil cihazlarda ve uç (edge) ortamlarda yapay zeka modellerini çalıştırmak, son yıllarda giderek önem kazanan bir konu haline gelmiştir. Özellikle büyük Transformer tabanlı dil modellerini bulut yerine doğrudan cihaz üzerinde çalıştırmak, gizlilik ve düşük gecikme açısından önemli avantajlar sunar. Ancak, bu modellerin mobil cihazlarda verimli çalışması için çeşitli optimizasyon teknikleri uygulanmalıdır.
Neden Modelleri Cihaz Üzerinde Çalıştırmalı?
- Gizlilik: Veri cihazdan çıkmaz.
- Düşük Gecikme: Gerçek zamanlı tepki.
- Çevrimdışı Kullanım: İnternet gerekmeden çalışabilir.
- Maliyet ve Ölçeklenebilirlik: Bulut sunucu maliyetlerinden kaçınma.
Model Optimizasyon Teknikleri
1. Kuantizasyon
Modelin ağırlık ve aktivasyonlarının daha az bit ile temsil edilmesi (INT8, FP16).
Yöntemler:
- Dinamik Kuantizasyon: Hesaplama sırasında uygulanan kuantizasyon.
- Statik Kuantizasyon: Kalibrasyonla önceden belirlenen aralıklar kullanılır.
Hugging Face Optimum ile Örnek:
from optimum.onnxruntime import ORTQuantizer
from optimum.onnxruntime.configuration import AutoQuantizationConfig
quantizer = ORTQuantizer.from_pretrained("distilbert-base-uncased")
qconfig = AutoQuantizationConfig.arm64()
quantizer.quantize(save_dir="quantized-model", quantization_config=qconfig)
2. Bilgi Distilasyonu
Büyük bir modelin bilgisinin daha küçük bir modele aktarılması.
Örnek Modeller:
- DistilBERT
- TinyBERT
- MobileBERT
Avantajlar:
- Daha düşük parametre sayısı
- Daha düşük gecikme
- Daha az enerji tüketimi
3. Model Budama (Pruning)
Modelin az kullanılan kısımlarının kaldırılması.
Türleri:
- Unstructured: Tek tek ağırlıkları sıfırlama.
- Structured: Katman, attention head gibi yapısal elemanların kaldırılması.
Hugging Face Optimum ile Budama:
from optimum.intel.neural_compressor import INCTrainer
from neural_compressor import WeightPruningConfig
pruning_config = WeightPruningConfig(pruning_type="magnitude", target_sparsity=0.2)
trainer = INCTrainer(model=model, pruning_config=pruning_config, ...)
trainer.train()
Mobil Platformlarda Model Çalıştırma
ONNX + ONNX Runtime
- Platform bağımsız
- NNAPI, Core ML, XNNPACK desteği
Core ML
- iOS özelinde optimize
- Apple Neural Engine kullanımı
coremltoolsile dönüşüm
import coremltools as ct
traced_model = torch.jit.trace(model, example_input)
mlmodel = ct.convert(traced_model, inputs=[ct.TensorType(shape=input_shape)])
mlmodel.save("model.mlmodel")
TensorFlow Lite (TFLite)
- Android cihazlar için optimize
- Hugging Face Optimum ile çıktı alınabilir
optimum-cli export tflite --model google/bert-base-uncased --sequence_length 128 bert_tflite/
Hugging Face Optimum
- Kolay kuantizasyon ve export
- Intel, ONNX, TFLite destekleri
- CLI ve Python API mevcut
Sonuç
Mobil cihazlarda Transformer modellerini çalıştırmak artık mümkün. Hugging Face Optimum, ONNX, Core ML ve TFLite gibi aracılar ile modelinizi hem küçültebilir, hem de mobil uyumlu hale getirebilirsiniz. Gizlilik, gecikme ve çevrimdışı çalışma avantajları sayesinde uygulamanızı daha verimli ve kullanıcı dostu hale getirmek için bu teknikleri entegre edebilirsiniz.