Büyük dil modelleri (LLM’ler) kullanımı, özellikle inference (çıktı alma) verimliliğinin optimize edilmesi açısından zorluklar içermektedir. Özellikle, soğuk başlangıç gecikmeleri—modelin GPU belleğine yüklenmesi için geçen süre—kullanıcı deneyimini ve ölçeklenebilirliği olumsuz etkileyebilir. Bugünün karmaşık üretim ortamları, etkin model yüklemenin önemini daha da belirgin hale getiriyor. Bu modeller genellikle onlarca ila yüzlerce gigabayt bellek gerektirdiğinden, beklenmedik taleplere cevap verebilmek için ölçeklendirme sürecinde gecikme ve kaynak zorlukları ortaya çıkabiliyor.
Bu yazıda, bu sorunları azaltmak amacıyla tasarlanmış olan NVIDIA Run:ai Model Streamer adlı açık kaynak Python SDK’sı tanıtılmaktadır. Model yükleme sürelerini azaltmak için vLLM varsayılan Hugging Face (HF) Safetensors Yükleyici ve CoreWeave Tensorizer ile birlikte yerel SSD’ler ve Amazon S3 üzerinde yapılan karşılaştırmalara göz atılacaktır.
Yapılan deneyler, NVIDIA Run:ai Model Streamer’ın model yükleme sürelerini önemli ölçüde azalttığını ve bulut ortamlarında soğuk başlangıç gecikmesini düşürdüğünü göstermiştir. Ayrıca, Safetensor formatı ile uyumlu kalmaktadır, böylece ağırlık dönüşümünden kaçınılmaktadır. Sonuçlarımız, depolama seçeneğinin ve Eş zamanlı akışın LLM dağıtımında verimliliği artırmadaki önemini vurgulamaktadır. Özellikle, inference performansını artırmak için NVIDIA Run:ai Model Streamer’ı kullanarak soğuk başlangıç gecikmesini azaltabilir, depolama çıktısını doyurabilir ve çıkış süresini hızlandırabilirsiniz.
Bir Modelin GPU’ya Yüklenmesi Nasıl Gerçekleşir?
Bu bölümde, bir makine öğrenimi modelinin çıkarım için GPU belleğine yüklenmesinin iki ana aşaması açıklanmaktadır: birincisi, ağırlıkların depolamadan CPU belleğine okunması; ikincisi ise CPU’dan GPU’ya transfer edilmesidir. Bu süreci anlamak, özellikle büyük ölçekli veya bulut tabanlı dağıtımlarda inference gecikmesini optimize etmek için kritiktir.
- Ağırlıkların depolamadan CPU belleğine okunması: Modelin ağırlıkları, depolama ortamından CPU belleğine yüklenir. Ağırlıklar .pt, .h5, ve .safetensors gibi çeşitli formatlarda olabilir; depolama ise yerel, küme geneli veya bulut olabilir. Bu yazının amacına uygun olarak, .safetensors formatı kullanılmaktadır; ancak başka formatlar da kullanılabilmektedir.
- Modelin GPU’ya taşınması: Modelin parametreleri ve ilgili tensörler GPU belleğine aktarılır.
Bulut tabanlı depolama (örneğin Amazon S3) kullanırken yükleme süreci genellikle ek bir adım içerir: ağırlıklar önce yerel diske indirilir, sonra CPUya ve ardından GPU bellek alanına taşınır.
Geleneksel olarak, bu adımlar ardışık bir şekilde gerçekleşir ve bu da model yükleme sürelerini ölçeklendirmede en önemli darboğazlardan biri haline getirir.
Model Streamer Nasıl Çalışır?
Model Streamer, çeşitli depolama kaynaklarından GPU’lara model yüklemeyi hızlandırmak için tasarlanmış yüksek performanslı C++ tabanlı bir SDK’dır. Bu SDK, eş zamanlı olarak tensörleri okuyabilmek için birden fazla iş parçacığı kullanır; böylece, nesne veya dosya depolamasından CPU belleğinde özel bir tampon alanına veri akışı sağlar. Her tensörün bir tanımlayıcısı vardır ve bu sayede betekile okuma ve transfer işlemleri eş zamanlı olarak gerçekleşebilir: bazı tensörler depolamadan CPU’ya okunurken, diğerleri CPU’dan GPU’ya taşınabilir.
Model Streamer, GPU ve CPU’nun ayrı sistemlere sahip olduğu gerçeğinden tam olarak faydalanmaktadır. GPU’lar, CPU müdahalesi olmaksızın PCIe üzerinden CPU belleğine doğrudan erişebilir, bu da depolama okuma ve bellek transferlerinin gerçek zamanlı olarak örtüşmesini sağlar. Deneyler AWS g5.12xlarge örneği üzerinde NVIDIA A10G GPU’lar ve 2. Nesil AMD EPYC CPU’lar kullanılarak gerçekleştirildi ve yüksek hacimli veri işlemesi için dengeli bir mimari sunuldu.
Model Streamer’ın önemli özellikleri şunlardır:
- Eş zamanlılık: Birden fazla iş parçacığı model yükleme dosyalarını paralel olarak okuma destekler ve büyük tensörlerin bölünmesine olanak tanır.
- Okuma için dengeli iş yükü: Depolama bant genişliğini doyuracak biçimde iş dağıtımı yapılır.
- Birden fazla depolama türü desteği: SSD’ler, uzaktan depolama ve S3 gibi bulut nesne depoları ile çalışır.
- Tensör format dönüşümü yok: Safetensorlar doğal olarak desteklenir, böylece dönüşüm yükünden kaçınılır.
- Kolay entegrasyon: Eş zamanlı arka plan okuma sunan bir Python API’si ve Safetensors’a benzer bir iteratör sunar. vLLM ve TGI gibi çıkarım motorlarıyla kolayca entegre edilebilir.
Daha fazla ayrıntı için, Model Streamer belgelerine göz atabilirsiniz.
HF Safetensors Yükleyici Nasıl Çalışır?
HF Safetensors Yükleyici, birden fazla tensörün kaydedilmesi ve yüklenmesi için hızlı ve güvenli bir format sağlayan açık kaynak bir yardımcı programdır. Bu yapı, veri kopyalamayı en aza indirmek için bellek eşleme dosya sistemi kullanır. CPU üzerinde tensörler bellekle doğrudan eşleştirilirken, GPU üzerinde PyTorch ile boş bir tensör oluşturur ve ardından veri aktarımını cudaMemcpy ile gerçekleştirir; böylece sıfır kopyalama yükleme süreci sağlanır.
CoreWeave Tensorizer Nasıl Çalışır?
CoreWeave Tensorizer, model ağırlıklarını ve karşılık gelen tensörleri tek bir dosyaya serileştiren açık kaynak bir araçtır. Tensorizer, bir modeli RAM’e yüklemek yerine, model verilerini tensör bazında HTTP/HTTPS veya S3 kaynağından akıtmaktadır.
Yükleme ile Çıkarım Motorlarının Buluştuğu Nokta: VLLM ile Ağırlık Yükleme
Model hizmeti, bir çıkarım motoru olmadan tamamlanmaz. Kullanılabilecek birçok çıkarım motoru ve sunucusu vardır. Bu yazıda vLLM ve onun model yükleme yetenekleri üzerinde durulmaktadır. Karşılaştırma çalışmasında yalnızca vLLM kullanıldı.
vLLM çerçevesi, varsayılan olarak HF safetensors model yüklenmesini kullanır. Ayrıca, CoreWeave Tensorizer’ı S3 uç noktalarından model yüklemek için destekler. Ancak, Tensorizer kütüphanesinin safetensors formatındaki ağırlıkları tensorizer formatına dönüştürmesi gerektiği unutulmamalıdır.
Üç Depolama Türü Üzerinden Model Yükleyici Performanslarının Karşılaştırılması
Farklı model yükleyicilerin (NVIDIA Run:ai Model Streamer, CoreWeave Tensorizer ve HF Safetensors Yükleyici) üç farklı depolama türü üzerindeki performansını karşılaştırdık:
- Deney #1: GP3 SSD – Farklı yükleyicilerle model yükleme sürelerini ölçtük.
- Deney #2: IO2 SSD – Aynı yükleyicileri IO2 SSD üzerinde test ettik ve daha yüksek IOPS ve bant genişliğinin etkilerini değerlendirdik.
- Deney #3: Amazon S3 – Bulut depolama alanında yükleyicileri karşılaştırdık; Safetensors Yükleyici S3 desteği olmadığı için bu testte dahil edilmedi.
- Deney #4: vLLM ile farklı yükleyiciler – Model Streamer, vLLM’ye entegre edilerek depo türlerine göre toplam yükleme ve hazır olma süreleri ölçüldü, varsayılan HF Safetensors Yükleyici ve Tensorizer ile karşılaştırıldı. Safetensors Yükleyici S3 testlerinden dışlandı.
Tüm testler, soğuk başlangıç koşullarında yapıldı. S3 için, deneyler arasında en az iki dakika bekleyerek sonuçların doğruluğunu sağladık. Tensorizer deneyleri, Tensorizer çerçevesinin serileştirme tarifini kullanarak modellerin serileştirildiği şekilde gerçekleştirildi ve karşılaştırmalar karşılaştırma tarifine uygun olarak yapıldı; her iki durumda da isteğe bağlı hashing kullanılmadı.
Deney Ayarı
Deneylerin, Tablo 1’de özetlenen yapı ile gerçekleştirildi.
Model |
Llama 3 8B, tek bir Safetensors formatında saklanan 15 GB ağırlığında bir LLM |
Donanım |
Tüm testlerde tutarlılığı sağlamak için yalnızca bir GPU kullanılan dört NVIDIA A10G GPU’ya sahip AWS g5.12xlarge örneği |
Yazılım yığını |
CUDA 12.4 vLLM 0.5.5 (Transformers 4.44.2) NVIDIA Run:ai Model Streamer 0.6.0 Tensorizer 2.9.0 Transformers 4.45.0.dev0 Accelerate 0.34.2 |
Depolama türleri |
GP3 SSD: 750 GB, 16K IOPS, 1.000 MiB/s IO2 SSD: 500 GB, 100K IOPS, 4.000 MiB/s Amazon S3: Örneğin gecikmeyi en aza indirmek için aynı AWS bölgesinde |
Tensorizer içeren deneylerde, aynı model Tensorizer’a özel tensör formatında serileştirildi.
Deney #1 Sonuçları: GP3 SSD
Bu ilk deneyde, GP3 SSD depolama kullanarak farklı model yükleyicilerin yükleme performansını karşılaştırdık. Model Streamer’ın eş zamanlılığın (depolama üzerinden CPU belleğine okuma yapan eş zamanlı iş parçacığı sayısının) etkisini inceledik (Şekil 1) ve Tensorizer üzerindeki işçi sayısını değerlendirdik. Model Streamer için, artan eş zamanlılık—depolama üzerinden CPU belleğine gerçekleşen okuma iş parçacıkları sayısının artırılması—önemli bir ölçüde model yükleme süresini azalttı.
Model Streamer, eş zamanlılık 1 olduğunda modeli 47.56 saniyede yükledi ve bu süre, HF Safetensors Yükleyici’nin 47.99 saniyesine yakın bir değer elde etti. Eş zamanlılık 16’ya çıktığında, yükleme süresi 14.34 saniyeye düştü, bu sayede GP3 SSD’nin maksimumu olan ~1 GiB/s’lik bir bant genişliği sağlandı. Bunun ötesinde, depolama band genişliği daha fazla kazanç sağlama konusunda sınırlayıcı rol oynadı.
Tensorizer benzer bir davranış sergiledi. Bir işçi ile yükleme süresi 50.74 saniye, Safetensors Yükleyici’ye çok yakın bir süre. 16 işçi ile 16.11 saniye ve 984.4 MiB/s’lik bir throughput ile başarı sağlandı—bu da neredeyse GP3 SSD bant genişliğine ulaşmış oldu.
GP3 SSD’nin depolama bant genişliği, hem Model Streamer hem de Tensorizer için darboğaz haline geldi. Bu nedenle, Deney #2’de daha yüksek bir bant genişliği sunan depolama çözümünü test etme gerekliliği ortaya çıktı.
Model Streamer | Safetensors Yükleyici | |
Eş zamanlılık | Modelin GPU’ya yüklenme süresi (sn.) | Modelin GPU’ya yüklenme süresi (sn.) |
1 | 47.56 | 47.99 |
4 | 14.43 | |
8 | 14.42 | |
16 | 14.34 |
Tensorizer | |
Okuyucu sayısı | Modelin GPU’ya yüklenme süresi (sn.) |
1 | 50.74 |
4 | 17.38 |
8 | 16.49 |
16 | 16.11 |
32 | 17.18 |
64 | 16.44 |
100 | 16.81 |


