Kimi K3 Modelinin AWS Üzerinde Self-Hosting ile Dağıtılması

Kimi K3 modelinin 2.8 trilyon parametresi, AWS üzerinde self-hosting için özel donanım gerektirir. Bu rehberde, NVIDIA B300 GPU'lu bir instance kullanarak modelin nasıl dağıtılacağı adım adım açıklanmaktadır.

I
ITWISE
2 görüntülenme
Kimi K3 Modelinin AWS Üzerinde Self-Hosting ile Dağıtılması

Giriş

Kimi K3, yapay zeka dünyasında devrim yaratan ve 2.8 trilyon parametreye sahip bir büyük dil modelidir (LLM). Bu kadar büyük bir modelin yerel olarak çalıştırılması, sıradan GPU sunucularının kapasitesini aşmaktadır. NVIDIA tarafından geliştirilen B300 serisi GPU'lar, bu modelin verimli bir şekilde çalıştırılmasını mümkün kılan ilk ticari donanımlardan biridir. AWS, bu modelin self-hosting (kendi sunucularında barındırma) desteğini duyurmuş olup, kullanıcıların 8 adet NVIDIA B300 GPU'lu instance kullanarak Kimi K3'ü dağıtmalarını sağlamaktadır.

Ön Gereksinimler ve Hazırlık

Kimi K3'ün AWS üzerinde dağıtılması için aşağıdaki ön koşulların sağlanması gerekmektedir:

  1. AWS Hesabı ve Yetkiler:

    AWS hesabınızda EC2, EBS, VPC ve IAM hizmetlerine erişim yetkilerine sahip olmalısınız. Gerekiyorsa, AWS yönetici hesabınızdan gerekli politikaları oluşturun.

  2. AWS CLI ve SDK'ları:

    Dağıtım sürecini otomatikleştirmek için AWS CLI ve Python için Boto3 SDK'sını kurun. Kurulum için aşağıdaki komutları çalıştırın:

    pip install awscli boto3

    Ardından AWS CLI'yi yapılandırın:

    aws configure
  3. NVIDIA B300 GPU Instance Rezervasyonu:

    Önemli Uyarı: NVIDIA B300 GPU'lu instance'lar (örneğin p5e.48xlarge) AWS tarafından sınırlı sayıda sunulmaktadır. Dağıtım yapmadan önce AWS Support'a başvurarak kapasite rezervasyonu yaptırmanız gerekmektedir. Rezervasyon yapılmadan instance başlatılması mümkün olmayacaktır.

  4. Depolama ve Ağ Yapılandırması:

    Modelin çalışması için yeterli depolama alanı (en az 10TB NVMe SSD) ve yüksek bant genişliğine sahip bir VPC (Virtual Private Cloud) yapılandırması gerekmektedir. AWS üzerinden Amazon VPC oluşturun ve subnet, route table, security group ayarlarını yapılandırın.

AWS Üzerinde Kimi K3 Dağıtım Adımları

1. Adım: Instance Oluşturma ve GPU Yapılandırması

  1. AWS Management Console'a giriş yapın ve EC2 hizmetine gidin. Ardından Launch Instance butonuna tıklayın.

  2. Instance Türü Seçimi: Aşağıdaki tabloyu kullanarak uygun instance türünü seçin:

    Instance Türü Açıklama GPU Sayısı
    p5e.48xlarge En yüksek performanslı instance, 8x NVIDIA B300 GPU destekler 8
  3. Amazon Machine Image (AMI) Seçimi: NVIDIA tarafından optimize edilmiş Deep Learning AMI (DLAMI) kullanın. Bu AMI, GPU'lar için gerekli sürücüleri ve kütüphaneleri içermektedir. AMI ID'sini bulmak için AWS ML AMIs sayfasını ziyaret edin.

  4. Depolama Ekleme: Instance'a en az 10TB NVMe SSD ekleyin. Depolama ayarlarını aşağıdaki gibi yapılandırın:

    Root Volume: 100GB (GP3)
    Additional Volume: 10TB (GP3, io1/io2 tipi)
  5. Security Group Yapılandırması: Giriş/çıkış trafiğini aşağıdaki kurallarla yapılandırın:

    Inbound Rules:
        - Type: SSH, Port: 22, Source: Your IP
        - Type: HTTP, Port: 80, Source: 0.0.0.0/0 (Gerekirse kısıtlayın)
        - Type: HTTPS, Port: 443, Source: 0.0.0.0/0
        - Type: Custom TCP, Port: 8000-9000, Source: Your VPC CIDR
  6. Instance'ı başlatın ve key pair dosyasını indirin. Bu dosya, SSH üzerinden instance'a bağlanmak için gereklidir.

