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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,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
目录
相关文章
|
22天前
|
存储 缓存 测试技术
有效使用缓存时需要缓存动态数据吗?
【6月更文挑战第7天】本文探讨了如何有效地缓存数据以提升应用性能。关键在于选择合适的数据进行缓存和适时缓存。缓存不应被视为永久存储,应同时维护原始数据存储。
76 2
有效使用缓存时需要缓存动态数据吗?
|
24天前
|
缓存 NoSQL 中间件
应对数据库不断膨胀的数据:缓存和队列中间件
【6月更文挑战第5天】该文探讨了优化数据库使用以提升应用系统性能的策略。文中建议利用Redis缓存和MQ消息队列作为辅助工具,以进一步优化性能和减少资源消耗。
23 2
应对数据库不断膨胀的数据:缓存和队列中间件
|
8天前
|
缓存 安全 算法
Go 中使用 map 实现高效的数据缓存
Go 中使用 map 实现高效的数据缓存
|
1月前
|
消息中间件 缓存 监控
中间件如果缓存中存在所需的数据(缓存命中)
【5月更文挑战第12天】中间件如果缓存中存在所需的数据(缓存命中)
37 3
|
1月前
|
存储 缓存 监控
|
1月前
|
存储 缓存 JavaScript
vue中缓存页面数据(刷新不丢失)
vue中缓存页面数据(刷新不丢失)
|
21天前
|
缓存 NoSQL Java
互联网大厂的缓存策略:抵抗超高并发的秘密武器,已开源!
该文探讨了如何在互联网大厂项目中设计和使用缓存,以应对百万级流量。作者以秒杀系统为例,提出采用本地缓存+分布式缓存的混合型缓存架构,强调了缓存设计在抗高并发流量中的重要性。文章详细阐述了秒杀系统对缓存的核心诉求,包括流量分层、读写策略和并发控制,以及如何处理缓存失效的情况。此外,还介绍了缓存的使用场景,如接口缓存策略,并分析了缓存集群方案、缓存交互流程和缓存刷新机制。最后,讨论了数据一致性问题和代码的扩展性实现。文中提供了开源的缓存方案链接,包括GitHub、Gitee和GitCode仓库。
54 0
|
23天前
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
|
1月前
|
存储 缓存 NoSQL
数据缓存,可以尝试用RocksDB了
`shigen`,一个专注于Java、Python、Vue和Shell的博主,探讨了为何在学习阿里云DRM产品时选择RocksDB而非Redis或Guava。RocksDB是一个高速、可配置的存储系统,适用于Flash和HDFS,支持数据压缩。与Redis相比,RocksDB在高速存储和灵活性上更具优势。在尝试使用RocksDB与SpringBoot集成时遇到问题,目前尚未解决。他还对比了RocksDB、Redis和Guava Cache的特性,强调RocksDB适合大规模、高性能场景,而Redis适合内存存储和实时性需求。
37 0
数据缓存,可以尝试用RocksDB了