部署小模型all-miniLM-L6-V2来提供计算文本相似度接口,部署的过程中遇到很多问题,目前都已解决,记录一下。

配置

容器配置:16核10G
gunicorn配置:5个worker
小模型包:sentence-transformer

遇到的问题

1.gunicorn worker频繁重启
查看worker日志,报错是可能因为内存原因导致worker重启。加大内存,并发量为1,worker还是频繁重启。

尝试解决问题:
a. 在接口上加一个装饰器,记录接口请求前后使用的内存,发现内存仅用了1/10,可以排除不是内存不足

b.执行top命令,观察数据,发现cpu使用率高,容器的负载很高,很快都达到60多,worker会重启。查了一下,发现可能是torch使用的cpu过高导致的。在加载小模型之前,设置torch.set_num_threads(4),重启服务,发现问题解决了

代码:

torch.set_num_threads(4)       # 在模型加载前设置PyTorch线程
model = SentenceTransformer(model_name_or_path=text_similar_model_path,
                                             device="cpu")
model.eval()       # 把模型设置为评估模式,减少内存使用

2.数据量大的时候,每次处理一条数据,整个过程耗时很长
看了一下sentence-transformer的文档,发现可以批量处理数据,设置model.encode(texts, batch_size=16) 发现处理时间缩短了很多

代码:

embeddings = model.encode(sentences, batch_size=16)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