本文以部署QwQ-32B模型为例,演示如何使用数据缓存快速部署QwQ-32B模型。通过数据缓存提前拉取QwQ-32B模型数据,然后在部署QwQ-32B模型推理服务时直接挂载模型数据,可以免去在实例中拉取模型数据的等待时间,加速QwQ-32B部署。
为什么使用ECI部署QwQ-32B
前提条件
您使用的VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
如果VPC没有绑定公网NAT网关,您需要在创建数据缓存和部署应用时绑定EIP,以便可以拉取公网数据。
准备运行环境
规格推荐
推荐使用ecs.gn7i-4x.8xlarge、ecs.gn7i-4x.16xlarge、ecs.gn7i-c32g1.32xlarge及以上GPU规格(4 * A10及以上)。ECI支持的GPU规格,请参见规格说明。
选择规格时,请先确认集群所在地域和可用区支持该规格。更多信息,请参见ECS实例规格可购买地域总览。
软件环境
大模型部署依赖的库和配置较多,vLLM是目前一个主流的大模型推理引擎,本文使用vLLM进行推理服务的部署。ECI已经制作好了一个公共容器镜像,您可以直接使用该镜像或者将其作为基础镜像进行二次开发,镜像地址为
registry.cn-beijing.aliyuncs.com/eci_open/vllm-openai:v0.7.2
,镜像大小约为16.5 GB。
步骤一:创建数据缓存
访问ModelScope,获取模型ID。
本示例使用QwQ-32B模型的master版本。在ModelScope找到目标模型后,在模型详情页面顶部可以复制模型ID。
登录弹性容器实例控制台。
在顶部菜单栏左上角处选择地域。
在左侧导航栏,单击数据缓存。
创建QwQ-32B的数据缓存。
单击创建数据缓存。
完成数据缓存参数配置。
本文使用的参数示例如下,其中缓存数据源为拉取QwQ-32B模型的固定配置,其他参数可自定义配置,更多信息,请参见创建数据缓存。
配置项
示例值
缓存所属Bucket
default
缓存所属目录
/models/qwq-32b
缓存名
qwq-32b
缓存大小
70 GiB
缓存数据源
类型:URL
参数
repoSource:ModelScope/Model
repoId:Qwen/QwQ-32B
单击确定。
查看数据缓存状态。
在数据缓存页面刷新查看数据缓存状态,当状态为Available时,表示可以使用该数据缓存。阿里云为QwQ-32B模型提供了热加载能力,能实现数据缓存秒级制作完成。
访问ModelScope,获取模型ID。
本示例使用QwQ-32B模型的master版本。在ModelScope找到目标模型后,在模型详情页面顶部可以复制模型ID。
创建QwQ-32B的数据缓存。
调用CreateDataCache接口创建数据缓存。建议您使用SDK。
Java SDK示例如下,表示从ModelScope拉取指定模型数据,保存到名为default的Bucket的
/models/qwq-32b
目录。CreateDataCacheRequest request = new CreateDataCacheRequest(); request.setName("qwq-32b"); request.setBucket("default"); request.setPath("/models/qwq-32b"); request.setVSwitchId("vsw-2ze*********"); request.setSecurityGroupId("sg-2ze*********"); CreateDataCacheRequest.DataSource dataSource = new CreateDataCacheRequest.DataSource(); dataSource.setType("URL"); HashMap<String, String> options = new HashMap<>(); options.put("repoId", "Qwen/QwQ-32B"); options.put("repoSource", "ModelScope/Model"); dataSource.setOptions(options); request.setDataSource(dataSource);
查询数据缓存状态。
根据返回的数据缓存ID调用DescribeDataCaches接口查询数据缓存信息,当数据缓存的状态(DataCaches.Status)为Available时,表示可以使用该数据缓存。
步骤二:部署QwQ-32B模型推理服务
部署QwQ-32B模型推理服务时需要指定GPU驱动版本,控制台暂不支持该功能。
使用数据缓存创建ECI实例,部署QwQ-32B。
调用CreateContainerGroup - 创建一个容器组接口创建ECI实例所采用的参数示例如下,实例使用GPU规格,并挂载了QwQ-32B模型。容器启动后会运行
vllm serve /models/QwQ-32B --port 8000 --trust-remote-code --served-model-name qwq-32b --tensor-parallel=4 --max-model-len 8192 --gpu-memory-utilization 0.95 --enforce-eager
启动vLLM推理引擎。以下示例中,系统会自动创建并为ECI实例绑定一个EIP。当VPC已绑定公网NAT网关时,创建ECI实例时可以不绑定EIP。在实例创建完成后,您可以配置DNAT条目实现外部访问ECI实例。
{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze**************", "VSwitchId": "vsw-2ze**************", "ContainerGroupName": "qwq-32b-server", "InstanceType": "ecs.gn7i-4x.8xlarge,ecs.gn7i-4x.16xlarge,ecs.gn7i-c32g1.32xlarge", "DataCacheBucket": "default", "GpuDriverVersion": "tesla=535.161.08", "EphemeralStorage": 20, "Container": [ { "Arg": [ "-c", "vllm serve /models/QwQ-32B --port 8000 --trust-remote-code --served-model-name qwq-32b --tensor-parallel=4 --max-model-len 8192 --gpu-memory-utilization 0.95 --enforce-eager" ], "Command": [ "/bin/sh" ], "Gpu": 4, "Name": "vllm", "Image": "registry-vpc.cn-beijing.aliyuncs.com/eci_open/vllm-openai:v0.7.2", "VolumeMount": [ { "Name": "llm-model", "MountPath": "/models/QwQ-32B" }, { "Name": "dshm", "MountPath": "/dev/shm" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/models/qwq-32b", "Name": "llm-model" }, { "Type": "EmptyDirVolume", "Name": "dshm", "EmptyDirVolume.Medium": "Memory", "EmptyDirVolume.SizeLimit": "30Gi" } ], "DataCacheProvisionedIops": 15000, "DataCacheBurstingEnabled": true, "AutoCreateEip": true }
确认应用部署状态。
根据返回的实例ID调用DescribeContainerGroupStatus查询实例和容器状态。当实例状态(Status)和容器状态(ContainerStatuses.State)为Running,表示实例已经创建成功,容器正在运行。
查询实例的EIP地址。
根据返回的实例ID调用DescribeContainerGroups查询实例详情,在InternetIp中可以获取实例的EIP地址。
步骤三:测试模型推理服务效果
在ECI实例所属安全组中添加入方向规则,开放8000端口。
向模型推理服务发送一条模型推理请求。
本文示例部署的QwQ-32B已绑定一个EIP,请根据实际的EIP地址替换示例代码中的
XX.XX.XX.XX
。curl POST http://XX.XX.XX.XX:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwq-32b", "messages": [ { "role": "user", "content": "用一句话简单介绍一下云计算" } ], "temperature": 0.6, "max_tokens": 3000 }' \ --verbose
预期返回:
{"id":"chatcmpl-7678099ec2b24852bc5b96b1227b0010","object":"chat.completion","created":1741747813,"model":"qwq-32b","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"嗯,用户让我用一句话简单介绍一下云计算。首先,我需要确定用户的需求是什么。可能他们需要快速了解云计算的基本概念,不需要太深入的技术细节。所以,我得抓住云计算的核心特点,比如资源虚拟化、按需服务、弹性扩展这些。然后要确保句子简洁明了,容易理解。\n\n接下来,我得想想常见的云计算定义。通常会提到通过互联网提供计算资源,比如服务器、存储、数据库等,按需使用和付费。可能还要提到弹性扩展,也就是根据需求自动调整资源。另外,云计算的服务模式,比如IaaS、PaaS、SaaS,但可能不需要在一句话里都提到,太复杂了。\n\n用户可能没有说出来的深层需求是,他们可能想了解云计算的优势,比如节省成本、灵活方便,或者相比传统IT有什么不同。所以在句子中需要隐含这些好处。比如“无需前期投资”或者“灵活扩展”这样的关键词。\n\n然后要注意避免专业术语,让句子更通俗。比如用“通过互联网”代替“基于互联网基础设施”,或者“按需获取”而不是“按需自服务”。还要确保句子结构流畅,信息完整。\n\n可能还需要对比传统方式,比如以前需要自己购买服务器,现在可以租用云服务,这样更直观。但一句话里可能放不下对比,所以用“无需自建基础设施”来暗示这一点。\n\n检查一下有没有遗漏的关键点:资源类型(计算、存储、网络)、交付方式(互联网)、按需服务、弹性、按使用付费。这些都涵盖了的话应该没问题。\n\n最后组合起来,确保不超过一句话,同时信息准确。比如:“云计算是一种通过互联网提供按需访问可弹性扩展的计算资源(如服务器、存储和应用程序)的模式,用户无需自建基础设施即可灵活获取和管理资源,并按实际使用量付费。” 这样应该涵盖了主要要素,也简洁明了。\n</think>\n\n云计算是一种通过互联网提供可弹性扩展的计算资源(如服务器、存储、网络和应用程序)的模式,用户无需自建基础设施,即可按需访问并按实际使用量付费。","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":15,"total_tokens":450,"completion_tokens":435,"prompt_tokens_details":null},"prompt_logprobs":null}
其中
</think>
前的内容表示的是模型在生成最终答案之前进行的内部思考过程或中间推理步骤。这些标记并不是最终输出的一部分,而是模型在生成答案时的一种自我提示或逻辑推理的记录。提取最终答案如下:
云计算是一种通过互联网提供可弹性扩展的计算资源(如服务器、存储、网络和应用程序)的模式,用户无需自建基础设施,即可按需访问并按实际使用量付费。
- 本页导读
- 为什么使用ECI部署QwQ-32B
- 前提条件
- 准备运行环境
- 步骤一:创建数据缓存
- 步骤二:部署QwQ-32B模型推理服务
- 步骤三:测试模型推理服务效果