Kurs
vLLM (Virtual Large Language Model), büyük dil modellerini (LLM’ler) barındırmak için tasarlanmış bir kütüphanedir. Büyük ölçekli dil işleme görevlerini yürütmek için optimize edilmiş bir ortam sunar.
Kendi LLM’imizi barındırmak istememizin birkaç nedeni vardır. Bir modeli yerelde veya bir bulut platformunda barındırmak, veri gizliliği üzerinde kontrol sağlar, modeli özel ihtiyaçlarımıza daha iyi uyacak şekilde özelleştirme imkânı tanır ve uygulamaya bağlı olarak daha ucuz olabilir.
Ayrıca vLLM, OpenAI API ile uyumludur. Bu uyumluluk, OpenAI altyapısıyla çalışan mevcut kodumuz varsa, kod tabanını değiştirmeden bunu vLLM ile kendi barındırdığımız LLM ile değiştirebileceğimiz anlamına gelir.
Bu yazıda, vLLM’yi kurma adımlarında size rehberlik edeceğim. Önce Docker kullanarak bilgisayarımızda nasıl çalıştırabileceğimizi göstereceğiz; bu, uygulamaları farklı ortamlarda tutarlı şekilde çalıştırmayı kolaylaştıran popüler bir konteynerleştirme aracıdır. Ardından, daha büyük görevleri veya daha yüksek trafik hacimlerini karşılamaya hazır olmalarını sağlayarak bu modelleri barındırmak için ölçeklenebilir bir çözüm sağlayan Google Cloud üzerinde vLLM’yi nasıl dağıtacağımızı öğreneceğiz.
Docker ile CPU için vLLM’yi Yerelde Kurma
vLLM, genellikle hızlandırma için NVIDIA GPU’ların kullanıldığı bir CUDA platformu için optimize edilmiş, verimli bir kurulumla LLM’leri çalıştırmayı kolaylaştırır. Ancak modeli CPU’da çalıştırmayı hedefliyorsak, vLLM’nin özellikle CPU kullanımı için sağladığı Docker imajını kullanabiliriz. Bu esneklik, CUDA etkin bir ortama erişimimiz olmasa bile modelleri barındırmamıza olanak tanır. vLLM’yi bir CUDA platformunda barındırmak için hızlı başlangıç kılavuzlarına bakın.
Çoğumuzun üst düzey GPU’lara erişimi olmadığı için odağımızı vLLM’yi CPU üzerinde çalışacak şekilde kurmaya vereceğiz. Böylece elimizdeki kaynaklarla da LLM’lerle deney yapabiliriz.
Süreci basitleştirmek için uygulamaları ve bağımlılıklarını konteynerlere paketlememizi sağlayan popüler bir araç olan Docker’ı kullanacağız. Bir konteyneri, belirli bir yazılımı çalıştırmak için gereken her şeyi içeren hafif ve taşınabilir bir birim olarak düşünebilirsiniz. Docker sayesinde vLLM’yi elle kurma veya sistemimizde olası uyumluluk sorunlarıyla uğraşma derdimiz olmaz.
vLLM, özellikle CPU yürütümü için tasarlanmış, kullanıma hazır bir Docker imajı sunar. Bu imaj, vLLM’yi çalıştırmak için gereken tüm bileşenleri içerir; böylece kurulumdaki karmaşıklıklar yerine modeli kullanmaya odaklanabiliriz. Bu da LLM’lerimizi CPU üzerinde hızlı ve verimli bir şekilde çalıştırmaya başlayabileceğimiz anlamına gelir.
Adım 1: Docker imajını oluşturma
Öncelikle bilgisayarımızda vLLM’yi çalıştırmamıza imkân verecek bir Docker imajı oluşturmamız gerekiyor. vLLM deposu, vLLM’yi CPU üzerinde çalıştırabilecek bir imajı oluşturmaya yönelik gerekli tüm talimatları içeren Dockerfile’lar sağlar.
Dockerfile.cpustandart CPU’lar için.Dockerfile.armmodern Mac’lerdeki gibi ARM CPU’lar için.
Bende M2 işlemcili bir Mac olduğu için .arm dosyasını kullanacağım. İmajı oluşturmak için önce depoyu klonlayıp (veya indirip) içinde şu komutu çalıştırıyoruz:
docker build -f Dockerfile.arm -t vllm-cpu --shm-size=4g .
Bu komutun ne yaptığına hızlıca bakalım:
docker build: Bir Dockerfile’dan Docker imajı oluşturur.-f Dockerfile.arm: Kullanılacak Dockerfile’ı belirtir.-t vllm-cpu: İmajı kolay referans içinvllm-cpuetiketiyle işaretler (başka bir ad da olabilirdi).--shm-size=4g: Performansı artırmaya yardımcı olacak şekilde 4 GB paylaşımlı bellek ayırır.
Adım 2: Hugging Face’i ayarlama
vLLM, modellerin yönetimini kolaylaştıran bir platform olan Hugging Face’i kullanarak model barındırma sürecini kolaylaştırır. Başlamak için şunları yapalım:
- Hugging Face hesabı oluşturun: Hugging Face web sitesini ziyaret edin ve henüz yapmadıysanız bir hesap açın.
- Bir modele erişim isteyin: Oturum açtıktan sonra kullanmak istediğimiz modeli arayın. Bu gösterim için başlangıç testlerine uygun daha küçük bir model olduğu için
meta-llama/Llama-3.2-1B-Instructmodelini öneriyorum. Model sayfasında erişim isteği seçeneği olabilir. Erişim almak için sağlanan talimatları izleyin. - Bir belirteç (token) oluşturun: Hugging Face’teki API token sayfasına gidin. "Create New Token"a tıklayarak bir token oluşturun. Modelleri indirmek ve erişmek için bu token gereklidir.
Adım 3: Docker konteynerini çalıştırma
Docker imajımız hazır ve Hugging Face token’ımız elinizde olduğuna göre, vLLM modelini şu komutla çalıştırabiliriz:
docker run -it --rm -p 8000:8000 \
--env "HUGGING_FACE_HUB_TOKEN=<replace_with_hf_token>" \
vllm-cpu --model meta-llama/Llama-3.2-1B-Instruct \
--dtype float16
Bu komutu açalım:
docker run: Belirtilen Docker imajına dayalı bir konteyneri çalıştırır.-it: Konteyneri etkileşimli ve terminal erişimiyle çalıştırır.--rm: Konteyner durduğunda otomatik olarak siler.-p 8000:8000: Konteynerin8000portunu makinemizdeki8000portuna eşler; hizmeti yerelde erişilebilir kılar.--env "HUGGING_FACE_HUB_TOKEN=<replace_with_hf_token>": Hugging Face token’ını ortam değişkeni olarak ayarlar; vLLM’nin Hugging Face API’sine bağlanmasını sağlar. <replace_with_hf_token> kısmını oluşturduğumuz gerçek token ile değiştirin.vllm-cpu: Önceden oluşturduğumuz Docker imajının adını belirtir.--model meta-llama/Llama-3.2-1B-Instruct: Çalıştırılacak modeli belirtir.--dtype float16: Model CPU’da çalışırken bunu gerektirdiği içinfloat16veri türünü kullanır.
Bu komutu çalıştırdığımızda, sunucu LLM’yi indirmesi gerektiğinden hazır hâle gelmesi biraz sürebilir. Terminalde şuna benzer bir çıktı gördüğümüzde hazır demektir:
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
LLM ile etkileşim
vLLM’nin en güzel özelliklerinden biri OpenAI API ile uyumluluğudur. Bu da OpenAI altyapısıyla etkileşim kurmak üzere yazılmış mevcut kodumuz varsa, aynı kodu vLLM üzerinden barındırılan bir modelle iletişim kurmak için kolayca kullanabileceğimiz anlamına gelir.
Bu uyumluluk, mevcut kod tabanımızı değiştirmeden sorunsuz bir geçiş sağlar. Dolayısıyla vLLM’yi kurduğumuzda, LLM ile etkileşim kurmak için alışık olduğumuz araç ve komutları kullanmaya devam etmek kolaylaşır; entegrasyon süreci verimli ve kullanıcı dostu olur.
Docker üzerinde çalışan yerel sunucumuza bir mesaj göndermeye şöyle bir örnek:
from openai import OpenAI
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
completion = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello"},
]
)
print(completion.choices[0].message.content)
Yukarıda "EMPTY" API anahtarını kullandığımıza dikkat edin. Bu varsayılan anahtardır. --api-key parametresiyle belirterek modele erişim için bir anahtar gerektirebiliriz. Örneğin:
docker run -it --rm -p 8000:8000 \
--env "HUGGING_FACE_HUB_TOKEN=<replace_with_hf_token>" \
vllm-cpu --model meta-llama/Llama-3.2-1B-Instruct \
--dtype float16 --api-key supersecretkey
Bu durumda, kodun başındaki anahtarı şu şekilde değiştirmemiz gerekir:
openai_api_key = "supersecretkey"
Google Cloud’da CPU için vLLM’yi Barındırma
vLLM kullanarak bir LLM’yi Google Cloud üzerinde barındırmak, LLM’leri dağıtmak için bir çözüm sunar. Belirtilen adımları daha anlaşılır hâle getirecek şekilde ele alalım.
Adım 1: Google Cloud Console’a erişin
Önce Google Cloud Console’a erişmemiz gerekiyor. Bunu web tarayıcımızda Google Cloud Console’a giderek yapabiliriz. Henüz bir Google hesabımız yoksa Google Cloud hizmetlerini kullanmak için bir hesap oluşturmamız gerekir.
Adım 2: Proje oluşturun
Google Cloud Console’da ekranın üst kısmındaki proje açılır menüsünü bulun ve "New Project"i seçin.

