数据缓存系列分享(四):开源大语言模型通义千问快速体验

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文将分享如何通过阿里云ECI的数据缓存秒级搭建开源大语言模型通义千问。

关于通义千问

我是通义千问,是阿里巴巴达摩院自主研发的超大规模语言模型,也能够回答问题、创作文字,还能表达观点、撰写代码。我的目标是为用户提供优质的自然语言处理服务,满足他们在不同场景下的需求。

我的技术团队在自然语言处理领域进行了长期研究和积累,拥有一系列领先的技术和算法。我基于大量的训练数据,能够理解和生成高质量的文本,包括文章、故事、诗歌、故事等。我的回答通常包含多个句子和段落,旨在提供全面和详细的回答。

除了回答问题,我还可以根据用户的需求,帮助他们创作文字,如写故事、写公文、写邮件等。我能够根据用户的输入,自动分析文本的结构和语义,生成相应的文本内容。这在一些需要快速生成大量文本的场景中非常有用,例如新闻报道、产品描述、广告文案等。

此外,我还能够表达观点和撰写代码。我的团队为我开发了一系列工具和接口,使我可以轻松地与其他应用程序和系统集成。我还可以根据用户的输入,生成相应的代码片段或完整的代码,这在一些需要快速编写代码的场景中非常有用,例如Web开发、数据科学等。

总的来说,我是一个多用途的语言模型,能够满足不同场景下的需求。我的目标是为用户提供优质的自然语言处理服务,帮助他们更高效地完成工作和学习任务。

——原文摘自通义千问问答

准备运行环境

硬件要求:

CPU:无严格限制

内存:>16GB

GPU:>=1

显存:>16GB(通义千问比较吃显存,低于16GB会直接OOM无法使用,我们分配的显存是24GB偶尔也会OOM)

所有可选的GPU规格可以参考:企业级异构计算规格

本文使用的规格是 ecs.gn7i-c8g1.2xlarge

软件环境:

依赖的库和配置比较多,ECI已经制作好了一个公共容器镜像,且包含了一个基于Gradio的webui,可以开箱即用,registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0,推荐直接使用或者作为base镜像二次开发。



准备模型缓存

目前通义千问已经开源,在 modelScopehuggingFace上都可以直接下载使用,大约16GB,移步 控制台 创建模型缓存。

更多关于数据缓存的介绍可以参考:

openAPI:https://help.aliyun.com/document_detail/2391452.html

k8s API:https://help.aliyun.com/document_detail/2412299.html

控制台页面:

modelScope参考:

repoId: qwen/Qwen-7B-Chat

repoSource: ModelScope/Model

revision:v1.1.4

231b4d7f-9848-4cc7-8272-5de76cb4bad1.png


由于ECI已经针对这些模型源做了加速,所以缓存都是秒级创建完成。

部署ECI

1、使用ECI打包好的运行环境,并包含通义千问webui的容器镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0,镜像约为15GB,已经全网做了加速,可以秒级启动。

2、将通义千问的模型文件挂载进/data/model/目录,也可以通过env MODEL_DIR 自定义模型存放的目录。

3、由于启动后需要将模型加载进内存,所以为了提高加载速度,可以把缓存的burst能力打开,可以显著缩短应用启动时间。

4、开启公网访问能力,由于只需要访问8888端口,所以安全组规则只需要放开该端口即可。

k8s API用户参考:

{
"metadata": {
"annotations": {
"k8s.aliyun.com/eci-data-cache-bucket": "modelScope-model",
"k8s.aliyun.com/eci-data-cache-provisionedIops": "35000",
"k8s.aliyun.com/eci-data-cache-burstingEnabled": "true",
"k8s.aliyun.com/eci-with-eip": "true",
"k8s.aliyun.com/eci-use-specs": "ecs.gn7i-c8g1.2xlarge"        },
"name": "qwen-webui",
"namespace": "default"    },
"spec": {
"containers": [
            {
"args": [
"-c",
"python Qwen-7B/web_demo.py --server_port 8888"                ],
"command": [
"/bin/sh"                ],
"image": "registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0",
"imagePullPolicy": "IfNotPresent",
"name": "qwen-webui",
"resources": {
"requests": {
"nvidia.com/gpu": "1"                    }
                },
"volumeMounts": [
                    {
"mountPath": "/data/model/",
"name": "Qwen-7b-model"                    }
                ]
            }
        ],
"restartPolicy": "Never",
"volumes": [
            {
"hostPath": {
"path": "/models/modelScope-model/Qwen/Qwen-7B-Chat"                },
"name": "Qwen-7b-model"            }
        ]
    }
}


阿里云openAPI用户参考:

