Ollama API’nizi Kubernetes Cluster’da Sunmak

19 Mar 2024

Kendi altyapınızda bir LLM modeline HTTP istekleri göndermek ve bunu istediğiniz herhangi bir amaç için kullanılabilecek bir API’ye dönüştürmek harika olmaz mıydı?

Şimdi bunu nasıl yapacağınızı göstereceğim.

Gereksinimler

  • Bir Kubernetes sunucusu
  • Helm yüklü bir cihaz
  • Bir domain
  • Biraz Kubernetes bilgisi

Bu kadar! Kubernetes cluster’ımızı hazırlayarak başlayacağız. ingress-nginx’i yüklememiz gerekiyor; bu, istekleri k8s servislerimize yönlendirecek. Ayrıca geçerli bir SSL sertifikasına sahip olmak için cert-manager kurmamız gerekiyor. Bu isteğe bağlıdır ama şahsen ücretsiz sertifikalara sahip olmayı seviyorum 🤗. Son olarak ollama yüklememiz gerekiyor.

Helm Paketlerini Yükleme

Lütfen Helm’in yüklü olduğundan ve cluster’ınıza bağlantınızın olduğundan emin olun.

İlk olarak ingress-nginx paketini Helm paketlerimize ekleyecek ve bunu cluster’ımıza kuracağız.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace

 

Bundan sonra Helm’e cert-manager paketini eklememiz ve bunu cluster’ımıza kurmamız gerekiyor.

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true

 

Şimdi en önemli paketi kuracağız: cluster’ımıza ollama. Bunun için ollama kurulumunu şekillendirmek adına bir values.yaml dosyası oluşturmanız gerekiyor; bu dosyada hangi modellerin kurulacağını ve ne kadar kaynak kullanacağını belirtebilirsiniz.

Benim values.yaml dosyam şu şekilde. İhtiyaçlarınıza göre bunu yapılandırabilirsiniz. Mevcut özellikleri buradan bulabilirsiniz.

ollama:
 gpu:
 enabled: false
 number: 1
 models:
  - mistral
  - llama2

persistentVolume:
 enabled: true
 size: 100Gi

resources:
 limits:
 cpu: '8000m'
 memory: '8192Mi'
 requests:
 cpu: '4000m'
 memory: '4096Mi'

 

Şimdi ollama’yı values.yaml dosyamızla şu komutla kurabiliriz:

helm repo add ollama-helm https://otwld.github.io/ollama-helm/
helm repo update
helm install ollama ollama-helm/ollama --namespace ollama -f ./values.yaml

 

Neredeyse hazırız. Şimdi cluster’ımıza ingress ve letsencrypt kaynaklarımızı da oluşturup yükleyelim.

 

K8S Kaynakları

letsencrypt.yaml

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
  namespace: ollama
spec:
  acme:
  server: https://acme-v02.api.letsencrypt.org/directory
  email: admin@example.com
  solvers:
    - http01:
  ingress:
  class: nginx

 

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
  nginx.ingress.kubernetes.io/use-regex: 'true'
  nginx.ingress.kubernetes.io/rewrite-target: /$1
  nginx.ingress.kubernetes.io/ssl-redirect: 'true'
  nginx.ingress.kubernetes.io/proxy-body-size: 20m
  nginx.ingress.kubernetes.io/proxy-connect-timeout: '3600'
  nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
  nginx.ingress.kubernetes.io/proxy-send-timeout: '3600'
  cert-manager.io/issuer: 'letsencrypt'
  namespace: ollama
spec:
  ingressClassName: nginx
  tls:
    - hosts:
    - llm.example.com
  secretName: tls-secret
  rules:
    - host: llm.example.com
  http:
  paths:
    - path: /(.\*)
  pathType: ImplementationSpecific
  backend:
  service:
  name: ollama
  port:
  number: 11434

 

Ve işte bu kadar! Şimdi yeni oluşturduğumuz ollama sunucumuza HTTP istekleri gönderebiliriz.

Test Etme

Terminalden curl kullanarak isteğinizi gönderebilirsiniz:

curl https://llm.example.com/api/generate -d '{
 "model": "llama2",
 "prompt": "Gökyüzü neden mavidir?",
 "stream": false
}'

 

Şu şekilde bir sonuç göreceksiniz:

{
 "model": "llama2",
 "created_at": "2024-03-19T05:27:25.3587746Z",
 "response": "\nGökyüzü, Rayleigh saçılması olarak adlandırılan bir fenomen nedeniyle mavi görünür. Bu, atmosferdeki azot ve oksijen molekülleri gibi küçük parçacıklar tarafından ışığın saçılmasıdır. Bu parçacıklar daha kısa (mavi) dalga boyundaki ışığı, daha uzun (kırmızı) dalga boylarından daha fazla saçar ve bu da gökyüzünün mavi görünmesine neden olur.",
 "done": true,
 "context": \[...\],
 "total_duration": 27619732014,
 "load_duration": 365429,
 "prompt_eval_count": 1,
 "prompt_eval_duration": 112728000,
 "eval_count": 268,
 "eval_duration": 27506217000
}

 

Ya da Postman üzerinden isteğinizi gönderebilirsiniz:

Hepsi bu kadar! Artık LLM modellerimiz için çalışan bir API’miz var. Kaynaklarınızı yapılandırarak veya daha iyi donanımlar ekleyerek bunu ölçeklendirebilir ya da hızlandırabilirsiniz.

Evinize bir Kubernetes cluster kurmak isterseniz, daha önce yazdığım bu yazıya göz atabilirsiniz.

Okuduğunuz için teşekkürler!!


Bu yazıyı paylaş
Loading Speed Insights...
Erdi Köse | Ollama API’nizi Kubernetes Cluster’da Sunmak