本文以部署DeepSeek-R1-Distill-Qwen-7B模型为例,演示如何使用DataCache快速部署DeepSeek-R1系列模型。通过DataCache提前拉取DeepSeek相关模型数据,然后在部署DeepSeek模型推理服务时直接挂载模型数据,可以免去在Pod中拉取模型数据的等待时间,加速DeepSeek部署。
为什么使用ECI部署DeepSeek
前提条件
集群中已部署DataCache CRD。
集群所属VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
如果VPC没有绑定公网NAT网关,您需要在创建DataCache和部署应用时绑定EIP,以便可以拉取公网数据。
准备运行环境
不同的DeepSeek模型对于运行环境的要求不同,本文以DeepSeek-R1-Distill-Qwen-7B模型为例。
规格推荐
需使用的GPU规格要求如下。ECI支持的GPU规格,请参见规格说明。
CPU:无严格限制
内存:>16 GiB
GPU:≥1
显存:≥20 GB,例如A10(显存过低可能会出现OOM)
软件环境
大模型部署依赖的库和配置较多,vLLM是目前一个主流的大模型推理引擎,本文使用vLLM进行推理服务的部署。ECI已经制作好了一个公共容器镜像,您可以直接使用该镜像或者将其作为基础镜像进行二次开发,镜像地址为
registry.cn-hangzhou.aliyuncs.com/eci_open/vllm-openai:v0.7.2
,镜像大小约为16.5 GB。
步骤一:创建DataCache
首次使用时,需要提前创建DataCache,以免去在Pod中拉取模型数据的等待时间,加速部署DeepSeek。
访问HuggingFace,获取模型ID。
本示例使用DeepSeek-R1-Distill-Qwen-7B模型的main版本。在HuggingFace找到目标模型后,在模型详情页面顶部可以复制模型ID。
编写DataCache的YAML配置文件,然后使用该YAML文件创建DataCache拉取DeepSeek-R1-Distill-Qwen-7B模型。
kubectl create -f datacache-test.yaml
datacache-test.yaml的内容示例如下:
apiVersion: eci.aliyun.com/v1alpha1 kind: DataCache metadata: name: deepseek-r1-distill-qwen-7b spec: bucket: test path: /model/deepseek-r1-distill-qwen-7b dataSource: type: URL options: repoSource: HuggingFace/Model # 指定数据源为HuggingFace的模型 repoId: deepseek-ai/DeepSeek-R1-Distill-Qwen-7B # 指定模型ID revision: main # 指定模型版本 netConfig: securityGroupId: sg-bp1*********** vSwitchId: vsw-bp1uo************ # 指定已配置SNAT的交换机 # 如果交换机没有配置SNAT接入公网,需要自动创建并绑定EIP eipCreateParam: bandwidth: 5 # EIP带宽
查询DataCache状态。
kubectl get edc
当数据下载完成,DataCache的状态为Available时,表示可以使用DataCache。阿里云为DeepSeek-R1系列模型提供了热加载能力,能实现DataCache秒级制作完成。
NAME AGE DATACACHEID STATUS PROGRESS BUCKET PATH deepseek-r1-distill-qwen-7b 40s edc-uf6btsb4q5j4b9ue**** Available 100% test /model/deepseek-r1-distill-qwen-7b
步骤二:部署Deepseek模型推理服务
编写应用的YAML配置文件,然后使用该YAML文件部署DeepSeek推理应用。
kubectl create -f deepseek-qwen-server.yaml
deepseek-qwen-server.yaml的内容示例如下,Pod使用GPU规格,并挂载了DeepSeek-R1-Distill-Qwen-7B模型。Pod内的容器使用包含vLLM的镜像,容器启动后会运行
vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager
启动OpenAI-Compatible Server。以下YAML示例中,系统会自动创建并为Pod绑定一个EIP。如果您的集群所属VPC已绑定公网NAT网关,可去掉该Annotation,在Pod创建成功后,您可以配置DNAT条目实现外部访问Pod。实际业务场景中,建议创建Service来统一提供Pod访问入口。
apiVersion: v1 kind: Pod metadata: name: deepseek-r1-7b-server labels: alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.gn7i-c16g1.4xlarge,ecs.gn7i-c32g1.8xlarge # 指定GPU实例规格,指定多规格可以降低库存不足的概率 k8s.aliyun.com/eci-with-eip: "true" # 自动创建并绑定EIP,以便外部可以访问 k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" # 启动依赖的框架较大,需要配置额外的临时存储空间(付费) k8s.aliyun.com/eci-data-cache-bucket: "test" # 指定DataCache Bucket # 对加载速度有更高要求的可以开启AutoPL云盘 k8s.aliyun.com/eci-data-cache-provisionedIops: "15000" # 设置ESSD AutoPL云盘预配置的读写IOPS k8s.aliyun.com/eci-data-cache-burstingEnabled: "true" # 设置ESSD AutoPL云盘开启Burst,加速应用启动 spec: containers: - name: vllm command: - /bin/sh args: - -c - vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager image: registry.cn-hangzhou.aliyuncs.com/eci_open/vllm-openai:v0.7.2 imagePullPolicy: IfNotPresent readinessProbe: tcpSocket: port: 8000 initialDelaySeconds: 60 periodSeconds: 10 resources: limits: nvidia.com/gpu: "1" volumeMounts: - mountPath: /deepseek-r1-7b # 模型数据在容器内的挂载路径 name: llm-model volumes: - name: llm-model hostPath: path: /model/deepseek-r1-distill-qwen-7b # 挂载模型数据,即挂载数据缓存的路径
确认应用部署状态。
kubectl get pod
预期返回:
NAME READY STATUS RESTARTS AGE deepseek-r1-7b-server 1/1 Running 0 2m
查看Pod绑定的EIP地址。
kubectl describe pod deepseek-r1-7b-server
在返回的Pod详情的Annotations中可以获取Pod绑定的EIP地址。
步骤三:测试模型推理服务效果
在Pod所属安全组中添加入方向规则,开放8000端口。
向模型推理服务发送一条模型推理请求。
本文示例部署的DeepSeek已绑定一个EIP,请根据实际的EIP地址替换示例代码中的
XX.XX.XX.XX
。curl POST http://XX.XX.XX.XX:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "/deepseek-r1-7b", "messages": [ { "role": "user", "content": "用一句话简单介绍一下云计算" } ], "temperature": 0.6, "max_tokens": 3000 }' \ --verbose
预期返回:
{"id":"chatcmpl-2d3419bd63f24251a8ea1244851312e5","object":"chat.completion","created":1739179460,"model":"/deepseek-r1-7b","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"<think>\n好的,用户让我用一句话简单介绍一下云计算。首先,我需要理解云计算的基本概念。云计算是指通过网络提供计算资源,如服务器、存储和数据分析,按需使用,而不是预先配置和维护。它通过互联网提供弹性计算资源,减少硬件成本。\n\n接下来,我应该考虑用户的需求。他们可能想快速了解云计算是什么,或者想在某个领域应用它。用户可能对技术术语不太熟悉,所以要用简单明了的语言。\n\n我还需要确保句子简洁,涵盖主要点:互联网、计算资源、弹性、按需使用、降低成本和资源管理。可能需要提到云计算如何帮助用户节省成本和提高效率。\n\n最后,组织这些信息成一句话,确保流畅自然同时准确传达云计算的核心价值。\n</think>\n\n云计算是通过互联网提供弹性计算资源,按需使用以降低硬件成本和提高资源管理效率的技术。","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":8,"total_tokens":189,"completion_tokens":181,"prompt_tokens_details":null},"prompt_logprobs":null}
其中
<think></think>
中的内容表示的是模型在生成最终答案之前进行的内部思考过程或中间推理步骤。这些标记并不是最终输出的一部分,而是模型在生成答案时的一种自我提示或逻辑推理的记录。提取最终答案如下:
云计算是通过互联网提供弹性计算资源,按需使用以降低硬件成本和提高资源管理效率的技术。
- 本页导读 (1)
- 为什么使用ECI部署DeepSeek
- 前提条件
- 准备运行环境
- 步骤一:创建DataCache
- 步骤二:部署Deepseek模型推理服务
- 步骤三:测试模型推理服务效果