说明
前阵子,已经对glm2的接口部署做了镜像化。本次的目的是:
- 1 测试在隔了一阵子(忘记)的情况下,快速部署时是否有障碍,是不是足够方便
- 2 在算网机环境下,能否快速的实现部署。仅考虑文件方式。(大部分租用机租用的是容器,少部分是真的租宿主机)
为啥不用glm3: 因为出现中英文混杂情况的概率较高。
内容
1 镜像方式
首先,找到脑图
注释里面缺少了容器的启动命令,这点很不方便。通过镜像后可以看到,里面一个是项目文件,一个是量化后的,模型文件夹,这个还是比较清晰的。
将命令补充,放到我的streamlit 网页下
假设我要做让大模型做一个公司简介,在4060Ti16G上运行,大约需要8S,约12.5Token/S。
比较有意思的是,我发现单个chatglm2运行,只会占到50%的功耗,所以可以开两个服务,这不会减少单个任务的执行时间,但可以把吞吐翻一倍。
然后我又试了下llm_assemble,这个是我做的集成多个不同大模型,包括本地的和线上的接口。仍然是缺少了服务的启动命令和调用示例。
2 文件方式
大多数租用算力机不支持docker,这点上AnyGPU有点例外,更像是租了一个宿主机给你。但是也有个问题,sshd的配置不会生效,这意味着你可以通过秘钥登录,但是无法禁止使用密码。所以要删除可能被撞破的用户,如 userdel -f git
。
将文件通过rsync或者scp(有些不允许安装任何软件,如deepln)。
总体上也还好,不算复杂。
我在AndyGPU上租了一张2080Ti实验,模型占用的显存不大,但是单服务似乎就占满了显卡(功率不满)。可能是老显卡架构的问题?
然后我在DeepLn上租了一张3090实验。DeepLn的网络非常不稳定,走web服务行不通。但是注册送30元额度还是挺好的。
所以这个状态下作为服务肯定是行不通的,甚至后来我用jupyter的时候,也总是时断时续的。最后我还是用文件上传的方式,在机器上实验。实测速度大约是4060Ti的1.3~1.5倍吞吐,和理论值差不多。
3090如果按¥1/hour计算,那么每生成一千条数据花费1元钱。
3 使用消息队列
假设,任务为输出企业简介,prompt + input + output ~ 1KB数据,处理时间按4s/req计算:
(4s也可以认为是一次对话输出的可接受时间,worker的数量可以视为是并发数)
条数 | 数据量 | 计算时间 | 传输时间 | 计算传输比 |
---|---|---|---|---|
1 | 1KB | 4s | 0.01s | 400 |
1000 | 1MB | 4000s ~ 1hour | 10s | - |
1百万 | 1GB | 4百万秒 ~ 50 days | 4万秒 | - |
可以看出来这种任务是非常适合广域网分布式处理的。百万量级是一个较平常的任务量级,50天显然是不可接受的时长,如果我们要在1天内完成,那么就需要50张卡(4060Ti),如果使用4090的话,大约是3倍的效率,也要16台机。单机配8卡的话,需要2台机。
关键是worker的数量,大约会是50,甚至是100个。这时候单独去管理的话,数据的分发就不能手动了。而且租用算力机随时可能出问题,必须假设worker是非常不稳定的。
所以,在这种高计算传输比,且需要多个worker尽力支持的场景,我觉得用消息队列最合适。
这部分后续再写吧,另一个话题了。