本文以部署DeepSeek-R1-Distill-Qwen-7B模型为例,演示如何使用数据缓存快速部署DeepSeek-R1系列模型。通过数据缓存提前拉取DeepSeek相关模型数据,然后在部署DeepSeek模型推理服务时直接挂载模型数据,可以免去在实例中拉取模型数据的等待时间,加速DeepSeek部署。
为什么使用ECI部署DeepSeek
前提条件
您使用的VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
如果VPC没有绑定公网NAT网关,您需要在创建数据缓存和部署应用时绑定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。
步骤一:创建数据缓存
首次使用时,需要提前创建数据缓存,以免去在实例中拉取模型数据的等待时间,加速部署DeepSeek。
访问HuggingFace,获取模型ID。
本示例使用DeepSeek-R1-Distill-Qwen-7B模型的main版本。在HuggingFace找到目标模型后,在模型详情页面顶部可以复制模型ID。
登录弹性容器实例控制台。
在顶部菜单栏左上角处选择地域。
在左侧导航栏,单击数据缓存。
创建DeepSeek-R1-Distill-Qwen-7B的数据缓存。
单击创建数据缓存。
完成数据缓存参数配置。
本文使用的参数示例如下,其中缓存数据源为拉取DeepSeek-R1-Distill-Qwen-7B模型的固定配置,其他参数可自定义配置,更多信息,请参见创建数据缓存。
配置项
示例值
缓存所属Bucket
test
缓存所属目录
/model/deepseek-r1-distill-qwen-7b
缓存名
deepseek-qwen-7b
缓存大小
20 GiB
缓存数据源
类型:URL
参数
repoSource:HuggingFace/Model
repoId:deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
revision:main
单击确定。
查看数据缓存状态。
在数据缓存页面刷新查看数据缓存状态,当状态为Available时,表示可以使用该数据缓存。阿里云为DeepSeek-R1系列模型提供了热加载能力,能实现数据缓存秒级制作完成。
访问HuggingFace,获取模型ID。
本示例使用DeepSeek-R1-Distill-Qwen-7B模型的main版本。在HuggingFace找到目标模型后,在模型详情页面顶部可以复制模型ID。
创建DeepSeek-R1-Distill-Qwen-7B的数据缓存。
调用CreateDataCache接口创建数据缓存。建议您使用SDK,关于如何使用SDK,请参见SDK概述。
Java SDK示例如下,表示从HuggingFace拉取指定模型数据,保存到名为
test
的Bucket的/model/deepseek-r1-distill-qwen-7b
目录。CreateDataCacheRequest request = new CreateDataCacheRequest(); request.setName("deepseek-qwen-7b"); request.setBucket("test"); request.setPath("/model/deepseek-r1-distill-qwen-7b"); request.setVSwitchId("vsw-bp1*********"); request.setSecurityGroupId("sg-bp1*********"); CreateDataCacheRequest.DataSource dataSource = new CreateDataCacheRequest.DataSource(); dataSource.setType("URL"); HashMap<String, String> options = new HashMap<>(); options.put("repoId", "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"); options.put("repoSource", "HuggingFace/Model"); options.put("revision", "main"); dataSource.setOptions(options); request.setDataSource(dataSource);
查询数据缓存状态。
根据返回的数据缓存ID调用DescribeDataCaches接口查询数据缓存信息,当数据缓存的状态(DataCaches.Status)为Available时,表示可以使用该数据缓存。
步骤二:部署DeepSeek模型推理服务
在弹性容器实例控制台的容器组页面,单击创建弹性容器组。
填写实例相关配置信息,然后单击配置确认。
本文使用的参数示例如下,实例使用GPU规格,并挂载了DeepSeek-R1-Distill-Qwen-7B模型。容器启动后会运行
vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager
启动vLLM推理引擎。当VPC已绑定公网NAT网关时,创建ECI实例时可以不绑定EIP。在实例创建完成后,您可以配置DNAT条目实现外部访问ECI实例。
配置向导页
配置区域
配置项
示例值
基础配置
容器组配置
指定规格
ecs.gn7i-c16g1.4xlarge
名称
deepseek-r1-7b-server
20 GiB
由于启动依赖的框架较大,因此需要配置额外的临时存储空间并为其付费。
容器配置
容器名称
vllm
镜像
镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/vllm-openai
版本:v0.7.2
可执行命令
/bin/sh
参数
-c
vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager
数据缓存
缓存Bucket
test
单击添加,挂载DeepSeek-R1-Distill-Qwen-7B的数据缓存
缓存目录:/model/deepseek-r1-distill-qwen-7b
目标容器:vllm
容器挂载目录:/deepseek-r1-7b
开启Burst
开启(按需开启,开启后会提升模型加载速度但会有性能突发费用)
其他设置(选填)
弹性公网IP
弹性公网IP
自动创建
带宽峰值:5 Mbps
确认实例配置信息,阅读并选中服务协议,单击确认订单。
返回容器组页面,确认应用部署状态并查看实例的EIP地址。
在容器组页面可以查看实例状态,单击实例ID进入实例详情页可以查看容器状态。当实例状态和容器状态均为运行中时,表示应用部署成功。您可以在IP地址列获取实例的EIP地址。
使用数据缓存创建ECI实例,部署DeepSeek。
调用CreateContainerGroup接口创建ECI实例所采用的参数示例如下,实例使用GPU规格,并挂载了DeepSeek-R1-Distill-Qwen-7B模型。容器启动后会运行
vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager
启动vLLM推理引擎。以下示例中,系统会自动创建并为ECI实例绑定一个EIP。当VPC已绑定公网NAT网关时,创建ECI实例时可以不绑定EIP。在实例创建完成后,您可以配置DNAT条目实现外部访问ECI实例。
{ "RegionId": "cn-hangzhou", "SecurityGroupId": "sg-bp18***********", "VSwitchId": "vsw-bp14***********", "ContainerGroupName": "deepseek-r1-7b-server", "InstanceType": "ecs.gn7i-c16g1.4xlarge", "DataCacheBucket": "default", "Container": [ { "Arg": [ "-c", "vllm serve /deepseek-r1-7b --tensor-parallel-size 1 --max-model-len 24384 --enforce-eager" ], "Command": [ "/bin/sh" ], "Gpu": 1, "Name": "vllm", "Image": "registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/vllm-openai:v0.7.2", "VolumeMount": [ { "Name": "llm-model", "MountPath": "/deepseek-r1-7b" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/deepseek-r1-distill-qwen-7b", "Name": "llm-model" } ], "DataCacheProvisionedIops": 15000, "DataCacheBurstingEnabled": true, "AutoCreateEip": true }
确认应用部署状态。
根据返回的实例ID调用DescribeContainerGroupStatus查询实例和容器状态。当实例状态(Status)和容器状态(ContainerStatuses.State)为Running,表示实例已经创建成功,容器正在运行。
查询实例的EIP地址。
根据返回的实例ID调用DescribeContainerGroups查询实例详情,在InternetIp中可以获取实例的EIP地址。
步骤三:测试模型推理服务效果
在ECI实例所属安全组中添加入方向规则,开放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
- 前提条件
- 准备运行环境
- 步骤一:创建数据缓存
- 步骤二:部署DeepSeek模型推理服务
- 步骤三:测试模型推理服务效果