全部产品
Search
文档中心

Container Service for Kubernetes:Praktik terbaik untuk menerapkan versi penuh DeepSeek di beberapa node dalam ACK

更新时间:Aug 22, 2025

Dokumen ini menjelaskan praktik terbaik untuk menerapkan model DeepSeek-R1-671B di beberapa node dalam Container Service for Kubernetes (ACK). Untuk mengatasi keterbatasan memori GPU tunggal pada model 671B, strategi paralelisme hibrida (Pipeline Parallelism = 2 + Tensor Parallelism = 8) diusulkan. Dengan Arena, penerapan terdistribusi yang efisien dapat dilakukan pada dua node ecs.ebmgn8v.48xlarge (8 × 96GB). Dokumen ini juga menjelaskan cara mengintegrasikan DeepSeek-R1 yang diterapkan di ACK ke dalam platform Dify untuk membangun sistem Q&A cerdas tingkat perusahaan yang mendukung pemahaman teks panjang.

Informasi latar belakang

  • DeepSeek

    DeepSeek-R1 adalah model inferensi generasi pertama yang disediakan oleh DeepSeek untuk meningkatkan kinerja inferensi model bahasa besar (LLMs) menggunakan pembelajaran yang ditingkatkan secara besar-besaran. Statistik menunjukkan bahwa DeepSeek-R1 lebih unggul dibandingkan model sumber tertutup lainnya dalam inferensi matematika dan kinerja pemrograman. Kinerja model ini mencapai atau melampaui seri OpenAI-o1 di sektor tertentu. DeepSeek-R1 juga unggul di sektor terkait pengetahuan seperti penciptaan, penulisan, dan Q&A. DeepSeek menyuling kemampuan inferensi ke model yang lebih kecil, seperti Qwen dan Llama, untuk menyesuaikan kinerja inferensi model tersebut. Model 14B yang disuling dari DeepSeek melampaui model QwQ-32B sumber terbuka. Model 32B dan 70B yang disuling dari DeepSeek juga menetapkan rekor baru. Untuk informasi lebih lanjut tentang DeepSeek, lihat Repositori GitHub DeepSeek AI.

  • vLLM

    vLLM adalah kerangka layanan inferensi LLM berkinerja tinggi dan mudah digunakan. vLLM mendukung sebagian besar LLM yang paling umum digunakan, termasuk model Qwen. vLLM didukung oleh teknologi seperti optimasi PagedAttention, penggabungan batch berkelanjutan, dan kuantifikasi model untuk secara signifikan meningkatkan efisiensi inferensi LLM. Untuk informasi lebih lanjut tentang kerangka vLLM, lihat Repositori GitHub vLLM.

  • Arena

    Arena adalah alat antarmuka baris perintah untuk mengelola tugas pembelajaran mesin berbasis Kubernetes. Ini menyederhanakan seluruh siklus hidup pembelajaran mesin, termasuk persiapan data, pengembangan model, pelatihan, dan prediksi, sehingga meningkatkan efisiensi ilmuwan data. Arena terintegrasi mendalam dengan Layanan Alibaba Cloud, mendukung berbagi GPU dan Sistem File Paralel Cloud (CPFS), serta dapat beroperasi dalam kerangka pembelajaran mendalam yang dioptimalkan oleh Alibaba Cloud untuk memaksimalkan kinerja resource komputasi heterogen. Untuk informasi lebih lanjut tentang Arena, lihat Repositori GitHub Arena.

Prasyarat

1. Penyebaran lintas beberapa node

1.1 Pisahkan model