Proje adı olarak vllm-demo girin; böylece daha sonra tanımlaması kolay olur.

Zaten bir Google Cloud hesabımız varsa deneme faturalandırma hesabı kullanılamayabilir. Bu durumda yeni bir faturalandırma hesabı oluşturmamız gerekir. Bunu yapmak için "Billing" bölümüne gidin ve mevcut bir faturalandırma hesabını seçmek veya yeni bir hesap oluşturmak için adımları izleyin.
Adım 3: Artifact Registry hizmetini etkinleştirin
Artifact Registry, konteyner imajlarını depolamamıza ve yönetmemize olanak tanır. vLLM’yi çalıştırmak için kullanacağımız Docker imajını burada saklayacağız.
Cloud Console’da "artifact" araması yaparak Artifact Registry’yi açın.

Ardından projemiz için etkinleştirin. Bu adım, vLLM kurulumumuzun Docker imajını depolamak için gereklidir.

Adım 4: Bir artifact deposu oluşturun
Şimdi konteyner imajlarımızı saklamak için bir artifact deposu oluşturmamız gerekiyor. Artifact Registry’ye gidin ve "Create Repository"ye tıklayın.

Depoya vllm-cpu adını verin ve biçim olarak "Docker"ı seçin. Konumu, dağıtım gereksinimlerimize göre performansı iyileştirmek için us-central1 olarak belirtin. Geri kalan yapılandırmaları varsayılan değerlerde bırakabilirsiniz.