publicclassEciApi {
privateCreateContainerGroupResponsecreateEci() throwsClientException {
CreateContainerGroupRequestrequest=newCreateContainerGroupRequest();
request.setRegionId(RG);
request.setSecurityGroupId(getSg());
request.setVSwitchId(getVsw());
request.setContainerGroupName("qwen-webui");
request.setInstanceType("ecs.gn7i-c8g1.2xlarge");
request.setAutoCreateEip(true);
request.setDataCacheBucket("modelScope-model");
request.setDataCacheBurstingEnabled(true);
request.setDataCacheProvisionedIops(35000);
CreateContainerGroupRequest.Containercontainer=newCreateContainerGroupRequest.Container();
container.setName("qwen-webui");
container.setImage("registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0");
container.setGpu(1);
container.setCommands(Arrays.asList("/bin/sh"));
container.setArgs(Arrays.asList("-c", "python Qwen-7B/web_demo.py --server_port 8888"));
CreateContainerGroupRequest.Container.VolumeMountvolumeMount=newCreateContainerGroupRequest.Container.VolumeMount();
volumeMount.setName("Qwen-7b-model");
volumeMount.setMountPath("/data/model/");
container.setVolumeMounts(Arrays.asList(volumeMount));
request.setContainers(Arrays.asList(container));
CreateContainerGroupRequest.Volumevolume=newCreateContainerGroupRequest.Volume();
volume.setName("Qwen-7b-model");
volume.setType("HostPathVolume");
volume.setHostPathVolumePath("/models/modelScope-model/Qwen/Qwen-7B-Chat");
request.setVolumes(Arrays.asList(volume));
returnPopHelper.getAcsResponse(client, request);
    }
}

SDK版本

<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-eci --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-eci</artifactId><version>1.4.4</version></dependency>


控制台用户参考:

进入ECI售卖页

1、选择gpu规格

ecs.gn7i-c8g1.2xlarge

1f4d738a-5346-4413-8109-11e16ee51c77.png


2、选择千问的容器镜像

容器配置 -> 选择容器镜像 -> 常用镜像->qwen-webui

如果是非杭州地域,直接填入镜像,效果是一样的。

registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui

版本:1.0.0

ed792ac7-faf2-49c4-84ef-17ae3d4edbf4.png



3、挂载模型缓存进容器

e7277f3c-0622-445e-9c9f-669a56548546.png



4、打开公网(如果通过公网地址访问webui)

da053f08-9b9e-4101-ae33-68ca46d979f2.png


至此,通义千问就已经部署完成,通过ip:8888就可以访问界面了:

573a1933-4072-4ce9-b46f-ee3b381aa388.png



测试

28543162-2778-4ccb-a6bf-53b999d5a41d.pngbbf6c51d-5d63-4518-9108-5da53cf2c955.png07ad1b90-d136-4db0-b97d-61d71a80e28d.pngeef392e4-db06-44cd-8e1c-49306afe4676.png2629ca3b-ada7-4898-8260-f017f3dda4f0.png


附录

数据缓存系列分享(一):打开大模型应用的另一种方式

数据缓存系列分享(二):23秒完成从零开始搭建StableDiffusion

数据缓存系列分享(三):通过 StableDiffusion 扩展插件实现网红爆款文字光影图

数据缓存系列分享(四):开源大语言模型通义千问快速体验

数据缓存系列分享(五):零代码搭建妙鸭相机

数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
缓存 NoSQL 算法
17- 数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ?
保证Redis中的20w数据为热点数据,可以通过设置Redis的LFU(Least Frequently Used)淘汰策略。这样,当数据库有1000万数据而Redis仅能缓存20w时,LFU会自动移除使用频率最低的项,确保缓存中的数据是最常使用的。
68 8
|
1天前
|
消息中间件 缓存 监控
中间件如果缓存中存在所需的数据(缓存命中)
【5月更文挑战第12天】中间件如果缓存中存在所需的数据(缓存命中)
21 3
|
1天前
|
存储 缓存 监控
|
5天前
|
存储 缓存 JavaScript
vue中缓存页面数据(刷新不丢失)
vue中缓存页面数据(刷新不丢失)
|
6天前
|
存储 缓存 NoSQL
数据缓存,可以尝试用RocksDB了
`shigen`,一个专注于Java、Python、Vue和Shell的博主,探讨了为何在学习阿里云DRM产品时选择RocksDB而非Redis或Guava。RocksDB是一个高速、可配置的存储系统,适用于Flash和HDFS,支持数据压缩。与Redis相比,RocksDB在高速存储和灵活性上更具优势。在尝试使用RocksDB与SpringBoot集成时遇到问题,目前尚未解决。他还对比了RocksDB、Redis和Guava Cache的特性,强调RocksDB适合大规模、高性能场景,而Redis适合内存存储和实时性需求。
17 0
数据缓存,可以尝试用RocksDB了
|
6天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
25 0
|
6天前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
40 2
|
6天前
|
canal 缓存 关系型数据库
Canal实现0侵入同步缓存数据
Canal实现0侵入同步缓存数据
14 0
|
6天前
|
缓存 NoSQL Java
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
56 0