DeepSeek-R1 menyediakan 671 miliar parameter. Setiap GPU dapat menyediakan hingga 96 GB memori, yang tidak cukup untuk memuat seluruh model. Untuk menyelesaikan masalah ini, Anda harus memisahkan model. Dalam dokumen ini, metode pemisahan TP=8 dan PP=2 digunakan. Gambar berikut menunjukkan metode pemisahan. Paralelisme model (PP=2) memisahkan model menjadi dua fase. Setiap fase berjalan pada node yang dipercepat GPU. Sebagai contoh, Model M dipisahkan menjadi M1 dan M2. M1 berjalan pada node pertama yang dipercepat GPU dan meneruskan hasil ke M2 yang berjalan pada node kedua yang dipercepat GPU. Paralelisme data (TP=8) melakukan operasi komputasi pada delapan GPU di setiap fase (M1 atau M2). Dalam fase M1, data masukan dipisahkan menjadi delapan bagian dan diproses pada delapan GPU. Setiap GPU memproses satu bagian dan kemudian sistem menggabungkan hasil komputasi dari delapan GPU.

image.png

Dalam dokumen ini, vLLM + ray digunakan untuk menerapkan model DeepSeek-R1 secara terdistribusi. Gambar berikut menunjukkan arsitektur penyebaran keseluruhan. Dua pod vLLM diterapkan pada dua instance ECS. Setiap pod vLLM memiliki delapan GPU. Salah satu pod berfungsi sebagai node kepala Ray dan pod lainnya berfungsi sebagai node pekerja Ray.

image

1.2 Unduh model

Dalam contoh bagian ini, DeepSeek-R1 digunakan untuk menjelaskan cara mengunduh model dari dan mengunggah model ke Object Storage Service (OSS) serta membuat volume persisten (PV) dan klaim volume persisten (PVC) dalam kluster ACK.

Untuk informasi lebih lanjut tentang cara mengunggah model ke Apsara File Storage NAS (NAS), lihat Pasang volume NAS yang disediakan secara statis.

Catatan

Untuk mempercepat unduhan dan unggahan file, Anda bisa langsung menyalin file ke bucket OSS Anda.

  1. Unduh file model.

    1. Jalankan perintah berikut untuk menginstal Git:

      # Jalankan yum install git atau apt install git.
      yum install git
    2. Jalankan perintah berikut untuk menginstal plug-in Git Large File Support (LFS):

      # Jalankan yum install git-lfs atau apt install git-lfs.
      yum install git-lfs
    3. Jalankan perintah berikut untuk mengkloning repositori DeepSeek-R1 di ModelScope ke mesin lokal Anda:

      GIT_LFS_SKIP_SMUDGE=1 git clone https://modelscope.cn/models/deepseek-ai/DeepSeek-R1
    4. Jalankan perintah berikut untuk mengakses direktori DeepSeek-R1 dan menarik file besar yang dikelola oleh LFS:

      cd DeepSeek-R1
      git lfs pull
  2. Unggah file DeepSeek-R1 ke OSS.

    1. Masuk ke Konsol OSS untuk melihat dan menyalin nama bucket OSS yang Anda buat.

      Untuk informasi lebih lanjut tentang cara membuat bucket OSS, lihat Buat Bucket.

    2. Instal dan konfigurasikan ossutil untuk mengelola sumber daya OSS. Untuk informasi lebih lanjut, lihat Instal ossutil.

    3. Jalankan perintah berikut untuk membuat direktori bernama DeepSeek-R1 di OSS:

      ossutil mkdir oss://<Nama-Bucket-Anda>/models/DeepSeek-R1
    4. Jalankan perintah berikut untuk mengunggah file model ke OSS:

      ossutil cp -r ./DeepSeek-R1 oss://<Nama-Bucket-Anda>/models/DeepSeek-R1
  3. Konfigurasikan PV dan PVC untuk kluster tujuan. Untuk informasi lebih lanjut, lihat Gunakan volume ossfs 1.0 yang disediakan secara statis.

    1. Buat PV

      • Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.

      • Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih Volumes > Persistent Volumes.

      • Di halaman PersistentVolumes, klik Create di pojok kanan atas.

      • Di kotak dialog Create PersistentVolume, konfigurasikan parameter.

        Tabel berikut menjelaskan parameter PV.

        Parameter

        Deskripsi

        PV Type

        Dalam contoh ini, pilih OSS.

        Volume Name

        Dalam contoh ini, masukkan llm-model.

        Access Certificate

        Pasangan AccessKey yang digunakan untuk mengakses bucket OSS. Pasangan AccessKey terdiri dari ID AccessKey dan Rahasia AccessKey.

        Bucket ID

        Pilih bucket OSS yang Anda buat pada langkah sebelumnya.

        OSS Path

        Masukkan path model, seperti /models/DeepSeek-R1.

    2. Buat PVC

      • Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih Volumes > Persistent Volume Claims.

      • Di halaman PersistentVolumeClaims, klik Create di pojok kanan atas.

      • Di halaman Create PersistentVolumeClaim, isi parameter.

        Tabel berikut menjelaskan parameter PVC.

        Parameter

        Deskripsi

        PVC Type

        Dalam contoh ini, pilih OSS.

        Name

        Dalam contoh ini, masukkan llm-model.

        Allocation Mode

        Dalam contoh ini, pilih Existing Volumes.

        Existing Storage Class

        Klik hyperlink Select PV dan pilih PV yang Anda buat.

