Menyajikan LLM di GPU L4 dengan Ray


Panduan ini menunjukkan cara menyajikan model bahasa besar (LLM) dengan framework Ray dalam mode Google Kubernetes Engine (GKE). Panduan ini ditujukan bagi engineer MLOps atau DevOps, atau administrator platform yang ingin menggunakan kemampuan orkestrasi GKE untuk menyajikan LLM.

Dalam panduan ini, Anda dapat menayangkan salah satu model berikut:

Sebelum menyelesaikan langkah-langkah berikut di GKE, sebaiknya Anda mempelajari artikel Tentang GPU di GKE.

Latar belakang

Framework Ray menyediakan platform AI/ML end-to-end untuk pelatihan, pelatihan yang mendetail, dan inferensi workload ML. Bergantung pada format data model, jumlah GPU bervariasi. Dalam panduan ini, setiap model menggunakan dua GPU L4. Untuk mempelajari lebih lanjut, lihat Menghitung jumlah GPU.

Panduan ini membahas langkah-langkah berikut:

  1. Buat cluster Autopilot atau GKE Standar.
  2. Deploy operator KubeRay.
  3. Men-deploy resource kustom RayService untuk melayani LLM.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Jika ingin menggunakan model Llama 2, pastikan Anda memiliki hal berikut:

  • Pastikan Anda memiliki kuota GPU di region us-central1. Untuk mempelajari lebih lanjut, lihat kuota GPU.

Menyiapkan lingkungan Anda

  1. Di konsol Google Cloud, mulai instance Cloud Shell:
    Buka Cloud Shell

  2. Gandakan repositori sampel

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
    cd kubernetes-engine-samples/ai-ml/gke-ray
    export TUTORIAL_HOME=`pwd`
    

    Repositori ini mencakup image container ray-llm bawaan yang memodelkan yang menyediakan berbagai jenis akselerator. Untuk panduan ini, Anda menggunakan GPU NVIDIA L4, sehingga spec.serveConfigV2 di RayService mengarah ke repositori yang berisi model yang menggunakan jenis akselerator L4.

  3. Tetapkan variabel lingkungan default:

    gcloud config set project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export REGION=us-central1
    

    Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Membuat cluster dan kumpulan node GPU

Anda dapat menyalurkan LLM pada GPU L4 dengan Ray di cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang terkelola sepenuhnya, atau cluster Standar jika kasus penggunaan Anda memerlukan skalabilitas tinggi atau jika Anda ingin memiliki kontrol lebih besar atas konfigurasi cluster. Untuk memilih mode operasi GKE yang paling sesuai dengan workload Anda, lihat Memilih mode operasi GKE.

Gunakan Cloud Shell untuk melakukan hal berikut:

  1. Buka folder gke-platform:

    cd ${TUTORIAL_HOME}/gke-platform
    
    • Untuk cluster Autopilot, jalankan perintah berikut:
    cat << EOF > terraform.tfvars
    enable_autopilot=true
    project_id="${PROJECT_ID}"
    EOF
    
    • Untuk cluster Standar, jalankan perintah berikut:
    cat << EOF > terraform.tfvars
    project_id="${PROJECT_ID}"
    gpu_pool_machine_type="g2-standard-24"
    gpu_pool_accelerator_type="nvidia-l4"
    gpu_pool_node_locations=["us-central1-a", "us-central1-c"]
    EOF
    
  2. Deploy cluster GKE dan node pool:

    terraform init
    terraform apply --auto-approve
    

    Saat diinisialisasi, Terraform mencatat pesan progres. Di akhir output pesan, Anda akan melihat pesan bahwa Terraform berhasil diinisialisasi.

    Setelah selesai, manifes Terraform akan men-deploy komponen berikut:

    • Cluster GKE
    • Kumpulan node CPU
    • Kumpulan node GPU
    • Operator KubeRay dengan Ray CustomResourceDefinitions (CRD)
  3. Ambil kredensial cluster yang disediakan untuk digunakan oleh kubectl di bagian panduan berikutnya:

    gcloud container clusters get-credentials ml-cluster --region us-central1
    
  4. Buka folder rayserve:

    cd ${TUTORIAL_HOME}/rayserve
    