Deney #2: IO2 SSD
İkinci deneyde, IO2 SSD kullanılarak GP3 SSD’den çok daha yüksek bir bant genişliği sağlandı. Yine, Model Streamer üzerindeki eş zamanlılık (Şekil 3) ve Tensorizer üzerindeki işçi sayısının etkilerini analiz ettik.
Eş zamanlılık 1 olduğunda, Model Streamer ve HF Safetensors Yükleyici sırasıyla 43.71 saniye ve 47 saniye yükleme süresi gösterdi. Ancak eş zamanlılık artırıldıkça, Model Streamer daha belirgin kazançlar sağladı. Eş zamanlılık 8 olduğunda, model sadece 7.53 saniyede yüklendi ve bu süre HF Safetensors Yükleyici’nin 47 saniyesinin yaklaşık 6 katı daha hızlıydı.
Tensorizer için, performans aynı şekilde çok gelişti. En iyi sonucu sekiz işçi ile gözlemledik ve yükleme süresi 10.36 saniye (Şekil 4) olarak kaydedildi. Daha fazla işçi eklemenin performans artışı sağlamadığı görüldü; bu, büyük olasılıkla depolama bant genişliği sınırlamalarından kaynaklandığı anlaşıldı.
IO2 SSD’nin teorik maksimumu 4 GiB/s olmasına rağmen, deneylerimizde Model Streamer ve Tensorizer ile her zaman ~2 GiB/s ve ~1.6 GiB/s civarında bir tavan noktası gözlemlendi. Bu, AWS altyapısındaki pratik bant genişliği sınırlamalarını göstermektedir; dolayısıyla yükleyicilerin kendileri değil.
Model Streamer | Safetensors Yükleyici | |
Eş zamanlılık | Modelin GPU’ya yüklenme süresi (sn.) | Modelin GPU’ya yüklenme süresi (sn.) |
1 | 43.71 | 47 |
4 | 11.19 | |
8 | 7.53 | |
16 | 7.61 | |
20 | 7.62 |
Tensorizer | |
Okuyucu sayısı | Modelin GPU’ya yüklenme süresi (sn.) |
1 | 43.85 |
4 | 14.44 |
8 | 10.36 |
16 | 10.61 |
32 | 10.95 |