2. Adım: Instance'a Bağlanma ve Çevre Hazırlığı

  1. Terminal üzerinden instance'a SSH ile bağlanın:

    ssh -i "your-key.pem" ubuntu@
  2. Gerekli paketleri ve bağımlılıkları yükleyin:

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y nvidia-driver-535 nvidia-cuda-toolkit python3-pip git
  3. NVIDIA GPU'ların doğru şekilde tanındığını doğrulayın:

    nvidia-smi

    Çıktıda 8 adet NVIDIA B300 GPU'nun listelenmesi gerekmektedir.

  4. Kimi K3 modelini çalıştırmak için gerekli Python kütüphanelerini yükleyin:

    pip install torch transformers accelerate peft bitsandbytes

3. Adım: Kimi K3 Modelinin Yüklenmesi ve Yapılandırılması

  1. Kimi K3 modelini indirin. Resmi kaynaklardan modeli klonlayın:

    git clone https://github.com/Kimi-AI/Kimi-K3.git
    cd Kimi-K3
  2. Model dosyalarını indirin. AWS S3 üzerinden model dosyalarını indirmek için aşağıdaki komutu kullanın:

    aws s3 cp s3://kimi-k3-model-files/ . --recursive

    İpucu: Model dosyaları oldukça büyük olduğundan (yaklaşık 50TB), indirme işlemi uzun sürebilir. AWS DataSync veya AWS Transfer Family gibi hizmetleri kullanarak aktarımı hızlandırabilirsiniz.

  3. Modeli yüklemek ve çalıştırmak için gerekli komut dosyasını oluşturun. Aşağıdaki run_kimi_k3.py dosyasını oluşturun:

    from transformers import AutoModelForCausalLM, AutoTokenizer
    import torch
    
    model_path = "./kimi-k3-model"
    tokenizer = AutoTokenizer.from_pretrained(model_path)
    model = AutoModelForCausalLM.from_pretrained(
        model_path,
        torch_dtype=torch.bfloat16,
        device_map="auto"
    )
    
    # Modeli çalıştırma
    input_text = "Merhaba, Kimi K3!"
    inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
    outputs = model.generate(**inputs, max_new_tokens=100)
    print(tokenizer.decode(outputs[0], skip_special_tokens=True))
  4. Modeli başlatın:

    python run_kimi_k3.py

    Uyarı: Modelin yüklenmesi ve ilk çalıştırılması sırasında GPU belleği yoğun şekilde kullanılacaktır. Instance'ın RAM ve GPU belleği yetersiz kalabilir. Gerekiyorsa, device_map="auto" yerine device_map={"": 0, "model.layers.0": 1, ...} gibi özel bir cihaz haritası kullanın.

4. Adım: API Olarak Erişilebilir Hale Getirme

  1. Modeli bir API olarak çalıştırmak için FastAPI veya Flask kullanın. Aşağıda FastAPI örneği bulunmaktadır:

    from fastapi import FastAPI
    from pydantic import BaseModel
    from transformers import AutoModelForCausalLM, AutoTokenizer
    import torch
    
    app = FastAPI()
    model_path = "./kimi-k3-model"
    tokenizer = AutoTokenizer.from_pretrained(model_path)
    model = AutoModelForCausalLM.from_pretrained(
        model_path,
        torch_dtype=torch.bfloat16,
        device_map="auto"
    )
    
    class Query(BaseModel):
        text: str
    
    @app.post("/predict")
    async def predict(query: Query):
        inputs = tokenizer(query.text, return_tensors="pt").to("cuda")
        outputs = model.generate(**inputs, max_new_tokens=100)
        return {"response": tokenizer.decode(outputs[0], skip_special_tokens=True)}
    
    if __name__ == "__main__":
        import uvicorn
        uvicorn.run(app, host="0.0.0.0", port=8000)
  2. API'yi başlatın:

    uvicorn main:app --host 0.0.0.0 --port 8000
  3. API'ye erişmek için instance'ın public IP'sini kullanın:

    curl -X POST http://:8000/predict \
    -H "Content-Type: application/json" \
    -d '{"text":"Merhaba, Kimi K3!"}'