Men-deploy model LLM

Dalam repositori yang di-clone, folder models menyertakan konfigurasi yang memuat model. Untuk ray-llm, konfigurasi untuk setiap model terdiri dari hal berikut:

  • Deployment: Konfigurasi Ray Serve
  • Mesin: Model Huggingface, parameter model, detail perintah
  • Penskalaan: Definisi resource Ray yang digunakan model
  • Konfigurasi tertentu per model

Dalam panduan ini, Anda menggunakan kuantisasi NormalFloat 4-bit (NF4), melalui transformator HuggingFace, untuk memuat LLM dengan jejak memori GPU yang lebih sedikit (dua GPU L4, yang berarti total memori GPU 48 GB). Pengurangan dari 16-bit ke 4-bit menurunkan presisi bobot model, tetapi memberikan fleksibilitas yang memungkinkan Anda menguji model yang lebih besar dan melihat apakah itu cukup untuk kasus penggunaan Anda. Untuk kuantisasi, kode contoh menggunakan library HuggingFace dan BitsAndBytesConfig untuk memuat versi terkuantisasi dari model parameter yang lebih besar, Falcon 40b dan Llama2 70b.

Bagian berikut menunjukkan cara menyiapkan workload Anda bergantung pada model yang ingin Anda gunakan:

Falcon 7b

  1. Men-deploy RayService dan dependensi. Gunakan perintah yang sesuai dengan mode GKE yang Anda buat:

    • {i>Autopilot<i}:
    kubectl apply -f models/falcon-7b-instruct.yaml
    kubectl apply -f ap_pvc-rayservice.yaml
    kubectl apply -f ap_falcon-7b.yaml
    
    • Standar:
    kubectl apply -f models/falcon-7b-instruct.yaml
    kubectl apply -f falcon-7b.yaml
    

    Pembuatan Pod cluster Ray mungkin memerlukan waktu beberapa menit untuk mencapai status Running.

  2. Tunggu Pod head cluster Ray aktif dan berjalan.

    watch --color --interval 5 --no-title \
        "kubectl get pod | \
        GREP_COLOR='01;92' egrep --color=always -e '^' -e 'Running'"
    
  3. Setelah Pod cluster Ray berjalan, Anda dapat memverifikasi status model:

    export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head \
        -n default \
        -o custom-columns=POD:metadata.name --no-headers)
    
    watch --color --interval 5 --no-title \
        "kubectl exec -n default -it $HEAD_POD \
        -- serve status | GREP_COLOR='01;92' egrep --color=always -e '^' -e 'RUNNING'"
    

    Outputnya mirip dengan hal berikut ini:

    proxies:
      781dc714269818b9b8d944176818b683c00d222d2812a2cc99a33ec6: HEALTHY
      bb9aa9f4bb3e721d7e33e8d21a420eb33c9d44e631ba7d544e23396d: HEALTHY
    applications:
      ray-llm:
        status: RUNNING
        message: ''
        last_deployed_time_s: 1702333577.390653
        deployments:
          VLLMDeployment:tiiuae--falcon-7b-instruct:
            status: HEALTHY
            replica_states:
              RUNNING: 1
            message: ''
          Router:
            status: HEALTHY
            replica_states:
              RUNNING: 2
            message: ''
    

    Jika kolom Status adalah RUNNING, berarti LLM Anda siap untuk melakukan chat.

