【阅读原文】戳:部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
春节期间,DeepSeek作为一款基于深度学习的智能推理模型,因其在自然语言处理、图像识别等领域的卓越表现迅速走红。无论是企业级应用还是学术研究,DeepSeek都展现出了强大的潜力。然而,随着其应用场景的不断扩展,数据中心的算力瓶颈问题逐渐凸显。
面对算力不足的挑战,阿里云推出的ACK One注册集群为企业提供了一种灵活、高效的解决方案。通过将本地数据中心的K8S集群接入阿里云ACK One注册集群,企业可以无缝扩展算力资源,充分利用阿里云强大的ACS GPU算力,实现DeepSeek推理模型的高效部署。
背景介绍
ACK One注册集群
ACK One注册集群帮助您将云下Kubernetes集群接入云端,快速搭建混合云集群,可以将本地数据中心Kubernetes集群或其他云厂商Kubernetes集群接入阿里云容器服务管理平台,进行统一管理。
ACS算力
容器计算服务ACS是ACK Serverless集群(原ASK)形态的新一代升级,提供更普惠易用、更柔性、更弹性的容器算力。ACS面向不同业务场景,定义了高性价比的Serverless容器算力类型和算力质量,便于您按需申请使用、秒级按量付费,无需关注底层节点及集群的运维管理。
DeepSeek-R1模型
DeepSeek-R1模型是DeepSeek推出的第一代推理模型,旨在通过大规模强化学习提升大语言模型的推理能力。实验结果表明,DeepSeek-R1在数学推理、编程竞赛等多个任务上表现出色,不仅超过了其他闭源模型,而且在某些任务上接近或超越了OpenAI-O1系列模型。DeepSeek-R1在知识类任务和其他广泛的任务类型中也表现出色,包括创意写作、一般问答等。DeepSeek还将推理能力蒸馏到小模型上,通过对已有模型(Qwen、Llama等)微调提升模型推理能力。蒸馏后的14B模型显著超越了现有的开源模型QwQ-32B,而蒸馏后的32B和70B模型均刷新纪录。更多关于DeepSeek模型的信息,请参见DeepSeek AI GitHub仓库[1]。
vLLM
vLLM是一个高效易用的大语言模型推理服务框架,vLLM支持包括通义千问在内的多种常见大语言模型。vLLM通过PagedAttention优化、动态批量推理(continuous batching)、模型量化等优化技术,可以取得较好的大语言模型推理效率。更多关于vLLM框架的信息,请参见vLLM GitHub代码库[2]。
快速接入
•登录阿里云容器服务控制台[3],根据提示开通容器服务。
•登录容器计算服务控制台[4],根据提示开通ACS服务。
•创建ACK One注册集群并接入数据中心或者其他云厂商的Kubernetes集群(建议版本为1.24及以上)。具体操作,请参见创建ACK One注册集群并接入目标集群[5]。
•已安装并配置Arena客户端。具体操作,请参配置Arena客户端[6]。
•安装ACK Virtual Node组件。具体操作,请参考ACK One注册集群使用Serverless算力[7]。
操作步骤
步骤一:准备DeepSeek-R1-Distill-Qwen-7B模型文件
1. 执行以下命令从ModelScope下载DeepSeek-R1-Distill-Qwen-7B模型。
说明:请确认是否已安装git-lfs插件,如未安装可执行yum install git-lfs或者apt-get install git-lfs安装。更多的安装方式,请参见安装git-lfs[8]。
git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git cd DeepSeek-R1-Distill-Qwen-7B/ git lfs pull
2. 在OSS中创建目录,将模型上传至OSS。
说明:关于ossutil工具的安装和使用方法,请参见安装ossutil[9]。
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B
3. 创建PV和PVC。为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见静态挂载OSS存储卷[10]。
以下为示例PV的基本配置信息:
配置项 | 说明 |
存储卷类型 | OSS |
名称 | llm-model |
访问证书 | 配置用于访问OSS的AccessKey ID和AccessKey Secret。 |
Bucket ID | 选择上一步所创建的OSS Bucket。 |
OSS Path | 选择模型所在的路径,如/models/DeepSeek-R1-Distill-Qwen-7B。 |
以下为示例PVC的基本配置信息:
配置项 | 说明 |
存储声明类型 | OSS |
名称 | llm-model |
分配模式 | 选择已有存储卷。 |
已有存储卷 | 单击选择已有存储卷链接,选择已创建的存储卷PV。 |
以下为示例YAML:
apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # 配置用于访问OSS的AccessKey ID akSecret: <your-oss-sk> # 配置用于访问OSS的AccessKey Secret --- apiVersion: v1 kind: PersistentVolume metadata: name: llm-model labels: alicloud-pvname: llm-model spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: llm-model nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: <your-bucket-name> # bucket名称 url: <your-bucket-endpoint> # Endpoint信息,推荐使用内网地址,如oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: <your-model-path> # 本示例中为/models/DeepSeek-R1-Distill-Qwen-7B/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
步骤二:部署模型
1. 执行下列命令,查看集群中的节点情况。
kubectl get no -owide
预期输出:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME idc-master-0210-001 Ready control-plane 26h v1.28.2 192.168.8.XXX <none> Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition) 5.10.134-18.al8.x86_64 containerd://1.6.32 idc-worker-0210-001 Ready <none> 26h v1.28.2 192.168.8.XXX <none> Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition) 5.10.134-18.al8.x86_64 containerd://1.6.32 idc-worker-0210-002 Ready <none> 26h v1.28.2 192.168.8.XXX <none> Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition) 5.10.134-18.al8.x86_64 containerd://1.6.32 virtual-kubelet-cn-hangzhou-b Ready agent 20h v1.28.2 10.244.11.XXX <none> <unknown> <unknown> <unknown> virtual-kubelet-cn-hangzhou-h Ready agent 25h v1.28.2 10.244.11.XXX <none> <unknown> <unknown> <unknown>
从输出结果,我们可以看到节点中有virtual-kubelet-cn-hangzhou-的虚拟节点。
2. 执行下列命令,基于vLLM模型推理框架部署Qwen模型的推理服务。
说明:GPU推荐资源配置为GPU:1,CPU:8vCPU,内存:32GiB。
arena serve custom \ --name=deepseek-r1 \ --version=v1 \ --gpus=1 \ --cpu=8 \ --memory=32Gi \ --replicas=1 \ --env-from-secret=akId=oss-secret \ --env-from-secret=akSecret=oss-secret \ --label=alibabacloud.com/acs="true" \ #此处指定使用ACS算力 --label=alibabacloud.com/compute-class=gpu \ --label=alibabacloud.com/gpu-model-series=<example-model> \ #此处指定GPU实例系列 --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=registry-cn-hangzhou-vpc.ack.aliyuncs.com/ack-demo/vllm:v0.6.6 \ --data=llm-model:/model/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /model/DeepSeek-R1-Distill-Qwen-7B --port 8000 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"
特别说明:使用ACS GPU算力需要使用以下label来说明。
--label=alibabacloud.com/acs="true"
--label=alibabacloud.com/compute-class=gpu
--label=alibabacloud.com/gpu-model-series=<example-model>
预期输出:
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0001] The Job deepseek-r1 has been submitted successfully INFO[0001] You can run `arena serve get deepseek-r1 --type custom-serving -n default` to check the job status
参数解释如下表所示:
参数 | 说明 |
--name | 指定推理服务名称。 |
--version | 指定推理服务版本。 |
--gpus | 指定单个推理服务副本需要使用的GPU卡数。 |
--cpu | 指定单个推理服务副本需要使用的CPU资源大小。 |
--memory | 指定单个推理服务副本需要使用的内存资源大小。 |
--replicas | 指定推理服务副本数。 |
--label | 通过下面label指定ACS GPU算力[11]。 --label=alibabacloud.com/acs="true" --label=alibabacloud.com/compute-class=gpu --label=alibabacloud.com/gpu-model-series=example-model 说明 目前支持的GPU具体型号列表请提交工单[12]咨询。 |
--restful-port | 指定推理服务对外暴露的端口。 |
--readiness-probe-action | 指定就绪探针连接类型,支持:httpGet、exec、grpc、tcpSocket。 |
--readiness-probe-action-option | 指定就绪探针连接方式。 |
--readiness-probe-option | 指定就绪探针配置。 |
--image | 指定推理服务的镜像地址。 |
--data | 挂载共享存储卷PVC到运行环境中。它由两部分组成,通过冒号(:)分隔。冒号左侧是已经准备好的PVC名称。可以通过命令arena data list查看当前集群可用的PVC列表;冒号右侧是想将PVC的挂载到运行环境中的路径,也是训练代码要读取数据的本地路径。这样通过挂载的方式,您的代码就可以访问PVC的数据。 |
3. 执行下列命令,查看推理服务详细信息,等待服务就绪。
arena serve get deepseek-r1
预期输出:
Name: deepseek-r1 Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 17m Address: 10.100.136.39 Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-r1-v1-custom-serving-5f59745cbd-bsrdq Running 17m 1/1 0 1 virtual-kubelet-cn-hangzhou-b
4. 执行下列命令,查看推理服务已部署到虚拟节点。
kubectl get po -owide |grep deepseek-r1-v1
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES deepseek-r1-v1-custom-serving-5f59745cbd-r8drs 1/1 Running 0 3m16s 192.168.2.XXX virtual-kubelet-cn-hangzhou-b <none> <none>
从结果我们可以看到,推理服务的业务Pod 被调度到虚拟节点。
步骤三:验证推理服务
1. 使用kubectl port-forward在推理服务与本地环境间建立端口转发。
kubectl port-forward svc/deepseek-r1-v1 8000:8000
2. 发送模型推理请求。
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "你好,DeepSeek。"}], "max_tokens": 100, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
预期输出:
{"id":"chatcmpl-cef570252f324ed2b34953b8062f793f","object":"chat.completion","created":1739245450,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"您好!我是由中国的深度求索(DeepSeek)公司独立开发的智能助手DeepSeek-R1,很高兴为您提供服务!\n</think>\n\n您好!我是由中国的深度求索(DeepSeek)公司独立开发的智能助手DeepSeek-R1,很高兴为您提供服务!","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":10,"total_tokens":68,"completion_tokens":58,"prompt_tokens_details":null},"prompt_logprobs":null}
总结
DeepSeek-R1在数学推理、编程竞赛等多个任务上表现出色,不仅超过了其他闭源模型,而且在某些任务上接近或超越了OpenAI-o1系列模型。一经发布,尝试者众。本文介绍了如何在ACK One注册集群上使用ACS GPU算力部署生产可用的DeepSeek推理服务,解决数据中心算力不足的问题,使得企业将更轻松地应对复杂多变的业务挑战,全面释放云端生产力潜力。
立即访问阿里云ACK One官网[13],了解更多详情,开始您的智能扩展之旅吧!
欢迎通过钉钉扫描下方二维码或搜索钉钉群号加入ACK One客户交流钉钉与我们一同交流。(钉钉群号:35688562)
相关链接:
[1] DeepSeek AI GitHub仓库
https://github.com/deepseek-ai
[2] vLLM GitHub代码库
https://github.com/vllm-project/vllm
[3] 阿里云容器服务控制台
https://csnew.console.aliyun.com/#/authorize
[4] 容器计算服务控制台
https://acs.console.aliyun.com/#/
[5] 创建ACK One注册集群并接入目标集群
[6] Arena客户端
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/install-arena#task-1917487
[7] ACK One注册集群使用Serverless算力
[8] 安装git-lfs
[9] 安装ossutil
[10] 静态挂载OSS存储卷
https://help.aliyun.com/zh/cs/user-guide/oss-child-node-1
[11] 指定ACS GPU算力
https://help.aliyun.com/zh/cs/user-guide/pod-gpu-model-and-driver-version
[12] 提交工单
https://smartservice.console.aliyun.com/service/create-ticket
[13] 阿里云ACK One官网
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~