GPT-3, GPT-4, PaLM ve PaLM 2 gibi yüz milyonlarca parametreye sahip sinir ağ tabanlı dil modellerine büyük dil modeli (LLM) adı verilir. ModelMesh aracılığıyla Service Mesh (ASM) üzerinde bir LLM dağıtarak metin sınıflandırma, duygu analizi ve makine çevirisi gibi doğal dil işleme (NLP) yeteneklerini API uç noktaları olarak sunabilirsiniz. Hizmet olarak LLM yaklaşımı sayesinde yüksek altyapı maliyetlerinden kaçınır, pazar değişikliklerine hızlı yanıt verir ve trafik artışlarını yönetmek için hizmetleri talebe göre ölçeklendirirsiniz; tüm bunlar model cloud üzerinde çalışırken operasyonel verimliliği artırmanızı sağlar.
Bu konuda özel bir model sunma çalışma zamanı oluşturma, modeli çıkarım hizmeti olarak dağıtma ve ASM giriş ağ geçidi üzerinden çıkarım istekleri gönderme adımları açıklanmaktadır.
Çalışma prensibi
Bu dağıtım, Parametre Verimli İnce Ayar (PEFT) istem ayarlama ile bir Hugging Face LLM'yi sunmak için ASM içinde ModelMesh kullanır. Aşağıdaki diyagram bileşenlerin nasıl entegre olduğunu gösterir:
+---------------------------------------------------------+
| ASM ingress gateway |
| (port 8008, HTTP) |
+----------------------------+----------------------------+
|
v
+---------------------------------------------------------+
| ModelMesh |
| (model routing and orchestration) |
+---------------------------------------------------------+
| ServingRuntime InferenceService |
| +------------------+ +-----------------------+ |
| | peft-model-server |<-----| peft-demo | |
| | (MLServer-based) | | (model endpoint) | |
| +------------------+ +-----------------------+ |
| | |
| v |
| +------------------+ +-----------------------+ |
| | MLServer | | Hugging Face model | |
| | (gRPC :8001, | | + PEFT config | |
| | HTTP :8002) | | (bloomz-560m) | |
| +------------------+ +-----------------------+ |
+---------------------------------------------------------+
ServingRuntime: Modeli sunmak için konteyner görüntüsünü ve MLServer yapılandırmasını tanımlar.
InferenceService: Hangi modelin yükleneceğini ve hangi ServingRuntime'ın kullanılacağını belirtir. Çıkarım istekleri için mantıksal uç nokta görevi görür.
ModelMesh: Gelen istekleri ASM giriş ağ geçidinden doğru InferenceService'a yönlendirir. Model yüklemeyi ve ölçeklendirmeyi yönetir.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
ASM ortamınız yapılandırılmış ve ASM örneğinizde ModelMesh etkinleştirilmiş olmalıdır. Devam etmeden önce ModelMesh kullanarak çoklu model çıkarım hizmeti yayınlama konusundaki 1. Adım ve 2. Adım'ı tamamlayın.
ModelMesh ile özel model sunma çalışma zamanları oluşturma konusunda bilgi sahibi olun. Arka plan bilgisi için bkz. ModelMesh kullanarak özel bir model sunma çalışma zamanı oluşturma
1. Adım: Özel bir çalışma zamanı oluşturun
PEFT istem ayarlama ile bir Hugging Face LLM'yi sunmak için özel bir ServingRuntime oluşturun. Bu süreç üç bölümden oluşur: model sunucu sınıfını uygulama, bunu bir Docker görüntüsüne paketleme ve Kubernetes kaynağını oluşturma.
Model sunucu sınıfını uygulayın
Model sunucu, MLServer MLModel temel sınıfından türetilir ve iki işleyici uygular:
**
load**: Önceden eğitilmiş LLM'yi yükler, PEFT istem ayarlama yapılandırmasını uygular ve bir tokenizer başlatır. Tokenizer, sunucunun önceden işlenmiş tensörler yerine ham metin girdisini kabul etmesini sağlar.**
predict**: Girdi metnini tokenize eder, çıkarım çalıştırır ve çıktıyı tekrar okunabilir metne dönüştürür.
Tam uygulama peft_model_server.py dosyasında bulunmaktadır:
Model sunucu, yapılandırmayı ortam değişkenlerinden okur:
| Ortam değişkeni | Varsayılan değer | Açıklama |
|---|---|---|
PRETRAINED_MODEL_PATH |
bigscience/bloomz-560m |
Temel LLM için yol veya Hugging Face model kimliği |
PEFT_MODEL_ID |
aipipeline/bloomz-560m_PROMPT_TUNING_CAUSAL_LM |
PEFT istem ayarlama yapılandırma kimliği |
DATASET_TEXT_COLUMN_NAME |
Tweet text |
Girdi metin alanı için kullanılan sütun adı |
Docker görüntüsünü oluşturun
Model sunucuyu ve bağımlılıklarını ModelMesh ile uyumlu bir Docker görüntüsüne paketleyin.
Görüntü iki bağlantı noktasını açığa çıkarır: gRPC için 8001 ve HTTP için 8002. MLSERVER_MODEL_IMPLEMENTATION ayarının yapılması, MLServer'a hangi sınıfın yükleneceğini bildirir; bu nedenle ayrı bir model ayarları dosyasına gerek yoktur.
ServingRuntime kaynağını oluşturun
Docker görüntünüzü işaret eden ve MLServer ortamını yapılandıran bir ServingRuntime tanımlayın.
ServingRuntime'ı dağıtın:
kubectl apply -f sample-runtime.yaml
Çalışma zamanının mevcut olduğunu doğrulayın:
kubectl get servingruntimes -n modelmesh-serving
Beklenen çıktı:
NAME AGE
peft-model-server 10s
peft-model-server çalışma zamanı çıktıda görünmelidir.
2. Adım: Çıkarım hizmetini dağıtın
Modelinizi 1. Adımdaki ServingRuntime'a bağlamak için bir InferenceService kaynağı oluşturun. InferenceService, ModelMesh'in çıkarım isteklerini modele yönlendirmek için kullandığı mantıksal uç noktadır.
Yapılandırma alanları:
| Alan | Değer | Açıklama |
|---|---|---|
modelFormat.name |
peft-model |
ServingRuntime'da bildirilen biçimle eşleşmelidir |
runtime |
peft-model-server |
ModelMesh'e bu modeli hangi çalışma zamanının sunacağını bildirir |
serving.kserve.io/deploymentMode |
ModelMesh |
KServe'e modeli bağımsız podlar yerine ModelMesh üzerinden dağıtması talimatını veren gerekli ek açıklama |
InferenceService'ı dağıtın:
kubectl apply -f peft-demo-isvc.yaml
InferenceService'ın hazır olup olmadığını kontrol edin:
kubectl get inferenceservices -n modelmesh-serving
Beklenen çıktı:
NAME URL READY AGE
peft-demo True 30s
Devam etmeden önce READY sütununun True değerini gösterdiğinden emin olun. Durum False olarak kalıyorsa bkz. Sorun giderme.
3. Adım: Bir çıkarım isteği gönderin
Dağıtılan modele ASM giriş ağ geçidi üzerinden bir POST isteği gönderin. İstek, KServe v2 çıkarım protokolünü kullanır.
MODEL_NAME="peft-demo"
ASM_GW_IP="<IP-address-of-the-ingress-gateway>"
curl -X POST -k http://${ASM_GW_IP}:8008/v2/models/${MODEL_NAME}/infer -d @./input.json
Aşağıdaki yer tutucuyu gerçek değerinizle değiştirin:
| Yer tutucu | Açıklama | Örnek |
|---|---|---|
<IP-address-of-the-ingress-gateway> |
ASM giriş ağ geçidinizin harici IP adresi | 192.168.1.100 |
İstek gövdesi (input.json), v2 çıkarım protokolü biçimini takip eder. Girdi metnini bytes_contents alanında Base64 olarak kodlayın:
{
"inputs": [
{
"name": "content",
"shape": [1],
"datatype": "BYTES",
"contents": {"bytes_contents": ["RXZlcnkgZGF5IGlzIGEgbmV3IGJpbm5pbmcsIGZpbGxlZCB3aXRoIG9wdGlvbnBpZW5pbmcgYW5kIGhvcGU="]}
}
]
}
Bu örnekte, bytes_contents değeri "Every day is a new beginning, filled with opportunities and hope" metninin Base64 kodlanmış halidir.
Beklenen yanıt
Başarılı bir çıkarım işlemi, model çıktısını yine Base64 ile kodlanmış olarak bytesContents alanında içeren bir JSON yanıtı döndürür:
{
"modelName": "peft-demo__isvc-5c5315c302",
"outputs": [
{
"name": "output-0",
"datatype": "BYTES",
"shape": [
"1",
"1"
],
"parameters": {
"content_type": {
"stringParam": "str"
}
},
"contents": {
"bytesContents": [
"VHdlZXQgdGV4dCA6IEV2ZXJ5IGRheSBpcyBhIG5ldyBiaW5uaW5nLCBmaWxsZWQgd2l0aCBvcHRpb25waWVuaW5nIGFuZCBob3BlIExhYmVsIDogbm8gY29tcGxhaW50"
]
}
}
]
}
Sonucu doğrulamak için bytesContents değerini Base64'ten çözümleyin:
Tweet text : Every day is a new binning, filled with optionpiening and hope Label : no complaint
Model, girdi metnini no complaint etiketiyle sınıflandırdı; bu da çıkarım hizmetinin doğru çalıştığını doğrular.
Sorun giderme
| Sorun | Neden | Çözüm |
|---|---|---|
ServingRuntime pod'u Pending durumunda kalıyor |
Kümede yetersiz CPU veya bellek | Düğüm ekleyin veya ServingRuntime spesifikasyonundaki kaynak requests değerlerini azaltın |
InferenceService hiçbir zaman Ready: True durumuna gelmiyor |
Model yükleme zaman aşımı veya indirme hatası | kubectl logs -n modelmesh-serving <pod-name> ile pod günlüklerini kontrol edin. Yavaş indirmeler için modelLoadingTimeoutMillis değerini artırın. İzole kümeler için TRANSFORMERS_OFFLINE ve HF_DATASETS_OFFLINE değerlerini "1" olarak ayarlayın ve modelleri yerel depolamaya önceden indirin |
curl komutu bağlantı reddedildi hatası döndürüyor |
Giriş ağ geçidi yanlış yapılandırılmış veya yanlış IP/bağlantı noktası | ASM giriş ağ geçidi IP adresini doğrulayın ve 8008 bağlantı noktasının açık olduğunu teyit edin |
| Beklenmeyen model çıktısı | Model ve PEFT yapılandırması uyuşmazlığı | PRETRAINED_MODEL_PATH ve PEFT_MODEL_ID değerlerinin uyumlu model ve ayar yapılandırmalarını işaret ettiğinden emin olun |
Sonraki adımlar
ModelMesh kullanarak çoklu model çıkarım hizmeti yayınlama -- Kaynakları paylaşmak için birden fazla modeli tek bir ModelMesh örneği altında dağıtın.
ModelMesh kullanarak özel bir model sunma çalışma zamanı oluşturma -- Diğer model çerçeveleri için ServingRuntime kaynaklarını oluşturun ve özelleştirin.