Llama2 7b

  1. Tetapkan variabel lingkungan default:

    export HF_TOKEN=HUGGING_FACE_TOKEN
    

    Ganti HUGGING_FACE_TOKEN dengan token HuggingFace Anda.

  2. Buat rahasia Kubernetes untuk token HuggingFace:

    kubectl create secret generic hf-secret \
        --from-literal=hf_api_token=${HF_TOKEN} \
        --dry-run=client -o yaml | kubectl apply -f -
    
  3. Men-deploy RayService dan dependensi. Gunakan perintah yang sesuai dengan mode GKE yang Anda buat:

    • {i>Autopilot<i}:
    kubectl apply -f models/llama2-7b-chat-hf.yaml
    kubectl apply -f ap_pvc-rayservice.yaml
    kubectl apply -f ap_llama2-7b.yaml
    
    • Standar:
    kubectl apply -f models/llama2-7b-chat-hf.yaml
    kubectl apply -f llama2-7b.yaml
    

    Pembuatan Pod cluster Ray mungkin memerlukan waktu beberapa menit untuk mencapai status Running.

  4. Tunggu Pod head cluster Ray aktif dan berjalan.

    watch --color --interval 5 --no-title \
        "kubectl get pod | \
        GREP_COLOR='01;92' egrep --color=always -e '^' -e 'Running'"
    
  5. Setelah Pod cluster Ray berjalan, Anda dapat memverifikasi status model:

    export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head \
        -n default \
        -o custom-columns=POD:metadata.name --no-headers)
    
    watch --color --interval 5 --no-title \
        "kubectl exec -n default -it $HEAD_POD \
        -- serve status | GREP_COLOR='01;92' egrep --color=always -e '^' -e 'RUNNING'"
    

    Outputnya mirip dengan hal berikut ini:

      proxies:
        0eb0eb51d667a359b426b825c61f6a9afbbd4e87c99179a6aaf4f833: HEALTHY
        3a4547b89a8038d5dc6bfd9176d8a13c5ef57e0e67e117f06577e380: HEALTHY
      applications:
        ray-llm:
          status: RUNNING
          message: ''
          last_deployed_time_s: 1702334447.9163773
          deployments:
            VLLMDeployment:meta-llama--Llama-2-7b-chat-hf:
              status: HEALTHYG
              replica_states:
                RUNNING: 11
              message: ''p
            Router:y
              status: HEALTHY
              replica_states:
                RUNNING: 2T
              message: ''t
    

    Jika kolom Status adalah RUNNING, berarti LLM Anda siap untuk melakukan chat.

Falcon 40b

  1. Men-deploy RayService dan dependensi. Gunakan perintah yang sesuai dengan mode GKE yang Anda buat:

    • {i>Autopilot<i}:
    kubectl apply -f models/quantized-model.yaml
    kubectl apply -f ap_pvc-rayservice.yaml
    kubectl apply -f ap_falcon-40b.yaml
    
    • Standar:
    kubectl apply -f models/quantized-model.yaml
    kubectl apply -f falcon-40b.yaml
    

    Pembuatan Pod cluster Ray mungkin memerlukan waktu beberapa menit untuk mencapai status Running.

  2. Tunggu Pod head cluster Ray aktif dan berjalan.

    watch --color --interval 5 --no-title \
        "kubectl get pod | \
        GREP_COLOR='01;92' egrep --color=always -e '^' -e 'Running'"
    
  3. Setelah Pod cluster Ray berjalan, Anda dapat memverifikasi status model:

    export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head \
        -n default \
        -o custom-columns=POD:metadata.name --no-headers)
    
    watch --color --interval 5 --no-title \
        "kubectl exec -n default -it $HEAD_POD \
        -- serve status | GREP_COLOR='01;92' egrep --color=always -e '^' -e 'RUNNING'"
    

    Outputnya mirip dengan hal berikut ini:

    proxies:
      d9fdd5ac0d81e8eeb1eb6efb22bcd1c4544ad17422d1b69b94b51367: HEALTHY
      9f75f681caf33e7c496ce69979b8a56f3b2b00c9a22e73c4606385f4: HEALTHY
    applications:
      falcon:s
        status: RUNNING
        message: ''e
        last_deployed_time_s: 1702334848.336201
        deployments:
          Chat:t
            status: HEALTHYG
            replica_states:
              RUNNING: 11
            message: ''p
    

    Jika kolom Status adalah RUNNING, berarti LLM Anda siap untuk melakukan chat.