Adım 5: Docker imajını oluşturun ve gönderin (push)
Yerel makinemizde yaptığımız gibi Docker imajını oluşturmamız ve ardından vllm-cpu Google Cloud depomuza yüklememiz (push) gerekiyor. Bunu sağ üst köşedeki cloud shell’i kullanarak yapacağız.
.
O terminalde, gerekli dosyaları almak için vLLM GitHub deposunu şu komutla klonlayın:
git clone https://github.com/vllm-project/vllm.git
Terminali kullanarak klonlanan vLLM dizinine gidin.
cd vllm
CPU kullanımı için yapılandırılmış sağlanan Dockerfile’ı kullanan belirli komutla Docker imajını oluşturun:
docker build \
-t us-central1-docker.pkg.dev/vllm-demo/vllm-cpu/vllm-openai:latest \
-f Dockerfile.cpu .
Docker imajı oluşturulduktan sonra, onu Artifact Repository’ye gönderin. Bu adım, imajın daha sonra Google Cloud hizmetleri tarafından kullanılabilmesi için yüklenmesini sağlar:
docker push us-central1-docker.pkg.dev/vllm-demo/vllm-cpu/vllm-openai:latest
Adım 6: Cloud Run üzerinde hizmeti kurun
Google Cloud Run, konteynerleştirilmiş uygulamaları dağıtmaya olanak tanır. Az önce oluşturduğumuz imajı dağıtmak için bu hizmeti kullanacağız.
Arama çubuğuna "cloud run" yazın ve “Cloud Run” hizmetini açın.

Buradan "Create Service" düğmesine tıklayın:

Ardından şu adımları izleyin:
- Konteyner imajını seçin: Az önce gönderdiğimiz konteyner imajını seçin.
- Portu yapılandırın: vLLM’nin kullandığı
8000varsayılan portunu ayarlayın. - Hugging Face token’ını ekleyin: "Variables & Secrets" bölümünde
HUGGING_FACE_HUB_TOKENadında yeni bir değişken ekleyin ve token’ımızı buraya yapıştırın. Bu token, vLLM’nin Hugging Face’ten modellere erişmesini sağlar. - Konteyner argümanları: Komut bölümünde istenen modeli belirtmek için
--model=meta-llama/Llama-3.2-1Bargümanını ekleyin. - Kaynak ayırın: Belleği 16 GiB, CPU sayısını 4 olarak ayarlayın; böylece konteynerin verimli işlem için yeterli kaynağı olur.
- Örnek (instance) ayarları: Soğuk başlatma sürelerini azaltmak için en az bir örneği canlı tutun. Bu, maliyeti artırabilir; ancak model indirme ve başlatma süresini azaltarak performansı iyileştirir.
Tüm yapılandırmalar tamamlandığında (diğer seçenekler varsayılan kalabilir), sayfanın altındaki “Create” düğmesine tıklayın. Hizmet hazır olana kadar bekleyin ve hizmet sayfasına gidin. Burada LLM ile iletişim kurmak için kullanabileceğimiz hizmet URL’si yer alır.
Şuna benzer görünmelidir:
https://vllm-llama-577126904161.us-central1.run.app
LLM ile etkileşim
Modeli yerelde çalıştırırken yaptığımız gibi Python kullanarak LLM ile etkileşebiliriz. Yalnızca betikteki URL’yi değiştirmemiz yeterli:
# Replace with your service URL
openai_api_base = "https://vllm-llama-577126904161.us-central1.run.app/v1"
Önemli maliyet hususları
Uyarı: Bu adımları izlerken artifact registry’yi açık tutmanın size para kazandıracağını unutmayın. Lütfen bu kılavuzu uyguladıktan sonra faturalandırma hesabını bağlantısını kaldırmayı unutmayın; aksi hâlde kimse kullanmasa bile ücretlendirileceksiniz.
Google Cloud GPU Kurulumu
Bu eğitim yazılırken, Google Cloud Run için GPU desteği isteğe bağlı olarak sunulmaktadır. Bu, bu özelliğe özel olarak erişim talep etmemiz gerektiği anlamına gelir. Erişim verildikten sonra vLLM’yi GPU ile çalıştırmak, CPU kullanımına kıyasla performansı önemli ölçüde artıracaktır. Bu, paralel görevleri daha verimli işlemek üzere tasarlandıkları için özellikle büyük dil modellerini çalıştırırken faydalıdır.
GPU desteğine erişim sağlarsak iş akışımızı daha da sadeleştirebiliriz. Bu senaryoda kendi Docker imajımızı oluşturma sürecinden geçmemiz gerekmez. Bunun yerine doğrudan vllm/vllm-openai:latest adlı hazır imajı kullanarak bir hizmet oluşturabiliriz. Bu imaj GPU ile çalışacak şekilde optimize edilmiştir; böylece CPU yapılandırmaları için gerekli ek kurulum adımlarına gerek kalmadan modelleri hızlı ve etkili bir şekilde dağıtabiliriz.
GPU erişimi onaylandıktan ve sağlanan imajla hizmeti kurduktan sonra, vLLM dağıtımımız GPU’ların sunduğu güç ve hızdan tam olarak yararlanabilir; bu da gerçek zamanlı uygulamalar ve yoğun dil işleme görevleri için son derece uygundur.
RunPod: Alternatif Barındırma
Alternatif barındırma seçenekleri arayanlar için RunPod gibi platformlar, büyük dil modellerini barındırmak için sadeleştirilmiş hizmetler sunar. Örneğin RunPod, dağıtım sürecini basitleştiren bir sunucusuz kurulum sağlar.

Bu seçenek kullanıcı dostu ve hızlı olsa da, kolaylığın çoğu zaman daha yüksek bir maliyetle geldiğini akılda tutmak gerekir. Bütçe kısıtları söz konusuysa, kullanım kolaylığını bu tür hizmetlere ilişkin maliyetlerle karşılaştırmak isteyebilirsiniz.
Sonuç
Bu eğitimde vLLM’yi hem yerelde hem de Google Cloud üzerinde kurup barındırma sürecini inceledik.
Yüksek seviye GPU kaynakları olmadan da erişilebilirlik sağlayacak şekilde özellikle CPU’lar için uyarlanmış Docker imajlarını nasıl oluşturup çalıştıracağımızı öğrendik. Ayrıca daha büyük görevleri ele almak için ölçeklenebilir bir çözüm sunan Google Cloud üzerinde vLLM’yi dağıtmayı gördük.

