【阅读原文】戳:大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本文是基于阿里云容器服务产品ACK,部署Deepseek大语言模型推理服务系列文章的第二篇。将介绍如何在Kubernetes管理的GPU集群中,快速部署多机分布式Deepseek-R1 671B(“满血版”)推理服务。并集成Dify应用,构建一个简单的Deepseek问答助手。关于如何在ACK部署Deepseek“蒸馏版”模型推理服务,可以参考本系列第一篇文章《基于ACK的DeepSeek蒸馏模型生产环境落地指南》。
一. 背景介绍
1. DeepSeek模型
DeepSeek-R1[1]模型是DeepSeek推出的第一代推理模型,旨在通过大规模强化学习提升大语言模型的推理能力。实验结果表明,DeepSeek-R1在数学推理、编程竞赛等多个任务上表现出色,不仅超过了其他闭源模型,而且在某些任务上接近或超越了OpenAI-o1系列模型。DeepSeek-R1在知识类任务和其他广泛的任务类型中也表现出色,包括创意写作、一般问答等。DeepSeek还将推理能力蒸馏到小模型上,通过对已有模型(Qwen、Llama等)微调提升模型推理能力。蒸馏后的14B模型显著超越了现有的开源模型QwQ-32B,而蒸馏后的32B和70B模型均刷新纪录。更多模型信息请参考DeepSeek AI GitHub仓库[2]。
2. vLLM
vLLM[3]是一个高效易用的大语言模型推理服务框架,vLLM支持包括通义千问在内的多种常见大语言模型。vLLM通过PagedAttention优化、动态批量推理(continuous batching)、模型量化等优化技术,可以取得较好的大语言模型推理效率。更多关于vLLM框架的信息,请参考vLLM Github代码库[4]。
3. Arena
Arena是阿里云容器服务提供并开源,基于Kubernetes的机器学习轻量级解决方案。用户可通过Arena命令行工具管理数据准备、模型开发、模型训练、模型推理等完整ML/AI任务生命周期,提升数据科学家工作效率。同时和阿里云的基础云服务深度集成,支持GPU共享、CPFS、批量任务调度、数据缓存加速等服务,可以运行开源和阿里云优化的深度学习框架,最大化利用阿里云异构设备的性能和成本的效益。新版Arena已经支持分布式vLLM推理架构和Deepseek模型。关于Arena的信息可以参考文档[5]。
4. Dify
Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和LLMOps[6]的理念,使开发者可以快速搭建生产级的生成式AI应用。关于如何快速部署Dify应用,可以参考ACK文档[7]。
二. 前提条件
• 已创建包含GPU的Kubernetes集群。具体操作,请参见创建包含GPU的Kubernetes集群[8]。
推荐机型ecs.ebmgn8v.48xlarge (8 * 96GB)。分布式部署需要2台,单机部署需要1台。
• 已安装云原生AI套件
• 已安装Arena客户端,且版本不低于0.14.0。具体操作,请参见安装Arena[9]。
• (可选)已安装ack-dify组件。具体操作,请参考文档使用Dify快速构建AI问答助手[10]中的安装ack-dify章节。
三. 多机分布式部署
3.1 模型切分
DeepSeek-R1模型共有671B参数,单张GPU显存只有96GB,无法加载全部模型,因此需要将模型切分。本文采用了TP=8,PP=2的切分方式,模型切分示意图如下。
管道并行(PP=2)将模型切分为两个阶段,每个阶段运行在一个GPU节点上。例如有一个模型M,我们可以将其切分为M1和 M2,M1在第一个GPU上处理输入,完成后将中间结果传递给 M2,M2在第二个GPU上进行后续操作。
张量并行(TP=8)在模型的每个阶段内(例如M1和 M2),将计算操作分配到8个GPU上进行。如在M1阶段,当输入数据传入时,这些数据将被分割为8份,并分别在8个GPU上同时处理。每个GPU处理一小部分数据,计算获取的结果然后合并。
本文选择vllm + ray的方式分布式部署DeepSeek-R1模型,整体部署架构如下所示。两个vLLM Pod部署在两台EGS上,每个vLLM Pod有8张GPU。两个Pod一个作为Ray head节点,一个作为Ray worker节点。
3.2 准备模型数据
1. 从ModelScope下载模型并上传到OSS上,模型下载链接:
https://modelscope.cn/models/deepseek-ai/DeepSeek-R1
2. 为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见文章《基于ACK的DeepSeek蒸馏模型生产环境落地指南》。
3.3 模型部署
3.3.1 安装LeaderWorkerSet
登录容器服务管理控制台[11],在左侧导航栏选择集群列表。
2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm。
3. 在Helm页面单击创建,然后在创建页面,将应用名设置为lws,在Chart区域的搜索栏搜索并选中lws,完成后单击下一步,在弹出的对话框中单击是,确认采用lws-system为Chart的默认的命名空间。
4. 在参数配置页面,确认Chart版本和参数信息后,单击确定。
3.3.2 模型部署
vLLM分布式部署架构图
执行以下命令部署服务。
arena serve distributed \ --name=vllm-dist \ --version=v1 \ --restful-port=8080 \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.7.2 \ --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:/mnt/models \ --leader-num=1 \ --leader-gpus=8 \ --leader-command="/vllm-workspace/ray_init.sh leader --ray_cluster_size=\$(LWS_GROUP_SIZE); vllm serve /mnt/models/DeepSeek-R1 --port 8080 --trust-remote-code --served-model-name deepseek-r1 --enable-prefix-caching --max-model-len 8192 --gpu-memory-utilization 0.98 --tensor-parallel-size 8 --pipeline-parallel-size 2 --enable-chunked-prefill" \ --worker-num=1 \ --worker-gpus=8 \ --worker-command="/vllm-workspace/ray_init.sh worker --ray_address=\$(LWS_LEADER_ADDRESS)"
参数解释如下表所示:
参数 | 是否必选 | 说明 |
--name | 是 | 提交的推理服务名称,全局唯一。 |
--image | 是 | 推理服务的镜像地址。 |
--restful-port | 是 | 服务端口。 |
--version | 否 | 服务版本,默认为当前日期。 |
--readiness-probe-* | 否 | 为服务配置就绪检测,仅当服务就绪后才可对外提供服务。 |
--share-memory | 否 | 设置共享内存。 |
--leader-num | 是 | leader pod数量,当前只支持设置为1。 |
--leader-gpus | 否 | 每个leader pod使用的GPU数量。 |
--leader-command | 是 | leader pod的启动命令。 |
--data | 否 | 服务的模型地址,格式为<pvc-name>:<pod-path>。如上文命令llm-model:/mnt/models,即将llm-model PVC挂载到容器/mnt/models目录下。 |
预期输出:
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
3.3.3 验证推理服务
1. 执行下列命令,查看分布式推理服务的部署情况。
arena serve get vllm-dist
预期输出
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
2. 使用kubectl port-forward在推理服务与本地环境间建立端口转发。
kubectl port-forward svc/vllm-dist-v1 8080:8080
3. 发送模型推理请求
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 }'
预期输出:
{"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}}
四. 使用Dify构建DeepSeek问答助手
4.1. 配置DeepSeek模型
1. 登陆Dify应用。登陆后点击头像,选择设置。
2. 点击左侧模型供应商,在右侧找到OpenAI-API-compatible, 点击添加模型。
注意:不要在右侧直接选择DeepSeek,那是接入DeepSeek API的。
模型参数配置如下所示。模型名称为deepseek-r1不可修改。API Key可以随意设置,API endpoint URL为第二步部署的本地DeepSeek服务名称,不可修改。
4.2. 创建聊天助手应用
点击创建空白应用,选择聊天助手,点击创建。
4.3. 验证AI问答助手
现在您可以在页面右侧与DeepSeek进行对话。
总结
本文重点介绍了如何在阿里云容器服务ACK中部署DeepSeek-R1满血版推理模型。DeepSeek-R1模型参数量为671B,单张GPU卡无法加载,因此需要对模型进行切分。本文采用了模型并行(PP=2)与数据并行(TP=8)结合的切分方式,使用arena工具在2台机器上分布式部署DeepSeek-R1满血版模型,当context为8192 tokens时,并发为132.29x。最后我们介绍了如何在Dify应用中接入本地的DeepSeek-R1模型,构建私有DeepSeek问答助手。下篇文章我们将重点介绍如何提升DeepSeek模型推理效率,敬请期待。
《DeepSeek on 阿里云容器服务ACK系列文章》
1. 基于ACK的DeepSeek蒸馏模型生产环境落地指南
https://mp.weixin.qq.com/s/SSGD5G7KL8iYLy2jxh9FOg
2. 使用ACS GPU算力构建DeepSeek蒸馏模型推理服务
相关链接:
[1] DeepSeek-R1
https://github.com/deepseek-ai/DeepSeek-R1
[2] DeepSeek AI GitHub仓库
https://github.com/deepseek-ai
[3] vLLM
https://github.com/vllm-project/vllm
[4] vLLM Github代码库
https://github.com/vllm-project/vllm
[5] 文档
https://github.com/kubeflow/arena
[6] LLMOps
https://docs.dify.ai/zh-hans/learn-more/extended-reading/what-is-llmops
[7] ACK文档
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/use-cases/building-customized-ai-question-and-answer-assistant-based-on-dify?spm=5176.21213303.J_v8LsmxMG6alneH-O7TCPa.9.42c72f3dS132An&scm=20140722.S_help@@%E6%96%87%E6%A1%A3@@2842906._.ID_help@@%E6%96%87%E6%A1%A3@@2842906-RL_dify-LOC_2024SPHelpResult-OR_ser-PAR1_213e368817394392451973907e9a10-V_4-RE_new4-P0_2-P1_0
[8] 创建包含GPU的Kubernetes集群
[9] 安装Arena
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/install-arena#task-1917487
[10] 使用Dify快速构建AI问答助手
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/use-cases/building-customized-ai-question-and-answer-assistant-based-on-dify?spm=5176.21213303.J_v8LsmxMG6alneH-O7TCPa.9.42c72f3dwOToE5&scm=20140722.S_help@@%E6%96%87%E6%A1%A3@@2842906._.ID_help@@%E6%96%87%E6%A1%A3@@2842906-RL_dify-LOC_2024SPHelpResult-OR_ser-PAR1_2150457c17394150119097968e6777-V_4-RE_new4-P0_2-P1_0#6ab35f025cpzv
[11] 容器服务管理控制台
https://csnew.console.aliyun.com/#/authorize
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~