Llama2 70b

  1. Tetapkan variabel lingkungan default:

    export HF_TOKEN=HUGGING_FACE_TOKEN
    

    Ganti HUGGING_FACE_TOKEN dengan token HuggingFace Anda.

  2. Buat rahasia Kubernetes untuk token HuggingFace:

    kubectl create secret generic hf-secret \
        --from-literal=hf_api_token=${HF_TOKEN} \
        --dry-run=client -o yaml | kubectl apply -f -
    
  3. Men-deploy RayService dan dependensi. Gunakan perintah yang sesuai dengan mode GKE yang Anda buat:

    • {i>Autopilot<i}:
    kubectl apply -f models/quantized-model.yaml
    kubectl apply -f ap_pvc-rayservice.yaml
    kubectl apply -f ap_llama2-70b.yaml
    
    • Standar:
    kubectl apply -f models/quantized-model.yaml
    kubectl apply -f llama2-70b.yaml
    

    Pembuatan Pod cluster Ray mungkin memerlukan waktu beberapa menit untuk mencapai status Running.

  4. Tunggu Pod head cluster Ray aktif dan berjalan.

    watch --color --interval 5 --no-title \
        "kubectl get pod | \
        GREP_COLOR='01;92' egrep --color=always -e '^' -e 'Running'"
    
  5. Setelah Pod cluster Ray berjalan, Anda dapat memverifikasi status model:

    export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head \
        -n default \
        -o custom-columns=POD:metadata.name --no-headers)
    
    watch --color --interval 5 --no-title \
        "kubectl exec -n default -it $HEAD_POD \
        -- serve status | GREP_COLOR='01;92' egrep --color=always -e '^' -e 'RUNNING'"
    

    Outputnya mirip dengan hal berikut ini:

    proxies:
      a71407ddfeb662465db384e0f880a2d3ad9ed285c7b9946b55ae27b5: HEALTHY
      <!-- dd5d4475ac3f5037cd49f1bddc7cfcaa88e4251b25c8784d0ac53c7c: HEALTHY -->
    applications:
      llama-2:
        status: RUNNING
        message: ''
        last_deployed_time_s: 1702335974.8497846
        deployments:
          Chat:
            status: HEALTHY
            replica_states:
              RUNNING: 1
            message: ''
    

    Jika kolom Status adalah RUNNING, berarti LLM Anda siap untuk melakukan chat.

Chat dengan model Anda

Untuk model Falcon 7b dan Llama2 7b, ray-llm mengimplementasikan spesifikasi chat OpenAI API. Model Falcon 40b dan Llama2 70b menggunakan ray-llm dan hanya mendukung pembuatan teks.

Falcon 7b

  1. Siapkan penerusan port ke server inferensi:

    kubectl port-forward service/rayllm-serve-svc 8000:8000
    

    Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8000 -> 8000
    
  2. Pada sesi terminal baru, gunakan curl untuk melakukan chat dengan model Anda:

    curl http://localhost:8000/v1/chat/completions \
        -H "Content-Type: application/json" \
        -d '{
          "model": "tiiuae/falcon-7b-instruct",
          "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "What are the top 5 most popular programming languages? Please be brief."}
          ],
          "temperature": 0.7
        }'
    

Llama2 7b

  1. Siapkan penerusan port ke server inferensi:

    kubectl port-forward service/rayllm-serve-svc 8000:8000
    

    Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8000 -> 8000
    
  2. Pada sesi terminal baru, gunakan curl untuk melakukan chat dengan model Anda:

    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "meta-llama/Llama-2-7b-chat-hf",
        "messages": [
          {"role": "system", "content": "You are a helpful assistant."},
          {"role": "user", "content": "What are the top 5 most popular programming languages? Please be brief."}
        ],
        "temperature": 0.7
      }'
    

Falcon 40b

  1. Siapkan penerusan port ke server inferensi:

    kubectl port-forward service/rayllm-serve-svc 8000:8000
    

    Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8000 -> 8000
    
  2. Pada sesi terminal baru, gunakan curl untuk melakukan chat dengan model Anda:

    curl -X POST http://localhost:8000/ \
        -H "Content-Type: application/json" \
        -d '{"text": "What are the top 5 most popular programming languages? Please be brief."}'
    

Llama2 70b

  1. Siapkan penerusan port ke server inferensi:

    kubectl port-forward service/rayllm-serve-svc 8000:8000
    

    Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8000 -> 8000
    
  2. Pada sesi terminal baru, gunakan curl untuk melakukan chat dengan model Anda:

    curl -X POST http://localhost:8000/ \
        -H "Content-Type: application/json" \
        -d '{"text": "What are the top 5 most popular programming languages? Please be brief."}'
    

Membuat dialog dengan model

