如何使用英博云开发机快速部署DeepSeek服务

本文为您详细介绍如何通过英博云开发机快速部署和体验DeepSeek强大功能,以下案例中使用4卡 A800资源和 DeepSeek-R1-Distill-Llama-70B 模型做演示。

DeepSeek服务部署环境

  1. 首先需要在平台创建开发机,详情可以参考创建开发机

  2. 创建开发机时,建议选择4卡 A800或H800规格。

  1. 创建开发机时,选择内置Vllm的镜像,本案例使用 Vllm 部署推理服务。
  • ebsys/ssh_server:vllm0.5_torch2.4_python3.10_cuda12.2_ubuntu22.04_202410281901
  1. 本案例需要使用DeepSeek-R1-Distill-Llama-70B 模型,所以建议挂载一个至少256GB的共享存储卷,作为模型的存储,详情可以参考创建存储卷

DeepSeek推理服务部署

  1. 创建开发机后,远程连接开发机,详情可以参考远程登录
  1. 连接开发机后,将所需的模型文件从共享盘/public/huggface-models/deepseek-ai中复制到自己的存储卷目录中:

    cp -r /public/huggingface-models/deepseek-ai/DeepSeek-R1-Distill-Llama-70B/* /data/DeepSeek-R1-Distill-Llama-70B/

  2. 通过vllm命令运行多 GPU 服务,需要将--tensor-parallel-size在启动服务器时传入参数。例如,要在 4 个 GPU 上运行 API 服务器:

    vllm serve /data/DeepSeek-R1-Distill-Llama-70B --tensor-parallel-size 4

  3. 在开发机终端本地调用测试,发现服务已经正常工作:

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "/data/DeepSeek-R1-Distill-Llama-70B",
        "prompt": "github是什么",
        "max_tokens": 100,
        "temperature": 0
    }'
  1. 服务部署后,目前仅在集群pod内可达,若需要后续通过Chatbox集成,还需要通过Service暴露服务,以下提供两种类型的Service。
  • 若不需要公网访问,在集群中创建ClusterIP类型的Service即可,示例service.yaml如下:

注意:其中selector中内容需要获取上方部署了推理服务开发机(pod)的labels,通过 kubectl get pod podname -oyaml 获取。

apiVersion: v1
kind: Service
metadata:
  name: web-service # 服务名称
spec:
  selector: # 匹配集群中的Pod,使Service能够将流量转发到对应Pod上,通过 kubectl get pod podname -oyaml 获取
    cloud.ebtech.com/kind: SSHServer
    cloud.ebtech.com/sshserver-alias: deepseek-0
    cloud.ebtech.com/sshserver-apiVersion: appsv1
    cloud.ebtech.com/sshserver-name: ebsys-ssi-1740449001701-21300
    cloud.ebtech.com/sshserver-timestamp: "1740449001"
  ports:
    - protocol: TCP
      port: 8000 # Service 监听的端口Pod 
      targetPort: 8000 # 内部应用监听的端口
  type: ClusterIP
  • 若需要公网访问,在集群中创建LoadBalancer类型的Service即可,示例service.yaml如下:
apiVersion: v1
kind: Service
metadata:
  name: eip-service # service的名称
spec:
  ports:
  - name: eip # service 端口的名称
    port: 8000 # service 的端口
    protocol: TCP # 暴露端口的协议
    targetPort: 8000 # 内部应用监听的端口
  selector:
    cloud.ebtech.com/kind: SSHServer
    cloud.ebtech.com/sshserver-alias: deepseek-0
    cloud.ebtech.com/sshserver-apiVersion: appsv1
    cloud.ebtech.com/sshserver-name: ebsys-ssi-1740449001701-21300
    cloud.ebtech.com/sshserver-timestamp: "1740449001"
  type: LoadBalancer # service类型,启用通过LB的方式申请公网IP

构建服务命令:kubectl apply -f service.yaml

Chatbox集成推理服务API

Chatbox是一款 AI 客户端应用和智能助手,支持使用 OpenAI 兼容的第三方 API 服务。

  1. chatbox示例chatbox.yaml如下:

注意:

  1. TOKEN的值需要用户自定义,用于页面访问时,验证身份。

  2. MODEL的值为模型部署路径。

  3. OPEN_API_BASE_URL的值分为两种情况,如上一步使用的LoadBalancer类型,则可填写为http://公网IP:8000/v1/chat/completions,如使用的ClusterIP类型,将公网IP替换为service-name即可。

  4. Ingress Host:请输入自定义名称+集群的外网ingress,可通过对应集群详情页查看,如下图所示。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deepseek
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deepseek
  template:
    metadata:
      labels:
        app: deepseek
    spec:
      containers:
      - name: deepseek
        image: registry-cn-beijing2-internal.ebtech.com/ebsys/chat-in-docker:v1.1.0
        ports:
        - containerPort: 3000
        env:
        - name: TOKEN # 需要用户根据实际情况修改
          value: "sk-bXakN144QEbRJ"
        - name: MODEL # 需要用户根据实际情况修改
          value: "/data/DeepSeek-R1-Distill-Llama-70B"
        - name: OPEN_API_BASE_URL # 需要用户根据实际情况修改
          value: "http://web-service:8000/v1/chat/completions"
        resources:
          requests:
            cpu: "2"
            memory: 4Gi
          limits:
            cpu: "2"
            memory: 4Gi
---
apiVersion: v1
kind: Service
metadata:
  name: deepseek-service
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: deepseek
  ports:
  - port: 80
    targetPort: 3000
    protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: deepseek-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: deepseek-tenant-35366666-demodeepseek-ingress-cn-beijing2.ebtech.com # 需要用户根据实际情况修改
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: deepseek-service
            port:
              number: 80
  1. 构建Chatbox服务:kubectl apply -f chatbox.yaml

  2. 用户通过Ingress Host在浏览器中访问并输入对应token使用 上方部署的 DeepSeek-R1-Distill-Llama-70B API服务。