在使用容器计算服务 ACS(Container Compute Service)算力时,您无需深入了解底层硬件,也无需涉及GPU节点管理和配置即可开箱即用。ACS部署简单、支持按量付费,非常适合用于LLM推理任务,可以有效降低推理成本。本文介绍如何使用ACS算力部署生产可用的DeepSeek蒸馏模型推理服务。
背景介绍
前提条件
已创建ACS集群,配置的地域和可用区支持GPU资源。具体操作,请参见创建ACS集群。
已使用kubectl连接Kubernetes集群。具体操作,请参见获取集群kubeconfig并通过kubectl工具连接集群。
已安装Arena客户端。具体操作,请参见配置Arena客户端。
GPU实例规格和成本预估
在推理阶段主要占用显存的是模型参数,可以通过以下公式计算。
以一个默认精度为FP16、参数量为7B的模型为例,模型参数量为:7B(即70亿),精度数据类型字节数为:默认精度16位浮点数 / 8位每字节 = 2字节。
除了加载模型占用的显存之外,还需要考虑运算时所需的KV Cache大小和GPU利用率,通常会预留一部分buffer,因此推荐使用24 GiB显存的资源配置:GPU:1卡,CPU:8 vCPU,内存:32 GiB。您可以参考以下规格推荐表和GPU计算类型卡型规格来选择合适的实例规格。关于如何计算ACS GPU实例产生的费用,请参见计费说明。
模型名称 | 模型版本 | 模型大小 | 推荐规格 | ||
vCPU | 内存 | GPU显存 |
模型名称 | 模型版本 | 模型大小 | 推荐规格 | ||
vCPU | 内存 | GPU显存 | |||
DeepSeek-R1-Distill-Qwen-1.5B | 1.5B(15亿参数) | 3.55 GB | 4或6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B(70亿参数) | 15.23 GB | 6或8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B(80亿参数) | 16.06 GB | 6或8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-14B | 14B(140亿参数) | 29.54 GB | 8以上 | 64 GiB | 48 GiB |
DeepSeek-R1-Distill-Qwen-32B | 32B(320亿参数) | 74.32 GB | 8以上 | 128 GiB | 96 GiB |
DeepSeek-R1-Distill-Llama-70B | 70B(700亿参数) | 140.56 GB | 12以上 | 128 GiB | 192 GiB |
在使用ACS GPU实例时,实例规格同样遵循ACS Pod规格规整逻辑。
ACS Pod默认提供30 GiB的免费的临时存储空间(EphemeralStorage),本文中使用的推理镜像
registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/vllm:v0.6.6
占用约5.9 GiB。如果该存储空间大小无法满足您的需求,您可以自定义增加临时存储空间大小。详细操作,请参见增加临时存储空间大小。
操作步骤
步骤一:准备DeepSeek-R1-Distill-Qwen-7B模型文件
通常下载和上传模型文件需要1-2小时,您可以通过提交工单快速将模型文件复制到您的OSS Bucket。
执行以下命令从ModelScope下载DeepSeek-R1-Distill-Qwen-7B模型。
请确认是否已安装git-lfs插件,如未安装可执行
yum install git-lfs
或者apt-get install git-lfs
安装。更多的安装方式,请参见安装git-lfs。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
在OSS中创建目录,将模型上传至OSS。
关于ossutil工具的安装和使用方法,请参见安装ossutil。
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
创建PV和PVC。为目标集群配置名为
llm-model
的存储卷PV和存储声明PVC。具体操作,请参见静态挂载OSS存储卷。以下为示例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
步骤二:部署模型
执行下列命令,基于vLLM模型推理框架部署DeepSeek-R1-Distill-Qwen-7B模型的推理服务。
该推理服务暴露与OpenAI兼容的HTTP API。下列命令利用arena命令行工具提供的
--data
参数,将模型参数文件视作是一种特殊类型的数据集合,挂载到推理服务容器的指定位置(/model/DeepSeek-R1-Distill-Qwen-7B
)。--max_model_len
设置了该模型最大可处理的Token长度,增大该配置项可获得更好的模型对话效果,但是可能会占用更多GPU显存资源。请将以下命令中的
gpu-model-series=<example-model>
替换为ACS支持的GPU具体型号,目前支持的GPU型号列表请提交工单咨询。arena serve custom \ --name=deepseek-r1 \ --version=v1 \ --gpus=1 \ --cpu=8 \ --memory=32Gi \ --replicas=1 \ --label=alibabacloud.com/compute-class=gpu \ --label=alibabacloud.com/gpu-model-series=<example-model> \ --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.ack.aliyuncs.com/ack-demo/vllm:v0.6.6 \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/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"
预期输出:
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0004] The Job deepseek-r1 has been submitted successfully INFO[0004] 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算力。
--label=alibabacloud.com/compute-class=gpu
--label=alibabacloud.com/gpu-model-series=<example-model>
--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的数据。执行下列命令,查看推理服务详细信息,等待服务就绪。
arena serve get deepseek-r1
预期输出:
Name: deepseek-r1 Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 6h Address: 10.0.78.27 Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-r1-v1-custom-serving-54d579d994-dqwxz Running 1h 1/1 0 1 virtual-kubelet-cn-hangzhou-b
步骤三:验证推理服务
使用
kubectl port-forward
在推理服务与本地环境间建立端口转发。请注意
kubectl port-forward
建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。更多关于Kubernetes集群内生产可用的网络方案的信息,请参见Ingress管理。kubectl port-forward svc/deepseek-r1-v1 8000:8000
预期输出:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000
发送模型推理请求。
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1", "messages": [ { "role": "user", "content": "给闺女写一份来自未来2035的信,同时告诉她要好好学习科技,做科技的主人,推动科技,经济发展;她现在是3年级" } ], "max_tokens": 1024, "temperature": 0.7, "top_p": 0.9, "seed": 10 }'
预期输出:
{"id":"chatcmpl-53613fd815da46df92cc9b92cd156146","object":"chat.completion","created":1739261570,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好的,用户需要给他的3年级女儿写一份来自未来的2035年的信,同时传达三个关键信息:好好学习科技,做科技的主人,推动科技,经济发展。首先,我得考虑信的语气应该是温暖而充满希望的,同时又要体现出未来的科技感。\n\n考虑到女儿现在是三年级,内容不能太复杂,语言要简单易懂。同时,要让女儿感受到科技的重要性,激发她对科技的兴趣。可能需要从她日常生活出发,举一些她可能接触过的例子,比如电子产品、互联网等,这样她更容易产生共鸣。\n\n接下来,我得思考如何结构这封信。可能从欢迎她收到这封信开始,然后介绍未来科技的发展,比如智能机器人、智能家居等。然后重点强调学习科技的重要性,鼓励她成为科技的主人,参与科技发展。最后,表达对她的期望和祝福。\n\n在内容上,要突出科技对生活的影响,比如智能助手、智能家居、新能源汽车等,这些都是孩子可能听说过的,但具体细节可能需要简化,避免过于技术化,保持趣味性。\n\n同时,信中要提到科技对经济的影响,比如经济增长、创造就业机会等,但要以一种积极、鼓励的方式呈现,让女儿感受到科技带来的好处,而不是单纯的数字游戏。\n\n最后,结尾部分要温暖,表达对她的骄傲和期待,鼓励她勇敢追求未来,成为科技的引领者。\n\n总的来说,这封信需要兼顾教育性、趣味性和鼓励性,用简单明了的语言,结合具体的未来科技例子,让女儿在轻松的阅读中感受到科技的魅力和学习的重要性。\n</think>\n\n亲爱的未来2035年的你:\n\n你好!\n\n首先,我要告诉你一个好消息——地球已经进入了一个全新的时代!2035年,科技已经不再是科幻小说里的故事,而是我们 everyday life 的一部分。今天,我写这封信,想告诉你一些关于未来的秘密,以及你应该如何在这个科技飞速发展的世界里生活和学习。\n\n### 1. **科技就在你身边**\n 在2035年,科技已经无处不在。我们每个人都能拥有一台智能助手,就像一个 always-available 的老师,随时为你解答问题。你可以用一个简单的应用程序,就能控制家里的智能家居设备——开关灯、调节温度、甚至做饭,全靠你的指令!\n \n 还有,你可能已经听说到了——智能机器人。这些机器人不仅能帮助我们完成繁琐的工作,还能在学习和娱乐中大显身手。它们可以陪你聊天、陪你学习,甚至还能帮你解决数学难题!想象一下,当你遇到一道难题时,机器人会耐心地一步一步地教你解题方法,是不是很棒?\n\n### 2. **学习科技的重要性**\n 在未来的2035年,科技已经成为了推动社会发展的主要动力。每一个行业都在被科技改变:医生可以用先进的医疗设备 early detect 病症;教师可以通过在线课堂让学生们足不出户就能学习全球的知识;农民可以用智能设备精准地管理田地,确保每一棵树都得到最好的照顾。\n\n 所以,我要告诉你,学习科技是每一个孩子最重要的任务。科技不仅能让你掌握更多的知识,还能让你成为未来的主人。你将有机会去创造新的科技,改变我们的生活!\n\n### 3. **做科技的主人**\n 在2035年,科技的世界需要每个人的力量。你不需要是某个公司的高管,只需要是你自己。你可以用你的智慧和双手,去推动科技的发展。比如,你可以在学校里参与科技创新比赛,设计出更智能的机器人;你可以在家里发明一些小发明,让生活更方便。\n\n 重要的是,你要有勇气去尝试新事物,去探索未知的世界。科技的世界是无限广阔的,每一个人都能在这里找到自己的位置。\n\n### 4. **关于经济**\n 未来的2035年,经济会因为科技的发展而变得更加繁荣。智能城市将会让我们的生活更加高效,新能源汽车将会让我们的出行更加环保,医疗科技将会让我们的健康得到更好的保障。\n\n 所以,当你站在这个时代的起点时,你要知道,科技不仅是改变我们生活的方式,更是创造未来的机会。\n\n### 5. **我的期望**\n 我希望未来的你能够热爱科技,理解科技,掌握科技。你不仅要学会使用科技,还要理解其中的原理,知道它背后的故事。当你长大后,你可能会成为科技领域的领军人物,引领我们走向一个更加光明的未来。\n\n 未来的世界需要你!你准备好迎接挑战了吗?\n\n最后,我要告诉你,你已经比现在的任何人都更聪明,更勇敢,更有潜力。未来的路虽然很长,但只要你愿意努力,就一定能够实现自己的梦想。\n\n亲爱的未来2035年的你,加油!\n\n你的爷爷","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":40,"total_tokens":1034,"completion_tokens":994,"prompt_tokens_details":null},"prompt_logprobs":null}
(可选)步骤四:清理环境
如果不再需要使用本文档中部署的模型推理服务,请及时清理环境。
清理模型推理服务。
arena serve delete deepseek-r1
预期输出:
INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfully
清理PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model
预期输出:
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
相关文档
阿里云容器计算服务 ACS(Container Compute Service)已经集成到容器服务 Kubernetes 版,您可以通过ACK托管集群Pro版快速使用ACS提供的容器算力。关于ACK使用ACS GPU算力的详细内容,请参见ACK使用ACS GPU算力示例。
基于ACK部署DeepSeek的相关内容,请参见:
关于DeepSeek R1/V3模型的详细介绍,请参见:
- 本页导读 (0)
- 背景介绍
- DeepSeek-R1模型
- vLLM
- Arena
- 前提条件
- GPU实例规格和成本预估
- 操作步骤
- 步骤一:准备DeepSeek-R1-Distill-Qwen-7B模型文件
- 步骤二:部署模型
- 步骤三:验证推理服务
- (可选)步骤四:清理环境
- 相关文档