5. Adım: AWS Endpoint Oluşturma ve Yönetimi

  1. Modelinizi AWS üzerinde kalıcı bir endpoint olarak yapılandırmak için AWS SageMaker hizmetini kullanabilirsiniz. SageMaker, modelinizi yönetmenizi ve ölçeklendirmenizi kolaylaştırır.

    # SageMaker için model dosyalarınızı S3'e yükleyin
    aws s3 cp ./kimi-k3-model s3://your-bucket-name/kimi-k3-model/ --recursive
    
    # SageMaker model oluşturma
    aws sagemaker create-model \
        --model-name kimi-k3-model \
        --execution-role-arn arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole \
        --primary-container Image=763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-pytorch-inference:1.10.2-transformers4.17.0-cpu-py38-ubuntu20.04, ModelDataUrl=s3://your-bucket-name/kimi-k3-model/
  2. Endpoint oluşturun:

    aws sagemaker create-endpoint-config \
        --endpoint-config-name kimi-k3-config \
        --production-variants VariantName=variant-1,ModelName=kimi-k3-model,InitialInstanceCount=1,InstanceType=ml.p4d.24xlarge

    Not: ml.p4d.24xlarge instance'ı, 8x NVIDIA V100 GPU'lu bir yapıdır. NVIDIA B300 destekleyen bir SageMaker instance'ı henüz yayınlanmamıştır. Bu nedenle, modelinizi doğrudan EC2 instance'ında çalıştırmaya devam edin.

  3. Endpoint'i başlatın:

    aws sagemaker create-endpoint --endpoint-name kimi-k3-endpoint --endpoint-config-name kimi-k3-config

Maliyet Optimizasyonu ve Performans İyileştirme

Önemli: NVIDIA B300 GPU'lu instance'lar oldukça pahalıdır. Aşağıdaki önerilerle maliyetleri ve performansı optimize edebilirsiniz:

  • Spot Instance'ları kullanın: Talebiniz esnekse, p5e.48xlarge instance'larını Spot Instance olarak başlatın. Maliyetler %70'e kadar düşebilir.
  • Auto Scaling kullanın: Modeliniz yoğun şekilde kullanılmıyorsa, instance sayısını otomatik olarak azaltın.
  • Model Quantization: Modeli bitsandbytes ile 8-bit veya 4-bit'e quantize ederek GPU belleği kullanımını azaltın.
  • Warm-up Süreçleri: Modelin soğuk başlatma süresini azaltmak için, instance'ı sürekli çalışır halde tutun.

Sorun Giderme

  1. GPU Belleği Yetersiz: Eğer CUDA out of memory hatası alırsanız, modeli daha küçük parçalara ayırın veya quantize edin.

    model = AutoModelForCausalLM.from_pretrained(
        model_path,
        torch_dtype=torch.bfloat16,
        load_in_8bit=True  # 8-bit quantization
    )
  2. Yavaş Performans: GPU sürücülerinin güncel olduğundan emin olun. Aşağıdaki komutla sürücüleri güncelleyin:

    sudo apt install -y nvidia-driver-535
  3. Network Bant Genişliği: Model dosyalarını indirirken yavaşlık yaşıyorsanız, AWS DataSync veya AWS Transfer Family kullanarak aktarımı hızlandırın.

Sonuç

Kimi K3 gibi devasa modellerin AWS üzerinde self-hosting ile dağıtılması, özel donanım ve dikkatli planlama gerektirir. Bu rehberde, NVIDIA B300 GPU'lu bir instance kullanarak Kimi K3'ün nasıl dağıtılacağı, yapılandırılacağı ve optimize edileceği adım adım açıklanmıştır. AWS'in sunduğu hizmetleri ve en iyi uygulamaları kullanarak, kuruluşlar bu modeli üretim ortamında güvenilir bir şekilde çalıştırabilirler.

Unutmayın, bu süreç gelişmiş düzeyde teknik bilgi gerektirir. AWS desteği ve NVIDIA belgeleriyle birlikte çalışarak, dağıtım sürecini daha sorunsuz hale getirebilirsiniz.

Kaynak

4sysops