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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 本文将分享如何通过阿里云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大模型快速体验

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
29天前
|
存储 缓存 分布式计算
|
2月前
|
缓存 NoSQL Java
Redis 缓存与数据库数据不一致问题
Redis 缓存与数据库数据不一致问题
68 3
|
19天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
2月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
18天前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题
【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题
|
18天前
|
缓存 NoSQL 算法
【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析
【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析
|
22天前
|
存储 缓存 Java
Java本地高性能缓存实践问题之使用@CachePut注解来更新缓存中数据的问题如何解决
Java本地高性能缓存实践问题之使用@CachePut注解来更新缓存中数据的问题如何解决
|
22天前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
2月前
|
消息中间件 缓存 数据库
Redis问题之如何解决缓存更新失败导致的数据不一致问题
Redis问题之如何解决缓存更新失败导致的数据不一致问题
|
28天前
|
自然语言处理 开发者
通义千问继续开源!阿里云38篇论文被顶会ACL 2024录用
通义千问继续开源!阿里云38篇论文被顶会ACL 2024录用
46 0