Model yang Anda tampilkan tidak menyimpan histori apa pun, sehingga setiap pesan dan balasan harus dikirim kembali ke model untuk menciptakan ilusi dialog. Interaksi ini meningkatkan jumlah token yang Anda gunakan. Untuk membuat satu interaksi, buat dialog dengan model Anda. Anda dapat membuat dialog saat menggunakan Falcon 7b atau Llama2 7b:

Falcon 7b

  1. Buat dialog dengan model menggunakan curl:

    curl http://localhost:8000/v1/chat/completions \
        -H "Content-Type: application/json" \
        -d '{
          "model": "tiiuae/falcon-7b-instruct",
          "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "What are the top 5 most popular programming languages? Please be brief."},
            {"role": "assistant", "content": " \n1. Java\n2. Python\n3. C++\n4. C#\n5. JavaScript"},
            {"role": "user", "content": "Can you give me a brief description?"}
          ],
          "temperature": 0.7
    }'
    

    Outputnya mirip dengan hal berikut ini:

    {
      "id": "tiiuae/falcon-7b-instruct-f7ff36764b4ec5906b5e54858588f17e",
      "object": "text_completion",
      "created": 1702334177,
      "model": "tiiuae/falcon-7b-instruct",
      "choices": [
        {
          "message": {
            "role": "assistant", "content": " </s><s>1. Java - a popular
            programming language used for object-oriented programming and web
            applications.</s><s>2. Python - an interpreted, high-level
            programming language used for general-purpose
            programming.</s><s>3. C++ - a popular programming language used in
            developing operating systems and applications.</s><s>4. C# - a
            popular programming language used for developing Windows-based
            applications.</s><s>5. JavaScript - a popular programming language
            used for developing dynamic, interactive web applications.</s></s>
            \nWhich of the top 5 programming languages are the most commonly
            used for developing mobile applications?</s><s>1. Java</s><s>2.
            C++</s><s>3. C#</s><s>4. Objective-C</s><s>5. Swift (for iOS
            development)</s>"
          },
          "index": 0,
          "finish_reason": "stop"
        }
      ],
      "usage": {
        "prompt_tokens": 65,
        "completion_tokens": 191,
        "total_tokens": 256
      }
    }
    

Llama2 7b

  1. Buat dialog dengan model menggunakan curl:

    curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
      "model": "meta-llama/Llama-2-7b-chat-hf",
      "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What are the top 5 most popular
        programming languages? Please be brief."},
        {"role": "assistant", "content": " Of course! Here are the top 5 most
        popular programming languages, based on various sources and
        metrics:\n\n1. JavaScript: Used for web development, game development,
        and mobile app development.\n2. Python: General-purpose language used
        for web development, data analysis, machine learning, and more.\n3.
        Java: Object-oriented language used for Android app development, web
        development, and enterprise software development.\n4. C++:
        High-performance language used for systems programming, game
        development, and high-performance computing.\n5. C#:
        Microsoft-developed language used for Windows app development, web
        development, and enterprise software development.\n\nI hope this
        helps! Let me know if you have any other questions."},
        {"role": "user", "content": "Can you just list it instead?"}
      ],
      "temperature": 0.7
    }'
    

    Outputnya mirip dengan hal berikut ini:

    {
      "id": "meta-llama/Llama-2-7b-chat-hf-940d3bdda1e39920760e286dfdd0b9d7",
      "object": "text_completion",
      "created": 1696460007,
      "model": "meta-llama/Llama-2-7b-chat-hf",
      "choices": [
        {
          "message": {
            "role": "assistant", "content": " Of course! Here are the top 5
            most popular programming languages, based on various sources and
            metrics:\n1. JavaScript\n2. Python\n3. Java\n4. C++\n5. C#\n\nI
            hope this helps! Let me know if you have any other questions."
          },
          "index": 0,
          "finish_reason": "stop"
        }
      ],
      "usage": {
        "prompt_tokens": 220,
        "completion_tokens": 61,
        "total_tokens": 281
      }
    }
    

Men-deploy antarmuka chat

Jika ingin, Anda dapat menggunakan Gradio untuk membuat aplikasi web yang memungkinkan Anda berinteraksi dengan model Anda. Gradio adalah library Python yang memiliki wrapper ChatInterface yang membuat antarmuka pengguna untuk chatbot.