Deney #3: S3 Üzerinde Karşılaştırma
Bulut depolama için, Deney #3’te Model Streamer ve Tensorizer’ın Amazon S3 kullanılarak performansı karşılaştırıldı. HF Safetensors Yükleyici S3 desteğine sahip olmadığı için bu karşılaştırmaya dahil edilmedi. Tensorizer testlerinde farklı işçi sayıları kullanıldı ve en iyi sonuç 16 işçi ile elde edildi.
Sonuçlar, tüm test edilen eş zamanlılık seviyelerinde Model Streamer’ın Tensorizer’ı geçerek daha verimli sonuçlar aldığını gösterdi. Eş zamanlılık 4’ta Model Streamer, modeli 28.24 saniyede yüklerken, eş zamanlılık 32’ye çıktığında 4.88 saniyeye ulaştı; Tensorizer’ın en iyi sonucu ise 37.36 saniye oldu. Bu durum, Model Streamer’ın bulut tabanlı depolama alanındak verimliliğini ortaya koymaktadır.
Bu deneyler sırasında, AWS S3 üzerinde beklenmedik bir önbellek davranışı gözlemlendi. Deneyler, hızlı bir şekilde tekrarlandığında model yükleme süreleri önemli ölçüde iyileşti; büyük ihtimalle S3 önbellekleme mekanizmasından kaynaklanıyordu. Sonuçların doğruluğunu sağlamak üzere, testler arasına en az 3 dakikalık bir bekleme süresi ekledik. Sunulan sonuçlar, bu bekleme süreleri sonrası yapılan ölçümlerden oluşmaktadır ve soğuk başlangıç koşullarını yansıtmaktadır.
Model Streamer | |
Eş zamanlılık | Modelin GPU’ya yüklenme süresi (sn.) |
4 | 28.24 |
16 | 8.45 |
32 | 4.88 |
64 | 5.01 |
Tensorizer | |
Okuyucu sayısı | Modelin GPU’ya yüklenme süresi (sn.) |
8 | 86.05 |
16 | 37.36 |
32 | 48.67 |
64 | 41.49 |
80 | 41.43 |