1.3 Terapkan model

  1. Instal LeaderWorkerSet.

    1. Masuk ke Konsol ACK.

    2. Di panel navigasi di sebelah kiri, klik Clusters, lalu klik nama kluster yang Anda buat.

    3. Di panel navigasi di sebelah kiri, klik Applications > Helm. Di halaman Helm, klik Deploy.

    4. Di langkah Basic Information, masukkan Application Name dan Namespace, temukan lws di bagian Chart, dan klik Next. Dalam contoh ini, nama aplikasi (lws) dan namespace (lws-system) digunakan.

    5. Di langkah Parameters, pilih Chart Version terbaru, dan klik OK untuk menginstal lws.image

  2. Terapkan model.

    Gambar berikut menunjukkan diagram arsitektur penyebaran terdistribusi vLLM. image.png

    Terapkan model menggunakan Arena

    1. Jalankan perintah berikut untuk menerapkan layanan:

      arena serve distributed \
              --name=vllm-dist \
              --version=v1 \
              --restful-port=8080 \
              --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.10.0 \
              --readiness-probe-action="tcpSocket" \
              --readiness-probe-action-option="port: 8080" \
              --readiness-probe-option="initialDelaySeconds: 30" \
              --readiness-probe-option="periodSeconds: 30" \
              --share-memory=30Gi \
              --data=llm-model:/models/DeepSeek-R1 \
              --leader-num=1 \
              --leader-gpus=8 \
              --leader-command="bash /vllm-workspace/examples/online_serving/multi-node-serving.sh leader --ray_cluster_size=\$(LWS_GROUP_SIZE); python3 -m vllm.entrypoints.openai.api_server --model /models/DeepSeek-R1 --port 8080 --trust-remote-code --served-model-name deepseek-r1 --gpu-memory-utilization 0.95 --tensor-parallel-size 8 --pipeline-parallel-size 2 --enforce-eager" \
              --worker-num=1 \
              --worker-gpus=8 \
              --worker-command="bash /vllm-workspace/examples/online_serving/multi-node-serving.sh worker --ray_address=\$(LWS_LEADER_ADDRESS)"

      Lihat Deskripsi Parameter

      Parameter

      Wajib

      Deskripsi

      --name

      Ya

      Nama layanan inferensi. Nama harus unik secara global.

      --image

      Ya

      Alamat gambar layanan inferensi.

      --restful-port

      Ya

      Port layanan.

      --version

      Tidak

      Versi layanan. Nilai default adalah versi saat ini.

      --readiness-probe-*

      Tidak

      Konfigurasikan deteksi kesiapan untuk layanan. Layanan dapat disediakan secara eksternal hanya setelah layanan siap.

      --share-memory

      Tidak

      Konfigurasikan memori bersama.

      --leader-num

      Ya

      Jumlah pod pemimpin. Anda hanya dapat mengatur nilai ini menjadi 1.

      --leader-gpus

      Tidak

      Jumlah GPU yang digunakan oleh setiap pod pemimpin.

      --leader-command

      Ya

      Perintah yang memulai pod pemimpin.

      --data

      Tidak

      Alamat model layanan. Format: <nama-pvc>:<path-pod>. Jalankan perintah llm-model:/mnt/models untuk memasang PVC llm-model ke direktori /mnt/models kontainer.

      Output yang Diharapkan:

      configmap/vllm-dist-v1-cm created
      service/vllm-dist-v1 created
      leaderworkerset.leaderworkerset.x-k8s.io/vllm-dist-v1-distributed-serving created
      INFO[0002] The Job vllm-dist has been submitted successfully
      INFO[0002] You can run `arena serve get vllm-dist --type distributed-serving -n default` to check the job status
    2. Jalankan perintah berikut untuk melihat kemajuan penyebaran layanan inferensi:

      arena serve get vllm-dist

      Output yang Diharapkan:

      Name:       vllm-dist
      Namespace:  default
      Type:       Distributed
      Version:    v1
      Desired:    1
      Available:  1
      Age:        3m
      Address:    192.168.138.65
      Port:       RESTFUL:8080
      GPU:        16
      
      Instances:
        NAME                                  STATUS   AGE  READY  RESTARTS  GPU  NODE
        ----                                  ------   ---  -----  --------  ---  ----
        vllm-dist-v1-distributed-serving-0    Running  3m   1/1    0         8    cn-beijing.10.x.x.x
        vllm-dist-v1-distributed-serving-0-1  Running  3m   1/1    0         8    cn-beijing.10.x.x.x

    Terapkan model menggunakan kubectl

    1. Jalankan file DeepSeek_R1.yaml untuk menerapkan layanan model.

      apiVersion: leaderworkerset.x-k8s.io/v1
      kind: LeaderWorkerSet
      metadata:
        name: vllm-dist
      spec:
        replicas: 1
        leaderWorkerTemplate:
          size: 2
          restartPolicy: RecreateGroupOnPodRestart
          leaderTemplate:
            metadata:
              labels: 
                role: leader
            spec:
              volumes:
                - name: model
                  persistentVolumeClaim:
                    claimName: llm-model
                - name: dshm
                  emptyDir:
                    medium: Memory
                    sizeLimit: 15Gi
              containers:
                - name: vllm-leader
                  image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.10.0
                  command:
                    - sh
                    - -c
                    - >-
                      bash /vllm-workspace/examples/online_serving/multi-node-serving.sh leader --ray_cluster_size=$(LWS_GROUP_SIZE); 
                      python3 -m vllm.entrypoints.openai.api_server --model /models/DeepSeek-R1 --port 8080 --trust-remote-code --served-model-name deepseek-r1 --gpu-memory-utilization 0.95 --tensor-parallel-size 8 --pipeline-parallel-size 2 --enforce-eager
                  resources:
                    limits:
                      nvidia.com/gpu: "8"
                    requests:
                      nvidia.com/gpu: "8"
                  ports:
                    - containerPort: 8080
                  readinessProbe:
                    initialDelaySeconds: 30
                    periodSeconds: 30
                    tcpSocket:
                      port: 8080
                  volumeMounts:
                    - mountPath: /models/DeepSeek-R1
                      name: model
                    - mountPath: /dev/shm
                      name: dshm
          workerTemplate:
            spec:
              volumes:
                - name: model
                  persistentVolumeClaim:
                    claimName: llm-model
                - name: dshm
                  emptyDir:
                    medium: Memory
                    sizeLimit: 15Gi
              containers:
                - name: vllm-worker
                  image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.10.0
                  command:
                    - sh
                    - -c
                    - "bash /vllm-workspace/examples/online_serving/multi-node-serving.sh worker --ray_address=$(LWS_LEADER_ADDRESS)"
                  resources:
                    limits:
                      nvidia.com/gpu: "8"
                    requests:
                      nvidia.com/gpu: "8"
                  ports:
                    - containerPort: 8080
                  volumeMounts:
                    - mountPath: /models/DeepSeek-R1
                      name: model
                    - mountPath: /dev/shm
                      name: dshm
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: vllm-dist-v1
      spec:
        type: ClusterIP
        ports:
        - port: 8080
          protocol: TCP
          targetPort: 8080
        selector:
          leaderworkerset.sigs.k8s.io/name: vllm-dist
          role: leader
      kubectl create -f DeepSeek_R1.yaml
    2. Jalankan perintah berikut untuk melihat kemajuan penyebaran layanan inferensi:

      kubectl get po |grep vllm-dist

      Output yang Diharapkan:

      NAME            READY   STATUS    RESTARTS   AGE
      vllm-dist-0     1/1     Running   0          20m
      vllm-dist-0-1   1/1     Running   0          20m
  3. Buat port lokal untuk meneruskan permintaan inferensi model.

    1. Jalankan perintah kubectl port-forward untuk mengonfigurasi penerusan port antara lingkungan lokal dan layanan inferensi.

      Catatan

      Jika Anda menjalankan perintah kubectl port-forward untuk mengonfigurasi penerusan port, layanan tidak andal, aman, atau dapat diperluas dalam lingkungan produksi. Anda hanya dapat menggunakan layanan ini untuk pengembangan dan debugging. Jangan jalankan perintah ini untuk mengonfigurasi penerusan port dalam lingkungan produksi. Untuk informasi lebih lanjut tentang solusi jaringan yang digunakan untuk memfasilitasi produksi dalam kluster ACK, lihat Manajemen Ingress.

      kubectl port-forward svc/vllm-dist-v1 8080:8080
    2. Kirim permintaan ke layanan inferensi.

      curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{
          "model": "deepseek-r1",
          "prompt": "San Francisco is a",
          "max_tokens": 10,
          "temperature": 0.6
      }'

      Output yang Diharapkan:

      {"id":"cmpl-15977abb0adc44d9aa03628abe9fcc81","object":"text_completion","created":1739346042,"model":"ds","choices":[{"index":0,"text":" city that needs no introduction. Known for its iconic","logprobs":null,"finish_reason":"length","stop_reason":null,"prompt_logprobs":null}],"usage":{"prompt_tokens":5,"total_tokens":15,"completion_tokens":10,"prompt_tokens_details":null}}