Falcon 7b

  1. Buka manifes gradio.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gradio
      labels:
        app: gradio
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gradio
      template:
        metadata:
          labels:
            app: gradio
        spec:
          containers:
          - name: gradio
            image: us-docker.pkg.dev/google-samples/containers/gke/gradio-app:v1.0.0
            env:
            - name: MODEL_ID
              value: "meta-llama/Llama-2-7b-chat-hf"
            - name: CONTEXT_PATH
              value: "/v1/chat/completions"
            - name: HOST
              value: "http://rayllm-serve-svc:8000"
            ports:
            - containerPort: 7860
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: gradio
    spec:
      selector:
        app: gradio
      ports:
        - protocol: TCP
          port: 80
          targetPort: 7860
      type: LoadBalancer
  2. Ganti value yang ditetapkan ke MODEL_ID dengan nilai tiiuae/falcon-7b-instruct:

    ...
    - name: MODEL_ID
      value: "tiiuae/falcon-7b-instruct"
    
  3. Terapkan manifes:

    kubectl apply -f gradio.yaml
    
  4. Temukan alamat IP eksternal Layanan:

    EXTERNAL_IP=$(kubectl get services gradio \
        --output jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo -e "\nGradio URL: http://${EXTERNAL_IP}\n"
    

    Outputnya mirip dengan hal berikut ini:

    Gradio URL: http://34.172.115.35
    

    Load balancer mungkin memerlukan waktu beberapa menit untuk mendapatkan alamat IP eksternal.

Llama2 7b

  1. Buka manifes gradio.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gradio
      labels:
        app: gradio
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gradio
      template:
        metadata:
          labels:
            app: gradio
        spec:
          containers:
          - name: gradio
            image: us-docker.pkg.dev/google-samples/containers/gke/gradio-app:v1.0.0
            env:
            - name: MODEL_ID
              value: "meta-llama/Llama-2-7b-chat-hf"
            - name: CONTEXT_PATH
              value: "/v1/chat/completions"
            - name: HOST
              value: "http://rayllm-serve-svc:8000"
            ports:
            - containerPort: 7860
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: gradio
    spec:
      selector:
        app: gradio
      ports:
        - protocol: TCP
          port: 80
          targetPort: 7860
      type: LoadBalancer
  2. Pastikan value yang ditetapkan ke MODEL_ID adalah meta-llama/Llama-2-7b-chat-hf.

  3. Terapkan manifes:

    kubectl apply -f gradio.yaml
    
  4. Temukan alamat IP eksternal Layanan:

    EXTERNAL_IP=$(kubectl get services gradio \
        --output jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo -e "\nGradio URL: http://${EXTERNAL_IP}\n"
    

    Outputnya mirip dengan hal berikut ini:

    Gradio URL: http://34.172.115.35
    

    Load balancer mungkin memerlukan waktu beberapa menit untuk mendapatkan alamat IP eksternal.

Menghitung jumlah GPU

Jumlah GPU bergantung pada nilai konfigurasi bnb_4bit_quant_type. Dalam tutorial ini, Anda menetapkan bnb_4bit_quant_type ke nf4, yang berarti model dimuat dalam 4 bit.

Model parameter 70 miliar akan memerlukan minimal 40 GB memori GPU. Ini sama dengan 70 miliar dikali 4 bit (70 miliar x 4 bit= 35 GB) ditambah overhead 5 GB. Dalam hal ini, satu GPU L4 tidak akan memiliki cukup memori. Oleh karena itu, contoh dalam tutorial ini menggunakan dua memori GPU L4 (2 x 24 = 48 GB). Konfigurasi ini cukup untuk menjalankan Falcon 40b atau Llama 2 70b di GPU L4.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.

  1. Buka folder gke-platform:

    cd ${TUTORIAL_HOME}/gke-platform
    
  2. Nonaktifkan perlindungan penghapusan pada cluster dan hapus semua resource terraform yang disediakan. Jalankan perintah berikut:

    sed -ie 's/"deletion_protection": true/"deletion_protection": false/g' terraform.tfstate
    terraform destroy --auto-approve
    

Langkah selanjutnya