Deney #4: vLLM ile Tüm Yükleyicilerle Entegrasyon
Bu deney, farklı model yükleyicilerini vLLM ile entegre ederek model yüklemeden çıkarım için hazır olmaya kadar geçen toplam süreyi ölçmeyi amaçladı. Model Streamer, Safetensors Yükleyici ve Tensorizer, yerel depolama (GP3 SSD ve IO2 SSD) üzerinde test edilmiştir; S3 üzerinde ise Hugging Face Safetensors dışarıda bırakılmıştır, çünkü bu yükleme işlemini desteklememektedir. Tensorizer, S3 üzerinde vLLM ile test edilmiş ve Model Streamer ile karşılaştırılmıştır.
Her bir vLLM ile Model Streamer deneyinde, önceki deneylerden belirlenen en uygun eş zamanlılık seviyeleri kullanılmıştır. Belirtilen şekilde:
- GP3 SSD: Eş zamanlılık 16 kullanıldı (Şekil 1).
- IO2 SSD: Eş zamanlılık 8 kullanıldı (Şekil 3).
- S3 depolama: Eş zamanlılık 32 kullanıldı (Şekil 5).
Benzer şekilde, Tensorizer ile vLLM entegrasyonu için, önceki deneylerde belirlenen en uygun işçi sayıları kullanılmıştır. Özel olarak:
- GP3 SSD: 16 işçi
- IO2 SSD: 8 işçi
- S3: 16 işçi
Model Streamer, GP3 SSD üzerinde toplam hazır olma süresini 35.08 saniye, IO2 SSD’de ise 28.28 saniye olarak kaydetti; bu süre, SafeTensor Yükleyici’nin 66.13 saniye ve 62.69 saniye sürelerine karşılık gelmektedir. Tensorizer, GP3 üzerinde 36.19 ve IO2’de 30.88 saniyede tamamlanarak yine Safetensors’a kıyasla süresi önemli ölçüde aşağıya çekti. S3 üzerinde Model Streamer, toplamda 23.18 saniye gerektirirken, Tensorizer bununla karşılaştırıldığında 65.18 saniye sürdü.
vLLM ile Farklı Yükleyiciler | |
Yükleyici | vLLM motoruna isteklerin hazır olmasına kadar geçen süre (sn.) |
Safetensors Yükleyici | 66.13 |
Model Streamer | 35.08 |
Tensorizer | 36.19 |
vLLM ile Farklı Yükleyiciler | |
Yükleyici | vLLM motoruna isteklerin hazır olmasına kadar geçen süre (sn.) |
Safetensors Yükleyici | 62.69 |
Model Streamer | 28.28 |
Tensorizer | 30.88 |
vLLM ile Farklı Yükleyiciler | |
Yükleyici | vLLM motoruna isteklerin hazır olmasına kadar geçen süre (sn.) |
Model Streamer | 23.18 |
Tensorizer | 65.18 |