2. Gunakan Dify untuk membangun asisten Q&A DeepSeek

Anda dapat menginstal dan mengonfigurasi Dify dalam kluster Container Service for Kubernetes. Untuk informasi lebih lanjut, lihat Instal ack-dify.

2.1. Konfigurasikan model DeepSeek

  1. Masuk ke platform Dify. Klik foto profil Anda lalu klik Pengaturan. Di panel navigasi di sebelah kiri, klik Penyedia Model. Temukan OpenAI-API-compatible dan klik Tambah. image

  2. Tabel berikut menjelaskan parameter.

    Parameter

    Pengaturan

    Catatan

    Model name

    deepseek-r1

    Anda tidak dapat mengubah parameter ini.

    API Key

    Contoh: api-deepseek-r1

    Anda dapat mengonfigurasi parameter ini sesuai dengan kebutuhan bisnis Anda.

    API endpoint URL

    http://vllm-dist-v1.default:8080/v1

    Anda tidak dapat mengubah parameter ini. Nilai parameter ini adalah nama layanan DeepSeek lokal yang diterapkan pada langkah kedua.

    image.png

2.2. Buat asisten Q&A

Buat asisten Q&A berbasis AI serbaguna. Pilih Studio > Create from Blank. Tentukan name dan description untuk asisten. Gunakan pengaturan default untuk parameter lainnya.

image

2.3 Uji asisten Q&A berbasis AI

  1. Di sisi kanan halaman, Anda dapat memulai percakapan dengan DeepSeek.

    image.png

  2. Anda dapat mengintegrasikan asisten Q&A DeepSeek yang telah dikonfigurasi ke dalam lingkungan produksi pribadi Anda. Untuk informasi lebih lanjut, lihat Gunakan dalam Lingkungan Produksi.

    2024-08-23_14-14-02 (1)