NVIDIA Run:ai Model Streamer ile Hızla Başlayın
Soğuk başlangıç gecikmeleri, hızlı ve ölçeklenebilir LLM çıkarımı sağlarken önemli bir engel oluşturmaktadır, özellikle dinamik veya bulut tabanlı ortamlarda. Baz benchmark verilerimiz gösteriyor ki, NVIDIA Run:ai Model Streamer, yerel ve uzaktan depolama üzerinde model yükleme sürelerini önemli ölçüde hızlandırırken diğer yükleyicileri geride bırakmaktadır. Eş zamanlı ağırlık yükleme ve GPU belleğine veri akışı sağlanan bu araç, üretim ölçeğinde çıkarım yükümlülükleri için pratik ve yüksek etkili bir çözüm sunmaktadır.
Eğer büyük modeller veya bulut tabanlı depolama ile çıkarım sistemleri inşa ediyor veya ölçeklendiriyorsanız, bu sonuçlar hemen uygulanabilecek önemli dersler sunmaktadır: Soğuk başlangıç gecikmesini azaltmak, depolama bant genişliğini doyurmak ve çıkarım süresini hızlandırmak için Model Streamer’ı kullanın. vLLM gibi çerçevelere kolay entegrasyonu ve yüksek eş zamanlılık destekleriyle, gözlemlenebilir kazanımlar sağlayan etkili bir optimizasyon aracı sunmaktadır. Performansınızı artırmak için NVIDIA Run:ai Model Streamer’ı kullanın.